//液晶显示屏驱动程序头文件*
// liuhy *
// 2003.01.08 ********
//********************************
#define LCD_CADD (*(volatile unsigned char *)0x7C01)
#define LCD_DADD (*(volatile unsigned char *)0x7C00)
//读状态字子程序
unsigned char ReadSta()
{
unsigned char sta=LCD_CADD;
return sta;
}
//判状态位STA1,STA0子程序
void lcdsta01(void)
{
while((ReadSta()&0x3)<3);
}
//判状态位STA2子程序
void lcdsta2(void)
{
while((ReadSta()&0x4)==0);
}
//判状态位STA3子程序
void lcdsta3(void)
{
while((ReadSta()&0x8)==0);
}
//判状态位STA6子程序
void lcdsta6(void)
{
while((ReadSta()&0x40)==0);
}
//写数据子程序
void lcdwrd(unsigned char data)
{
lcdsta01();
LCD_DADD=data;
}
//写命令子程序
void lcdwrc(unsigned char com)
{
lcdsta01();
LCD_CADD=com;
}
//双字节参数指令写入子程序
void lcdpr2(unsigned char data1,unsigned char data2,unsigned char com)
{
lcdwrd(data1);
lcdwrd(data2);
lcdwrc(com);
}
//单字节参数指令写入子程序
void lcdpr1(unsigned char data1,unsigned char com)
{
lcdwrd(data1);
lcdwrc(com);
}
//液晶屏读数据子程序
unsigned char lcdrd(void)
{
unsigned char data;
lcdsta01();
data=LCD_DADD;
}
//液晶屏初始化子程序
void lcdini(void)
{
lcdpr2(0,0,0x40);
lcdpr2(0x1e,0,0x41);
lcdpr2(0,0x10,0x42);
lcdpr2(0x1e,0,0x43);
lcdwrc(0xa7);
lcdwrc(0x81);
lcdwrc(0x9c);
//lcdwrc(0xa0);
}
//液晶屏清屏子程序
void lcdclear(void)
{
unsigned int i;
lcdpr2(0,0,0x24);
lcdwrc(0xb0);
for(i=0;i<480;i++)
{
lcdsta3();
LCD_DADD=0;
}
lcdwrc(0xb2);
lcdpr2(0,0x10,0x24);
lcdwrc(0xb0);
for(i=0;i<3840;i++)
{
lcdsta3();
LCD_DADD=0;
}
lcdwrc(0xb2);
}
//建立CGRAM子程序
void cgram(unsigned int count,unsigned char *pwbhz)
{
unsigned int i;
lcdpr2(8,0,0x22);
lcdpr2(0,0x44,0x24);
count*=32;
lcdwrc(0xb0);
for(i=0;i<count;i++)
{
lcdsta3();
LCD_DADD=*(pwbhz++);
}
lcdwrc(0xb2);
}
//图形方式下写汉字子程序
void lcdwri_cc(unsigned char o_x,unsigned char o_y,
unsigned char code)//,const unsigned char *ptxhz)
{
extern unsigned char TuXing[2688];
unsigned int inadd;
unsigned char *hzadd;
unsigned char i;
inadd=o_y*0x1e +o_x+0x1000;
hzadd=code*0x20+TuXing;//ptxhz;
for(i=0;i<0x10;i++,hzadd++)
{
lcdpr2(inadd%256,(unsigned char)(inadd/256),0x24);
lcdpr1(*hzadd,0xc0);
lcdpr1(*(hzadd+0x10),0xc0);
inadd+=0x1e;
}
}
//文本方式下写汉字子程序(不带文本属性)
void lcdwri_ct(unsigned char o_x,unsigned char o_y,
unsigned char code)
{
unsigned int inadd;
inadd=o_y*30+o_x;
lcdpr2(inadd%256,(unsigned char)(inadd/256),0x24);
lcdpr1(code,0xc0);
lcdpr1(code+2,0xc0);
inadd+=0x1e;
lcdpr2(inadd%256,(unsigned char)(inadd/256),0x24);
lcdpr1(code+1,0xc0);
lcdpr1(code+3,0xc0);
}
//文本方式下写西文子程序(不带文本属性)
void lcdwri_c(unsigned char o_x,unsigned char o_y,
unsigned char code)
{
unsigned int inadd;
inadd=o_y*0x1e +o_x;
lcdpr2(inadd%256,(unsigned char)(inadd/256),0x24);
lcdpr1(code,0xc0);
}