51汇编程序 按键按下io口输出仍保持原状态,附有程序请大神指点错误,谢谢

2019-07-15 07:55发布

1.程序设计要求:
按下p3.2,p2.0输出低同时p1口连接的蜂鸣器响,按下p3.3 p2.0输出高蜂鸣器停止
  (再按下p3.2,p2.1输出低同时p1口连接的蜂鸣器响,按下p3.3 p2.0输出高蜂鸣器停止,。。。再按下p3.2,p2.3输出低同时p1口连接的蜂鸣器响,按下p3.3 p2.0输出高蜂鸣器停止,以此类推循环)
2.现在的问题:
按下p3.3蜂鸣器都能停止,但是p2口输出保持不变






程序如下:
org 0000h
ljmp main
org 0030h
main:
mov r7,#0
loop:acall key_scan
acall display
acall tingzhi
ljmp loop


key_scan:
jb p3.2,key_next                                 ;检测是否有按键按下
acall delay10ms
jb p3.2,key_next


mov p1,#0dfh                                     ;蜂鸣器响


jnb p3.2,$
inc r7
mov a,r7
cjne a,#5,key_next                               ;是否循环5次了
mov r7,#0
key_next:ret


tingzhi:
jb p3.3,key_next
acall delay10ms
jb p3.3,key_next                                 ;停止按键按键后蜂鸣器停止
mov p1,#0ffh


orl a,#0ffh                                      ;停止同时停止p2输出低
mov p2,a
ret
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
delay10ms:                                            
mov r6,#14h
d0:mov r5,#0f8h
djnz r5,$
djnz r6,d0
ret


display:
mov a,r7
mov dptr,#tab
movc a,@a+dptr
mov p2,a                                            
ret
tab:db 0ffh,0feh,0fdh,0fbh,0f7h      

end               


0条回答

一周热门 更多>