用汇编语言实现无源蜂鸣器,按按键1响一秒,按按键2响两秒,按按键3响3秒,按按键4响四秒!谢谢!!

用汇编语言实现无源蜂鸣器,按按键1响一秒,按按键2响两秒,按按键3响3秒,按按键4响四秒!谢谢!!,第1张

上面的未免有些复杂了,程序就不给了,提供你个思路如何?设置一个寄存器,里面就装#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响四秒!谢谢!!、单片机每计十个脉冲蜂鸣器响一用汇编语言 例如输入十个外部脉冲让蜂鸣器响一次、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9736184.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存