蜂鸣器发出7种音阶编程单片机
时间: 2023-07-05 14:23:04 浏览: 209
基于51单片机的嗡鸣器7发出七阶音符
要让单片机控制蜂鸣器发出7种音阶,可以通过控制蜂鸣器的频率来实现。以下是一个基于51单片机的简单示例代码,可以让蜂鸣器发出C、D、E、F、G、A、B这七个音符:
```
#include <reg52.h> // 包含51单片机的头文件
#define C 262 // 定义C音符频率
#define D 294 // 定义D音符频率
#define E 330 // 定义E音符频率
#define F 349 // 定义F音符频率
#define G 392 // 定义G音符频率
#define A 440 // 定义A音符频率
#define B 494 // 定义B音符频率
sbit buzzerPin = P1^5; // 蜂鸣器引脚
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void main()
{
while(1)
{
buzzerPin = 1; // 将蜂鸣器引脚设置为高电平
TMOD = 0x01; // 将定时器0设为模式1
TH0 = 0xFF; // 设置定时器0的初值
TL0 = 0xFC; // 设置定时器0的初值
TR0 = 1; // 启动定时器0
while(!TF0); // 等待定时器0溢出
TR0 = 0; // 停止定时器0
TF0 = 0; // 清除定时器0的溢出标志位
buzzerPin = 0; // 将蜂鸣器引脚设置为低电平
delay(200); // 延时200毫秒
buzzerPin = 1; // 将蜂鸣器引脚设置为高电平
TMOD = 0x01; // 将定时器0设为模式1
TH0 = 0xFF; // 设置定时器0的初值
TL0 = 0xF4; // 设置定时器0的初值
TR0 = 1; // 启动定时器0
while(!TF0); // 等待定时器0溢出
TR0 = 0; // 停止定时器0
TF0 = 0; // 清除定时器0的溢出标志位
buzzerPin = 0; // 将蜂鸣器引脚设置为低电平
delay(200); // 延时200毫秒
buzzerPin = 1; // 将蜂鸣器引脚设置为高电平
TMOD = 0x01; // 将定时器0设为模式1
TH0 = 0xFF; // 设置定时器0的初值
TL0 = 0xE8; // 设置定时器0的初值
TR0 = 1; // 启动定时器0
while(!TF0); // 等待定时器0溢出
TR0 = 0; // 停止定时器0
TF0 = 0; // 清除定时器0的溢出标志位
buzzerPin = 0; // 将蜂鸣器引脚设置为低电平
delay(200); // 延时200毫秒
buzzerPin = 1; // 将蜂鸣器引脚设置为高电平
TMOD = 0x01; // 将定时器0设为模式1
TH0 = 0xFF; // 设置定时器0的初值
TL0 = 0xDD; // 设置定时器0的初值
TR0 = 1; // 启动定时器0
while(!TF0); // 等待定时器0溢出
TR0 = 0; // 停止定时器0
TF0 = 0; // 清除定时器0的溢出标志位
buzzerPin = 0; // 将蜂鸣器引脚设置为低电平
delay(200); // 延时200毫秒
buzzerPin = 1; // 将蜂鸣器引脚设置为高电平
TMOD = 0x01; // 将定时器0设为模式1
TH0 = 0xFF; // 设置定时器0的初值
TL0 = 0xC9; // 设置定时器0的初值
TR0 = 1; // 启动定时器0
while(!TF0); // 等待定时器0溢出
TR0 = 0; // 停止定时器0
TF0 = 0; // 清除定时器0的溢出标志位
buzzerPin = 0; // 将蜂鸣器引脚设置为低电平
delay(200); // 延时200毫秒
buzzerPin = 1; // 将蜂鸣器引脚设置为高电平
TMOD = 0x01; // 将定时器0设为模式1
TH0 = 0xFF; // 设置定时器0的初值
TL0 = 0xBE; // 设置定时器0的初值
TR0 = 1; // 启动定时器0
while(!TF0); // 等待定时器0溢出
TR0 = 0; // 停止定时器0
TF0 = 0; // 清除定时器0的溢出标志位
buzzerPin = 0; // 将蜂鸣器引脚设置为低电平
delay(200); // 延时200毫秒
buzzerPin = 1; // 将蜂鸣器引脚设置为高电平
TMOD = 0x01; // 将定时器0设为模式1
TH0 = 0xFF; // 设置定时器0的初值
TL0 = 0xB4; // 设置定时器0的初值
TR0 = 1; // 启动定时器0
while(!TF0); // 等待定时器0溢出
TR0 = 0; // 停止定时器0
TF0 = 0; // 清除定时器0的溢出标志位
buzzerPin = 0; // 将蜂鸣器引脚设置为低电平
delay(200); // 延时200毫秒
buzzerPin = 1; // 将蜂鸣器引脚设置为高电平
TMOD = 0x01; // 将定时器0设为模式1
TH0 = 0xFF; // 设置定时器0的初值
TL0 = 0xA1; // 设置定时器0的初值
TR0 = 1; // 启动定时器0
while(!TF0); // 等待定时器0溢出
TR0 = 0; // 停止定时器0
TF0 = 0; // 清除定时器0的溢出标志位
buzzerPin = 0; // 将蜂鸣器引脚设置为低电平
delay(200); // 延时200毫秒
}
}
```
这个程序中使用了`TMOD`和`TH0`、`TL0`寄存器来控制定时器0的模式和初值,通过不同的初值和延时时间的组合,实现了蜂鸣器发出7种音阶的效果。可以根据需要修改频率和延时时间,来达到不同的音效。
阅读全文