基于51系列单片机设计的简易电子琴 程序电路原理图
发布时间:2024年01月05日
概要
系统使用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;
}
文章来源:https://blog.csdn.net/qq_35654286/article/details/135404115
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!