3.16 TIMER0控制门铃声音输出 |
|
图3-20所示仿真电路运行时,按下K1按键,定时器中断程序将控制蜂鸣器模拟发出“叮”、“咚”的门铃声,其中“叮”的声音用较短定时形成较高频率,“咚”的声音用较长定时形成较低频率,通过虚拟示波器可以观察到两种不同频率声音的脉宽变化。
图3-20 TIMER0控制门铃声音输出电路
主程序中while循环在检测到按键按下并释放后执行TR0=1,定时器启动计数,为输出两种不同频率的声音,其中断程序完成了以下两种不同的定时。
① 初始时定时设置为700µs,每次定时溢出都将执行中断函数内首行语句DoorBell = ~DoorBell,P3.0引脚输出数字脉冲。由于有变量p的控制,前400次触发中,每次执行DoorBell= ~DoorBell后定时初值均被重置为700µs (0.7ms),从而使得P3.0输出声音频率恒为1/0.7/2×1 000=714Hz。
② 当变量p累加到400时,后续400次中断触发过程中每次同样会执行DoorBell = ~DoorBell并输出脉冲信号,但每次触发后定时初值均被重置为1 000µs (1ms),从而使得输出声音频率为1/1/2×1 000=500Hz。
正是由于前后400次的定时设置不同,从而实现了“叮”、“咚”两种频率声音的输出。当p值为800时,定时器停止(TR0 = 0),定时器不会形成溢出,中断停止触发,声音输出结束。
如果要改变所输出声音频率,可修改700和1 000这两个延时初值,要改变声音输出长度,可修改400和800这两个时长控制值。
① 用定时器控制模拟出另一种门铃声音效果。
② 修改程序,用定时器中断控制实现其他某种声音频率的模拟输出。