/*
LCD 驱动程序
iBiR 2007.8.13
记录:
1.2007.8.13 4:26 PM 调试通过
*/
#include "Main.h"
#include "Lcd.h"
#define E1 P14 = 1
#define E0 P14 = 0
#define FIRST_ADDR 0 //定义字符/汉字显示起始位置
unsigned char xdata Lcd_CMD_Bus _at_ 0x9000;
unsigned char xdata Lcd_DATA_Bus _at_ 0x9800;
/*------------------延时子程序-----------------------------*/
void delay(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<5;j++)
;
}
/*------------------检查忙位-----------------------------*/
void chk_busy()
{
delay(6000);
}
/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
chk_busy();
E1;
_nop_();
Lcd_CMD_Bus=cmdcode;
E0;
delay(10);
}
/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
chk_busy();
E1;
_nop_();
Lcd_DATA_Bus=Dispdata;
E0;
delay(10);
}
/*------------------初始化LCD屏--------------------------*/
void lcdreset()
{ delay(2000);
write_com(0x30);
delay(10); //选择基本指令集
write_com(0x30); //选择8bit数据流
delay(5);
write_com(0x0c); //开显示(无游标、不反白)
delay(10);
write_com(0x01); //清除显示,并且设定地址指针为00H
delay(500);
write_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
delay(0);
}
/*------------------显示字符串--------------------------*/
void hzkdis(unsigned char *s)
{ while(*s>0)
{ write_data(*s);
s++;
delay(50);
}
}
/*------------------显示图片------------------------2005.11.14.21:20修改---benladn911---*/
void Disp_Img(unsigned char code *img)
{ unsigned int j=0;
unsigned char x,y,i;
for(i=0;i<9;i+=8)
for(y=0;y<32;y++)/*原来 为 y<26 ,上下两个半屏不能正常对接显示,导致显示的图片中间有空隙*/
for(x=0;x<8;x++)
{ write_com(0x36);//功能设置---8BIT控制界面,扩充指令集
write_com(y+0x80); //行地址
write_com(x+0x80+i); //列地址
write_com(0x30);
write_data(img[j++]);
write_data(img[j++]);
}
}
/*------------------清屏命令--------------------------*/
void clrscreen()
{
write_com(0x01);
delay(10);
}
void ceshi(void)
{write_com(0x01);//清除显示,并且设定地址指针为00H
delay(500);
write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
hzkdis("刘宗伟1234");
delay(500);
write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
hzkdis("邱剑峰");
delay(500);
write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)
hzkdis("王慧鹏");
delay(500);
write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)
hzkdis("西北工业大学");
delay(400);
}
/*------------------唐诗《静夜思》--------------------------*/
void gushi_display()
{ write_com(0x30);
clrscreen();
write_com(0x80+FIRST_ADDR);
hzkdis("人123456789abcde"); delay(400);
write_com(0x90+FIRST_ADDR);
hzkdis("2.疑是地上霜。"); delay(400);
write_com(0x88+FIRST_ADDR);
hzkdis("3.举头望明月,"); delay(400);
write_com(0x98+FIRST_ADDR);
hzkdis("4.低头思故乡。"); delay(400);
write_com(0xb3+FIRST_ADDR);
hzkdis("静夜思"); delay(400);
write_com(0xaa+FIRST_ADDR);
hzkdis("( 唐 )李白"); delay(400);
}
void Lcdmain( void )
{
tByte i;
unsigned char buf1[1];
buf1[0] = 2;
Delay1s(1);//使之进入稳定状态
lcdreset(); //初始化LCD屏
delay(20000);
clrscreen();
delay(20000);
//Disp_Img(BMP); //调入一幅图画
//Delay1s(1);
ceshi();
Delay1s(2);
//gushi_display();
//Delay1s(2);
clrscreen();
hzkdis("时间:");
write_com(0x83);
for(i = 0 ; i < 127 ; i ++)
{
buf1[0] = i;
hzkdis(buf1);
}
}