上面的未免有些复杂了,程序就不给了,提供你个思路如何?设置一个寄存器,里面就装#00H即可,每次按键按下自加一,利用二进制代码末尾的0,1特性,每次自加一之后把寄存器里的数值和#01H做乘法,直接判断处理数值是否为零即可,是则KEY为开,不是则KEY为关。自行设计一段程序脉冲,频率自行考虑。(由于蜂鸣器功率不大,建议1K即可)主程序就做个开关检测,利用子程序调用,开则调用子程序,然后自检测开关按键,相信就那几个机器周期是不碍事的。楼主可以自行试试。
这样的例子,用汇编也不是很难。因为程序不会很长的。只写2 位的,多位你自己可以加上,另外帮你顺便写上显示程序。
;16M晶振,共阴数码管显示
SP1 EQU P36
SP2 EQU P37
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 1BH
AJMP T1INT
ORG 30H
MAIN: MOV SP,#60H
MOV DPTR,#TAB
MOV TMOD,#11H ;T0、T1定时方式1
SETB EA
SETB ET0
SETB ET1
MOV TH0,#3CH ;50ms定时常数
MOV TL0,#0B0H
MOV TH1,#0FEH ;05ms定时常数
MOV TL1,#0CH
K1: ACALL DISP
JB SP1,K2
ACALL DISP
JNB SP1,$-2
AJMP CNT1
K2: ACALL DISP
JB SP2,K1
ACALL DISP
JNB SP2,$-2
AJMP CLR1
CNT1: INC 30H
INC 31H
MOV A,31H
CJNE A,#10,CNT2
MOV 31H,#0
SETB TR0
SETB TR1
CNT2: MOV A,30H
CJNE A,#100,K1
MOV 30H,#0
AJMP K1
CLR1: MOV 30H,#0
DISP: MOV A,30H
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P0,A
CLR P30
ACALL DLY
SETB P30
MOV A,B
MOVC A,@A+DPTR
MOV P0,A
CLR P31
ACALL DLY
SETB P31
RET
T0INT: MOV TH0,#3CH ;定时器0作蜂鸣时间,定时常数50ms
MOV TL0,#0B0H
INC R0
CJNE R0,#40,RTI ;设蜂鸣器响2s,如果10次计数时间低于2s,R0要改小。
MOV R0,#0
CLR TR0
CLR TR1
RTI: RETI
T1INT: MOV TH1,#0FEH ;P10 05ms高低电平变换一次,即输出频率1KHz的方波
MOV TL1,#0CH
CPL P10
RETI
DLY: MOV R6,#2
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,$-4
RET
TAB: DB 03FH;0
DB 006H;1
DB 05BH;2
DB 04FH;3
DB 066H;4
DB 06DH;5
DB 07DH;6
DB 007H;7
DB 07FH;8
DB 06FH;9
END
以上就是关于用汇编语言实现无源蜂鸣器,按按键1响一秒,按按键2响两秒,按按键3响3秒,按按键4响四秒!谢谢!!全部的内容,包括:用汇编语言实现无源蜂鸣器,按按键1响一秒,按按键2响两秒,按按键3响3秒,按按键4响四秒!谢谢!!、单片机每计十个脉冲蜂鸣器响一用汇编语言 例如输入十个外部脉冲让蜂鸣器响一次、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)