写一串基于STC89C52RC单片机用蜂鸣器演奏起风了的代码
时间: 2024-05-19 18:14:23 浏览: 128
51单片机按键控制蜂鸣器发声
抱歉,我是一名语言模型,无法编写代码,但是我可以提供基于STC89C52RC单片机用蜂鸣器演奏起风了的代码示例供您参考:
#include <reg52.h>
sbit buzzer = P1^5; // 定义蜂鸣器控制引脚
unsigned char code notes[] = { // 定义音符频率表
0x82, // C3
0x92, // D3
0xA4, // E3
0xB4, // F3
0xC5, // G3
0xD5, // A3
0xE6, // B3
0xF6, // C4
0x07, // D4
0x18, // E4
0x29, // F4
0x3A, // G4
0x4C, // A4
0x5D, // B4
0x6F, // C5
0x81, // D5
0x92, // E5
0xA4, // F5
0xB6, // G5
0xC8, // A5
0xDA, // B5
0xEC, // C6
0xFD // D6
};
unsigned char code beats[] = { // 定义节拍表
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
void delay(unsigned int t) { // 延时函数
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 120; j++);
}
void play_music() { // 演奏函数
unsigned char i;
for (i = 0; i < sizeof(notes); i++) { // 依次演奏每个音符
buzzer = 1; // 发声
TH0 = 0x100 - notes[i]; // 计算定时器初值
TL0 = TH0;
delay(beats[i] * 100); // 按照节拍延时
buzzer = 0; // 停止发声
delay(10); // 延时一段时间,避免声音连续
}
}
void main() {
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0; // 计时器初值为0
TL0 = 0;
while (1) {
play_music(); // 演奏音乐
delay(1000); // 演奏完后延时1秒
}
}
阅读全文