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

📄 gsw-04-13.c

📁 高压带电显示闭锁装置,用新华龙单片机开发 单片机是C8051F226
💻 C
📖 第 1 页 / 共 2 页
字号:
//2005年4月13日//
//基准电压为3.3V//
//有电报警//
//有自动增益//
//在设置时起动自动增益//
//在高压有电时进入设定阀值设定//
//传感器的放大倍数为50//
//在高压有电下读阀值/0.6/0.7 与现有AD值比较,如AD值在两小时内都小于阀值/0.6/0.7 ,不改阀值。
//在高压有电下读阀值/0.6*1.15与现有AD值比较,如有一相大于等于阀值/0.6*1.1时起动计时,
//如在15分钟内AD值都大于等于阀值/0.6*1.1,更改阀值,另外两相同时更改。
//只要有一次小于阀值/0.6*1.15重新时起动计时。
//在高压有电下读阀值/0.6*0.85与现有AD值比较,如在两小时内都AD值小于等于阀值/0.6*0.85,
//或在15分钟AD值都大于等于阀值/0.6/0.7,更改阀值,另外两相同时更改。
//设定的阀值放在X5043内。

#include<c8051F200.h>
#include<stdio.h>
#define uchar unsigned char
#define uint  unsigned int

//uchar	  *pgen;
sbit AADC   =P1^0;     //A相的AD转换
sbit BADC   =P1^1;     //B相的AD转换
sbit CADC   =P1^2;     //C相的AD转换
sbit A_test =P1^3;     //A相的测试
sbit B_test =P1^4;     //B相的测试
sbit C_test =P1^5;     //C相的测试
sbit relay_test=P1^6;  //继电器测试
sbit wait_sound=P1^7;  //等待语音

sbit ALED   =P2^0;
sbit BLED   =P2^1;
sbit CLED   =P2^2;
sbit DLED   =P2^3;
sbit JKLED  =P2^4;
sbit JK     =P2^5;
sbit JZ_test=P2^6;      //继电器测试打开
sbit SLED   =P2^7;

sbit SW1=P0^2;          //自检.
sbit SW2=P0^3;          //读AD的比较值
sbit so =P0^4;
sbit csx=P0^5;
sbit sck=P0^6;
sbit si =P0^7;

sbit sound_K1 =P3^0;     
/////////////////////////////////////
//返回初始值//////   =0x80,
//装置正常线路有电   =0X81,
//装置正常线路无电   =0X82,
//装自检故障         =0X83,
//设置成功           =0X84,
//设置不成功         =0X85,
//请在高压有下设置   =0x86,
//请注意高压有电     =0x87;
//提示自动整定成功   =0X88,
//提示自动整定不成功 =0x89, 
////////////////////////////////////////                              
sbit sound_K2 =P3^1;     
sbit DZLED    =P3^7;      //地址LED

uchar  xdata   timer300ms;
uchar  xdata   timer40ms;
uint   xdata   timer60s;
uint   xdata   timer1s;
uint   xdata   timer10s;
uchar  xdata   A_value, B_value,C_value;
uchar  xdata   AD_value,BD_value,CD_value;
uchar  xdata   A_PGA,B_PGA,C_PGA;

uchar   xdata data_eep;
uchar   bdata  sound; 
uchar   bdata  order; 
sbit    order7=order^7;
sbit    order6=order^6;
sbit    order5=order^5;
sbit    order4=order^4;
sbit    order3=order^3;
sbit    order2=order^2;
sbit    order1=order^1;
sbit    order0=order^0;

sbit   sound0=sound^0;

unsigned  long   xdata   Atimer1t,Btimer1t,Ctimer1t;

unsigned  long   const  timer1t=90000;//30s

uchar   const  basic_valve=0x3d;   //////基本阀值//////
uchar   const  bot_valve  =0x3e;   //////最小阀值//////
uchar   const  initialize_valve=0x1E;//////初始阀值/////
uchar   xdata  eep[6];
uchar   xdata  temp_eep[6];
uint    xdata  timer5s;
//uint    xdata  timer3s;
uchar   data   zja_value,zjb_value,zjc_value;
uchar   data   value_ad, value_bd ,value_cd;

