#include//52单片机头文件#include//包含有左右循环移位子函数的库#defineuintunsignedint//宏定义#defineucharunsignedchar//宏定义sbitbeep=P2^3;uchartt;uint...

#include //52单片机头文件

#include //包含有左右循环移位子函数的库

#define uint unsigned int //宏定义

#define uchar unsigned char //宏定义

sbit beep=P2^3;

uchar tt;

uint fre,flag;

void main() //主函数

{

fre=50000;

beep=0;

TMOD=0x11;//设置定时器0,定时器1为工作方式1

TH0=(65536-fre)/256;

TL0=(65536-fre)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;//开总中断

ET0=1;//开定时器0中断

ET1=1;

TR1=1;

TR0=1;//启动定时器0

while(1);//等待中断产生

}

void timer0() interrupt 1 //定时器0中断

{

TR0=0; //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失

TH0=(65536-fre)/256;

TL0=(65536-fre)%256;

tt++;

if(flag<40) //以下几个if分别用来选取不同的频率

if(tt==10)

{

tt=0;

fre=50000;

beep=~beep;

}

if(flag>=40&&flag<80)

{

tt=0;

fre=50000;

beep=~beep;

}

if(flag>=80&&flag<120)

{

tt=0;

fre=10000;

beep=~beep;

}

if(flag>=120&&flag<160)

{

tt=0;

fre=5000;

beep=~beep;

}

if(flag>=160&&flag<200)

{

tt=0;

fre=2500;

beep=~beep;

}

if(flag>=200&&flag<240)

{

tt=0;

fre=1250;

beep=~beep;

}

if(flag>=240&&flag<280)

{

tt=0;

fre=625;

beep=~beep;

}

if(flag>=280&&flag<320)

{

tt=0;

fre=312;

beep=~beep;

}

if(flag>=320&&flag<360)

{

tt=0;

fre=156;

beep=~beep;

}

TR0=1;

}

void timer1() interrupt 3 //定时器1中断用来产生2秒时间定时

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

flag++;

if(flag==360)

{

flag=0;

fre=50000;

}

}

程序如上所述,望能解释一下!!

展开

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