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

📄 lcd.c

📁 51单片机驱动320*234彩显的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
//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 + -