bit a_led;
bit b_led;
bit c_led;
bit d_led;
bit sw1;
bit sw1_flag1;
bit sw1_flag2;
bit sw1_flag3;
bit sw1_flag4;
bit sw2;
bit s_led;
bit sounds_880;
bit sounds_881;
bit sounds_882;
bit A_flag0;
bit A_flag1;
bit A_flag2;
bit A_flag3;
bit B_flag0;
bit B_flag1;
bit B_flag2;
bit B_flag3;
bit C_flag0;
bit C_flag1;
bit C_flag2;
bit C_flag3;
bit sw12flag;
bit read_write_flag;
bit jz_flag1;
bit jz_test_flag;


void    sysclk_init(void);
void    sound_80(void);
void    delay_10us(void);
void	delay(uint data x);
void    delay_40ms(void);
void    jerque(void);
void    ABC_test(void);
void    ABC_trans(uchar data x);
void    SETUP_AD (uchar data y);
void    SETUP(void);
void    setup_jerque_key(void);
void    automatism_valve(void);
void    valve_read_write(void);
void    PGA(void);


void    ini45(void);            /*x25045状态寄存器写入程序*/
void    outbyte(uchar data x);  /*向x25045写一个字节*/
void    inbyte(void);				/*从x25045读一个字节*/
void    stax(void);				/*启动x25045命令*/ 
void    endx(void); 				/*结束x25045命令*/
void    msec(uchar data x); 
void    write_data(uchar data x,uchar data y);
void    get_data(uchar data x);
void    write_EEPROM(void);
void    get_EEPROM(void);


//主程序
void main (void)
{
    sysclk_init();
    for(;;)
    {
        ini45();
        get_EEPROM();
        ABC_test();
        SETUP();
        automatism_valve();
        jerque();
        setup_jerque_key();
    }
}
//初始化程序//单片机化子程序
void sysclk_init(void)			
{
	uint xdata i;
	WDTCN=0x07;
	OSCXCN=0x67;               //使用外部晶振
	for(i=0;i<256;i++);
	while(!(OSCXCN&0x80))
    {
        WDTCN=0xA5; 
    }
	OSCICN=0x88	;
	EA=0;
	
//	WDTCN=0XDE;              //不使用看门狗定时器
//	WDTCN=0XAD;				//不使用看门狗定时器
	WDTCN=0xA5;             // 使用看门狗定时器	
	    	
	PRT0MX=0x00;
	PRT0CF=0xE0;
	P0MODE=0xFF;
	
	PRT1MX=0x00;
	PRT1CF=0x00;
    P1MODE=0xF8;
    
    PRT2MX=0x00;
	PRT2CF=0x00;
	P2MODE=0xFF;
	
	PRT3CF=0x00;
	P3MODE=0xFF;
	
	REF0CN=0X03;              ///////////基准等于3.3V
//	REF0CN=0x00;              ///////////基准等于2.5V
	TMOD=0x01;
	TCON=0x11;
	CKCON=0x00;
	ADC0CN=0x40;
	TH0=0Xd8;
	TL0=0Xef;
	a_led=0;
	b_led=0;
	c_led=0;
	d_led=0;
	s_led=0;
	jz_flag1=1;
	timer5s=0;
	timer60s=0;
	ABC_trans(0x00);
    ABC_trans(0x01);
    ABC_trans(0x02);
	get_EEPROM();
	
	if ((eep[0]==0x00)||(eep[1]==0x00)||(eep[2]==0x00)||
	    (eep[0]==0xff)||(eep[1]==0xff)||(eep[2]==0xff)||
	    (eep[3]<=0x7f)||(eep[4]<=0x7f)||(eep[5]<=0x7f)||
	    (eep[3]>=0x88)||(eep[4]>=0x88)||(eep[5]>=0x88))
	{
	   ADC0CF=0x82;			//SAR=1M PGAIN=1;
	   eep[0]=initialize_valve;
	   eep[1]=initialize_valve;
	   eep[2]=initialize_valve;
       eep[3]=0x82;          //A_PGA
	   eep[4]=0x82;          //B_PGA
	   eep[5]=0x82;          //C_PGA
  	   write_EEPROM();         //not run???????????????????????
	}
 IE=0x82;
 IP=0xc2;
}
//内部定时器程序
void timer0(void) interrupt 1
{
    IP=0XC2;
    TH0=0xd8;
    TL0=0xef;//////10mstimer////
    if(timer300ms<=0x0a)
    {
        timer300ms++;
    }
   else
   {
    timer300ms=0;
    if((a_led==1)||(b_led==1)||(c_led==1)||(d_led==1)||(s_led==1))
        {
            if(s_led==1)
            {
                SLED=~SLED;
            }
            if(d_led==1)
            {
                DLED=~DLED;
            }
            if(a_led==1)
            {
                ALED=~ALED;
            }
   
            if(b_led==1)
            {
                BLED=~BLED;
            }
   
            if(c_led==1)
            {
                CLED=~CLED;
            }
 
        }
   }
 /////////////////////////////////
  SW1=1;
  if(SW1==0)
   {
     sw2=0;
     if(timer40ms>=10)
     {
         timer40ms=0;
         sw1=1; 
      }
    else
      {
          timer40ms++;
      }
    }
else
{
    timer40ms=0;
}

if(sw1_flag1==1)
{
    if(timer5s>=100)
    {
        sw1_flag2=1;
        if(timer5s>=400)
        {
             timer5s=0;
             sw1_flag3=1;
        }
       else
       {
        timer5s++;
       }
    }
    else
    {
        timer5s++;
    }
}
else
{ 
   //sw1_flag1=0;
  // sw1_flag2=0;
   //sw1_flag3=0;
   timer5s=0;
}
////////////////////////////////////
  SW2=1;
  if(SW2==0)
  { 
    sw1=0;
    if(timer60s>=300)
    {
      timer60s=0;
      sw2=1;
    }
    else
    {
        timer60s++;
        s_led=1;
    }
  }
else
{
    timer60s=0;
    s_led=0;
    sw2=0;
    SLED=1;
}
if(sounds_880==1)
{
    if(timer1s<=100)
    {
        timer1s++;
    }
    else
    {
        sounds_881=1;
    }
}
else
{
    timer1s=0;
}


//a_timer1t
     if(A_flag0==1)
     {
        if(Atimer1t>=timer1t)
        {
           Atimer1t=0;
            A_flag1=1;
        }
       else
       {
        Atimer1t++;
       }
     }
    else
    {
        Atimer1t=0;
        A_flag0=0;
        A_flag1=0;
    }
/////b_timer1t
   if(B_flag0==1)
     {
        if(Btimer1t>=timer1t)
        {
           Btimer1t=0;
           B_flag1=1;
        }
       else
       {
        Btimer1t++;
       }
     }
  else
  {
    Btimer1t=0;
    B_flag0=0;
    B_flag1=0;
  }
 //////c_timer1t
     if(C_flag0==1)
     {
        if(Ctimer1t>=timer1t)
        {
           Ctimer1t=0;
            C_flag1=1;
        }
       else
       {
        Ctimer1t++;
       }
     }
  else
  {
    Ctimer1t=0;
    C_flag0=0;
    C_flag1=0;
  }
///////sw1+sw2////////////////////
   SW1=1;
   SW2=1;
   if((SW1==0)&&(SW2==0))
   {
    sw1=0;
    sw2=0; 
    if(timer10s>=100)
    {
        timer10s=0;
        sw12flag=1;
    }
   else
    {
        timer10s++;
    }
  }
 else
 {
    timer10s=0;
    sw12flag=0;
 }
}

