📄 display.c
字号:
#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 + -