《電子技術應用》
您所在的位置:首頁 > 嵌入式技术 > 设计应用 > 用M16单片机I/O口生成模拟音乐
用M16单片机I/O口生成模拟音乐
摘要: 用M16单片机I/O口生成模拟音乐**功能:用I/O口生成模拟音乐**时钟频率:内部1M**设计:tonghe**修改...
Abstract:
Key words :

關鍵字: M16單片機" title="M16單片機">M16單片機 模擬音樂" title="模擬音樂">模擬音樂

* 用M16單片機I/O口生成模擬音樂 *
* 功 能:用I/O口生成模擬音樂 *
* 時鐘頻率:內部1M *
* 設 計:tonghe *
* 修改日期:2007年04月13日 *
* 編譯環境:ICC-AVR6.31 *
* 實驗環境:本站M16學習板 *
* 發 聲:無源蜂鳴器 *
* 結 果:試驗通過 *
* 要 求:插上JP1、JP2、LED_EN短路塊 *
*****************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
/****************************************
* 定義音樂數據二維數組{x,y} *
* x:對應音符音階(頻率),0表示休止符 *
* y:對應音符節拍,0表示音樂結束 *
* 此數據取自《ICC AVR應用實例》 *
****************************************/
//以下音樂數據為《卡秋莎》,位于程序區
flash uint music_data[][2]=
{
{440,600},{494,200},{523,600},{443,200},{523,400},{494,200},
{440,200},{494,400},{330,400},{494,600},{523,200},{578,600},
{494,200},{578,400},{523,200},{494,200},{440,800},{659,400},
{880,400},{784,400},{880,200},{784,200},{698,400},{659,200},
{578,200},{659,400},{440,400},{ 0,200},{698,400},{578,200},
{659,600},{523,200},{494,200},{330,200},{523,200},{494,200},
{440,800},{659,400},{880,400},{784,400},{880,200},{784,200},
{698,400},{659,200},{578,200},{659,400},{440,400},{ 0,200},
{698,400},{578,200},{659,600},{523,200},{494,200},{330,200},
{523,200},{494,200},{440,800},{ 0, 0}
};

#pragma data:data //設置回到數據存儲器區
/************************************
* 延時函數:1M時鐘時為MS *
************************************/
void delay_ms(uint i)
{
uchar a;
for(;i;i--)
{
for (a = 220; a; a--)
{
;
}
}
}
/************************************
* 端口初始化函數 *
************************************/
void port_init(void)
{
DDRD=0xff; //D口配置為輸出,驅動蜂鳴器
DDRB=0xff; //B口配置為輸出,驅動LED
PORTB=0xff; //LED初值為滅
}
/***********************************
* 音樂產生函數 *
* 功能:輸出頻率為x的方波,延時y MS*
* 范圍:x:100-20000Hz,0:不發聲 *
* y:0-65536 MS *
***********************************/
void sound(uchar i)
{
uint x;
x=music_data[i][0]; //取音樂的頻率數據
if(x!=0)
{
x=500000/x; //1M時鐘數據計算
OCR1A=x; //比較值賦值
TCCR1A = 0x40; //允許比較反轉輸出
}
else
{
TCCR1A = 0x00; //頻率為0,休止符,不發聲
}
}
/*******************************
* 主函數 *
*******************************/
void main(void)
{
uchar i=0;
port_init(); //端口初始化
TCCR1A = 0x40; //將T/C1配置為比較匹配,OC1A取反
TCCR1B = 0x09;
while(1)
{
while(music_data[i][1]!=0) //等待最后一個音符到來
{
sound(i); //輸出音符
delay_ms(music_data[i][1]);//節拍延時
TCCR1A = 0x00; //奏完一個音符停止
PORTB^=1<<5; //音符節拍由LD5閃亮顯示
PORTD|=1<<5;
i++; //準備一下個音符
}
delay_ms(1000);
i=0; //一遍結束,停1秒,從頭開始
}
}

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 狠狠精品干练久久久无码中文字幕| 99在线影院| 日韩免费观看视频| 日本午夜精品一区二区三区| 亚洲精品免费在线看| 久久精品欧美| 国产欧美亚洲精品| 久无码久无码av无码| 日韩中文字幕一区二区| 精品国产成人av在线免| 欧美精品www| 日韩在线精品视频| 国产精品高清在线| 久久久久亚洲av无码专区喷水| 日本黄网免费一区二区精品| 69av视频在线播放| 久久久久久久免费| 欧美亚洲另类制服自拍| 日韩福利视频| 97干在线视频| caoporn国产精品免费公开| 久久国产精品精品国产色婷婷| 99在线免费视频观看| 99在线观看视频免费| www.日日操| 国产精品情侣自拍| 国产日韩欧美影视| 国产精品综合久久久| 国产精品亚洲片夜色在线| 国模吧一区二区| 激情综合在线观看| 久青草国产97香蕉在线视频| 欧美成在线观看| 久久免费视频观看| 欧美在线一区二区三区四| 国产精品美女av| 久久久极品av| 国产一区香蕉久久| 国产精品初高中精品久久| 精品午夜一区二区| 国产美女搞久久|