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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

typedef unsigned char uint8;

typedef unsigned int uint16;

uint8 Count,i;

sbit Speak =P1^2; //蜂鸣器器控制脚

sbit key1 =P3^2;//按键控制引脚

sbit key2 =P3^3;

sbit key3 =P3^4;

/*以下数组是音符编码*/

uint8 code SONG[] ={ 0xff,0x39,0x30,0x33,0x30,0xff,0x30,0x30,0x00,};

void Time0_Init()//定时器T0方式1,定时10ms

{

T MOD = 0x01;

I E = 0x82;

T H0 = 0xDC;

T L0 = 0x00;

}

void Time0_Int() interrupt 1

{

T H0 = 0xDC;

T L0 = 0x00;

C ount++;

}

void delay (uint8 k)//按键防抖延时

{

u int8 j;

while((k--)!=0)

{

for(j=0;j<125;j++)

{;}

}

}

void Delay_xMs(uint8 x)//发声延时

{

uint8 i,j;

for(i=0; i

{

for(j=0; j<3; j++);

}

}

void Play_Song(uint8 i)//蜂鸣器发声函数

{

uint8 Temp1,Temp2;

u int8 Addr;

C ount = 0; //中断计数器清0 A ddr = i *3;

w hile(1)

{

Temp1 = SONG[Addr++];

if (Temp1 == 0xFF) //休止符

{

TR0 = 0;

Delay_xMs(100);

}

else if (Temp1 == 0x00) //歌曲结束符

{

return;

}

else

{

Temp2 = SONG[Addr++];

TR0 = 1;

while(1)

{

Speak = ~Speak;

Delay_xMs(Temp1);

if(Temp2 == Count)

{

Count = 0;

break;

}

}

}

}

}

void keyscan (void)//按键切换声音函数

{

i f(key1==0)

{

delay(10);

if(key1==0)

{

i=0;

}

}

if(key2==0)

{

delay(10);

if(key2==0)

{

i=1;

}

}

if(key3==0)

{

delay(10);

if(key3==0)

{

i=2;

}

}

}

void Main()

{

T ime0_Init();//定时器0中断初始化w hile(1)

{

keyscan ();

Play_Song(i);

}

}

相关文档
最新文档