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

📄 display.c

📁 充电车的控制板程序
💻 C
📖 第 1 页 / 共 3 页
字号:

#include "display.h"

#include <can0h.h>

/********************************************************************/
//                          页面调用函数
/********************************************************************/
void display_handle(void)
	{
	if((second2_count)&&(!change_flag)&&(!update_flag)&&(!(key&0x80)))return;
		
	update_flag=1;
	
	switch(screen_flag)
		{
		case 0:
			screen0_handle();//运行监控
			key0_handle();
			break;
		case 1:
			screen1_handle();// 主菜单
			key1_handle();
			break;
		case 2:
			screen2_handle();//充电参数
			key2_handle();
			break;
		case 3:
			screen3_handle();//通讯参数
			key3_handle();
			break;
		case 4:
			screen4_handle();//当前告警
			key4_handle();
			break;
		case 5:
			screen5_handle();//告警参数 
			key5_handle();
			break;
		case 6:
			screen6_handle();//通道校准
			key6_handle();
			break;
		case 90:
			screen90_handle();//设置已保存
			break;
		case 91:
			screen91_handle();//现在开始充电?
			key91_handle();
			break;
		default:
			break;
		}
	}

/********************************************************************/
//                            运行监控
/********************************************************************/
void screen0_handle(void)
	{
	unsigned char i,j;
	static unsigned char m,n;
	switch(page_flag)
		{
		case 0:/*******************运行监控第1屏*******************/
			{
			if(change_flag)
				{
				put_string(0,0,1,SCDY,0);
				put_string(0,16,1,SCDL,0);
				put_string(0,32,1,CDFS,0);
				fill_block(0,48,128,16,0);
				draw_picture(115,48,7,16,Zm+616,1);
				bat_count=0;
				for(i=0;i<4;i++)dis_old[i]=0xFFFF;//初始化旧显示值
				}
			//-----------------------------------------------------
			if(Vout!=dis_old[0])//减少不必要的刷屏,相同则不刷屏
				{
				dis_old[0]=Vout;
				put_number(74,0,Vout,1,6,1,2,0);
				}
			if(Iout!=dis_old[1])
				{
				dis_old[1]=Iout;
				put_number(74,16,Iout,1,6,1,1,0);
				}
			if(mode!=dis_old[2])
				{
				dis_old[2]=mode;
				if(mode==4)put_string(72,32,1,CDFSP[mode+1],0);
				else put_string(72,32,1,CDFSP[mode],0);
				}
			//-----------------------------------------------------
			//put_number(74,32,Ibat,1,6,1,1,0);
			//display_date(1,48,4);
			if(time[1]!=dis_old[3])//减少不必要的刷屏
				{
				dis_old[3]=time[1];
				display_time(2,48,4,0);
				}
			//put_number(2,48,Tbat,1,6,1,3,1);
			//-----------------------------------------------------
			if(mode!=4)
				{
				if(bat_count)draw_line(117,61-bat_count,118,61-bat_count,0);
				else fill_block(117,52,3,10,1);
				m=1;
				}
			else if(m)//减少不必要的刷屏
				{
				m=0;
				fill_block(117,52,3,9,0);
				}
			//-----------------------------------------------------
			if(alarm)
				{
				j=0;
				if(bat_count&0x01)j=1;
				draw_picture(74,49,24,14,alarm_zm,j);
				n=1;
				}
			else if(n)//减少不必要的刷屏
				{
				n=0;
				fill_block(74,49,24,14,0);
				}
			//-----------------------------------------------------
			break;
			}
			
		case 1:/*******************运行监控第2屏*******************/
			if(change_flag)
				{
				put_string(0,0,1,JLAB,0);
				put_string(0,16,1,JLBC,0);
				put_string(0,32,1,DCWD,0);
				put_string(0,48,1,CDJD,0);
				draw_picture(105,48,7,16,Zm+504,0);
				}
			put_number(74,0,Uab,1,6,1,2,0);
			put_number(74,16,Ubc,1,6,1,2,0);
			put_number(74,32,Tbat,1,6,1,3,0);
			put_number(98,48,period,0,1,1,0,0);
			put_number(112,48,period_all,1,1,1,0,0);
			break;
			
		//case 2:/*******************运行监控第3屏*******************/
			/*put_number(0,0,Vbat_single_charge_lmt,1,6,1,2,0);
			put_number(0,16,Ibat_single_charge_lmt,1,6,1,1,0);
			put_number(0,32,Vbat_charge_lmt,1,6,1,2,0);
			put_number(0,32,Tbat_charge_lmt,1,6,1,3,0);
			put_number(74,0,SOC,1,6,1,2,0);
			break;*/
			
		default:
			break;
			
		}
	change_flag=0;
	update_flag=0;
	}

