?? main.c.110606143126
字號(hào):
//開(kāi)發(fā)環(huán)境:HJ-1G HJ-3G 開(kāi)發(fā)板+AVR增強(qiáng)包套裝
//芯片:ATMEGA16A
//編譯器:ICCV7
//編寫(xiě):慧凈電子
//網(wǎng)址:WWW.HLMCU.COM QQ:121350852
//HJ-1G/3G開(kāi)發(fā)板上的8個(gè)LED燈前后流動(dòng)
//晶振:1M 12M
/*****************************************
* 慧凈電子 *
* www.HLMCU.cn *
* 目 的:IO模擬音頻 *
* 功 能:IO模擬音頻 *
* 時(shí)鐘頻率:內(nèi)部1M *
* 整 理:HLMCU *
* 修改日期:2008年08月8日 *
* 編譯環(huán)境:ICC-AVR6.31 *
* 實(shí)驗(yàn)環(huán)境:HJ-2G 80AVR開(kāi)發(fā)板 *
* 使用硬件:無(wú)源喇叭 杜邦線 *
* 結(jié) 果:音樂(lè)發(fā)聲 *
* 操作要求:用杜邦線連接J7的第1腳和PD5端口上 *本程序只能發(fā)出 的 的 的聲音。
*****************************************/
/*******************************************
文件:BEEP.C
環(huán)境:編譯為ICC AVR6.31A,仿真為AVR Studio4.10
硬件:ATMEGA16芯片 外部晶振 12M
日期:2008年8月8日
功能:驅(qū)動(dòng)開(kāi)發(fā)板上的蜂鳴器
備注:參考《AVR系列單片機(jī)C語(yǔ)言編程與應(yīng)用實(shí)例》(清華大學(xué)出版社)
/******************************************/
#include <iom16v.h> //包含型號(hào)頭文件
#include <macros.h> //包含"位"操作頭文件
#include <stdio.h> //標(biāo)準(zhǔn)輸入輸出頭文件
#include <HJ-1G_AVR.H> //包含自定義常量頭文件
#pragma interrupt_handler Timer1_Ov:10
/*-------------兩只老虎-------------*/
const uchar MusicTable2[77]={13,2, 15,2, 17,2, 13,1, 0,1,
13,2, 15,2, 17,2, 13,1, 0,1,
17,2, 18,2, 20,2, 0,2,
17,2, 18,2, 20,2, 0,2,
20,1, 22,1, 20,1, 18,1, 17,2, 13,2,
20,1, 22,1, 20,1, 18,1, 17,2, 13,2,
15,2, 8,2, 13,2, 0,2,
15,2, 8,2, 13,2, 0,2,
0xff};
/*-----------------新年好------------------*/
const uchar MusicTable1[129]={ 13,1, 13,1, 13,2, 8,2,//音符,拍數(shù),
17,1, 17,1, 17,2, 13,2,
13,1, 17,1, 20,2, 20,2,
18,1, 17,1, 15,2, 0,2,
15,1, 17,1, 18,2, 18,2,
17,1, 15,1, 17,2, 13,2,
13,1, 17,1, 15,2, 8,2,
12,1, 15,1, 13,2, 0,2,
13,1, 13,1, 13,2, 8,2,//音符,拍數(shù),
17,1, 17,1, 17,2, 13,2,
13,1, 17,1, 20,2, 20,2,
18,1, 17,1, 15,2, 0,2,
15,1, 17,1, 18,2, 18,2,
17,1, 15,1, 17,2, 13,2,
13,1, 17,1, 15,2, 8,2,
12,1, 15,1, 13,2, 0,2,
0xff};
//0, 1, #1, 2, #2, 3, 4, #4, 5, #5, 6, #6, 7,
uint ToneTable[37]={ZERO,DO_L,DOA_L,RE_L,REA_L,MI_L,FA_L,FAA_L,SO_L,SOA_L,LA_L,LAA_L,TI_L,
DO ,DOA ,RE ,REA ,MI ,FA ,FAA ,SO ,SOA ,LA ,LAA ,TI ,
DO_H,DOA_H,RE_H,REA_H,MI_H,FA_H,FAA_H,SO_H,SOA_H,LA_H,LAA_H,TI_H};
uint tone;
/*******************************************
函數(shù)名稱: Timer1_Ov
功 能: 定時(shí)器1溢出中斷服務(wù)函數(shù)(完成單個(gè)音的產(chǎn)生)
參 數(shù): 無(wú)
返回值 : 無(wú)
/********************************************/
void Timer1_Ov(void)
{
if(tone)//若不是休止符,則發(fā)聲
{
TCNT1=tone; //計(jì)數(shù)值裝入寄存器
PORTC^=BIT(BEEP);//蜂鳴器接口電平翻轉(zhuǎn)
}
}
/*******************************************
函數(shù)名稱: Timer1_init
功 能: Timer1的初始化
參 數(shù): 無(wú)
返回值 : 無(wú)
/********************************************/
void Timer1_init(void)
{
TCCR1A=0x00; //普通端口操作
TCCR1B=0x02; //8分頻
SREG|=0x80; //開(kāi)放全局中斷
}
/*******************************************
函數(shù)名稱: Music
功 能: 完成整曲的音樂(lè)演奏
參 數(shù): pmusic--曲譜數(shù)組指針
返回值 : 無(wú)
/********************************************/
void Music(const uchar *pMusic)
{
while(*pMusic!=0xFF) //0xFF為音樂(lè)結(jié)尾符
{
TIMSK=0x04; //Timer1溢出中斷使能
tone=ToneTable[*pMusic]; //取音調(diào)頻率
TCNT1=tone; //將頻率值對(duì)應(yīng)的計(jì)數(shù)值寫(xiě)入計(jì)時(shí)器,開(kāi)始發(fā)聲
pMusic++; //樂(lè)譜音符指針+1 ,取拍數(shù)
Delayms((*pMusic)*100); //按拍數(shù)延時(shí)
Delayms((*pMusic)*100);
TIMSK=0x00; //發(fā)聲結(jié)束 ,屏蔽Timer1溢出中斷
pMusic++; //樂(lè)譜音符指針+1 ,取下一音符
}
Delayms(1000); //曲譜結(jié)束,等待
}
/*******************************************
函數(shù)名稱: main
功 能: 演奏指定的音樂(lè)
參 數(shù): 無(wú)
返回值 : 無(wú)
/********************************************/
void main(void)
{
Board_init( ); //初始化開(kāi)發(fā)板/
Timer1_init(); //Timer1初始化
while(1)
{
Music(MusicTable2); //循環(huán)演奏歌曲(改變參數(shù)MusicTable1可以變換歌曲)
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -