STC89C52RC蜂鸣器放音乐
时间: 2023-08-01 08:07:13 浏览: 242
蜂鸣器演奏音乐
5星 · 资源好评率100%
STC89C52RC芯片的蜂鸣器可以通过PWM控制,从而实现放音乐的效果。以下是一个简单的示例程序,演示如何通过PWM控制蜂鸣器播放“小星星”的旋律:
```
#include <reg52.h> // 包含STC89C52RC的寄存器定义
sbit beep=P1^5; // P1.5口连接蜂鸣器
// 定义“小星星”的音符频率,0表示休止符
unsigned int freq[] = {262, 262, 392, 392, 440, 440, 392, 0,
349, 349, 330, 330, 294, 294, 262, 0,
392, 392, 349, 349, 330, 330, 294, 0,
392, 392, 349, 349, 330, 330, 294, 0,
262, 262, 392, 392, 440, 440, 392, 0,
349, 349, 330, 330, 294, 294, 262, 0};
// 定义“小星星”的音符时长,单位为ms
unsigned int duration[] = {500, 500, 500, 500, 500, 500, 1000, 500,
500, 500, 500, 500, 500, 500, 1000, 500,
500, 500, 500, 500, 500, 500, 1000, 500,
500, 500, 500, 500, 500, 500, 1000, 500,
500, 500, 500, 500, 500, 500, 1000, 500,
500, 500, 500, 500, 500, 500, 1000, 500};
void delay_ms(unsigned int ms) // 延时函数
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<114;j++);
}
void beep_on(unsigned int freq) // 打开蜂鸣器
{
unsigned int n;
n = 1000000 / freq / 2; // 计算PWM值
TH0 = n / 256; // 设置定时器初值
TL0 = n % 256;
TR0 = 1; // 启动定时器
}
void beep_off() // 关闭蜂鸣器
{
TR0 = 0; // 停止定时器
beep = 0; // 蜂鸣器输出低电平
}
void main()
{
unsigned int i;
TMOD = 0x01; // 设置定时器0为16位自动重载模式
for(i=0;i<sizeof(freq)/sizeof(unsigned int);i++)
{
beep_on(freq[i]); // 打开蜂鸣器
delay_ms(duration[i]); // 延时
beep_off(); // 关闭蜂鸣器
delay_ms(50); // 音符之间的间隔
}
}
```
在上述代码中,通过PWM控制蜂鸣器发出不同频率的声音,从而实现播放旋律的效果。本例中,程序通过控制定时器0的初值实现PWM控制,每隔一段时间改变一次初值,从而改变蜂鸣器的频率。您可以修改freq数组和duration数组来定义不同的旋律和节奏,以实现不同的音乐效果。
阅读全文