📄 main.c
字号:
crc = CRC16(RxBuff485,N_XY_BAO); //算出crc值
if(crc) //crc校验正确 校验 //数据校验通过
{
Command=RxBuff485[3];
TxBuff485[0]=HAND_OK;
ask_pc(); //应答pc
DoCommand(Command);//处理指令
}
else
{
//数据校验错误
TxBuff485[0]=HAND_ERR;
ask_pc(); //应答pc
}
NRxBuff=0;
}
}
else
{
//RxBuff485[0]不是合法的值或者数据接收错误
TxBuff485[0]=HAND_ERR;
ask_pc(); //应答pc
NRxBuff=0;
bUartRxErr=0;
}
}
bWaitRe=1;
}
//////////////////声光报警///////////////
void alarm()
{
uint i;
// ALARM_ PDIR |= LED_BACK + TI_CC_LED2 + BUZZ ;
TI_CC_LED1_PxOUT |= TI_CC_LED1 ; //关预警灯
ALARM_POUT |= BUZZ ;
// ALARM_POUT &= ~LED_BACK ;
for(i = 0;i < 400;i++) //200s
{
ALARM_POUT ^= TI_CC_LED2; //开报警灯
delay_n_ms(500);
}
ALARM_POUT &= ~BUZZ;
ALARM_POUT |= TI_CC_LED2 ;
}
void delay(int a,int b)
{
for(int i=a;i>0;i--)
for(int j=b;j>0;j--);
}
void init_port(void)
{
P1SEL = 0;//定义为I/o功能
P1DIR &= ~(KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK); //端口1初始化 //
P1IES |= KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK; //由高到底电平跳变
P1IE |= KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK; //使能中断
P1IFG &= ~(KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK);
return;
}
void set_time1(uchar tim_m,uchar tim_h,uchar tim_h1,uchar curr)//tim_m十分钟位显示,tim_h小时位显示,curr=0时为小时位反白,curr=1时为十分钟位反白
{
uchar a ,b,c,d;
a = tim_m + 0x30;
b = tim_h + 0x30;
c = tim_h1 + 0x30;
d = 0x30;
if(curr == 2)
{
disp_8x16character(&c,4,24,1,0,1);//显示原来的时间
disp_8x16character(&b,4,32,0,0,0);//
disp_8x16character(&set_time,4,40,0,0,0);
disp_8x16character(&a,4,48,0,0,0);//分钟的十位,反白一位
disp_8x16character(&d,4,56,0,0,0);//分钟的十位,反白一位
}
else if(curr == 1)
{
disp_8x16character(&c,4,24,1,0,0);//显示原来的时间
disp_8x16character(&b,4,32,0,0,1);//
disp_8x16character(&set_time,4,40,0,0,0);
disp_8x16character(&a,4,48,0,0,0);//分钟的十位,反白一位
disp_8x16character(&d,4,56,0,0,0);//分钟的十位,反白一位
}
else if(curr == 0)
{
disp_8x16character(&c,4,24,1,0,0);//显示原来的时间
disp_8x16character(&b,4,32,0,0,0);//
disp_8x16character(&set_time,4,40,0,0,0);
disp_8x16character(&a,4,48,0,0,1);//分钟的十位,反白一位
disp_8x16character(&d,4,56,0,0,0);//分钟的十位,反白一位
}
}
void set_temp1(uchar code1,uchar code2,uchar code3,uchar curr)//00显示,curr=0为第一位反白,curr=1为第一位反白,
{
uchar a,b,c;
a = code1 + 0x30;
b = code2 + 0x30;
c = code3 + 0x30;
if(curr == 0)
{
disp_8x16character(&c,4,48,0,0,0);//反白a
disp_8x16character(&b,4,56,0,0,0);//显示原来温度
disp_8x16character(&a,4,64,0,0,1);//显示原来温度
}
if(curr == 1)
{
disp_8x16character(&c,4,48,0,0,0);//反白a
disp_8x16character(&b,4,56,0,0,1);//显示原来温度
disp_8x16character(&a,4,64,0,0,0);//显示原来温度
}
if(curr == 2)
{
disp_8x16character(&c,4,48,0,0,1);//反白a
disp_8x16character(&b,4,56,0,0,0);//显示原来温度
disp_8x16character(&a,4,64,0,0,0);//显示原来温度
}
}
void set_add1(uchar code1,uchar code2,uchar curr)//00显示,curr=0为第一位反白,curr=1为第一位反白,
{
uchar a,b;
a = code1 + 0x30;
b = code2 + 0x30;
if(curr == 0)
{
disp_8x16character(&b,4,56,0,0,0);//显示原来温度
disp_8x16character(&a,4,64,0,0,1);//显示原来温度
}
if(curr == 1)
{
disp_8x16character(&b,4,56,0,0,1);//显示原来温度
disp_8x16character(&a,4,64,0,0,0);//显示原来温度
}
}
void esc_menu(uchar menu_id,uchar curr_poss)//某界面第一行显示菜单地址menu_id, curr_poss第几行反白
{
uchar i;
menu *k;
//curr_pos = 0;
k = &menu_table[menu_id];
for(i = 0;i < 4;i++)
{
//location(0,i);
//print(k->str);
disp_chinese(k->str,2*i,0,8,1,0);
if(k->next == 0) break;
if(k->next == 5) break;
k = &menu_table[k->next];
}//k=4or=7
if(menu_id == 1)
{
if(curr_poss == 3) //k = 4
{
disp_chinese(k->str,6,0,8,1,1);
}
else if(curr_poss == 2)// k = 3
{
k = &menu_table[k->prv];
disp_chinese(k->str,4,0,8,1,1);
}
else if(curr_poss == 1)//k = 2
{
k = &menu_table[k->prv];
k = &menu_table[k->prv];
disp_chinese(k->str,2,0,8,1,1);
}
else if(curr_poss == 0) //k = 1
{
k = &menu_table[k->prv];
k = &menu_table[k->prv];
k = &menu_table[k->prv];
disp_chinese(k->str,0,0,8,1,1);
}
}
if(menu_id == 5)
{
if(curr_poss == 2) //k = 7
{
disp_chinese(k->str,4,0,8,1,1);
}
else if(curr_poss == 1) //k =6
{
k = &menu_table[k->prv];
disp_chinese(k->str,2,0,8,1,1);
}
else if(curr_poss == 0) //k = 5
{
k = &menu_table[k->prv];
k = &menu_table[k->prv];
disp_chinese(k->str,0,0,8,1,1);
}
}
return;
}
void menu_esc() //设置菜单,上一级 ,退出
{
uchar a,b;
if(menu_table[curr_menu_id].up != 0) //上层菜单
{
curr_pos2 = 0;
disp_lattice(0x00,0x00); //cls();清屏
curr_menu_id =menu_table[curr_menu_id].up;
if(curr_menu_id ==1)
{
a = 1;
b = 0;
esc_menu(a,b); //
}
else if(curr_menu_id ==2)
{
a = 1 ;
b = 1;
esc_menu(a,b); //
}
else if(curr_menu_id ==3)
{
a = 1 ;
b = 2;
esc_menu(a,b); //
}
else if(curr_menu_id ==4)
{
a = 1 ;
b = 3;
esc_menu(a,b); //
}
else if(curr_menu_id ==5)
{
a = 5 ;
b = 0;
esc_menu(a,b); //
}
else if(curr_menu_id ==6)
{
a = 5 ;
b = 1;
esc_menu(a,b); //
}
else if(curr_menu_id ==7)
{
a = 5 ;
b = 2;
esc_menu(a,b); //
}
return;
}
//退出菜单的处理
//进入轮显模式
else
{
flag = 0x02;
task_pri[4].task_flag = 1;
curr_pos2 = 0; //功能设置光标置0
curr_menu_id = 1;
return;
}
}
void menu_ok()//确定
{
uchar y = 0;
if(menu_table[curr_menu_id].down != 0)//有下一级菜单
{
curr_menu_id = menu_table[curr_menu_id].down;
disp_lattice(0x00,0x00); //cls();
disp_chinese(menu_table[curr_menu_id].str,0,0,8,1,0);//显示标题
}
if(curr_menu_id ==8) //设置采集时间间隔
{
set_time1( min_1,hour_1,Hour_1,y);
// set_time1(coll_tim,0);
return;
}
else if(curr_menu_id ==9) //设置采集时间间隔
{
set_time1( min_2,hour_2,Hour_2,y);
// set_time1(coll_tim,0);
return;
}
else if(curr_menu_id ==10) //设置预警温度
{
//a = pre_tem/10; //预警温度
set_temp1(num_1,ten_1,bai_1,y);
return;
}
else if(curr_menu_id ==11) //设置采集时间间隔
{
set_temp1(num_2,ten_2,bai_2,y);
return;
}
else if(curr_menu_id ==12)
{
set_add1(add_1,Add_1,y);//显示原来的地址
return;
}
else if(curr_menu_id ==13) //设置测温点地址
{
set_add1(add_2,Add_2,y);//显示原来的地址
return;
}
else if(curr_menu_id ==14) //查询相应地址测温点历史温度
{
set_add1(add_3,Add_3,y);//显示原来的地址
return;
}
return;
}
void view_menu(uchar menu_id)//从第一行显示菜单
{
uchar i;
menu *k;
curr_pos = 0;
k = &menu_table[menu_id];
disp_chinese(k->str,0,0,8,1,1);//反白显示
for(i = 1;i < 4;i++)
{
if(k->next == 0) break;
k = &menu_table[k->next];
disp_chinese(k->str,2*i,0,8,1,0);
}
return;
}
void menu_up()//上一条
{
uchar p;
signed char i;
menu *k;
p = curr_menu_id;
if(menu_table[p].prv == 0) //没上一条的情况
{
curr_menu_id = 7;//到最后一个菜单7
curr_pos = 2; //光标
disp_lattice(0x00,0x00);
p = 5;
for(i = 0;i < 2;i++)
{
disp_chinese(menu_table[p].str,2*i,0,8,1,0);
p++;
}
disp_chinese(menu_table[curr_menu_id].str,4,0,8,1,1);//反白显示
return;
}
;
if(curr_pos != 0)//(curr_pos > 0)||(curr_pos <3)
{//当前光标不在最上
disp_chinese(menu_table[curr_menu_id].str,2*curr_pos,0,8,1,0);//inv_line(curr_pos,0x00);取正显示
curr_pos--; //光标
//p = curr_menu_id;
curr_menu_id = menu_table[curr_menu_id].prv;
disp_chinese(menu_table[curr_menu_id].str,2*curr_pos,0,8,1,1);//inv_line(curr_pos,0xff);反白显示
//curr_menu_id = menu_table[p].prv;
return;
}
else
{ //当前光标在最上,再写菜单项
curr_menu_id = menu_table[curr_menu_id].prv;
//p = curr_menu_id;
disp_lattice(0x00,0x00); //???
k = &menu_table[curr_menu_id];
disp_chinese(k->str,6,0,8,1,1);//inv_line(curr_pos,0xff);反白显示
for(i = 2;i >= 0 ;i--)
{
if(k->prv == 0) break;///????
k = &menu_table[k->prv];
disp_chinese(k->str,2*i,0,8,1,0);
}
curr_pos = 3;
///////////////////view_menu(p);
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -