当前位置:文档之家› 单片机按键控制蜂鸣器发声程序

单片机按键控制蜂鸣器发声程序

#in clude<reg52.h>typedef un sig ned char uin t8;
typedef un sig ned int uin t16;
uint8 Cou nt,i;
sbit Speak =P1A2; // 蜂鸣器器控制脚
sbit key1 =P3A2;〃按键控制引脚
sbit key2 =P3A3;
sbit key3 =P3A4;
/*以下数组是音符编码*/
uin t8 code SONG[] ={ 0xff,0x39,0x30,0x33,0x30,0xff,0x30,0x30,0x00,}; void TimeO」nit()〃定时器TO方式1,定时10ms
{
TMOD = 0x01;
IE =Ox82;
THO =OxDC;
TLO =OxOO;
}
void TimeO」n t() in terrupt 1
THO = OxDC;
TLO = OxOO;
Coun t++;
} void delay (ui nt8 k)〃按键防抖延时{
ui nt8 j;
while((k--)!=0)
{
for(j=0;j<125;j++)
{;}
}
}
void Delay_xMs(ui nt8 x)// 发声延时{
ui nt8 i,j;
for(i=0; i<x; i++)
{
for(j=0; j<3; j++);
}
void Play_So ng(ui nt8 i)〃蜂鸣器发声函数
{ uint8 Temp1,Temp2;
uint8 Addr;
Cou nt = 0; 〃中断计数器清0 Addr = i *3;
while(1)
{
Temp1 = SONG[Addr++];
if (Temp1 == 0xFF) //休止符
{
TR0 = 0;
Delay_xMs(100);
}
else if (Temp1 == 0x00) 〃歌曲结束符
{
return;
} else
Temp2 = SONG[Addr++];
TRO = 1;
while(1)
{
Speak = ~Speak;
Delay_xMs(Temp1);
if(Temp2 == Cou nt)
{
Cou nt = 0;
break;
}
}
}
}
}
void keyscan (void)// 按键切换声音函数{
if(key1==O)
{
delay(10);
if(ke y仁=0)
i=0;
}
} if(key2==0)
{
delay(10); if(key2==0) {
i=1;
}
}
if(key3==0)
{
delay(10); if(key3==0) {
i=2;
}
}
}
void Mai n()
TimeO」nit();〃定时器0中断初始化
while(1)
{
keysca n ();
Play_S on g(i);
}
}
Welcome To
Download !! !
欢迎您的下载,资料仅供参考!。

相关主题