找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5881|回復(fù): 4
收起左側(cè)

獨(dú)立鍵盤(pán)循環(huán),自己用匯編寫(xiě)的,燒錄后就是按鍵沒(méi)反應(yīng)

[復(fù)制鏈接]
ID:53308 發(fā)表于 2013-8-26 23:51 | 顯示全部樓層 |閱讀模式
                        程序在keil中模擬沒(méi)找出問(wèn)題來(lái),但是下載到單片機(jī)里面就是運(yùn)行不了,
                    鍵盤(pán)是p3.0-3.3    ,led燈是p2.0-p2.3,想實(shí)現(xiàn)按p3.0一下,p2.0點(diǎn)亮\或者滅。其他按鍵類(lèi)推。燒錄后,沒(méi)實(shí)現(xiàn)功能,具體為按鍵后燈沒(méi)任何反應(yīng)。

                        ORG 0000H               
                        AJMP START
                        ORG 0080H

                        START:
                        MOV P2,#0FFH       ;全滅p2口led
                          MOV P3,#0FFH;使得P3口全部高電平,準(zhǔn)備獨(dú)立按鍵初始狀態(tài)

                          KEYCHECK1:                ;按鍵檢查是否有1->0,改變
                          MOV A,#00H                ;清0累加器內(nèi)數(shù)值
                          JNB P3.0,        DELAY
                           JNB P3.1,DELAY
                                JNB P3.2,DELAY
                                 JNB P3.3,DELAY
                                  LJMP KEYCHECK1
                          
                          KEYCHECK2:                 ;延時(shí)后,是否還保持低電平,是則調(diào)用鍵盤(pán)釋放程序,否則跳到keycheck1
                           JNB P3.0,LOOP                 
                            JNB P3.1,LOOP
                                 JNB P3.2,LOOP
                                  JNB P3.3,LOOP
                                        LJMP START


                           DELAY:                           ;延時(shí)程序,目的為消除機(jī)械抖動(dòng)
               MOV R7,#100
                D1: MOV R6,#100
                 DJNZ R6,$
                   DJNZ R7,D1
                                   LJMP KEYCHECK2

                           LOOP:                                  ;判斷鍵盤(pán)是否釋放,是則繼續(xù),否則跳到loop做自動(dòng)循環(huán)
                             MOV A,P3                          ;給A輸入p3狀態(tài)
                         D2:
                                 MOV R1,P3                          ;用r1和ff比較大小,從而判斷是否釋放
                CJNE R1,#0FFH,D2               
                            JNB ACC.0,K1                 ;判斷那個(gè)鍵按下,點(diǎn)亮那個(gè)燈,a一直帶P3的值
                                 JNB ACC.1,K2
                                  JNB ACC.2,K3
                                   JNB ACC.3,K4
                                   LJMP START

                                K1:                                   ;取反輸出口,點(diǎn)亮和熄滅燈
                                CPL P2.0
                                LJMP START
                                K2:
                                CPL P2.1
                                LJMP START
                                K3:
                                CPL P2.2
                                LJMP START
                                K4:
                                CPL P2.3                               
                                LJMP START

                                END



鍵盤(pán)接法

鍵盤(pán)接法
回復(fù)

使用道具 舉報(bào)

ID:18297 發(fā)表于 2013-8-27 21:25 | 顯示全部樓層
                         ORG 0000H               
                     AJMP START

                     ORG 0080H
START:                MOV P2,#0FFH
                 
KEY1:                MOV A,P3
                        CJNE A,#0FFH,KEY2
                        AJMP KEY1
KEY2:                ACALL DELAY       
                        MOV A,P3
                        CJNE A,#0FFH,KEY3
                        AJMP KEY1
KEY3:                 MOV R0,P3
                       
KEY4:                MOV A,P3
                        CJNE A,#0FFH,KEY4
                        MOV A,R0
                        CJNE A,#0FEH,KEY01
                        CPL P2.0
KEY01:                CJNE A,#0FDH,KEY02
                        CPL P2.1
KEY02:                 CJNE A,#0FBH,KEY03
                        CPL P2.2
KEY03:                CJNE A,#0F7H,KEY1
                        CPL P2.3
            AJMP KEY1


  DELAY:          MOV R7,#100                                                                ;延時(shí)程序,目的為消除機(jī)械抖動(dòng)
  D1:                 MOV R6,#100                                                          
            DJNZ R6,$
            DJNZ R7,D1
                        RET
                       
                        END
自己看看,這個(gè)仿真過(guò)。
回復(fù)

使用道具 舉報(bào)

ID:7485 發(fā)表于 2013-8-28 08:35 | 顯示全部樓層
本帖最后由 ahshmj 于 2013-8-28 08:37 編輯

第一次看見(jiàn)這樣的按鍵程序。
KEYCHECK1:               
                  JNB P3.0,      K1
                           JNB P3.1,      K2
                           JNB P3.2,      K3
                           JNB P3.3,      K4
                           JMP KEYCHECK1
K1:
                           CALL    DELAY                     ;延時(shí)
                           JB P3.0,      START            ;再次確認(rèn)不是誤動(dòng)作
                          CPL P2.0                            ;執(zhí)行按鍵功能
                           JNB   P3.0,      $                   ;等待按鍵抬起
                           LJMP START                       返回
K2:
                 ......
K3:     
                 ......
K4                    
                         ......

回復(fù)

使用道具 舉報(bào)

ID:53308 發(fā)表于 2013-8-28 09:42 | 顯示全部樓層
已經(jīng)解決了,是因?yàn)?nbsp; 
“       CJNE R1,#0FFH,D2       ”
中的比較出問(wèn)題,我將p3狀態(tài)給了r1,然后和0ff比較,實(shí)際上P3高四位是做別的用途,狀態(tài)不定的。
所以改成如下,屏蔽掉高四位:
                         D2:
                                 MOV A,P3                          ;用r1和ff比較大小,從而判斷是否釋放
                                 ANL A,#0FH
                CJNE A,#0FH,D2

再燒錄就可以了。
回復(fù)

使用道具 舉報(bào)

ID:153199 發(fā)表于 2017-2-17 13:38 | 顯示全部樓層
學(xué)習(xí)了, 很不錯(cuò)的經(jīng)驗(yàn),值得分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表