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高阻工作类型]
原文:http://990487026.blog.51cto.com/10133282/1699909