⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 119.c

📁 用AT89S52单片机模拟警报声
💻 C
字号:
/*
扫频声音程序(晶振11.0592Mhz)
frq=255;delay(10)时为消防车警报声
frq=255;delay(1)时为警车警报声
frq=110;频率增加时delay(5);减小时delay(2);为婴儿啼哭声!

*/
#include<reg52.h>
#include<intrins.h>

sbit SPK=P3^7;
sbit K1=P1^4;	
unsigned char frq;

void delay(unsigned char ms)
{unsigned char i;
 while(ms--)
     {for(i=0;i<60;i++);
	 }
}

void delay1(unsigned char ms)
{unsigned char i;
 while(ms--)
     {for(i=0;i<15;i++);
	 }
}

main()
{unsigned char t1,t2,fh,fl,m,k=0;
 m=0;
 TMOD=0x01;
 frq=0x00;
 TH0=0x00;
 TL0=0xFF;
 TR0=1;
 IE=0x82;

 while(1)
  {frq=0;
   if(K1==0)
	  {delay(200);
	   if(K1==0)
	      m++;
	   }
   if(m>6) m=0;
   switch(m)
     {case 0:  fh=255;t1=20;t2=20;break;
      case 1:  fh=255;t1=1;t2=1; break;
      case 2:  fh=110;t1=8;t2=3;break;
   	  case 3:  fh=255;t1=1;t2=0;break;
	  case 4:  fh=255;t1=0;t2=1;break; 
	  case 5:  fh=120;fl=0;t1=t2=8;break;
      case 6:  fh=255;t1=1;break;  
     }										 
   while(m<5)
     {if(frq==fh)
      k=1;
      if(frq==0)
       {k=0;
	   }	  
      if(k==0)	  
	    {frq++;
         delay(t1);
	     }
      if(k==1)
	    {frq--;
	     delay(t2);
	     }
	  if(K1==0)
	     break;
      }
   while(m==5)
	  {if(k<128)
     	   frq=fh;
	   else
	       frq=fl;
	   delay(t1);
	   k++; 
	   if(K1==0)
	      break;
	  }
   while(m==6)
	  {k=6;
	   while(k>0)
	    {frq--;
	     delay1(2);
		 if(frq==0)
		    k--;
		 }
		 TR0=0;
		 delay(255);
		 delay(255);
		 TR0=1;
	   	 if(K1==0)
	        break;
	  }
  }
}

void timer0() interrupt 1 
{TH0=0xFE;
 TL0=frq;
 SPK=~SPK;


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -