/*
*Function:LCD测试程序
*Author: Hejun
*Date:2006-5-18
*/
#include <at89x52.h>
#define uint unsigned int
#define uchar unsigned char
#define E1 P1_3
#define E2 P1_2
#define RS P3_5
#define RW P3_6
#define E P3_7
#define LED_BUS P2
bit un_flag=0; //取反标志 un_flag=1取反
code uchar xiao[]={0x00,0x00,0x00,0xC0,0x70,0x20,0x00,0xFF,0x00,0x10,0x20,0xC0,0x80,0x00,0x00,0x00,
0x04,0x02,0x01,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x01,0x07,0x02,0x00};/*"小"*/
code uchar ping[]={0x00,0x01,0x05,0x09,0x71,0x21,0x01,0xFF,0x01,0x41,0x21,0x1D,0x09,0x01,0x00,0x00,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00};/*"平"*/
code uchar gong[]={0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00};/*"工"*/
code uchar zuo[]={0x80,0x40,0x20,0xF8,0x07,0x22,0x18,0x0C,0xFB,0x48,0x48,0x48,0x68,0x48,0x08,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x04,0x04,0x04,0x04,0x06,0x04,0x00};/*"作"*/
code uchar shi[]={0x00,0x10,0x2C,0x24,0xA4,0x64,0x25,0x26,0x24,0x24,0xA4,0x24,0x34,0x2C,0x04,0x00,
0x40,0x40,0x48,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x40,0x00};/*"室"*/
code uchar chu[]={0x00,0x00,0xFC,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,
0x00,0x00,0x7E,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x7E,0x00,0x00};/*"出"*/
code uchar pin[]={0x00,0x00,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,0x00,
0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00};/*"品"*/
code uchar wu[]={0x00,0x00,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x00,0x00,0x00,
0x84,0x84,0x44,0x44,0x24,0x14,0x0C,0x07,0x0C,0x14,0x24,0x64,0xC4,0x44,0x04,0x00};/*"吴"*/
code uchar qiao[]={0x00,0x10,0x12,0x12,0x92,0x52,0x72,0x3E,0x13,0x31,0x51,0x91,0x91,0x18,0x10,0x00,
0x02,0x42,0x41,0x21,0x18,0x07,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0x03,0x01,0x00};/*"乔"*/
code uchar na[]={0x10,0xF0,0x1F,0x10,0xF0,0x12,0x12,0xFE,0x12,0xFE,0x00,0xFE,0x62,0x9A,0x06,0x00,
0x40,0x21,0x1A,0x86,0x49,0x31,0x0D,0x43,0x81,0x7F,0x00,0xFF,0x08,0x18,0x0F,0x00};/*"娜"*/
code uchar xiu[]={0x80,0x88,0x4A,0x4A,0x2A,0x2A,0x1A,0xFE,0x19,0x19,0x29,0x29,0x49,0xC8,0x48,0x00,
0x00,0x00,0x80,0x41,0x21,0x19,0x07,0x01,0x09,0x0D,0x4B,0x89,0x48,0x38,0x00,0x00};/*"秀"*/
code uchar ling[]={0x42,0x42,0xFE,0x42,0x42,0x80,0x40,0x30,0x0C,0x23,0xCC,0x10,0x20,0x40,0x40,0x00,
0x10,0x10,0x0F,0x08,0x08,0x00,0x05,0x09,0x11,0x39,0x65,0x03,0x01,0x00,0x00,0x00};/*"玲"*/
code uchar he[]={0x00,0x42,0x22,0x12,0x8F,0xA2,0xC2,0xBE,0x80,0xBE,0x92,0x92,0x12,0x3E,0x00,0x00,
0x00,0x00,0x80,0x80,0x5F,0x40,0x20,0x10,0x0E,0x10,0x20,0x6F,0xC0,0x40,0x00,0x00};/*"贺"*/
code uchar jun[]={0x80,0x40,0x20,0xF8,0x07,0x92,0x58,0xB4,0x17,0x12,0x18,0x28,0x4C,0xB8,0x10,0x00,
0x00,0x00,0x00,0x7F,0x01,0x48,0x44,0x23,0x2D,0x11,0x19,0x27,0x21,0x40,0x40,0x00};/*"俊"*/
code uchar wang[]={0x00,0x02,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0xC3,0x82,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00};/*"王"*/
code uchar jian[]={0x20,0x10,0xFC,0x03,0x64,0x5C,0xC0,0x54,0x54,0x54,0xFF,0x54,0x7C,0x10,0x10,0x00,
0x00,0x00,0x7F,0x22,0x14,0x0C,0x13,0x24,0x65,0x45,0x7F,0x45,0x45,0x44,0x00,0x00};/*"健"*/
code uchar li[]={0x80,0x84,0x44,0xC4,0xA4,0x94,0x8C,0xFF,0x8C,0x94,0xA4,0x24,0x44,0xC4,0x40,0x00,
0x00,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x00};/*"李"*/
code uchar feng[]={0xF8,0x00,0xFF,0x00,0xF8,0x20,0x90,0x88,0x4F,0xD2,0x22,0x52,0xCE,0x42,0x00,0x00,
0x1F,0x08,0x0F,0x04,0x0F,0x20,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2A,0x20,0x00};/*"峰"*/
code uchar gong_1[]={0x00,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x00,0x00,
0x02,0x02,0x82,0x42,0x32,0x1F,0x0A,0x02,0x02,0x06,0x0B,0x32,0xE2,0x42,0x02,0x00};/*"共"*/
code uchar tong[]={0x00,0xFE,0x02,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x08,0x1F,0x40,0x80,0x7F,0x00,0x00};/*"同"*/
code uchar zhi[]={0x00,0x50,0x4F,0x4A,0x48,0xFF,0x48,0x48,0x48,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,
0x00,0x00,0x3F,0x01,0x01,0xFF,0x21,0x61,0x3F,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00};/*"制"*/
code uchar zao[]={0x40,0x41,0xC6,0x00,0x40,0x50,0x4E,0x48,0x48,0x7F,0x48,0x48,0x48,0x48,0x40,0x00,
0x40,0x20,0x1F,0x20,0x40,0x40,0x5F,0x49,0x49,0x49,0x49,0x49,0x5F,0x40,0x40,0x0};/*"造"*/
code uchar e[]={0x00,0xC0,0xA0,0xA0,0xA0,0xA0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x08,0x08,0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*"e"*/
code uchar e_right[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xA0,0xA0,0xA0,0xA0,0xC0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x08,0x08,0x08,0x04,0x00};/*"e"*/
code uchar empty[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*"empty"*/
code uchar full[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};/*"full"*/
void delay_1ms(void)
{
TMOD &=0xf0;
TR0=1;
TH0=0xe3;TL0=0x06;
while(!TF0);
TF0=0;
TR0=0;
}
void delay_6s(void)
{
uint i;
for(i=0;i<6000;i++)
delay_1ms();
}
/************如果忙则等待****************/
void wait_E1( void )
{
E1=0;E2=1;
LED_BUS=0xff;
RW=1;
RS=0;
E=1;
while(LED_BUS&0x80);
E=0;
}
void wait_E2( void )
{
E1=1;E2=0;
LED_BUS=0xff;
RW=1;
RS=0;
E=1;
while(LED_BUS&0x80);
E=0;
}
/************写指令代码数据 *********/
void write_code_E1( uchar cod )
{
wait_E1();
LED_BUS=cod;
RW=0;
RS=0;
E1=0;E2=1;
E=1;
E=0;
}
void write_code_E2( uchar cod )
{
wait_E2();
LED_BUS=cod;
RW=0;
RS=0;
E1=1;E2=0;
E=1;
E=0;
}
/*************向DDRAM中写数据 *********/
void write_data_E1( uchar dat )
{
wait_E1();
if(un_flag)LED_BUS=~dat;
else LED_BUS=dat;
RW=0;
RS=1;
E1=0;E2=1;
E=1;
E=0;
}
void write_data_E2( uchar dat )
{
wait_E2();
if(un_flag)LED_BUS=~dat;
else LED_BUS=dat;
RW=0;
RS=1;
E1=1;E2=0;
E=1;
E=0;
}
/************************写一16*16字符**************************/
void write_char_16_16( uchar *p_char,uchar page,uchar column )
{
uchar i;
if( column <= 0x30)
{
write_code_E1(page|0xb8); //设置页地址
write_code_E1(column|0x40); //设置列地址
for(i=0;i<16;i++)
write_data_E1(p_char[i]);
write_code_E1(page+1|0xb8); //设置页地址
write_code_E1(column|0x40); //设置列地址
for(i=16;i<32;i++)
write_data_E1(p_char[i]);
}
else
{
write_code_E2(page|0xb8); //设置页地址
write_code_E2(column|0x40); //设置列地址
for(i=0;i<16;i++)