這是關于51單片機驅動蜂鳴器的一個很簡單的代碼。主要功能是依次輸出 do re mi fa so la si,然后反復循環輸出。
單片機源程序如下:
- #include<reg52.h>
- /*反復輸出1~7七個音階*/
- typedef unsigned int u16;
- typedef unsigned char u8;
- sbit beep=P1^5;
- sbit led=P2^0;
- /*C調音符對應的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
- 根據T=1/f,單片機通過對beep的IO口反復跳轉電平從而輸出相應的頻率
- 輸出的每一個脈沖的高電平和低電平時間都為T的一半
- C調音符對應的小時間為:1:956; 2:853; 3:760; 4:717; 5:639; 6:569; 7:507;
- 關于節拍:設四分音符一拍等于400ms;則八分音符一拍等于200ms;十六分音符一拍等于100ms;
- */
- int csign[]={956,853,760,717,639,569,507};
- int tho[]={0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe};//高位定時器的值
- int tlo[]={0x44,0xab,0x08,0x33,0x81,0xc7,0x05};//低位定時器的值
- static u8 k=0;
- static int HT,LT;//高低位定時器的值
- 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;
- }
復制代碼
hex文件51hei提供下載:
蜂鳴器輸出1~7音階.rar
(18.83 KB, 下載次數: 21)
2020-8-2 20:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|