/********************************************************************/
//                             主菜单
/********************************************************************/
void screen1_handle(void)
	{
	unsigned char i,j,k,d;
	
	switch(page_flag)
		{
		case 0:/********************主菜单第1屏********************/
			{
			if(change_flag)
				{
				put_string(44,0,1,ZCD,0);
				draw_line(0,13,127,13,0);
				}
			if(update_flag)
				{
				j=0;
				k=16;
				for(i=0;i<6;i++)
					{
					d=0;
					if(i==cursor_flag)d=1;
					put_string(j,k,1,MENU[i],d);
					k+=16;
					if(i==2)
						{
						j=72;
						k=16;
						}
					}
				}
			break;
			}
		default:
			break;
		}
	change_flag=0;
	update_flag=0;
	}

/********************************************************************/
//                             充电参数
/********************************************************************/
void screen2_handle(void)
	{
	unsigned char i,j,k,l,d,v;
	
	switch(page_flag)
		{
		case 0:
			if(change_flag)
				{
				j=0;
				k=0;
				if(cursor_flag)k=1;
				else j=1;
					
				fill_block(0,8,128,16,k);
				fill_block(0,40,128,16,j);
				put_string(0,8 ,1,DQJD,j);
				put_string(0,40,1,ZJDS,k);
				}
			if(update_flag)
				{
				j=0;
				k=0;
				if(cursor_flag)k=1;
				else j=1;
					
				put_number(112,8,dis_temp[0],0,1,1,0,j);
				put_number(112,40,dis_temp[1],0,1,1,0,k);
				}
			break;
		case 1:/********************充电参数第1屏******************/
			{
			if(change_flag)
				{
				if(period_all>=1)put_string(0,0 ,1,DYJD,0);
				if(period_all>=2)put_string(0,16,1,DEJD,0);
				if(period_all>=3)put_string(0,32,1,DSJD,0);
				if(period_all>=4)put_string(0,48,1,DFJD,0);
				}
			if(update_flag)
				{
				j=0;
				l=period_all;
				if(l>4)l=4;
				for(i=0;i<l;i++)
					{
					d=0;
					if(i==cursor_flag)d=1;
					put_string(72,j,1,CDFSP[dis_temp[i]],d);
					j+=16;
					}
				}
			}
			break;
		case 2:
			if(change_flag)
				{
				put_string(0,0 ,1,DWJD,0);
				if(period_all==6)put_string(0,16,1,DLJD,0);
				}
			if(update_flag)
				{
				j=0;
				for(i=0;i<(period_all-4);i++)
					{
					d=0;
					if(i==cursor_flag)d=1;
					put_string(72,j,1,CDFSP[dis_temp[i+4]],d);
					j+=16;
					}
				}
			break;
		case 3:/********************充电参数第2屏******************/
			{
			if(change_flag)
				{
				put_string(36,0,1,HLXY,0);
				put_string(0,16,1,CDDL,0);
				put_string(0,32,1,CDXY,0);
				put_string(0,48,1,TZDY,0);
				}
			if(update_flag)
				{
				j=16;
				for(i=0;i<3;i++)
					{
					d=0;
					if(i==cursor_flag)d=0xFF;
					v=2;
					if(!i)v=1;
					put_number(88,j,dis_temp[i],0,4,1,v,d);
					j+=16;
					}
				}
			}
			break;
		case 4:/********************充电参数第3屏******************/
			{
			if(change_flag)
				{
				put_string(36,0,1,HYXL,0);
				put_string(0,16,1,CDDY,0);
				put_string(0,32,1,CDXL,0);
				put_string(0,48,1,TZDL,0);
				}
			if(update_flag)
				{
				j=16;
				for(i=0;i<3;i++)
					{
					d=0;
					if(i==cursor_flag)d=0xFF;
					v=1;
					if(!i)v=2;
					put_number(88,j,dis_temp[i],0,4,1,v,d);
					j+=16;
					}
				}
			}
			break;
		case 5:/********************充电参数第4屏******************/
			{
			if(change_flag)
				{
				put_string(36,0,1,HLDS,0);
				put_string(0,16,1,DSDL,0);
				put_string(0,32,1,CDDS,0);
				put_string(86,32,1,S,0);
				put_string(114,32,1,F,0);
				}
			if(update_flag)
				{
				if(cursor_flag==0){j=0xFF;k=0;l=0;}
				else if(cursor_flag==1){j=0;k=0xFF;l=0;}
				else if(cursor_flag==2){j=0;k=0;l=0xFF;}
					
				put_number(88,16,dis_temp[0],0,4,1,1,j);
				put_number(65,32,dis_temp[1],0,3,1,0,k);
				put_number(100,32,dis_temp[2],0,2,1,0,l);
				}
			}
			break;
		case 6:/********************充电参数第5屏******************/
			{
			if(change_flag)
				{
				put_string(36,0,1,HYDS,0);
				put_string(0,16,1,DSDY,0);
				put_string(0,32,1,CDDS,0);
				put_string(86,32,1,S,0);
				put_string(114,32,1,F,0);
				}
			if(update_flag)
				{
				if(cursor_flag==0){j=0xFF;k=0;l=0;}
				else if(cursor_flag==1){j=0;k=0xFF;l=0;}
				else if(cursor_flag==2){j=0;k=0;l=0xFF;}
					
				put_number(88,16,dis_temp[0],0,4,1,2,j);
				put_number(65,32,dis_temp[1],0,3,1,0,k);
				put_number(100,32,dis_temp[2],0,2,1,0,l);
				}
			}
			break;
		default:
			break;
		}
	change_flag=0;
	update_flag=0;
	}

