|
這是關(guān)于51單片機(jī)驅(qū)動(dòng)蜂鳴器的一個(gè)很簡(jiǎn)單的代碼。主要功能是依次輸出 do re mi fa so la si,然后反復(fù)循環(huán)輸出。
單片機(jī)源程序如下:
- #include<reg52.h>
- /*反復(fù)輸出1~7七個(gè)音階*/
- typedef unsigned int u16;
- typedef unsigned char u8;
- sbit beep=P1^5;
- sbit led=P2^0;
- /*C調(diào)音符對(duì)應(yīng)的hz:1:523 1#:553 2:586 2#:621 3:658 4:697
- 4#:739 5:783 5#:830 6:879 6#:931 7:987
- 根據(jù)T=1/f,單片機(jī)通過(guò)對(duì)beep的IO口反復(fù)跳轉(zhuǎn)電平從而輸出相應(yīng)的頻率
- 輸出的每一個(gè)脈沖的高電平和低電平時(shí)間都為T(mén)的一半
- C調(diào)音符對(duì)應(yīng)的小時(shí)間為:1:956; 2:853; 3:760; 4:717; 5:639; 6:569; 7:507;
- 關(guān)于節(jié)拍:設(shè)四分音符一拍等于400ms;則八分音符一拍等于200ms;十六分音符一拍等于100ms;
- */
- int csign[]={956,853,760,717,639,569,507};
- int tho[]={0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe};//高位定時(shí)器的值
- int tlo[]={0x44,0xab,0x08,0x33,0x81,0xc7,0x05};//低位定時(shí)器的值
- static u8 k=0;
- static int HT,LT;//高低位定時(shí)器的值
- void Time0_init()
- {
- TMOD|=0X01;
- TR0=1;
- TH0=HT;
- TL0=LT;
- ET0=1;
- EA=1;
- }
- void delay(u16 ms){u16 b;for(ms;ms>0;ms--)for(b=120;b>0;b--);}
- void main()
- {
-
- Time0_init();
- while(1)
- {
- HT=tho[k];
- LT=tlo[k];
- k++;
- if(k>6)k=0;
- delay(1000);TR0=0;
- delay(1000);TR0=1;
- }
- }
- void intf() interrupt 1
- {
- TH0=HT;
- TL0=LT;
- beep=~beep;
- }
復(fù)制代碼
hex文件51hei提供下載:
蜂鳴器輸出1~7音階.rar
(18.83 KB, 下載次數(shù): 21)
2020-8-2 20:12 上傳
點(diǎn)擊文件名下載附件
|
|