利用定時器產(chǎn)生樂曲仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ截圖20180526090653.png (19.06 KB, 下載次數(shù): 64)
下載附件
2018-5-26 09:08 上傳
QQ截圖20180526090630.png (40.2 KB, 下載次數(shù): 54)
下載附件
2018-5-26 09:08 上傳
QQ截圖20180526090601.png (57.33 KB, 下載次數(shù): 53)
下載附件
2018-5-26 09:08 上傳
QQ截圖20180526090542.png (18.06 KB, 下載次數(shù): 55)
下載附件
2018-5-26 09:08 上傳
單片機源碼:
- #include<reg52.h> //庫文件
- #define uchar unsigned char//宏定義無符號字符型
- #define uint unsigned int //宏定義無符號整型
- /********************************************************************
- 初始定義
- *********************************************************************/
- uchar Count;
- sbit _Speak =P3^7 ; //訊響器控制腳
- /********************************************************************
- 歌曲字根碼
- *********************************************************************/
- unsigned char code SONG[] ={ //祝你平安
- 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
- 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
- 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
- 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
- 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
- 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
- 0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
- 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
- 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
- 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
- 0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
- 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
- 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
- 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,
- //路邊的野華不要采
- 0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
- 0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,
- 0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
- 0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
- 0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
- 0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
- 0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,
- 0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
- 0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
- 0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
- 0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,
- 0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,};
- /********************************************************************
- 定時中斷服務函數(shù)
- *********************************************************************/
- void Time0_Init()
- {
- TMOD = 0x01;
- IE = 0x82;
- TH0 = 0xD8;
- TL0 = 0xEF; //12MZ晶振,10ms
- }
- /*********************************************************************/
- void Time0_Int() interrupt 1
- {
- TH0 = 0xD8;
- TL0 = 0xEF;
- Count++; //長度加1
- }
- /*********************************************************************/
- void Delay_xMs(unsigned int x) //1MS 延時子程序
- {
- unsigned int i,j;
- for( i =0;i < x;i++ )
- {
- for( j =0;j<3;j++ );
- }
- }
- /*********************************************************************/
- void Play_Song(unsigned char i) //:歌曲播放子程序i 為播放哪一段曲目
- {
- unsigned char Temp1,Temp2;
- unsigned int Addr;
- Count = 0; //中斷計數(shù)器清0
- Addr = i * 217;
- while(1)
- {
- Temp1 = SONG[Addr++];
- if ( Temp1 == 0xFF ) //休止符
- {
- TR0 = 0; Delay_xMs(100);
- }
- else if ( Temp1 == 0x00 ) //歌曲結束符
- {
- return;
- }
- else
- {
- Temp2 = SONG[Addr++];
- TR0 = 1;
- while(1)
- {
- _Speak = ~_Speak;
- Delay_xMs(Temp1);
- if ( Temp2 == Count )
- {
- Count = 0;
- break;
- }
- }
- }
- }
- }
- /********************************************************************
- 主函數(shù)
- *********************************************************************/
- void main() //主程序
- {
- Time0_Init(); //定時器0 中斷初始化
- while(1)
- {
- Play_Song(0);
- } //播放
- }
- /********************************************************************
- 結束
- *********************************************************************/
復制代碼
全部資料51hei下載地址:
利用定時器產(chǎn)生樂曲.zip
(61.3 KB, 下載次數(shù): 10)
2018-5-26 09:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|