【创新!】蜂鸣器,与感应电子琴[定时、中断、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高阻工作类型])