📄 lcd.c
字号:
//name:lcd.c
//author:Liweihua
//date:2004.11.29
#include <stdio.h> /* prototype declarations for I/O functions */
#include "stdlib.h"
#include "string.h"
#include "upsd3200.h"
#include "upsd_hardware.h"
#include "datatypes.h"
#include "config.h"
#include "timers.h"
#include "key.h"
#include "lcd.h"
#include "comm.h"
#include "flash.h"
PSD_REGS PSD8xx_reg _at_ PSD_REG_ADDR; // Define PSD registers at address "csiop" space
LCDCB xdata lcdcb;
extern PPCB xdata ppcb;
extern KEYCB xdata keycb;
extern TIMECB xdata timecb;
extern FLASHCB xdata flashcb;
extern MSG_ENTRY xdata msg_entry[1024];
extern GPS_FRAME xdata gps_frame;
unsigned char xdata hanzi_dot[32];
void lcd_init(void)
{
unsigned char i,j;
lcdcb.event_notice=SCR_EVENT_INIT_INFO;
lcdcb.shipping_logined=0;
lcdcb.sailor_logined=0;
lcdcb.gps_data_validate_flag = 0;
lcdcb.gprs_signal_value=0;
lcdcb.gps_arrow_no=0;
lcdcb.gprs_data_command_state=0x0F;
lcdcb.state_msg_on=0;
lcdcb.disp_len=0;
lcdcb.msg_len=0;
lcdcb.msg_type=0;
lcdcb.rd_loc=0;
lcdcb.msg_num=0;
lcdcb.no_history_msg=0;
lcdcb.err_msg_on=0;
lcdcb.init_info_on=0;
lcdcb.delay_disp_on=0;
lcdcb.wait_disp_on=0;
return;
}
void disp_next_page(void)
{
unsigned char bit_thou,bit_hundr,bit_ten,bit_one;
unsigned short n;
watchdog_reset();
if(((flashcb.msg_sum-1)%3==0)&&(lcdcb.msg_num==flashcb.msg_sum-1))
{
clear_menu_region();
n=lcdcb.msg_num;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],0,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],1,16);
disp_next_menuitem(msg_dot[msg_entry[n].msg_type], 4,3,16);
}
else if(((flashcb.msg_sum-1)%3==1)&&(lcdcb.msg_num==flashcb.msg_sum-2))
{
clear_menu_region();
n=lcdcb.msg_num;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],0,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],1,16);
disp_next_menuitem(msg_dot[msg_entry[n].msg_type], 4,3,16);
n++;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],8,0);
disp_num(number_dot[bit_ten],number_dot[bit_one],9,0);
disp_curr_menuitem(msg_dot[msg_entry[n].msg_type], 4,11,0);
}
else
{
n=lcdcb.msg_num;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],0,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],1,16);
disp_next_menuitem(msg_dot[msg_entry[n].msg_type], 4,3,16);
n++;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],8,0);
disp_num(number_dot[bit_ten],number_dot[bit_one],9,0);
disp_curr_menuitem(msg_dot[msg_entry[n].msg_type], 4,11,0);
n++;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],8,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],9,16);
disp_curr_menuitem(msg_dot[msg_entry[n].msg_type], 4,11,16);
}
return;
}
void disp_pre_page(void)
{
unsigned char bit_thou,bit_hundr,bit_ten,bit_one;
unsigned short n;
watchdog_reset();
if((lcdcb.msg_num==flashcb.msg_sum-1)&&((flashcb.msg_sum-1)%3==0))
{
clear_menu_region();
n=lcdcb.msg_num;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],0,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],1,16);
disp_next_menuitem(msg_dot[msg_entry[n].msg_type], 4,3,16);
}
else if((lcdcb.msg_num==flashcb.msg_sum-1)&&((flashcb.msg_sum-1)%3==1))
{
clear_menu_region();
n=lcdcb.msg_num;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],8,0);
disp_num(number_dot[bit_ten],number_dot[bit_one],9,0);
disp_next_menuitem(msg_dot[msg_entry[n].msg_type], 4,11,0);
n--;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],0,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],1,16);
disp_curr_menuitem(msg_dot[msg_entry[n].msg_type], 4,3,16);
}
else
{
n=lcdcb.msg_num;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],8,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],9,16);
disp_next_menuitem(msg_dot[msg_entry[n].msg_type], 4,11,16);
n--;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],8,0);
disp_num(number_dot[bit_ten],number_dot[bit_one],9,0);
disp_curr_menuitem(msg_dot[msg_entry[n].msg_type], 4,11,0);
n--;
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],0,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],1,16);
disp_curr_menuitem(msg_dot[msg_entry[n].msg_type], 4,3,16);
}
return;
}
void restore_page(void)
{
unsigned char bit_thou,bit_hundr,bit_ten,bit_one;
unsigned short n;
watchdog_reset();
n=lcdcb.msg_num;
if(n%3==0)
disp_next_page();
if(n%3==1)
{
bit_thou=(n-1)/1000;
bit_hundr=(n-1-bit_thou*1000)/100;
bit_ten=(n-1-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-1-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],0,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],1,16);
disp_curr_menuitem(msg_dot[msg_entry[n-1].msg_type], 4,3,16);
bit_thou=n/1000;
bit_hundr=(n-bit_thou*1000)/100;
bit_ten=(n-bit_thou*1000-bit_hundr*100)/10;
bit_one=n-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],8,0);
disp_num(number_dot[bit_ten],number_dot[bit_one],9,0);
disp_next_menuitem(msg_dot[msg_entry[n].msg_type], 4,11,0);
bit_thou=(n+1)/1000;
bit_hundr=(n+1-bit_thou*1000)/100;
bit_ten=(n+1-bit_thou*1000-bit_hundr*100)/10;
bit_one=n+1-bit_thou*1000-bit_hundr*100-bit_ten*10;
disp_num(number_dot[bit_thou],number_dot[bit_hundr],8,16);
disp_num(number_dot[bit_ten],number_dot[bit_one],9,16);
disp_curr_menuitem(msg_dot[msg_entry[n+1].msg_type], 4,11,16);
}
if(n%3==2)
disp_pre_page();
return;
}
void blacken_next_msg_entry(void)
{
watchdog_reset();
if(lcdcb.msg_num%3==1)
{
disp_curr_menuitem(msg_dot[msg_entry[lcdcb.msg_num-1].msg_type], 4,3,16);
disp_next_menuitem(msg_dot[msg_entry[lcdcb.msg_num].msg_type], 4,11,0);
}
if(lcdcb.msg_num%3==2)
{
disp_curr_menuitem(msg_dot[msg_entry[lcdcb.msg_num-1].msg_type], 4,11,0);
disp_next_menuitem(msg_dot[msg_entry[lcdcb.msg_num].msg_type], 4,11,16);
}
return;
}
void blacken_pre_msg_entry(void)
{
watchdog_reset();
if(lcdcb.msg_num%3==1)
{
disp_curr_menuitem(msg_dot[msg_entry[lcdcb.msg_num+1].msg_type], 4,11,16);
disp_next_menuitem(msg_dot[msg_entry[lcdcb.msg_num].msg_type], 4,11,0);
}
if(lcdcb.msg_num%3==0)
{
disp_curr_menuitem(msg_dot[msg_entry[lcdcb.msg_num+1].msg_type], 4,11,0);
disp_next_menuitem(msg_dot[msg_entry[lcdcb.msg_num].msg_type], 4,3,16);
}
return;
}
void disp_main_menu(void)
{
line(0,197,216,197,BLACK);
line(36,197,36,233,BLACK);
line(72,197,72,233,BLACK);
line(108,197,108,233,BLACK);
line(144,197,144,233,BLACK);
line(180,197,180,233,BLACK);
line(216,197,216,233,BLACK);
line(0,233,217,233,BLACK);
disp_bmp(2,199,32,32,menuicon_login_dot);
disp_bmp(38,199,32,32,menuicon_viewer_dot);
disp_bmp(74,199,32,32,menuicon_call_dot);
disp_bmp(110,199,32,32,menuicon_setip_dot);
disp_bmp(146,199,32,32,menuicon_setport_dot);
disp_bmp(182,199,32,32,menuicon_logout_dot);
return;
}
void clear_menu_region(unsigned int x,unsigned char y,unsigned char col_num,unsigned char row_num)
{
unsigned int addr;
unsigned int i;
unsigned char j;
for(i=y;i<=(y+col_num);i++)
{
addr=i*320+x;
if((i>204)||((i==204)&&(x>255)))
{
wr_cmd=0x04;
wr_dat=addr%256;
wr_cmd=0x05;
wr_dat=addr/256;
wr_cmd=0x06;
}
else
{
wr_cmd=0x00;
wr_dat=addr%256;
wr_cmd=0x01;
wr_dat=addr/256;
wr_cmd=0x02;
}
for(j=0;j<=row_num;j++)
wr_dat=0xFF;
}
return;
}
void disp_input_char(void)
{
unsigned char i;
for(i=0;i<10;i++)
get_hzdot(0xA3,0xB0+i,42+i*8,180);
for(i=0;i<6;i++)
get_hzdot(0xA3,0xC1+i,122+i*9,180);
line(41,179,175,179,BLACK);
for(i=0;i<=10;i++)
line(41+i*8,179,41+i*8,195,BLACK);
for(i=1;i<=6;i++)
line(121+i*9,179,121+i*9,195,BLACK);
line(41,195,176,195,BLACK);
return;
}
void disp_key_input(unsigned char *str,unsigned char *datastr,unsigned char datalen)
{
unsigned char i=0,j=0,len;
while(str[i]!=0xFF)
{
get_hzdot(str[i],str[i+1],42+len*8,162);
i+=2;
len++;
}
j=42+len*8;
i=0;
for(len=0;len<datalen;len++)
{
get_hzdot(datastr[i],datastr[i+1],j+len*8,161);
i+=2;
}
return;
}
void blacken_input_char(unsigned char n)
{
if(n<=9)
get_hzdot(0xA3,0xB0+n,42+n*8,179);
else
get_hzdot(0xA3,0xC1+n-10,42+n*8,179);
return;
}
void gps_disc(void)
{
circle(268,207,24,BLACK);
return;
}
void arrow0(void)
{
line(268,196,257,219,BLACK);
line(268,196,280,219,BLACK);
line(268,207,257,219,BLACK);
line(268,207,280,219,BLACK);
return;
}
void arrow1(void)
{
line(280,196,257,207,BLACK);
line(280,196,268,219,BLACK);
line(268,207,257,207,BLACK);
line(268,207,268,219,BLACK);
return;
}
void arrow2(void)
{
line(280,207,257,196,BLACK);
line(280,207,257,219,BLACK);
line(268,207,257,196,BLACK);
line(268,207,257,219,BLACK);
return;
}
void arrow3(void)
{
line(280,219,257,207,BLACK);
line(280,219,268,196,BLACK);
line(268,207,257,207,BLACK);
line(268,207,268,196,BLACK);
return;
}
void arrow4(void)
{
line(268,219,257,196,BLACK);
line(268,219,280,196,BLACK);
line(268,207,257,196,BLACK);
line(268,207,280,196,BLACK);
return;
}
void arrow5(void)
{
line(257,219,268,196,BLACK);
line(257,219,280,207,BLACK);
line(268,207,268,196,BLACK);
line(268,207,280,207,BLACK);
return;
}
void arrow6(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -