本实验旨在设计和实现一个基于51单片机的简易电子琴,通过按键控制不同频率的声音输出。该系统可以模拟电子琴的基本功能,通过按键的不同组合,产生对应音调的声音。
51单片机(STC89C52)
蜂鸣器
按键(6个)
电阻、电容等基本元器件
面包板及连接线
Proteus仿真软件
单片机:使用STC89C52作为主控制芯片。
蜂鸣器:连接到P1^6引脚,用于发声。
按键:6个按键分别连接到P2口,用于选择不同的音调。
电源:提供稳定的5V电源给单片机和外设。
硬件连接示意图如下:
+-------------+ +----------+ | | | | | STC89C52 | | 蜂鸣器 | | | | | | P1^6 -----+--------> | | | +----------+ | | | P2.0-P2.5--+ | | | | | +---------+ | | | | +------>| 按键1 | | | | +--------->| 按键2 | | | +----------->| 按键3 | | +------------->| 按键4 | | +->| 按键5 | | | | 按键6 | +-----------------+ +---------+
该设计利用51单片机的I/O端口控制蜂鸣器发声,通过定时器产生不同频率的方波,从而产生不同音调。按键用于选择不同的音调,按键按下时单片机读取按键值并控制蜂鸣器发出相应频率的声音。
程序主要分为以下几个部分:
音调频率定义:定义低音、中音和高音的频率。
定时器初始化:配置定时器用于产生不同频率的方波。
按键扫描:检测按键输入,根据按键值选择相应的音调。
中断服务程序:通过定时器中断产生方波,从而驱动蜂鸣器发声。
cvoid init_timer(void) {
EA = 1; // 开总中断
ET1 = 1; // 定时器T1中断允许
TMOD &= 0x0f;
TMOD |= 0x00; // 使用定时器T1的模式1(13位计数器)
TR1 = 1;
}
该函数用于初始化定时器1,并设置为13位计数模式。
cvoid ScanKey(void) {
if (GPIO_KEY != 0xff) {
if (GPIO_KEY == 0xff - 0x01) {
TEMP_C = Z1;
} else if (GPIO_KEY == 0xff - 0x02) {
TEMP_C = Z2;
} else if (GPIO_KEY == 0xff - 0x04) {
TEMP_C = Z3;
} else if (GPIO_KEY == 0xff - 0x08) {
TEMP_C = Z4;
} else if (GPIO_KEY == 0xff - 0x10) {
TEMP_C = Z5;
} else if (GPIO_KEY == 0xff - 0x20) {
TEMP_C = Z6;
}
C = 460830 / TEMP_C;
TH1 = (8192 - C) / 32;
TL1 = (8192 - C) % 32;
TR1 = 1;
while (GPIO_KEY != 0xff);
TR1 = 0;
}
}
该函数用于扫描按键并根据按键值设置相应的频率常数。
cvoid main() {
init_timer();
TR1 = 0; // 关闭定时器
sound = 1; // 关闭蜂鸣器
while (1) {
ScanKey(); // 获取处理按下的键
}
}
主函数初始化定时器并进入无限循环,持续检测按键输入。
cvoid Time1(void) interrupt 3 {
sound = !sound; // 将P3.7引脚输出电平取反,形成方波
TH1 = (8192 - C) / 32; // 13位计数器TH0高8位的赋初值方法
TL1 = (8192 - C) % 32; // 13位计数器TL0低5位的赋初值方法
}
该函数用于定时器中断,通过改变蜂鸣器引脚的电平,产生方波,从而发出声音。
通过按下不同的按键,蜂鸣器可以发出对应频率的声音,实现了简易电子琴的功能。各按键对应的音调准确,响应速度快,满足设计要求。
本实验成功实现了一个基于51单片机的简易电子琴,通过按键控制蜂鸣器发出不同频率的声音。实验验证了定时器中断、按键扫描等基本技术在电子琴设计中的应用,为进一步的扩展和改进提供了基础。
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!