📄 lcd_main.bak
字号:
#include <cxfunc1.h>
#include <at8252.h>
#include <string.h>
#include <absacc.h>
#include <intrins.h>
#include <math.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <lcd_func.h>
#include <lcd_def.h>
#include <lcd_glob.h>
main()
{
init_varb();
init_xmit();
init_recv();
dis_frnt_page();
snd_frm(POWER_UP);
while(1){
key_proc();
is_need_alarm();
is_dis_rain();
link_proc();
}
}
//扫描键盘
unsigned char key_scanC(void)
{
unsigned char xdata loopC,row_numC,row_outC,key_regC,key_valC;
row_numC=0x01; //row number
key_valC=0xff; //inintlize key value
for(loopC=0;loopC<4;loopC++){
row_outC=~row_numC; //output of row
P1=row_outC;
key_regC=P1;
if(key_regC^row_outC){
key_valC=key_regC; //key is press
delay(1);
key_regC=P1;
if(key_regC^key_valC){
key_valC=0xff; //key isn't press
break;
}
while(1){
delay(1);
keyS.time_cntI++;
key_regC=P1;
if(key_regC^key_valC){
return(key_valC); //key is available
}
}
}
row_numC<<=1; //point to next row
}
return(key_valC); //key isn't press
}
//处理按键
void key_proc(void)
{
if(timer_cnt_e>=3){ //1分钟
P3_5=0; //关闭背光
timer_cnt_e=0;
}
switch(key_scanC()){
case KEY1_VAL: //term switch key
func_key_proc();
timer_cnt_e=0;
P3_5=1;
break;
case KEY2_VAL: //number(1) key
num_key_proc(1);
timer_cnt_e=0;
P3_5=1;
break;
case KEY3_VAL: //number(2) key
num_key_proc(2);
timer_cnt_e=0;
P3_5=1;
break;
case KEY4_VAL: //number(3) key
num_key_proc(3);
timer_cnt_e=0;
P3_5=1;
break;
case KEY5_VAL: //up key
up_key_proc();
timer_cnt_e=0;
P3_5=1;
break;
case KEY6_VAL: //number(4) key
num_key_proc(4);
timer_cnt_e=0;
P3_5=1;
break;
case KEY7_VAL: //number(5) key
num_key_proc(5);
timer_cnt_e=0;
P3_5=1;
break;
case KEY8_VAL: //number(6) key
num_key_proc(6);
timer_cnt_e=0;
P3_5=1;
break;
case KEY9_VAL: //down key
dn_key_proc();
timer_cnt_e=0;
P3_5=1;
break;
case KEY10_VAL: //number(7) key
num_key_proc(7);
timer_cnt_e=0;
P3_5=1;
break;
case KEY11_VAL: //number(8) key
num_key_proc(8);
timer_cnt_e=0;
P3_5=1;
break;
case KEY12_VAL: //number(9) key
num_key_proc(9);
timer_cnt_e=0;
P3_5=1;
break;
case KEY13_VAL: //delete key
del_key_proc();
timer_cnt_e=0;
P3_5=1;
break;
case KEY14_VAL: //assured key
ok_key_proc();
timer_cnt_e=0;
P3_5=1;
break;
case KEY15_VAL: //number(0) key
num_key_proc(0);
timer_cnt_e=0;
P3_5=1;
break;
case KEY16_VAL: //symbol(.) key
dot_key_proc();
timer_cnt_e=0;
P3_5=1;
break;
default:
keyS.time_cntI=0;
break;
}
}
//process function key
void func_key_proc(void)
{
if((alarm.distinction==1)||(alarm.distinction==2)||(alarm.distinction==3)){ //清除报警
}
else{
if(chk_event_flagI(SET_TIME_LIVE)||chk_event_flagI(SET_STAT_LIVE)){
snd_frm(STARTUP_WORK); //启动配置未配置
}
init_info();
keyS.event_cntC=1;
dis_menu_term(keyS.event_cntC);
set_event_flag(FUNC_KEY_LIVE);
set_event_flag(KEY_INTERMIT);
keyS.time_cntI=0;
}
}
//process ok key
void ok_key_proc(void)
{
unsigned long int xdata adrC;
unsigned char xdata loopC,i;
if(chk_event_flagI(SET_DADR_LIVE)||chk_event_flagI(SET_SADR_LIVE)){ //配置遥测站站号
adrC=count_input_stat();
if((stat.numC!=0)&&(adrC<65536)){
stat.adrC=(unsigned int)adrC;
wri_stat_eem();
dis_ack_page();
init_varb();
}
else{
dis_frnt_page();
init_info();
}
}
else if(chk_event_flagI(SET_ALARM_PARAMETER)){ //设置报警参数
i=alarm.set_cnt-1;
alarm.parameter[i][0]=(unsigned int)(alarm.set_buf[0])*10+(unsigned int)alarm.set_buf[1];
for(loopC=0;loopC<3;loopC++){
alarm.parameter[i][loopC+1]=(unsigned int)(alarm.set_buf[loopC*4+2])*1000+(unsigned int)(alarm.set_buf[loopC*4+3])*100+
(unsigned int)(alarm.set_buf[loopC*4+4])*10 +(unsigned int)(alarm.set_buf[loopC*4+5]);
}
wri_alarm_eem();
dis_ack_page();
init_varb();
}
else if(chk_event_flagI(REST_ALARM_PARAMETER)){ //恢复报警参数
clr_event_flag(REST_ALARM_PARAMETER);
rest_alarm_parameter();
dis_ack_page();
init_varb();
}
else if(chk_event_flagI(FUNC_KEY_LIVE)){ //进入子菜单
if(keyS.event_cntC==1){
snd_frm(DIS_CURR_RAIN);
dis_wait_page();
}
if(keyS.event_cntC==2){
dis_wait_page();
}
if(keyS.event_cntC==3){
keyS.subevt_cntC=1;
dis_sub_term(1);
set_event_flag(OK_KEY_LIVE);
clr_event_flag(FUNC_KEY_LIVE);
}
}
else if(chk_event_flagI(OK_KEY_LIVE)){ //执行子菜单
clr_event_flag(OK_KEY_LIVE);
menu_term_proc();
}
/*else if(chk_event_flagI(SET_BEGIN_TIME)){ //设置开始时间转到设置截止时间
clr_event_flag(SET_BEGIN_TIME);
set_event_flag(SET_END_TIME);
memcpy(colg.begin_timeCA,sys_timeS.valCA,12);
conv_to_sectm();
colg.begin_timeC=sys_timeS.totl_seC;
sys_timeS.numC=0;
memcpy(sys_timeS.valCA,colg.end_timeCA,12);
dis_sys_time();
}
else if(chk_event_flagI(SET_END_TIME)){ //发送读自记命令
sys_timeS.numC=0;
conv_to_sectm();
colg.end_timeC=sys_timeS.totl_seC;
clr_event_flag(SET_END_TIME);
snd_frm(DIS_COLG_VAL);
dis_wait_page();
}*/
else if(chk_event_flagI(SET_TIME_LIVE)){ //发送设置时间命令
clr_event_flag(SET_TIME_LIVE);
sys_timeS.numC=0;
conv_to_sectm();
snd_frm(SET_TIME_LIVE);
dis_wait_page();
}
else if(chk_event_flagI(SET_STAT_LIVE)){ //设置站号
adrC=count_input_stat();
if((adrC>0)&&(adrC<65536)){
stat.adrC=(unsigned int)adrC;
clr_event_flag(SET_STAT_LIVE);
snd_frm(SET_STAT_LIVE);
dis_wait_page();
}
else{
keyS.event_flagI=0;
snd_frm(STARTUP_WORK);
dis_frnt_page();
init_info();
}
}
else if(chk_event_flagI(CLR_RAIN_CONFIRM)){ //场雨量清零
rainS.init_valF=rainS.acc_valF;
dis_ack_page();
}
}
//process up key
void up_key_proc(void)
{
if(chk_event_flagI(FUNC_KEY_LIVE)){ //上翻主菜单
if(--keyS.event_cntC==0) keyS.event_cntC=3;
dis_menu_term(keyS.event_cntC);
}
else if(chk_event_flagI(OK_KEY_LIVE)){ //上翻子菜单
/*if(keyS.event_cntC==1){
if(--keyS.subevt_cntC==0) keyS.subevt_cntC=3;
}
if(keyS.event_cntC==2){
if(--keyS.subevt_cntC==0) keyS.subevt_cntC=4;
}*/
if(keyS.event_cntC==3){
if(--keyS.subevt_cntC==0) keyS.subevt_cntC=3;
}
dis_sub_term(keyS.subevt_cntC);
}
else if(chk_event_flagI(SET_TIME_LIVE)){//||chk_event_flagI(SET_BEGIN_TIME) //移动设置时间的光标
//||chk_event_flagI(SET_END_TIME)){
//if(chk_event_flagI(SET_TIME_LIVE)) sys_timeS.pageC=1;
//else sys_timeS.pageC=3;
sys_timeS.pageC=1;
set_time_crd();
wr_lcd_zf(sys_timeS.pageC,sys_timeS.clmnC,&CDTAB[sys_timeS.valCA[sys_timeS.numC]][0]);
--sys_timeS.numC;
set_time_crd();
wr_lcd_zf(sys_timeS.pageC,sys_timeS.clmnC,&DDTAB[sys_timeS.valCA[sys_timeS.numC]][0]);
}
//else if(chk_event_flagI(DIS_COLG_VAL)){
// set_event_flag(UP_PAGE_LIVE); //循环显示翻页
//}
else if(chk_event_flagI(DIS_CURR_RAIN)){
if(chk_event_flagI(WAIT_PAGE_LIVE)) clr_event_flag(WAIT_PAGE_LIVE);
if(timer_cnt_g>=(wait_dis_time*2)) timer_cnt_g=wait_dis_time*3;
if(timer_cnt_g<wait_dis_time) timer_cnt_g=wait_dis_time;
}
else if(chk_event_flagI(SET_ALARM_PARAMETER)){
set_alarm_crd();
wr_lcd_zf(alarm.pageC,alarm.clmnC,&CDTAB[alarm.set_buf[alarm.numC]][0]);
--alarm.numC;
set_alarm_crd();
wr_lcd_zf(alarm.pageC,alarm.clmnC,&DDTAB[alarm.set_buf[alarm.numC]][0]);
}
}
//process down key
void dn_key_proc(void)
{
if(chk_event_flagI(FUNC_KEY_LIVE)){ //下翻主菜单
if(++keyS.event_cntC==4) keyS.event_cntC=1;
dis_menu_term(keyS.event_cntC);
}
else if(chk_event_flagI(OK_KEY_LIVE)){ //下翻子菜单
/*if(keyS.event_cntC==1){
if(++keyS.subevt_cntC==4) keyS.subevt_cntC=1;
}
if(keyS.event_cntC==2){
if(++keyS.subevt_cntC==5) keyS.subevt_cntC=1;
}*/
if(keyS.event_cntC==3){
if(++keyS.subevt_cntC==4) keyS.subevt_cntC=1;
}
dis_sub_term(keyS.subevt_cntC);
}
else if(chk_event_flagI(SET_TIME_LIVE)){//||chk_event_flagI(SET_BEGIN_TIME) //移动设置时间光标
//||chk_event_flagI(SET_END_TIME)){
/*if(chk_event_flagI(SET_TIME_LIVE))*/ sys_timeS.pageC=1;
//else sys_timeS.pageC=3;
set_time_crd();
wr_lcd_zf(sys_timeS.pageC,sys_timeS.clmnC,&CDTAB[sys_timeS.valCA[sys_timeS.numC]][0]);
++sys_timeS.numC;
set_time_crd();
wr_lcd_zf(sys_timeS.pageC,sys_timeS.clmnC,&DDTAB[sys_timeS.valCA[sys_timeS.numC]][0]);
}
//else if(chk_event_flagI(DIS_COLG_VAL)){ //循环显示翻页
// set_event_flag(DN_PAGE_LIVE);
//}
else if(chk_event_flagI(DIS_CURR_RAIN)){
if(chk_event_flagI(WAIT_PAGE_LIVE)) clr_event_flag(WAIT_PAGE_LIVE);
if(timer_cnt_g>=(wait_dis_time*2)) timer_cnt_g=wait_dis_time*3;
if(timer_cnt_g<wait_dis_time) timer_cnt_g=wait_dis_time;
}
else if(chk_event_flagI(SET_ALARM_PARAMETER)){
set_alarm_crd();
wr_lcd_zf(alarm.pageC,alarm.clmnC,&CDTAB[alarm.set_buf[alarm.numC]][0]);
++alarm.numC;
set_alarm_crd();
wr_lcd_zf(alarm.pageC,alarm.clmnC,&DDTAB[alarm.set_buf[alarm.numC]][0]);
}
}
//process number key
void num_key_proc(unsigned char key_numC)
{
if(chk_event_flagI(SET_STAT_LIVE)||chk_event_flagI(SET_DADR_LIVE)
||chk_event_flagI(SET_SADR_LIVE)){ //设置站号
if(stat.numC<5){
wr_lcd_zf(3,stat.clmnC,&CDTAB[key_numC][0]);
stat.clmnC+=8;
if(stat.numC<4) dis_cusr_line(3,stat.clmnC);
stat.adrCA[stat.numC++]=key_numC;
}
}
else if(chk_event_flagI(SET_TIME_LIVE)){//||chk_event_flagI(SET_BEGIN_TIME)
//||chk_event_flagI(SET_END_TIME)){ //设置时间
trueup_input_time();
if((key_numC>=trueup[0].num_min[sys_timeS.numC])&&(key_numC<=trueup[0].num_max[sys_timeS.numC])){
if(!(sys_timeS.numC%2)){
set_time_crd();
if(sys_timeS.numC==0) sys_timeS.clmnC=56;
wr_lcd_zf(sys_timeS.pageC,sys_timeS.clmnC,&CDTAB[key_numC][0]);
sys_timeS.valCA[sys_timeS.numC++]=key_numC;
set_time_crd();
wr_lcd_zf(sys_timeS.pageC,sys_timeS.clmnC,&DDTAB[sys_timeS.valCA[sys_timeS.numC]][0]);
}
else{
wr_lcd_zf(sys_timeS.pageC,sys_timeS.clmnC,&CDTAB[sys_timeS.valCA[sys_timeS.numC-1]][0]);
set_time_crd();
wr_lcd_zf(sys_timeS.pageC,sys_timeS.clmnC,&DDTAB[key_numC][0]);
sys_timeS.valCA[sys_timeS.numC]=key_numC;
}
}
trueup_output_time();
}
else if((chk_event_flagI(SET_ALARM_PARAMETER))&&(alarm.numC<14)){ //设置报警参数
trueup_input_alarm();
if((key_numC>=trueup[1].num_min[alarm.numC])&&(key_numC<=trueup[1].num_max[alarm.numC])){
set_alarm_crd();
wr_lcd_zf(alarm.pageC,alarm.clmnC,&CDTAB[key_numC][0]);
alarm.set_buf[alarm.numC++]=key_numC;
set_alarm_crd();
wr_lcd_zf(alarm.pageC,alarm.clmnC,&DDTAB[alarm.set_buf[alarm.numC]][0]);
}
trueup_output_alarm();
}
else if(((key_numC==1)||(key_numC==2)||(key_numC==3))&&(keyS.event_flagI==0)){ //进入设置报警参数界面
num_key_cntCA[key_numC]++;
alarm.set_cnt=key_numC;
if(num_key_cntCA[key_numC]==3){
set_event_flag(SET_ALARM_PARAMETER);
dis_set_alarm(key_numC);
}
}
else if((key_numC==4)&&(keyS.event_flagI==0)){ //恢复报警参数出厂设置
num_key_cntCA[0]++;
if(num_key_cntCA[0]==3){
set_event_flag(REST_ALARM_PARAMETER);
dis_rest_alarm();
}
}
else if((key_numC==5)&&(keyS.event_flagI==0)){ //配置中心站站号
num_key_cntCA[4]++;
if(num_key_cntCA[4]==3){
set_event_flag(SET_SADR_LIVE);
dis_set_stat();
}
}
else if((key_numC==6)&&(keyS.event_flagI==0)){ //配置遥测站站号
num_key_cntCA[5]++;
if(num_key_cntCA[5]==3){
set_event_flag(SET_DADR_LIVE);
dis_set_stat();
}
}
}
//process delete key
void del_key_proc(void)
{
//unsigned char xdata loopC;
if(chk_event_flagI(SET_STAT_LIVE)||chk_event_flagI(SET_DADR_LIVE)||chk_event_flagI(SET_DADR_LIVE)){
if(stat.numC){
stat.clmnC-=8;
dis_cusr_line(3,stat.clmnC);
wr_lcd_zf(3,stat.clmnC+8,&CDTAB[15][0]);
stat.adrCA[--stat.numC]=0;
}
}
else if(chk_event_flagI(OK_KEY_LIVE)){
dis_menu_term(keyS.event_cntC);
set_event_flag(FUNC_KEY_LIVE);
clr_event_flag(OK_KEY_LIVE);
}
/*else if(chk_event_flagI(SET_ALARM_PARAMETER)){//&&(alarm.numC>0)){
if(alarm.numC>0){
if(alarm.numC==1){
alarm.clmnC=72;
dis_cusr_line(0,alarm.clmnC);
}
else if(alarm.numC==2){
alarm.clmnC=80;
dis_cusr_line(0,alarm.clmnC);
}
else if(((alarm.numC>2)&&(alarm.numC<6))||((alarm.numC>6)&&(alarm.numC<10))||((alarm.numC>10)&&(alarm.numC<14))){
alarm.clmnC-=8;
alarm.pageC=((alarm.numC+1)/4)*2;
dis_cusr_line(alarm.pageC,alarm.clmnC);
}
else if((alarm.numC==6)||(alarm.numC==10)||(alarm.numC==14)){
alarm.clmnC-=8;
alarm.clmnC=96;
alarm.pageC=(alarm.numC-2)/2;
dis_cusr_line(alarm.pageC,alarm.clmnC);
}
alarm.set_buf[--alarm.numC]=0;
}
}*/
else if(chk_event_flagI(SET_TIME_LIVE)/*||chk_event_flagI(SET_BEGIN_TIME)
||chk_event_flagI(SET_END_TIME)*/||chk_event_flagI(DIS_CURR_RAIN))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -