3、同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。 #include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,j;
sbit beep=P3^6;
uint code PL[]={500,625,1250,2500,5000,10000};//1,10,50,100,200,400,800,1k(hz)方波
//我取他们定时的一半来对他们取反,但800HZ 和1khz太大我无法取半一次性放上去
void main()
{ EA=1;
ET0=1;
ET1=1;
TR0=1;
TH0=(65536-30000)/256;
TL0=(65536-30000)%256; //定时器0赋初值
while(1)
{
if(num==10) //300MS到了后开始输出
{
num=0; //300ms重新计数
TH1=(65536-PL[j]);
TL1=(65536-PL[j]);
j++; //读取数组值得变量
if(j==6)
{
j=0; // j清零
}
}
}
}
void T0_time()interrupt 1
{
num++; //计10次的300ms
TH0=(65536-30000)/256;
TL0=(65536-30000)%256;
}
void T1_time() interrupt 1
{ TH1=(65536-PL[j]);
TL1=(65536-PL[j]); //重装初值
beep=~beep; //取反
}
希望能告诉我哪里错了,那部分理解的不对。谢谢大神了
|