📄 appli.c.bak
字号:
default:
break;
}
break;
case MSG_GET_LIMIT: /* 请求当前报警阈值 */
send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
send_buf[1] = ADDRESS[1]; /* 开发板地址 */
send_buf[2] = 0x05; /* 数据长度低字节 */
send_buf[3] = 0x00; /* 数据长度高字节 */
send_buf[4] = 0x32; /* 消息类型:报警阈值 */
send_buf[5] = alarm_limit.temp_uthreshold; /* 超低温度 */
send_buf[6] = alarm_limit.temp_othreshold; /* 超高温度 */
send_buf[7] = alarm_limit.lumin_uthreshold; /* 超低光强 */
send_buf[8] = alarm_limit.lumin_othreshold; /* 超高光强 */
send_buf[9] = 0x03;
crc_data = CalCRC16_1021(send_buf, 10);
send_buf[10] = ( crc_data & 0x00ff ); /* 校验位低字节 */
send_buf[11] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
com_send_command(SYN); /* 发送数据 */
com_send_command(SYN);
com_send_command(STX);
for (i=0; i<12; i++)
{
com_send_command(send_buf[i]);
}
break;
case MSG_READ_DATE: /* 读取日期消息处理 */
send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
send_buf[1] = ADDRESS[1]; /* 开发板地址 */
send_buf[2] = 0x08; /* 数据长度低字节 */
send_buf[3] = 0x00; /* 数据长度高字节 */
send_buf[4] = 0x34; /* 消息类型:时间数据 */
for (i=0; i<7; i++)
{
send_buf[i+5] = date[i]; /* 时间数据7位:年,月,日,星期,时,分,秒*/
}
send_buf[12] = 0x03;
crc_data = CalCRC16_1021(send_buf, 13);
send_buf[13] = ( crc_data & 0x00ff ); /* 校验位低字节 */
send_buf[14] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
com_send_command(SYN); /* 发送数据 */
com_send_command(SYN);
com_send_command(STX);
for (i=0; i<15; i++)
{
com_send_command(send_buf[i]);
}
break;
case MSG_CUR_DATA : /* 请求当前数据 */
analog_in_data = adc_1549();
send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
send_buf[1] = ADDRESS[1]; /* 开发板地址 */
send_buf[2] = 0x06; /* 数据长度低字节 */
send_buf[3] = 0x00; /* 数据长度高字节 */
send_buf[4] = 0x35; /* 消息类型:当前数据 */
send_buf[5] = cur_lumin; /* 当前光强 */
send_buf[6] = cur_temp; /* 当前温度 */
send_buf[7] = (analog_in_data & 0x00ff); /* 模拟量输入低字节 */
send_buf[8] = ( (analog_in_data >> 8) & 0x00ff ); /* 模拟量输入高字节 */
if (SWITCH_IN)
send_buf[9] = 0x00; /* 当前开关量为1,断开 */
else
send_buf[9] = 0x01; /* 当前开关量为0,闭合 */
send_buf[10] = 0x03;
crc_data = CalCRC16_1021(send_buf, 11);
send_buf[11] = ( crc_data & 0x00ff ); /* 校验位低字节 */
send_buf[12] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
com_send_command(SYN); /* 发送数据 */
com_send_command(SYN);
com_send_command(STX);
for (i=0; i<13; i++)
{
com_send_command(send_buf[i]);
}
break;
case MSG_WATCHDOG : /* 请求看门狗信息 */
send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
send_buf[1] = ADDRESS[1]; /* 开发板地址 */
send_buf[2] = 0x08; /* 数据长度低字节 */
send_buf[3] = 0x00; /* 数据长度高字节 */
send_buf[4] = 0x36; /* 消息类型:看门狗信息 */
for (i=0; i<7; i++)
{
send_buf[i+5] = watchdog_date[i]; /* 看门狗数据7位:年,月,日,星期,时,分,秒*/
}
send_buf[12] = 0x03;
crc_data = CalCRC16_1021(send_buf, 13);
send_buf[13] = ( crc_data & 0x00ff ); /* 校验位低字节 */
send_buf[14] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
com_send_command(SYN); /* 发送数据 */
com_send_command(SYN);
com_send_command(STX);
for (i=0; i<15; i++)
{
com_send_command(send_buf[i]);
}
break;
case MSG_ALARM_STATE : /* 请求报警情况 */
send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
send_buf[1] = ADDRESS[1]; /* 开发板地址 */
send_buf[2] = 0x02; /* 数据长度低字节 */
send_buf[3] = 0x00; /* 数据长度高字节 */
send_buf[4] = 0x37; /* 消息类型:报警状态 */
send_buf[5] = 0x00;
if (SWITCH_IN)
{
send_buf[5] |= 0x01; /* 开关量输入为1 */
}
else
{
send_buf[5] &= 0xfe; /* 开关量输入为0 */
}
if (cur_temp <= alarm_limit.lumin_uthreshold) /* 当前光强小于超低光强阈值 */
{
send_buf[5] |= 0x02;
}
else if (cur_temp >= alarm_limit.lumin_othreshold) /* 当前光强大于超高光强阈值 */
{
send_buf[5] |= 0x04;
}
else
{
send_buf[5] &= 0xf9; /* 光强无报警 */
}
if (cur_temp <= alarm_limit.temp_uthreshold) /* 当前温度小于超低温度阈值 */
{
send_buf[5] |= 0x08;
}
else if (cur_temp >= alarm_limit.temp_othreshold) /* 当前温度大于超高温度阈值 */
{
send_buf[5] |= 0x10;
}
else
{
send_buf[5] &= 0xe7; /* 温度无报警 */
}
send_buf[6] = 0x03;
crc_data = CalCRC16_1021(send_buf, 7);
send_buf[7] = ( crc_data & 0x00ff ); /* 校验位低字节 */
send_buf[8] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
com_send_command(SYN); /* 发送数据 */
com_send_command(SYN);
com_send_command(STX);
for (i=0; i<9; i++)
{
com_send_command(send_buf[i]);
}
break;
case MSG_GET_ADDRESS : /* 请求设备地址 */
send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
send_buf[1] = ADDRESS[1]; /* 开发板地址 */
send_buf[2] = 0x03; /* 数据长度低字节 */
send_buf[3] = 0x00; /* 数据长度高字节 */
send_buf[4] = 0x39; /* 消息类型:设备地址 */
send_buf[5] = ADDRESS[0]; /* 通讯组地址 */
send_buf[6] = ADDRESS[1]; /* 开发板地址 */
send_buf[7] = 0x03;
crc_data = CalCRC16_1021(send_buf, 8);
send_buf[8] = ( crc_data & 0x00ff ); /* 校验位低字节 */
send_buf[9] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
com_send_command(SYN); /* 发送数据 */
com_send_command(SYN);
com_send_command(STX);
for (i=0; i<10; i++)
{
com_send_command(send_buf[i]);
}
break;
case MSG_ACK:
send_command(ACK);
break;
case MSG_NAK:
send_command(NAK);
break;
default:
break;
}
}
/* 系统上电初始化 */
void system_init(void)
{
u_char loop;
EA = 0; /* CPU关中断 */
pint_read = 0; /* 串口中断读指针 */
pint_write = 0; /* 串口中断写指针 */
msg_readp = 0; /* msg读指针 */
msg_writep = 0; /* msg写指针 */
msg_number = 0; /* 消息数 */
prec_num=0;
/* 初始化定时器变量 */
for (loop=0; loop<MAX_TNUM; loop++)
{
timer_sign[loop] = 0; /* 定时标志 1:开始 */
timer_type[loop] = 0; /* 定时类型 0:一般 1:循环 */
timer_len[loop] = 0; /* 时长 100ms 的倍数 */
timer_count[loop] = 0; /* 定时计数 */
timer_map[loop] = loop;
timer_id[loop] = 0;
}
timer_number = 0;
timer_int = 0;
int_times = 0;
/* 初始化定时器变量结束 */
SCON = 0x48;
PCON = 0x80;
TMOD = 0x21;
TCON = 0x54;
TH1 = 0xFD; /* 波特率为19200 */
TL1 = 0xFD;
TR1 = 1; /* 定时器1启动计数*/
TH0 = -(46080 / 256);/* 定时50毫秒*/
TL0 = -(46080 % 256);
TR0 = 1; /* 定时器0启动计数*/
ES = 1; /* 串口开中断 */
ET0 = 1; /* 定时器0开中断 */
PT0 = 1; /* 定时器高优先级 */
PS = 0; /* 串口低优先级 */
REN = 1; /* 串口接收允许 */
EX1 = 1; /* 开外部中断1 */
EA = 1; /* 开CPU中断 */
loop = SBUF; /* 清串口缓冲区 */
for (loop=0; loop<MAX_RINTL; loop++)
{
pint_buf[loop] = 0;
}
}
/* 查询是否有系统消息 */
u_char msg_get(void)
{
if (msg_number != 0)
{
msg_nowtype = msg_type[msg_readp];
msg_nowvalue = msg_value[msg_readp];
msg_readp = msg_readp + 1;
if (msg_readp >= MAX_MSGNUM)
{
msg_readp=0;
}
msg_number = msg_number-1;
return 1;
}
return 0;
}
main()
{
u_char i = 0;
system_init();
lcd_init();
show_title();
WDI = ~WDI; /* 喂狗 */
sd2300_write_config();/* 写sd2300状态寄存器 */
WDI = ~WDI; /* 喂狗 */
read_iic_data(ADDRESS, 0, 2); /* 读eeprom中的通讯组地址与开发板地址 */
if (ADDRESS[0] == 0xFF)
{
ADDRESS[0] = 0x01; /* 默认通讯组地址 */
ADDRESS[1] = 0x01; /* 默认开发板地址 */
}
sd2300_read_date();
for (i=0; i<7; i++)
{
watchdog_date[i] = date[i];
}
WDI = ~WDI; /* 喂狗 */
set_timer(WD_TIMER_LEN, 0, T_WATCHDOG);
set_timer(LUMIN_TIMER_LEN, 0, T_LUMIN);
set_timer(QUERY_TIMER_LEN,0,T_SAMPLE);
while(1)
{
message_loop(); /* 主消息循环 */
if (msg_get()) /* 是否有消息 */
{
main_message_process(); /* 主消息处理子程序 */
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -