📄 main._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 + -