資源簡介
利用51單片機、喇叭、數碼管制作一個簡易的數字電子琴,可以播放音符、曲子,并在數碼管顯示音調或曲號。同時具有數字鐘功能,在數碼管上顯示小時、分鐘時間。

代碼片段和文件信息
#include????? //52系列單片機頭文件
#define?uchar?unsigned?char
#define?uint?unsigned?int?
uchar??code?dis[]={0x060x5b0x4f0x660x6d0x7d0x070x7f0x080x400x010x390x5E0x790x710x3F}; ?//1-F?、0
uint??code?yinse[]={636286383664020641036426064400645246458064694647776482064898649686503065058651106516465178652176525265283};//低1~7、中1~7、高1~7
uchar?code?music1[]={88121213131211111010998121211111010912121111101098812121313121111101099810080};//音調
uchar?code?music2[]={4810048571157137134568464864857115710080};
uchar?code?music3[]={121012101213121013128891012109100101210080};
uchar?code?music4[]={58101287101212131415131210988810988891099610910080};
uint?code?de1[]={222222422222242222224222222422222242222224};//節奏
uint?code?de2[]={11014111141111410.50.51141111411114};
uint?code?de3[]={21116111142112112014};
uint?code?de4[]={1212121212121611212112121121226};
uchar?code?dis1[]={0x3F0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x770x7c0x390x5E0x790x71};
uint?time=100;
uchar?own[50];
uchar?index=0;
char?jilu=0;
char?bofang=0;
//key?8?低音?9中音?10高音????14?手動??15自動
char?mode=0;//手動
uchar?yindiao=0;//低音?初值yinse[num+yindiao*7]
sbit?rect_wave=P2^3;
sbit?dula=P2^6; //申明U1鎖存器的鎖存端 ?
sbit?wela=P2^7; //申明U2鎖存器的鎖存端
uchar?code?table[]={0x060x5b0x4f0x660x6d0x7d0x070x7C0x080x400x010x390x5E0x790x710x3F};
uint?th=0;
uchar?show[]={0x000x080x3F0x3F0x3f0x3F};//六個數碼管顯示的內容
void?delayms(uint?xms)
{
uint?ij;
for(i=xms;i>0;i--) ??????//i=xms即延時約xms毫秒
for(j=110;j>0;j--);
}
void?int_timer?()//定時器0初始化?輸出一定頻率的方波
{
TMOD=0x11;
TH0=th/256;
TL0=th%256;
EA=1;
ET0=1;
TR0=1;
}
void?Timer0_ISR(void)?interrupt?1
{
TH0=th/256;
TL0=th%256;
rect_wave=!rect_wave;
}
void?simple(uchar?numuint?tim)//播放單個音符
{???
th=yinse[num];
??int_timer();
??delayms(tim);
??TR0=0;//關閉中斷
??rect_wave=1;
}
void?music?(uchar?mu[]uint?d[])//播放曲子
{ uint?k;
????for(k=0;mu[k]!=80;k++)
{???for(;mu[k]!=100;k++)
{
time=d[k]*300;
simple(mu[k]-1time);//time?音符的節奏拍子長短
delayms(10);
}
?delayms(80);
}
jilu=0;
??bofang=0;
}
void?mus(uchar?mu[])?//播放儲存的曲子
{ uint?k;
????for(k=0;mu[k]!=80;k++)
{???for(;mu[k]!=100;k++)
{
simple(mu[k]-1300);
delayms(300);
}
?delayms(80);
}
}
void?notsimple(uchar?num)//播放曲子?判斷曲號/儲存的曲子
{??
?switch(num)
????????{
??????????case?0: ?
???????????????music(music1de1);
???????????????break;
??????????case?1:
?music(music2de2);
???????????????break;
??????????case?2:
???????????????music(music3de3);
???????????????break;
??????????case?3:
???????????????music(music4de4);
???????????????break;
d
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????114747??2019-01-11?13:13??基于51單片機的數字電子琴\HL-1原理圖.pdf
?????文件???????5746??2019-01-11?13:16??基于51單片機的數字電子琴\music.c
????.......?????70766??2019-01-11?13:16??基于51單片機的數字電子琴\music.uvgui.15520
????.......??????4667??2019-01-11?13:16??基于51單片機的數字電子琴\music.uvopt
????.......?????13900??2019-01-11?13:16??基于51單片機的數字電子琴\music.uvproj
?????目錄??????????0??2019-01-11?13:14??基于51單片機的數字電子琴\Listings
?????目錄??????????0??2019-01-11?13:14??基于51單片機的數字電子琴\ob
?????目錄??????????0??2019-01-11?13:16??基于51單片機的數字電子琴
-----------?---------??----------?-----??----
???????????????209826????????????????????8
評論
共有 條評論