- 壹零零单片机©版权所有 2008-2025 粤ICP备17151077号
SN 单片机驱动蜂鸣器的示例程序
在使用 SN 单片机做各种项目时,可能需要一些蜂鸣器发音信号,例如按键按动,控制输出动作,传感器发生错误,或者测量数据超过允许范围,水位缺水.....等等.
而不同的对象又可能下午蜂鸣器发出的声音或节奏不同,以便可以方便区分报警类型,同时也增加了项目的人性化.
SN 单片机不同型号的资源不同,这里使用的是 27E65 ,代码选项内部高速时钟 16MHZ/4 .
使用一个有 PWM 或蜂鸣器频率产生功能的定时器,设置好蜂鸣器的频率,这个频率接近蜂鸣器本身固有特征频率时,发音效率最好,声音也最大.不用它的中断功能.
另外使用一个定时器产生 0.1S,0.3S,0.5S 等多种定时信号,做好各自的标志,这就要使用中断功能.
下面示例程序可以改变所用定时信号的间隔时间,或长短结合的次数,方法,举一反三,就会产生各种较好效果.
测试好后,就可以保存这些程序段落,需要时,拷贝到实际项目里就可以使用了.
经常练习这些单元功能,一砖一瓦,天长日久,积累多了,就可以熟能生巧.
示例程序如下(仅供参考):
;====================================================================
;初始化中设置蜂鸣器使用 TC0 的 PWM
;设置TC0 时钟源和TC0速率。-----使用蜂鸣器就不能使用它作为定时器了!
ZB0 FP51M ;输出模式
ZB0 FP51 ;输出低电平
MOV_ TC0M,#40H;#30H ; /8 输出2KHZ,非常响亮!!
MOV_ TC0C,#120;80;180;设置TC0C 和TC0R 寄存器获得PWM 周期。
B0MOV TC0R,A;设置TC0D 寄存器获得PWM 占空比。
MOV A,#240;160 ;TC0D 的值必须大于TC0R 的值。
B0MOV TC0D,A
;使能PWM 和TC0 定时器。驱动蜂鸣器!!
ZB1 FTC0ENB ; TC0 开始计数
ZB0 FTC0IRQ ;TC0 中断功能.
ZB0 FTC0IEN ;TC0 中断功能.
; ZB1 FPWM0OUT 51 输出蜂鸣器
ZB0 FPWM0OUT 51 输出蜂鸣器
;这里设置一个定时器,产生 0.3S 和 0.5S 等定时信号.根据芯片资源选择 T0,TC1 等
ZB1 FGIE
;========================================================
B_LOOP:
@RST_WDT
;// 其它子程序
;下面 4 个子程序,测试时,每次使用一个子程序. 比较效果,可以任意修改子程序有关参数.
; CALL B_BBP_00S; 1 长 3 短
CALL B_BBP_01S;3 短 1 长
; CALL B_BBP_02S;// 0.3S间隔: 急促报警:;嘀,嘀,嘀,嘀,
; CALL B_BBP_03S;// 0.5S间隔: 普通报警:;嘀 -,嘀 -,
;// 其它子程序
JMP B_LOOP
;================================================================
B_BBP_00S:; 1 长 3 短
BS1 FBB05S
RET
ZB0 FBB05S ;;嘀---,嘀,嘀,
BS1 FBB05S
JMP $-1
ZB1 FPWM0OUT
ZB1 LEDS.4
BS1 FBB05S
JMP $-1
ZB0 FBB05S
BS1 FBB05S
JMP $-1
ZB0 FBB05S
ZB0 FPWM0OUT
ZB0 LEDS.4
ZB0 FBB03S
BS1 FBB03S
JMP $-1
ZB1 FPWM0OUT
ZB1 LEDS.4
ZB0 FBB03S
BS1 FBB03S
JMP $-1
ZB0 FPWM0OUT
ZB0 LEDS.4
ZB0 FBB03S
BS1 FBB03S
JMP $-1
ZB1 FPWM0OUT
ZB1 LEDS.4
ZB0 FBB03S
BS1 FBB03S
JMP $-1
ZB0 FPWM0OUT
ZB0 LEDS.4
ZB0 FBB05S
RET
;-------------------------------------------------------------------
B_BBP_01S:;3 短 1 长
ZB0 FBB03S
BS1 FBB03S
JMP $-1 ;嘀,嘀,嘀,嘀-----
ZB0 FP51
ZB1 FP51M
ZB1 FPWM0OUT
ZB1 LEDS.5 ;超温
ZB0 FBB03S
BS1 FBB03S
JMP $-1
ZB0 FPWM0OUT
ZB0 LEDS.5 ;超温
ZB0 FAD01S
BS1 FAD01S
JMP $-1 ;//B_TEMP
INCM BBJS
COM1 BBJS,#3;2
RET
ZM0 BBJS
ZB0 FAD01S
BS1 FAD01S
JMP $-1
ZB0 FBB05S
ZB1 FPWM0OUT
ZB1 LEDS.5 ;超温
BS1 FBB05S
JMP $-1
ZB0 FBB05S
BS1 FBB05S
JMP $-1
ZB0 FBB05S
ZB0 FPWM0OUT
ZB0 LEDS.5 ;超温
RET
;----------------------------------------------------------------------
B_BBP_02S:
BS1 FBB03S ;// 0.3S间隔: 急促报警:;嘀,嘀,嘀,嘀,
RET
ZB0 FP51
ZB1 FP51M
ZB1 FPWM0OUT
ZB0 FBB03S
BS1 FBB03S
JMP $-1
ZB0 FBB03S
BS1 FBB03S
JMP $-1
ZB0 FBB03S
ZB0 FPWM0OUT
RET
;----------------------------------------------------------------------
B_BBP_03S:
BS1 FBB05S;// 0.5S间隔: 普通报警:;嘀 -,嘀 -,
RET
ZB0 FP51
ZB1 FP51M
ZB1 FPWM0OUT
ZB0 FBB05S
BS1 FBB05S
JMP $-1
ZB0 FBB05S
BS1 FBB05S
JMP $-1
ZB0 FBB05S
ZB0 FPWM0OUT
RET