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
一周热门 更多>