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

📄 main._c

📁 LED显示面板
💻 _C
字号:
#include <main.h>

unsigned char send_count,ID_nu,ID_net,Time,T1,channel,RUN,T2,alarm_count,normal_count;
unsigned char sysrst,Pass_Flag,soundoff[48];
extern unsigned long CANMOBID[15];
extern unsigned long CANMOBMD[15];
extern SHD_LED  pannel_led[48];
extern unsigned char key[8];
extern unsigned char out_state;
VCI_CAN_OBJ msg[3],rece_data[20];
long id1,id2,id3,id4,id5,id6;
unsigned char mode_flag ;
unsigned char key_temp1,key_temp2,key_temp3,ted;
unsigned char soundoff_flag,ack_flag,alarm_flag;

#pragma interrupt_handler timer0_ovf_isr:18
void timer0_ovf_isr(void)                              //定时1毫秒
{
 TCNT0 = 0x83; //reload counter value
 Time++;
 RUN++;
 T2++;
 if(T2==12)
  {
  RUN_led();
  T2=0;
  }
 if(RUN==2)
 {
  key_temp1 =get_key();
  }
 if(RUN==4)
 {
 if(key_temp2!=key_temp1)
 {
  key_temp2 =get_key();
  if((key_temp1==key_temp2)&&(key_temp1!=0xff))
  {
  //WDR();
   ted= ~(key_temp1);
   if(ted&0x80)
   key[7]=0x5a;
   else 
    key[7]=0xa5;
   if(ted&0x40)
   key[6]=0x5a;
   else 
    key[6]=0xa5;
   if(ted&0x20)
   key[5]=0x5a;
   else 
    key[5]=0xa5;
   if(ted&0x10)
   key[4]=0x5a;
   else 
    key[4]=0xa5;
   if(ted&0x08)
   key[3]=0x5a;
   else 
    key[3]=0xa5;
   if(ted&0x04)
   key[2]=0x5a;
   else 
    key[2]=0xa5;
   if(ted&0x02)
   key[1]=0x5a;
   else 
    key[1]=0xa5;
   if(ted&0x01)
   key[0]=0x5a;
   else 
    key[0]=0xa5;
	//WDR();
    }
   }
  RUN=0;
  }
 if(Time>100)
 {
 Time = 0;
 if(T1)
 T1=0;
 else
 T1=0x5a;
 if(mode_flag==0xa5)
 {
 if(channel<47)
 channel++;
 else
 channel=0;
 }
 }

}
void main(void)
{  
  unsigned char i,dd,tt,td,tp,tk;
  long tempp;
  CLI();
  init_devices();
 // watchdog_init();
  WDR();
  WDR();
  mode_flag =0xa5 ;
  alarm_count=0;
  normal_count=0;
  out_state=0;;
  alarm_flag = 0;
  for(i=0;i<48;i++)
  {
  soundoff[i]=0;
  }
  ID_nu = get_id();                                           //读取拨码开关的值
  ID_net = ID_nu;                                             //计算网络ID号
  Pass_Flag = 0x01;
  tempp = ID_net;
  Pass_Flag <<= 1;
  id4 = BASE_ADDR+tempp;
  id5 = BASE_ADDR+tempp+0x01000000;
  id6 = BASE_ADDR+tempp+0x02000000;                           //发送ID地址
  id1 = 0x02280000;
  Pass_Flag <<= 1;
  id2 = 0x02280001;
  id3 = 0x02280002;                                            //接收ID地址
  Pass_Flag <<= 1;
  WDR();
  CANMOBID[0] = id1;
  CANMOBID[1] = id2;
  CANMOBID[2] = id3;
  CANMOBID[3] = id4;
  CANMOBID[4] = id5;
  CANMOBID[5] = id6;
  if(Pass_Flag!=0x08)
  RESET;
  WDR();
  can_init ();  
  WDR();
  XMCRA = 0x80;
  XMCRB = 0x04;
  
  
  
  SEI();
  while(1)
  {
   WDR();
  rece_led_off;
  send_led_off;
  ID_nu = get_id();                                           //读取拨码开关的值
                                        
  if(ID_net!=ID_nu)
  {
  ID_net = ID_nu;     
  Pass_Flag = 0x01;
  tempp = ID_net;
  Pass_Flag <<= 1;
  id4 = BASE_ADDR+tempp;
  id5 = BASE_ADDR+tempp+0x01000000;
  id6 = BASE_ADDR+tempp+0x02000000;                           //发送ID地址
  id1 = 0x2280000;
  Pass_Flag <<= 1;
  id2 = 0x2280001;
  id3 = 0x2280002;                                            //接收ID地址
  Pass_Flag <<= 1;
  CANMOBID[0] = id1;
  CANMOBID[1] = id2;
  CANMOBID[2] = id3;
  CANMOBID[3] = id4;
  CANMOBID[4] = id5;
  CANMOBID[5] = id6;
  if(Pass_Flag!=0x08)
  RESET;
  can_init ();  
  }
  WDR();
  
  channel_process();
  WDR();
  led_display();
  WDR();
  turn_display(channel,1,pannel_led[channel].data);
  WDR();

  for(i=0;i<48;i++)
  {
  if(pannel_led[i].state==0x5a)
  {
  if(pannel_led[i].ack==0)
  {
  alarm_count++;
  }
  if(soundoff[i]!=0xa5)
  soundoff[i]=0x5a;          //置声音报警标记
  }
  
  if(pannel_led[i].state==0)
  {
  normal_count++;
  soundoff[i]=0;
  }
  
  if(pannel_led[i].state==0xa5)
  soundoff[i]=0;
  }
  WDR();
  
  if(alarm_count)                         //有未应答报警存在
  {
  for(i=0;i<48;i++)
  {
  if(soundoff[i]==0x5a)
  buzzer_on();                            //喇叭输出
  }
  relay1_on();                            //延生输出
  alarm_count=0;                          //未应答报警记数清除
  }
  else if(normal_count==48)               //当前无任何报警
  {
   buzzer_off();                          //清除喇叭输出
   relay1_off();                          //清除延生输出
  }
  normal_count=0;                         //正常记数清除
  key_process();
  WDR();
  
  if(soundoff_flag==0x5a)
  {
   buzzer_off();
   WDR();
   for(i=0;i<48;i++)
  {
   if(pannel_led[i].state==0x5a)
      soundoff[i]=0xa5;             //置消声标记
    }		
	soundoff_flag =0;			
    WDR();
     }
  if(alarm_flag==0x5a) 
  {
   WDR();
  alarm_flag=0;
  buzzer_on();                            //喇叭输出
  relay1_on();                            //延生输出
   WDR();
  }
  if(ack_flag==0x5a)
  {
    ack_flag=0;
    WDR();	   
  for(i=0;i<48;i++)
 {
  if((pannel_led[i].state==0x5a)&&( pannel_led[i].ack==0))
    pannel_led[i].ack=0x5a;              //置消闪标记
        }
     }
  }
// RUN_led();
}

⌨️ 快捷键说明

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