![]() |
學(xué)習(xí)了, 很不錯的經(jīng)驗,值得分享 |
已經(jīng)解決了,是因為 “ CJNE R1,#0FFH,D2 ” 中的比較出問題,我將p3狀態(tài)給了r1,然后和0ff比較,實際上P3高四位是做別的用途,狀態(tài)不定的。 所以改成如下,屏蔽掉高四位: D2: MOV A,P3 ;用r1和ff比較大小,從而判斷是否釋放 ANL A,#0FH CJNE A,#0FH,D2 再燒錄就可以了。 ![]() |
本帖最后由 ahshmj 于 2013-8-28 08:37 編輯 第一次看見這樣的按鍵程序。 KEYCHECK1: JNB P3.0, K1 JNB P3.1, K2 JNB P3.2, K3 JNB P3.3, K4 JMP KEYCHECK1 K1: CALL DELAY ;延時 JB P3.0, START ;再次確認(rèn)不是誤動作 CPL P2.0 ;執(zhí)行按鍵功能 JNB P3.0, $ ;等待按鍵抬起 LJMP START 返回 K2: ...... K3: ...... K4 ...... |
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 ;延時程序,目的為消除機(jī)械抖動 D1: MOV R6,#100 DJNZ R6,$ DJNZ R7,D1 RET END 自己看看,這個仿真過。 |
Powered by 單片機(jī)教程網(wǎng)