現象
在無源蜂鳴器上循環演奏低音“DO、RE、MI、FA、SO、LA、SI”這7個音調。
參考程序
1 主函數
#include #include 'delayms.h' #include 'timer0.h' sbit Buzzer = P2^5; //音調與頻率對照表,低中高:1,1#,2,2#,3,4,4#,5,5#,6,6#,7 //unsigned int FreqTable[]={ // 63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528, // 64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030, // 65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283, //}; //音調與頻率對照表,低中高:1,2,3,4,5,6,7 unsigned int FreqTable[]={ 63628,63835,64021,64103,64260,64400,64528, 64580,64684,64777,64820,64898,64968,65030, 65058,65110,65157,65178,65217,65252,65283, }; unsigned char FreqSelect; void main() { Timer0Init( ); while(1) { if(FreqSelect>19) FreqSelect = 0; else FreqSelect++; delayms(500); } } //定時器中斷函數 void timer0_routine() interrupt 1 { TL0 = FreqTable[FreqSelect]%256; TH0 = FreqTable[FreqSelect]/256; Buzzer = !Buzzer; } 2 延時函數 #ifndef _delayms_h_ #define _delayms_h_ void delayms(unsigned int xms); #endif #include void delayms(unsigned int xms) //@11.0592MHz { unsigned char i, j; while(xms--) { _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } } 3 定時器函數 #ifndef _timer0_h_ #define _timer0_h_ void Timer0Init(void); #endif #include /** * @brief 定時器0初始化,1毫秒@11.0592MHz * @param 無 * @retval 無 */ void Timer0Init(void) //1毫秒@11.0592MHz { TMOD &= 0xF0; //設置定時器模式 TMOD |= 0x01; //設置定時器模式 TL0 = 0x66; //設置定時初始值 TH0 = 0xFC; //設置定時初始值 TF0 = 0; //清除TF0標志 TR0 = 1; //定時器0開始計時 ET0 = 1; //打開定時器0中斷 EA = 1; //打開總中斷開關 PT0 = 0; //設置定時器0中斷優先級 }
上一篇:蜂鳴器播放音樂+普中51單片機+江科大自化協
下一篇:蜂鳴器提示音+單片機+普中+江科大自化協
推薦閱讀最新更新時間:2025-06-07 23:39
