標題: 51單片機求助 [打印本頁]

作者: sjztjk    時間: 2013-8-17 14:38
標題: 51單片機求助
本帖最后由 sjztjk 于 2013-8-17 15:20 編輯

最近做了個小程序試驗,結(jié)果不成功,求高手指點,謝謝!不成功現(xiàn)象為:按下S1時D1與D2同時亮,按下S2時D1與D2同時滅!

程序如下:
ORG        0                            ;程序從0地址開始
START:   MOV   P2,#0FFH     ;將P2口設計為輸入功能,即P2口全部為11111111高電平
;按鍵檢測程序=============================================================
LOOP:    JNB   P2.0,ON       ;檢測P2.0口,若P2.0為低電平(S1按下),則跳至ON處執(zhí)行
              JNB   P2.1,OFF      ;檢測P2.1口,若P2.1為低電平(S2按下),則跳至OFF處執(zhí)行
              JNB   P2.2,OFF2    ;檢測P2.2口,若P2.2為低電平(S3按下),則跳至OFF2處執(zhí)行
              JMP   LOOP          ;跳至LOOP處形成一個循環(huán)
;開燈子程序===============================================================
ON:       CLR   P0.0            ;使P0.0清零,D1亮
             CALL  DELAY        ;調(diào)用延時子程序
             CLR   P0.1            ;使P0.1清零,D2亮
ON1:     JB    P2.0,LOOP    ;檢測P2.0口,若P2.0為高電平(S1放開),則跳至LOOP處執(zhí)行
             JMP   ON1            ;否則跳至ON1形成一個小循環(huán)
;關燈子程序===============================================================
OFF:      SETB  P0.0          ;使P0.0置位,即設定為1,D1滅
             CALL  DELAY       ;調(diào)用延時子程序
             SETB  P0.1          ;使P0.1置位,即設定為1,D2滅
             CLR   P0.2          ;使P0.2清零,D3亮
OFF1:    JB    P2.1,LOOP   ;檢測P2.1口,若P2.1為高電平(S2放開),則跳至LOOP處執(zhí)行
             JMP   OFF1         ;否則跳至OFF1形成一個循環(huán)
OFF2:    SETB  P0.2         ;使P0.2置位,即設定為1,D3滅         
             END                   ;程序結(jié)束


;1秒延時子程序(12MHz晶振)
DELAY:  MOV R1,#50
DEL0:   MOV R2,#91
DEL1:   MOV R3,#100  
            DJNZ R3,$  
            DJNZ R2,DEL1
            DJNZ R1,DEL0
            RET
            END


yawihe.JPG (103.99 KB, 下載次數(shù): 152)

yawihe.JPG

作者: 青蘋果    時間: 2013-8-18 14:53
1、你可以把延時程序加長,這樣就不會同時亮滅
2、程序最后面,如果你不想按鍵再次有效,可以寫成JMP  $,而不是直接END;如果希望按鍵再次有效,可以像前面兩個按鍵那樣,加個小循環(huán)判斷,,,
作者: livingliving    時間: 2015-4-10 09:15
雖然不懂,但還是要頂,畢竟每一位老手都是從新手蛻變而來的,贊一個。。。。。。
作者: mm494408445    時間: 2015-11-1 12:48
頂上去,代碼問題一定可以解決




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1