/********************************************************************/
//                             电池管理
/********************************************************************/
void screen3_handle(void)
	{
	unsigned char j,k;
	unsigned int l;
	
	switch(page_flag)
		{
		case 0:
			if(change_flag)
				{
				put_string(8,0,1,DTDCDYSX,0);
				put_string(8,32,1,ZGDTDCDY,0);
				put_string(56,48,0,NO,0);
				}
			if(update_flag)
				{
				put_number(35,16,Vbat_single_charge_lmt,1,6,1,2,0);
				put_number(8,48,Vbat_single_charge_max,1,4,1,2,0);
				put_number(77,48,Box_num,0,2,0,0,0);
				put_number(98,48,Vbat_max_num,0,3,0,0,0);
				}
			break;
			
		case 1:
			if(change_flag)
				{
				put_string(8,0,1,DCCDDLSX,0);
				put_string(22,32,1,DCCDDL,0);
				}
			if(update_flag)
				{
				put_number(35,16,Ibat_single_charge_lmt,1,6,1,1,0);
				put_number(42,48,Ibat_charge,1,5,1,1,0);
				}
			break;
			
		case 2:
			if(change_flag)
				{
				put_string(15,0,1,CDDDYSX,0);
				put_string(29,32,1,CDDDY,0);
				}
			if(update_flag)
				{
				put_number(35,16,Vbat_charge_lmt,1,6,1,2,0);
				put_number(35,48,Vbat_charge,1,6,1,2,0);
				}
			break;
			
		case 3:
			if(change_flag)
				{
				put_string(22,0,1,DCWDSX,0);
				put_string(22,32,1,ZGDCWD,0);
				put_string(66,48,0,NO,0);
				}
			if(update_flag)
				{
				put_number(35,16,Tbat_charge_lmt,1,6,1,3,0);
				put_number(18,48,Tbat_charge_max,1,4,1,3,0);
				put_number(88,48,Tbat_max_num,0,3,0,0,0);
				}
			break;
			
		case 4:
			if(change_flag)
				{
				put_string(0,0,1,DCCL,0);
				put_string(0,16,1,DCBL,0);
				draw_picture(114,0,14,16,Zm+4592,0);
				draw_picture(114,16,14,16,Zm+4592,0);
				put_string(0,32,1,SJNL,0);
				put_string(0,48,1,EDNL,0);
				put_string(100,32,0,KWh,0);
				put_string(100,48,0,KWh,0);
				}
			if(update_flag)
				{
				put_number(77,0,Bat_serial_num,0,5,1,0,0);
				put_number(77,16,Bat_parallel_num,0,5,1,0,0);
				put_number(77,32,Wreal,0,3,1,0,0);
				put_number(77,48,Wrating,0,3,1,0,0);
				}
			break;
			
		case 5:
			if(change_flag)
				{
				put_string(0,0,1,CH,0);
				put_string(56,48,0,dian,0);
				put_string(77,48,0,dian,0);
				put_string(49,32,0,maohao,0);
				put_string(70,32,0,maohao,0);
				}
			if(update_flag)
				{
				put_number(91,0,car_num,0,5,1,0,0);
				
				put_number(28,48,DT.year+2000,0,4,1,0,0);
				put_number(63,48,DT.month,0,2,0,0,0);
				put_number(84,48,DT.day,0,2,0,0,0);
				
				put_number(35,32,DT.hour,0,2,0,0,0);
				put_number(56,32,DT.minute,0,2,0,0,0);
				put_number(77,32,DT.second,0,2,0,0,0);
				}
			break;
		default:
			break;
		}
	/*if(change_flag)
		{
		put_string(0,0,1,TXSL,0);
		put_string(0,16,1,BJDZ,0);
		}
	if(update_flag)
		{
		if(cursor_flag){j=0;k=0xFF;}
		else {j=0xFF;k=0;}
		if(dis_temp[0]==0)l=4800;
		else if(dis_temp[0]==1)l=9600;
		else if(dis_temp[0]==2)l=19200;
		put_number(93,0,l,0,5,1,0,j);
		put_number(107,16,dis_temp[1],0,3,1,0,k);
		}*/
	change_flag=0;
	update_flag=0;
	}

