同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1K的方波

#include
#include
#define uchar unsigned char
#define uint unsigned int 
uchar tt,aa;
uint fre,flag;
sbit beep=P3^6;

void main()
{
	TMOD=0x11; 			//选择定时器  t0的工作方式为1
	EA=1;
	TH0=(65536-fre)/256;
	TL0=(65536-fre)%256;
	TH1=(65536-50000)/256;
	TL1=(65536-50000)%256;
	ET1=1;
	TR1=1;
	ET0=1;
	TR0=1;
//	aa=0xfe;
	while(1)
	{};
	
}			


	void time1() interrupt 3
	{
		TH1=(65536-50000)/256;
		TL1=(65536-50000)%256;
		flag++;
		if(flag==360)
		{
			flag=0;
			fre=50000;
		}
	}	 
		void time0() interrupt 1
	{
		TH0=(65536-fre)/256;
		TL0=(65536-fre)%256;
		tt++;
		if(flag<40)
		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>=1600&&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;
	}	 
到一定火候我一定要自己写出这种比较复杂的程序

你可能感兴趣的:(同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1K的方波)