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

📄 cjd-1.c

📁 CO2灭火系统
💻 C
字号:
/*******************************************************************************************************
海警舰灭火控制箱声音程序
------------------------------------------------------------------------------------------------------*/                 
#include <reg51.h>
#include<stdio.h>

#define Uchar unsigned char
#define Uint  unsigned int

sfr WDTD = 0x85;
sfr WDTC = 0xC0;


/*  管脚定义 */
sbit SND=P2^3;   	              		                        	                                                          
sbit pw=P2^4;   //电源控制

//信号输入
sbit s_sd =P0^5;  	//试灯
sbit s_xy =P0^4;		//消音
sbit s_zd =P0^7; 		//主电
sbit s_xl =P0^6; 		//泄漏

//指示灯输出
sbit l_zd =P3^3; 		//主电失电指示灯
sbit l_xl =P3^4; 		//泄漏指示灯
bit  zd_diss;
bit  xl_diss;
bit  xl;
bit  zd;



bit  flash;


//单路发出
sbit s4=P0^1;     	//连续急调音  	优先级1 
sbit s2=P0^0;  		//单音断鸣 		优先级2
sbit s3=P0^3;     	//连续调频 		优先级3		
sbit s1=P0^2;    	//快速双音调 	优先级4

bit  diss;

unsigned int data t;
unsigned char state;  

void warn1(void);/* 连续急调音*/
void warn2(void);/* 单音断鸣调*/
void warn3(void);/* 连续调频音*/
void warn4(void);/* 快速双音调*/

void delay1(unsigned int);

void watchdog()			//喂狗子程序 
{
WDTD=0x80;					//看门狗装入重装载值//
WDTC = WDTC|0x02;			//执行装载指令
}

void main(void)
{    
     SP=0x60;
     TMOD=0x11;
     ET0=1; EA=1;ET1=1;
     TR0=0;TR1=1;
	  WDTD=0x80;				//装入重装载值
	  WDTC=0x09;  		   	//启动看门狗定时器,使能看门狗定时器复位

while(1)
     { 	watchdog(); 

	   
	    switch(state)
       {
         case 0:         
            	if(!s4){state=4;TH0=0xfd;TL0=0x8f;TR0=1;}   			/* 快速双音调*/  
					if(!s3){state=3;TH0=0xfb;TL0=0x1e;t=0xfb1e;TR0=1;} /* 连续调频音*/    
 					if(!s2){state=2;TH0=0xfd;TL0=0x8f;t=0xfd8f;TR0=1;} /* 单音断鸣调 */ 
            	if((!s1&!diss)|(zd&!zd_diss)|(xl&!xl_diss)){state=1;TH0=0xfd;TL0=0x8f;t=0xfd8f;TR0=1;} /* 连续急调音*/ 
 				   
       	if(state!=0)
			pw=0;
		else
			pw=1; 
                         
		        	break;	        
         case 1:
	           	warn1();
              	if((s1|diss)&(!zd|zd_diss)&(!xl|xl_diss))			{state=0;TR0=0;}
              	break;   
	      case 2:
              	warn2();
              	if((s2)|(!s1)){state=0;TR0=0;}
              	break;
         case 3:
	           	warn3();
              	if((s3)|(!s2)|(!s1)){state=0;TR0=0;}
              	break;
         case 4:
              	warn4();  
              	if((s4)|(!s3)|(!s2)|(!s1)) {state=0;TR0=0;}
	           	break;
			default:
			     	TR0 = 0;
			     	break;
      }
    }
}




void warn1(void)            /* 连续急调音*/
{
    unsigned char data k;
    unsigned int data f;           
    f=800;
    for(k=0;k<50;k++)
    {   
	 	delay1(250);
	 	f+=4;
    	t=-(1000000/(4*f));
    }
    for(k=0;k<50;k++)
    {
   	delay1(250);
		f-=4;
    	t=-(1000000/(4*f));
    }                  
}





void warn2(void)                                       /* 单音断鸣调 火警*/
{   	unsigned char data k;
    	unsigned int data f;          
      f=200; 
      for(k=0;k<50&s1&(!s2);k++)
      {  
			TR0=1;
			delay1(350);     
      	t=-(1000000/(4*f));
      }
      for(k=0;k<50&s1&(!s2);k++)
      { 
      	delay1(350);    
     	 	TR0=0;
      }		
}



void warn3(void)				    /* 连续调频音 CO2报警*/
{    	unsigned char data k;
     	unsigned int data f;          
		f=200; 
    	for(k=0;k<100&s1&s2&(!s3);k++)
      	{ 
			delay1(350);    
       	f+=4;
      	t=-(1000000/(4*f));
         }				  
      for(k=0;k<100&&s1&s2&(!s3);k++)
         {    
			delay1(1050);
         f-=4;
         t=-(1000000/(4*f));
         }
}





void warn4(void)					/* 快速双音调 GAS*/
{   unsigned char data k;
    unsigned int 	data f;           
    f=800;
    for(k=0;k<50&s1&s2&s3&(!s4);k++)
		{   
		delay1(220);
    	t=-(1000000/(4*f));
    	}
      f=1000;
	 for(k=0;k<50&s1&s2&s3&(!s4);k++)
      {
      delay1(220);
      t=-(1000000/(4*f));
      }
}

void intt0(void) interrupt 1
	{    
	SND=~SND;
   TH0=t/256;
   TL0=t%256;
   }
 
void intt1(void) interrupt 3
{  static unsigned char m1,m2,m3,m4;
   m1++;
	if(m1==7)
	{flash=~flash;m1=0;}
	watchdog(); 
	
    if(s_zd)		//主电失电
		{
		m2++;
		if(m2>5)
			{zd=1;m2=6;}
	 	}
	 else
	 	{m2=0;zd_diss=0;zd=0;}

	l_zd=!zd|flash&!zd_diss;	

    if(!s_xl)		//泄漏故障
		{
			m3++;
			if(m3>5)
				{m3=6;xl=1;}
		}
	else
		{m3=0;}


l_xl=!xl|(!xl_diss&flash);		//泄漏指示灯

	if(!s_xy)				//消音
		{
			zd_diss=zd;
			xl_diss=xl;
			diss=!s1;
		
   		m4++;
		if((m4>6)&xl)		//泄漏复位
			{xl=0;m4=0;}				
		}
		else
			m4=0;


   if(s1)	diss=0;		//单路CPU故障消音


if(!s_sd)
{l_xl=0;
l_zd=0;}




}

void delay1(unsigned int time1)
{    unsigned int data i;
     for (i=0;i<time1;i++);
}

⌨️ 快捷键说明

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