/********************************************************************/
//                             当前告警
/********************************************************************/
void screen4_handle(void)
	{
	unsigned char i,j,k,x,y;
	unsigned int m;
	//static unsigned int alarm_temp;
	
	if(change_flag)//(alarm_temp^alarm)||
		{
		//alarm_temp=alarm;
		switch(page_flag)
			{
			case 0:/*******************当前告警第1屏*******************/
				{
				m=1;
				k=0;
				x=36;
				y=0;
				lcd_clear();
				for(i=0;i<4;i++)
					{
					while(!(alarm&m))
						{
						m<<=1;
						k++;
						if(k>15)break;
						}
					if(k>15)
						{
						if(!i){put_string(30,16,1,DQWGJ,0);sound_alarm=0;break;}
						else break;
						}
					put_string(x,y,1,DQGJP[k],0);
					y+=16;
					m<<=1;
					k++;
					}
				break;
				}
			default:
				break;
			}
		}
	change_flag=0;
	update_flag=0;
	}

/********************************************************************/
//                             告警参数
/********************************************************************/
void screen5_handle(void)
	{
	unsigned char i,j,k,d;
	switch(page_flag)
		{
		case 0:
			if(change_flag)
				{
				put_string(0,0 ,1,JLGY,0);
				put_string(0,16,1,JLQY,0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -