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

📄 lcd_main.bak

📁 外部接传感器完成数据采集
💻 BAK
📖 第 1 页 / 共 2 页
字号:
#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 + -