//10uS延时
void delay_10us(void)
{
	uchar xdata i;
	for(i=0;i<250;i++)
	{
	   WDTCN=0xA5; 
	}
}

void	delay(uint data x)
{
	uint xdata i;
	for(i=0;i<x;i++)
	{
		int j;
		j=i;      //used as NOP
		WDTCN=0xA5; 
		j=j+1;  //used as NOP
	}
}

//40mS延时子程序//
void delay_40ms(void)
{
    uchar xdata k;
    for(k=0;k<10;k++)
    { 
       WDTCN=0xA5; 
       delay(250);
    }
}

//语音程序//
void sound_80(void)      
{
     uchar xdata i;
     wait_sound=1;
    if(wait_sound==0)
    {
       WDTCN=0xA5; 
       sound_K1=1;
       sound_K2=1;
       delay_40ms();
       sound_K1=0;
       sound_K2=1;
       delay_40ms();
       sound_K1=1;
       delay_40ms();
    for(i=0;i<8;i++)
     {
        sound_K2=0;
        delay_10us();
        sound_K1=sound0;
        sound=sound>>1;
        sound_K2=1;
        delay_10us();
      }
  }
}
 //主程序//
void ABC_test(void)      
{
   if(jz_flag1==1)
   {
    ABC_trans(0x00);
    ABC_trans(0x01);
    ABC_trans(0x02); 
    get_EEPROM();  
    A_test=1;  B_test=1; C_test=1;
    if((A_test==0)||(B_test==0)||(C_test==0)||
       (A_value>=eep[0])||(B_value>=eep[1])||(C_value>=eep[2]))
    {
       JK=1;
       JKLED=1;
       d_led=1;
       if(A_test==0)
       {
        a_led=1;
        }
       else
       {
        a_led=0;
        if(A_value>=eep[0])
         {
            ALED=0;
         }
        else
          {
            ALED=1;
          }
         }    
        
       if(B_test==0)
       {
         b_led=1;
       }
       else
       {
        b_led=0;
        if(B_value>=eep[1])
        {
            BLED=0;
        }
        else
        {
            BLED=1;
        }
       }
       if(C_test==0)
       { 
            c_led=1;
       }
       else
       {
        c_led=0;
        if(C_value>=eep[2])
        {
            CLED=0;
        }
        else
        {
            CLED=1;
        }
       }
    }
  else
   {
     JKLED=0;JK=0;
     ALED=1;a_led=0;
     BLED=1;b_led=0;
     CLED=1;c_led=0;
     DLED=0;d_led=0;
   }
  if((A_value>=eep[0])||(B_value>=eep[1])||(C_value>=eep[2]))
      {
          sounds_880=1;
          if(sounds_881==1)
          {
            sounds_880=0;
            sounds_881=0;
             if((A_value>=eep[0])||(B_value>=eep[1])||(C_value>=eep[2]))
             {
                 if(sounds_882==1)
                 {
                   sounds_882=0;
                   sound=0x87;
                   sound_80();
                  }
             }
          }
      }
    else
    {
        sounds_882=1;
        sounds_880=0;
        sounds_881=0;
    }
  }
}
//自检程序//
void jerque(void)
  {
     jz_flag1=0;
     SW1=1;
     SW2=1;
    if((sw1==1)&&(SW1==1)&&(SW2==1))
    {
        sw1_flag4=1;
        sw1=0;
    }
    if(sw1_flag4==1)
    {
        if(JKLED==1)
        {
            JK=1;
            JKLED=1;
        }
       else
       {
        JKLED=0;
        JK=0;
       }
        A_test=1;B_test=1;C_test=1;
        
        if((A_test==0)||(B_test==0)||(C_test==0))
        {
            sw1=0;
            sound=0x83;
            sound_80();
            jz_flag1=1;
            sw1_flag1=0;
            sw1_flag2=0;
            sw1_flag3=0;
            sw1_flag4=0;
        }
    else
    {
        if(jz_test_flag==1)
        {
            JZ_test=0; 
        }
        sw1_flag1=1;
        a_led=1;
        b_led=1;
        c_led=1;
        d_led=1;
        get_EEPROM();
        if(sw1_flag2==1)
        {
            if(jz_test_flag==1)
            {
                SETUP_AD(0x00);
                SETUP_AD(0x01);
                SETUP_AD(0x02); 
            }
            value_ad=AD_value;
            value_bd=BD_value;
            value_cd=CD_value;
            JZ_test=1;
            jz_test_flag=0;
            if((value_ad<=0x0a)||(value_bd<=0x0a)||(value_cd<=0x0a))
            {
               sw1=0;
               sw1_flag1=0;
               sw1_flag2=0;
               sw1_flag3=0;
               sw1_flag4=0;
               jz_flag1=1;
               sound=0x83;
               sound_80(); 
            }
          else
          {
            if(sw1_flag3==1)
            {
               if(jz_test_flag==0)
               {
                 ABC_trans(0x00);
                 ABC_trans(0x01);
                 ABC_trans(0x02);
                 zja_value=A_value;
                 zjb_value=B_value;
                 zjc_value=C_value;
               }
               jz_flag1=1;
               sw1_flag1=0;
               sw1_flag2=0;
               sw1_flag3=0;
               sw1_flag4=0;
               sw1=0;
            if((zja_value>=eep[0])||(zjb_value>=eep[1])||(zjc_value>=eep[2]))
            {
              sound=0x81;
              sound_80();
            }
        else
        {
            sound=0x82;
            sound_80();
        }    
       }
      }      
     }
    }  
   }
  else
  {
    sw1_flag1=0;
    sw1_flag2=0;
    sw1_flag3=0;
    sw1_flag4=0;
    jz_flag1=1;
    JZ_test=1;

⌨️ 快捷键说明

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