“可变调的蜂鸣器”程序设计说明
1 工程文件下载:
2 程序设计思路

无源蜂鸣器电路连接示意图
2.1程序设计关键点
如何修改输入蜂鸣器方波的频率?
输入蜂鸣器的方波是通过定时器来产生的。定时器中断的频率决定了输入蜂鸣器的方波的频率,而定时器中断的频率是通过重装值决定的。因此只需要修改定时器自动重装的重装值,就能向蜂鸣器输入不同频率的方波。
2.2程序工作过程
通过按键KEY1修改定时器T0的重装值;通过按键KEY2修改蜂鸣器开关标志位,让蜂鸣器发声/不发声。
2.3定时器的使用
使用了定时器T0,在定时器中断处理程序中判断蜂鸣器开关是否打开,若打开则让输入蜂鸣器的电平翻转。
3 程序相关使用到的寄存器说明
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式为16位自动重装
TL0 = 0xCD; //设置定时初值
TH0 = 0xF4; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //打开定时器T0中断
EA = 1; //打开总中断
4 程序设计框架及关键实现说明
4.1宏定义
#define uchar unsigned char
#define uint unsigned int
4.2全局变量
int key1_state = 0; //0:key1未按下 1:key1已按下
int key2_state = 0; //0:key2未按下 1:key1已按下
uchar flag; //控制蜂鸣器开关的标志位
int num = 0; //音调
uchar duanxuan[]={ //段选0-f 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
4.3函数:
(1)void display(); //数码管和LED的显示函数
(2)void delay(uint xms) //延时x毫秒
(3)voidinit(); //初始化,推挽,中断设置
(4)voidTime0() interrupt 1 //定时器0中断处理函数:设置输入蜂鸣器的电平

