ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

基于51系列单片机设计的简易电子琴 程序电路原理图

2026/8/12 7:26:09 拓冰建站 浏览量
基于51系列单片机设计的简易电子琴 程序电路原理图

目录

概要

电路原理图

​编辑

仿真图

部分程序

资料下载地址:基于51系列单片机设计的简易电子琴 程序电路原理图

概要

系统使用STC12C5A60S2单片机作为主控芯片,PCB采用贴片设计,板子做到纤小精致。
系统拥有两种模式:
一种为弹奏模式,可以弹奏Do~Si 7个音,还有低中高三种音的切换。
一种为播放模式,可以播放保存在单片机内的歌曲段码,且有播放停止、上一首、下一首切换功能。
系统通过OLED显示,使用I2C协议,显示当前模式以及弹奏音符名和播放歌曲名称。
压缩包内附含嘉立创工程文件,Proteus仿真文件,Keil5工程文件

电路原理图

仿真图

部分程序

void main(void)
{uint8_t i;INIT();Led_Init();OLED_Init();Piano_Display_ON();                              //显示弹奏模式Piano_Note();                                          //显示低中高音while(1){if(!play_flag){Piano_Display_ON();                //弹奏模式Piano_Note();                        Piano_Player();                        }else{Music_Display_ON();                //音乐模式Music_Player();                        }}}void INT_0(void) interrupt 0
{   Piano_Scale();                                        //四个中断按键函数
}void Timer0(void) interrupt 1
{TR0=0;if(music_number==0){TH0=table1[music_table1[i]-1];  //取频率常数 和 节拍常数  TL0=table2[music_table1[i]-1];}else if(music_number==1){TH0=table1[music_table2[i]-1];  //取频率常数 和 节拍常数  TL0=table2[music_table2[i]-1];}else if(music_number==2){TH0=table1[music_table3[i]-1];  //取频率常数 和 节拍常数  TL0=table2[music_table3[i]-1];}else if(music_number==3){TH0=table1[music_table4[i]-1];  //取频率常数 和 节拍常数  TL0=table2[music_table4[i]-1];}else if(music_number==4){TH0=table1[music_table5[i]-1];  //取频率常数 和 节拍常数  TL0=table2[music_table5[i]-1];}else if(music_number==5){TH0=table1[music_table6[i]-1];  //取频率常数 和 节拍常数  TL0=table2[music_table6[i]-1];}else if(music_number==6){TH0=table1[music_table7[i]-1];  //取频率常数 和 节拍常数  TL0=table2[music_table7[i]-1];}beep=!beep;TR0=1;
}void Timer1(void) interrupt 3
{TR1=0;TH1=table1[7*T1_flag    +   PressTime];TL1=table2[7*T1_flag    +   PressTime];beep=!beep;TR1=1;
}