//2006-6-16 14:44
//功能基本完成,
#pragma OVERLAY
#include <reg51.h>
/*------------------延时子程序-----------------------------*/
void delay(unsigned int t)
{
unsigned char j;
for(;t!=0;t--)
for(j=0;j<10;j++);
}
//---------------------------------------------------
//*****************************************************************************************************
//*************************** **********************************************************
//*************************** 键盘驱动部分 *************************************************************
//*************************** *********************************************************
//*****************************************************************************************************
//定义键值
#define key_SET 0
#define key_UP 1
#define key_DOWN 2
#define key_R 3
#define key_L 4
#define key_EXIT 5
#define key_CLR 6
//定义按键口线
sbit key_PORT_SET =P0^5;
sbit key_PORT_UP =P0^4;
sbit key_PORT_DOWN=P0^3;
sbit key_PORT_R =P0^1;
sbit key_PORT_L =P0^2;
sbit key_PORT_EXIT=P0^0;
sbit key_PORT_CLR =P0^6;
#define key() key2()//定义使用哪个按键程序
//------------------------------------------------------------------------------------------
//功能:键盘扫描
//返回值:键值,无键按下时,返回255
//特点:含键盘去抖动,扫描完即返回
//------------------------------------------------------------------------------------------
unsigned char key0(void)
{key_PORT_SET=1;key_PORT_UP=1;key_PORT_DOWN=1;
key_PORT_R=1;key_PORT_L=1;key_PORT_EXIT=1;key_PORT_CLR=1;
if(key_PORT_SET==0){delay(1000);if(key_PORT_SET==0)return(key_SET);}
if(key_PORT_UP==0){delay(1000);if(key_PORT_UP==0)return(key_UP);}
if(key_PORT_DOWN==0){delay(1000);if(key_PORT_DOWN==0)return(key_DOWN);}
if(key_PORT_R==0){delay(1000);if(key_PORT_R==0)return(key_R);}
if(key_PORT_L==0){delay(1000);if(key_PORT_L==0)return(key_L);}
if(key_PORT_EXIT==0){delay(1000);if(key_PORT_EXIT==0)return(key_EXIT);}
// if(key_PORT_CLR==0){delay(1000);if(key_PORT_CLR==0)return(key_CLR);}
return(255);
}
//------------------------------------------------------------------------------------------
//功能:键盘扫描
//返回值:键值,无键按下时,返回255
//特点:含键盘去抖动,如果有键按下延时近1秒返回
//------------------------------------------------------------------------------------------
unsigned char key1(void)
{key_PORT_SET=1;key_PORT_UP=1;key_PORT_DOWN=1;
key_PORT_R=1;key_PORT_L=1;key_PORT_EXIT=1;key_PORT_CLR=1;
if(key_PORT_SET==0){delay(1000);if(key_PORT_SET==0)delay(10000);delay(10000);return(key_SET);}
if(key_PORT_UP==0){delay(1000);if(key_PORT_UP==0)delay(10000);delay(10000);return(key_UP);}
if(key_PORT_DOWN==0){delay(1000);if(key_PORT_DOWN==0)delay(10000);delay(10000);return(key_DOWN);}
if(key_PORT_R==0){delay(1000);if(key_PORT_R==0)delay(10000);delay(10000);return(key_R);}
if(key_PORT_L==0){delay(1000);if(key_PORT_L==0)delay(10000);delay(10000);return(key_L);}
if(key_PORT_EXIT==0){delay(1000);if(key_PORT_EXIT==0)delay(10000);delay(10000);return(key_EXIT);}
//if(key_PORT_CLR==0){delay(1000);if(key_PORT_CLR==0)delay(10000);delay(10000);return(key_CLR);}
return(255);
}
//------------------------------------------------------------------------------------------
//功能:键盘扫描
//返回值:键值,无键按下时,返回255
//特点:含键盘去抖动,如果有键按下,等待按键释放返回
//------------------------------------------------------------------------------------------
unsigned char key2(void)
{key_PORT_SET=1;key_PORT_UP=1;key_PORT_DOWN=1;
key_PORT_R=1;key_PORT_L=1;key_PORT_EXIT=1;key_PORT_CLR=1;
if(key_PORT_SET==0){delay(1000);if(key_PORT_SET==0){while(key_PORT_SET==0){delay(10);key_PORT_SET=1;}return(key_SET);}}
if(key_PORT_UP==0){delay(1000);if(key_PORT_UP==0){while(key_PORT_UP==0){delay(10);key_PORT_UP=1;}return(key_UP);}}
if(key_PORT_DOWN==0){delay(1000);if(key_PORT_DOWN==0){while(key_PORT_DOWN==0){delay(10);key_PORT_DOWN=1;}return(key_DOWN);}}
if(key_PORT_R==0){delay(1000);if(key_PORT_R==0){while(key_PORT_R==0){delay(10);key_PORT_R=1;}return(key_R);}}
if(key_PORT_L==0){delay(1000);if(key_PORT_L==0){while(key_PORT_L==0){delay(10);key_PORT_L=1;}return(key_L);}}
if(key_PORT_EXIT==0){delay(1000);if(key_PORT_EXIT==0){while(key_PORT_EXIT==0){delay(10);key_PORT_EXIT=1;}return(key_EXIT);}}
//if(key_PORT_CLR==0){delay(1000);if(key_PORT_CLR==0){while(key_PORT_CLR==0){delay(10);key_PORT_CLR=1;}return(key_CLR);}}
return(255);
}
//*****************************************************************************************************
//************************************* ******************************************************
//************************************* 液晶部分 ******************************************************
//************************************* ******************************************************
//*****************************************************************************************************
#define Disp_Off_EN 1 //定义换画面时是否先关显示
#define Disp_On 0x3f //0011,1111 显示开关控制
#define Disp_Off 0x3e //0011,1110
#define Col_Add 0x40 //0100,0000 设置y列地址
#define Page_Add 0xb8 //1011,1000 设置页地址
#define Start_Line 0xc0 //1100,0000 设置显示起始行
#define busy 0x80
#define uchar unsigned char
#define uint unsigned int
#define Lcd_Bus P0 //MCU P2<------> LCM
sbit Cs2=P2^4; // /cs2 片选1,低有效(前64列)15 左(Cs2 Cs1=1 0)右(Cs2 Cs1=0 1)
sbit Cs1=P2^3; // /cs1 片选2,低有效(后64列)16 左右屏幕显示控制
sbit Enable=P2^5; //读写使能控制端 6
sbit Di=P2^7; //数据与控制字接口 4
sbit RW=P2^6; //读写控制 H/L 5
sbit Lcd_Rst=P3^7; //复位信号 17
//**************************************************************************************
//字库点阵定义
//从左到右,从上到下
//所有的显示字符程序都从该字符库取点阵数据
// 0:0; 1:1; 2:2; 3:3; 4:4; 5:5; 6:6; 7:7; 8:8; 9:9; 10: ;(空格)
// 11:学; 12:子; 13:科; 14:技; 15:请; 16:输; 17:入; 18:错; 19:误;20:您; 21好; 22: :;
//23:!; 24:密; 25:码; 26:设; 27:置; 28:系; 29:统; 30:“; 31:”;
//32:进; 33:OK; 34:参; 35:数; 36:修; 37:改; 38:; 39:; 39:;
//
//
//************************************************************************************
unsigned char code CHA_lib[][32]={ //阿拉伯数字0,1,2,3,4,5,6,7,8,9, 16(行)*16(列),
{0x00,0xf8,0xc8,0x04,0xc4,0x04,0xfc,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x0f,0x08,0x08,0x08,0x0f,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x10,0x18,0xfc,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x08,0x08,0x0f,0x0f,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x08,0x0c,0x84,0xc4,0x64,0x3c,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0e,0x0f,0x06,0x06,0x06,0x0c,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x08,0x0c,0x44,0x44,0x44,0xfe,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x04,0x0c,0x08,0x08,0x08,0x0f,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0xc0,0xe0,0x30,0x18,0xfc,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x01,0x01,0x01,0x0f,0x0f,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x7c,0x7c,0x44,0x44,0x44,0xc4,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x0e,0x0c,0x04,0x04,0x0f,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0xf0,0xf8,0x4c,0x44,0x44,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x0f,0x08,0x08,0x08,0x0f,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x0e,0x0e,0x04,0x84,0xc4,0x7c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0e,0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0xb8,0xfc,0x44,0x44,0x44,0xfc,0xb8,0