51单片机用无源蜂鸣器做简易电子琴,用定时器实现代码
时间: 2023-07-18 11:22:40 浏览: 109
好的,以下是51单片机用无源蜂鸣器做简易电子琴的代码,使用定时器来实现:
```c
#include <reg51.h>
sbit buzzer = P2^3; // 无源蜂鸣器接口
sbit key1 = P3^1; // 按键1接口
sbit key2 = P3^2; // 按键2接口
sbit key3 = P3^3; // 按键3接口
unsigned char code tone[] = {0x3F, 0x3C, 0x3A, 0x38, 0x35, 0x32, 0x2E, 0x2B}; // 音阶数组
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i=0; i<t; i++)
{
for(j=0; j<120; j++);
}
}
void timer0() interrupt 1 // 定时器0中断服务函数
{
TH0 = (65536-1000)/256; // 重新赋值,每1ms进入中断一次
TL0 = (65536-1000)%256;
}
void main()
{
unsigned char i = 0;
TMOD = 0x01; // 定时器0工作在模式1
TH0 = (65536-1000)/256; // 初始化定时器0
TL0 = (65536-1000)%256;
ET0 = 1; // 打开定时器0中断允许
EA = 1; // 打开总中断允许
TR0 = 1; // 启动定时器0
while(1)
{
if(key1 == 0) // 按键1按下
{
buzzer = 1; // 发声
P0 = tone[0]; // 发送音阶
delay(500); // 延时500ms
P0 = 0x00; // 停止发声
delay(500); // 延时500ms
}
else if(key2 == 0) // 按键2按下
{
buzzer = 1; // 发声
P0 = tone[1]; // 发送音阶
delay(500); // 延时500ms
P0 = 0x00; // 停止发声
delay(500); // 延时500ms
}
else if(key3 == 0) // 按键3按下
{
buzzer = 1; // 发声
for(i=0; i<8; i++)
{
P0 = tone[i]; // 发送音阶
delay(250); // 延时250ms
P0 = 0x00; // 停止发声
delay(250); // 延时250ms
}
}
}
}
```
在这个程序中,我们同样使用了定时器0来实现延时功能。通过按键1、2、3来分别发出Do、Re、Mi的音阶,按住按键就会持续发声。这个简易电子琴只有三个音阶,可以根据需要进行扩展。
相关推荐
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)