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; }
关于蜂鸣器,告一段落。
本文出自 “魂斗罗” 博客,谢绝转载!