?? main.c.110606143052
字號:
//開發環境:HJ-1G HJ-3G 開發板+AVR增強包套裝
//芯片:ATMEGA16A
//編譯器:ICCV7
//編寫:慧凈電子
//網址:WWW.HLMCU.COM QQ:121350852
//HJ-1G/3G開發板上的8個LED燈前后流動
//晶振:1M 12M
/*****************************************
* 慧凈電子 *
* www.HLMCU.cn *
* 目 的:IO模擬音頻 *
* 功 能:IO模擬音頻 *
* 時鐘頻率:內部1M *
* 整 理:HLMCU *
* 修改日期:2008年08月8日 *
* 編譯環境:ICC-AVR6.31 *
* 實驗環境:HJ-2G 80AVR開發板 *
* 使用硬件:無源喇叭 杜邦線 *
* 結 果:音樂發聲 *
* 操作要求:用杜邦線連接J7的第1腳和PD5端口上 *本程序只能發出 的 的 的聲音。
*****************************************/
/*******************************************
文件:BEEP.C
環境:編譯為ICC AVR6.31A,仿真為AVR Studio4.10
硬件:ATMEGA16芯片 外部晶振 12M
日期:2008年8月8日
功能:驅動開發板上的蜂鳴器
備注:參考《AVR系列單片機C語言編程與應用實例》(清華大學出版社)
/******************************************/
#include <iom16v.h> //包含型號頭文件
#include <macros.h> //包含"位"操作頭文件
#include <stdio.h> //標準輸入輸出頭文件
#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,//音符,拍數,
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,//音符,拍數,
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;
/*******************************************
函數名稱: Timer1_Ov
功 能: 定時器1溢出中斷服務函數(完成單個音的產生)
參 數: 無
返回值 : 無
/********************************************/
void Timer1_Ov(void)
{
if(tone)//若不是休止符,則發聲
{
TCNT1=tone; //計數值裝入寄存器
PORTA^=BIT(BEEP);//蜂鳴器接口電平翻轉
}
}
/*******************************************
函數名稱: Timer1_init
功 能: Timer1的初始化
參 數: 無
返回值 : 無
/********************************************/
void Timer1_init(void)
{
TCCR1A=0x00; //普通端口操作
TCCR1B=0x02; //8分頻
SREG|=0x80; //開放全局中斷
}
/*******************************************
函數名稱: Music
功 能: 完成整曲的音樂演奏
參 數: pmusic--曲譜數組指針
返回值 : 無
/********************************************/
void Music(const uchar *pMusic)
{
while(*pMusic!=0xFF) //0xFF為音樂結尾符
{
TIMSK=0x04; //Timer1溢出中斷使能
tone=ToneTable[*pMusic]; //取音調頻率
TCNT1=tone; //將頻率值對應的計數值寫入計時器,開始發聲
pMusic++; //樂譜音符指針+1 ,取拍數
Delayms((*pMusic)*100); //按拍數延時
Delayms((*pMusic)*100);
TIMSK=0x00; //發聲結束 ,屏蔽Timer1溢出中斷
pMusic++; //樂譜音符指針+1 ,取下一音符
}
Delayms(1000); //曲譜結束,等待
}
/*******************************************
函數名稱: main
功 能: 演奏指定的音樂
參 數: 無
返回值 : 無
/********************************************/
void main(void)
{
Board_init( ); //初始化開發板/
Timer1_init(); //Timer1初始化
while(1)
{
Music(MusicTable2); //循環演奏歌曲(改變參數MusicTable1可以變換歌曲)
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -