目錄
一、主要功能
二、使用步驟
三、硬件資源
四、軟件設計
五、實驗現象
一、主要功能
1、數碼管顯示當前歌曲序號
2、按鍵切換歌曲和播放暫停?
3、內置8首音樂
二、使用步驟
基于51單片機的音樂盒是一種能夠存儲和播放多首歌曲的電子設備,通過定時器產生不同頻率的方波驅動蜂鳴器或喇叭發聲。
三、硬件資源
1、51單片機核心模塊
2、按鍵模塊
3、蜂鳴器模塊
4、數碼管顯示模塊
四、軟件設計
#include<REG51.H>
//#define sound_amount 5 //歌曲數量選擇
sbit play_up=P1^0;? ?
sbit play_down=P1^1;? ?
sbit pause=P1^2;? ? ? ?
sbit speaker=P3^1;? ? ?
unsigned char timer0h,timer0l,time;
unsigned char music_num;? ? ??
unsigned int num;
signed int fre;?
// 頻率-半周期數據表 低八位
unsigned char code FREQL[]={
? ? 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,??
? ? 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F,?
? ? 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,? ? ? ? ? ??
? ? 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};? ?
unsigned char code FREQH[]={
? ? 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,? ? //低音1234567
? ? 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i
? ? 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,? ? ? ? ? ? //高音 234567
? ? 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};? ?//超高音 1234567
unsigned code dm[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x0c};
unsigned code sz[]={9,1,6,0,9,5,2,1};
unsigned code wm[]={0x01,0x02,0x04,0x08,0x80,0x40,0x20,0x10};
bit play_enable;? ? ? ? ? ? ? ?
void delay(unsigned char t);? ?
void delayms(unsigned int t);? ?
void song(void);? ? ? ? ? ?
void music_play(void);? ? ? ? ?
//《煙花易冷》
unsigned char code song1[]={
? ? ?5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4,?
5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4,?
3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1,?
2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1,?
1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1,?
2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2,?
2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1,?
7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1,?
6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2,?
5,1,2, 6,1,6, 0,0,0 };
//《發如雪》
unsigned char code song2[]={
? ? ?5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,?
3,2,1, 6,2,1, 5,2,1, 3,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1, 5,2,1,?
3,2,1, 5,2,1, 3,2,2, 1,2,1, 2,2,1, 3,2,1, 1,2,1, 6,1,1, 3,2,1, 2,2,1,?
5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,?
3,2,1, 6,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1,?
5,2,1, 3,2,1, 5,2,1, 3,2,2, 1,2,1, 6,1,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1,?
1,2,1, 2,2,1, 2,2,1, 1,2,4, 0,0,0 };
//《世上只有媽媽好》
unsigned char code song4[]={
? ? ?6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1,
? ? ?5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1,?
3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2,?
1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0};
void main(void)
{
TMOD=0x11; //T0 T1 均在工作方式1
ET0=1;? //T0開中斷
EA=1;? ?//CPU開中斷 ?
while(1)
{
????????music_play();?
????????KEY();
}
}?
五、實驗現象
演示視頻: