蜂鸣器唱歌代码11.0592mhz
时间: 2023-07-02 15:15:20 浏览: 171
以下是一个简单的蜂鸣器唱歌的代码,使用的晶振频率为11.0592MHz:
```
#include <reg52.h>
#define FREQ 11059200UL
sbit beep = P2^1; //连接蜂鸣器的IO口
unsigned char code music[] = { //音乐数据段
0x01, 0x01, 0x03, 0x01, 0x05, 0x05, 0x04, 0x03, 0x03, 0x04,
0x05, 0x05, 0x05, 0x06, 0x06, 0x05, 0x05, 0x04, 0x04, 0x03,
0x01, 0x01, 0x03, 0x01, 0x05, 0x05, 0x04, 0x03, 0x03, 0x04,
0x05, 0x05, 0x05, 0x06, 0x06, 0x05, 0x05, 0x04, 0x04, 0x03
};
unsigned char code beat[] = { //节拍数据段
2, 2, 4, 2, 4, 4, 8, 2, 4, 4, 4, 4, 4, 8, 2, 4, 4, 4, 4, 8,
2, 2, 4, 2, 4, 4, 8, 2, 4, 4, 4, 4, 4, 8, 2, 4, 4, 4, 4, 4
};
void delay(unsigned int t) { //延时函数
while(t--);
}
void play(unsigned char note, unsigned char t) { //播放函数
unsigned int i;
unsigned int freq;
if(note == 0) { //停止播放
delay(t * 10);
return;
}
freq = FREQ / (unsigned int)(note * 2); //计算频率
for(i = 0; i < (unsigned int)(t * freq / 1000); i++) { //按照时长播放
beep = 1; //输出高电平
delay(500 / freq); //根据频率调整延时
beep = 0; //输出低电平
delay(500 / freq);
}
delay(20); //两个音符之间的间隔
}
void main() {
unsigned char i;
while(1) {
for(i = 0; i < sizeof(music); i++) { //按照音乐数据和节拍数据播放音乐
play(music[i], beat[i]);
}
}
}
```
这个代码使用和之前一样的音乐数据和节拍数据,不同的是计算频率时使用了宏定义,方便了对晶振频率的修改。主函数中的循环会不断地播放音乐,直到程序被停止。
阅读全文