標籤:【創新!】蜂鳴器 與感應電子琴[定時、中斷、i/o高阻工作類型]
2015年10月2日
1、驅動有源/無源蜂鳴器,發出不同頻率的聲音
/*工程建立MCU選取,Atmel 89C55單片機:STC12C4052AD晶振:12M功能:驅動無源蜂鳴器串連說明:BEEP正極接VCC,負極接到 MCU的P3^7*/#include <STC12C2052AD.H>sbit BEEP = P3^7;void DELAY_MS (unsigned int a) { unsigned int i; while ( --a != 0 ) { for (i=0;i<=600;i++); }}void main (void) {unsigned int i; BEEP=1;while (1){for(i=0;i<100;i++){ //調整發音頻率BEEP=1;DELAY_MS(2);BEEP=0;DELAY_MS(2);}for(i=0;i<100;i++){ //調整發音頻率BEEP=1;DELAY_MS(3);BEEP=0;DELAY_MS(3);}for(i=0;i<100;i++){ //調整發音頻率BEEP=1;DELAY_MS(4);BEEP=0;DELAY_MS(4);}for(i=0;i<100;i++){ //調整發音頻率BEEP=1;DELAY_MS(5);BEEP=0;DELAY_MS(5);}}}
2、用定時器與中斷的方法製作8鍵電子琴C程式[VCC觸發]
/*工程建立MCU選取,Atmel 89C55單片機:STC12C4052AD晶振:12M功能:用定時器與中斷的方法製作8鍵電子琴C程式串連說明:BEEP正極接VCC,負極接到 MCU的11腳P3 ^ 7,VCC觸12腳到19腳BEEP響*/#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列單片機標頭檔 sbit SPEAKER = P3^7;#define KEY P1 unsigned char MUSIC; unsigned char STH0;unsigned char STL0;unsigned int code tab[]={64021,64103,64260,64400,//低音3開始 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178}; void main(void){ TMOD=0x01; //ET0=1; //EA=1; //開啟總中斷KEY = 0x00;while(1){ if(KEY != 0x00){switch (KEY){//顯示的列位置case 0x01://MUSIC = 7;break;//case 0x02://MUSIC = 6;break;//case 0x04://MUSIC = 5;break;//case 0x08://MUSIC = 4;break;//case 0x10://MUSIC = 3;break;//case 0x20://MUSIC = 2;break;//case 0x40://MUSIC = 1;break;//case 0x80://MUSIC = 0;break;//default:MUSIC = 0xff;break;//}if(MUSIC != 0xff){ STH0=tab[MUSIC]/256; STL0=tab[MUSIC]%256; TR0=1;}}else{ SPEAKER = 1;TR0=0;} } } void t0(void) interrupt 1 using 0{ TH0=STH0; TL0=STL0; SPEAKER=~SPEAKER; }
3、用定時器與中斷的方法製作8鍵電子琴C程式[GND觸發]
/*工程建立MCU選取,Atmel 89C55單片機:STC12C4052AD晶振:12M功能:用定時器與中斷的方法製作8鍵電子琴C程式串連說明:BEEP正極接VCC,負極接到 MCU的11腳P3 ^ 7,GND觸12腳到19腳BEEP響*/#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列單片機標頭檔 sbit SPEAKER = P3^7;#define KEY P1 unsigned char MUSIC; unsigned char STH0;unsigned char STL0;unsigned int code tab[]={64021,64103,64260,64400,//低音3開始 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178}; void main(void){ TMOD=0x01; //ET0=1; //EA=1; //開啟總中斷while(1){ if(KEY != 0xff){switch (~KEY){//顯示的列位置case 0x01://MUSIC = 7;break;//case 0x02://MUSIC = 6;break;//case 0x04://MUSIC = 5;break;//case 0x08://MUSIC = 4;break;//case 0x10://MUSIC = 3;break;//case 0x20://MUSIC = 2;break;//case 0x40://MUSIC = 1;break;//case 0x80://MUSIC = 0;break;//default:MUSIC = 0xff;break;//}if(MUSIC != 0xff){ STH0=tab[MUSIC]/256; STL0=tab[MUSIC]%256; TR0=1;}}else{ SPEAKER = 1;TR0=0;} } } void t0(void) interrupt 1 using 0{ TH0=STH0; TL0=STL0; SPEAKER=~SPEAKER; }
4、用定時器與中斷的方法製作[隔空感應]8鍵電子琴C程式
/*工程建立MCU選取,Atmel 89C55單片機:STC12C4052AD晶振:12M功能:用定時器與中斷的方法製作8鍵電子琴C程式串連說明:BEEP正極接VCC,負極接到 MCU的11腳P3 ^ 7,電腦USB供電隔空感應12腳到19腳,BEEP響*/#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列單片機標頭檔 sbit SPEAKER = P3^7;#define KEY P1 unsigned char MUSIC; unsigned char STH0;unsigned char STL0;unsigned int code tab[]={64021,64103,64260,64400,//低音3開始 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178}; void main(void){ TMOD=0x01; //ET0=1; //EA=1; //開啟總中斷 P1M0 = 0xff; P1M1 = 0x00; //用電腦USB供電就是隔空感應12腳到19腳,BEEP響,前提是KEY = 0x00;如果KEY = 0xff;啟用高阻,將全是噪音!KEY = 0x00; //用移動電源供電就是觸摸12腳到19腳BEEP響,前提是KEY = 0x00;如果KEY = 0xff;啟用高阻,將全是噪音!while(1){ if(KEY != 0x00){switch (KEY){//顯示的列位置case 0x01://MUSIC = 7;break;//case 0x02://MUSIC = 6;break;//case 0x04://MUSIC = 5;break;//case 0x08://MUSIC = 4;break;//case 0x10://MUSIC = 3;break;//case 0x20://MUSIC = 2;break;//case 0x40://MUSIC = 1;break;//case 0x80://MUSIC = 0;break;//default:MUSIC = 0xff;break;//}if(MUSIC != 0xff){ STH0=tab[MUSIC]/256; STL0=tab[MUSIC]%256; TR0=1;}}else{ SPEAKER = 1;TR0=0;} } } void t0(void) interrupt 1 using 0{ TH0=STH0; TL0=STL0; SPEAKER=~SPEAKER; }
關於蜂鳴器,告一段落。
本文出自 “生命不息,折騰不止。” 部落格,謝絕轉載!
【創新!】蜂鳴器,與感應電子琴[定時、中斷、I/O高阻工作類型]