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

📄 qgj.h

📁 本人亲自开发的320240LCD测试程序,这里为51平台,LCD控制器为SED1335,初学着研读之后非常方便移植到其他平台
💻 H
字号:
#define uchar unsigned char
#define uint unsigned int
uchar CurAdrL,CurAdrH ;
uchar ScrAdrL;
uchar ScrAdrH;
#define W_COM XBYTE[0x7FFF]
#define W_DAT XBYTE[0x7eFF]
#define R_DAT XBYTE[0x7FFF]
void write_com(uchar);
void write_dat(uchar);
void lcd_clear(void);
void write_com(uchar com)
{
W_COM=com;
}
void write_dat(uchar dat)
{
W_DAT=dat;
}

uint read_dat()
{
uint dat;
dat=R_DAT;
return(dat);
}

void lcd_init(void)
{
 write_com(0x40);/*初始化设置*/
 write_dat(0x30);/*设置参数*/
 write_dat(0x87);write_dat(0x07);write_dat(0x27);
 write_dat(0x36);write_dat(239);write_dat(0x28);
 write_dat(0x00);/*设置参数*/
 write_com(0x44);/*显示域设置*/
 write_dat(0x00);write_dat(0x00);/*设置参数*/
 write_dat(0x0f0);write_dat(0x80);write_dat(0x25);
 write_dat(0xf0); write_dat(0x00);write_dat(0x4b);
 write_dat(0x80);write_dat(0x70);/*设置参数*/
 write_com(0x5a);/*点位移设置*/
 write_dat(0x00);/*设置参数*/
 write_com(0x5b);/*显示合成设置*/
 write_dat(0x1D);/*设置参数*/
 lcd_clear();/*清屏子程序*/
 write_com(0x59);/*开显示*/
 write_dat(0x57);/*01 11 01 11*/
}
void lcd_clear(void)/*清屏程序*/
{
uint idata i;
write_com(0x4c);//光标右移
write_com(0x46);
write_dat(0x00);
write_dat(0x00);
write_com(0x42);
for(i=0;i<0x8000;i++)
{write_dat(0x00);}
}

void SetCursor(uint PagSel,uchar OrdinatX,uchar OrdinatY)/*设定光标,允许显示*/
{
//MyDelay(0x9);
//PageEcode(PagSel,CurHIGH,CurLOW);//光标指针地址转换为显示屏坐标地址
unsigned int PageTemp=0;
switch(PagSel)
{case 1://第l屏
PageTemp= OrdinatY*0x28+OrdinatX;
ScrAdrL=(unsigned char)(PageTemp%256);
ScrAdrH= (unsigned char)(PageTemp/256);
break;
case 2://第2屏
PageTemp = OrdinatY*0x28+ OrdinatX+0x2580;
ScrAdrL= (unsigned char)(PageTemp%256);
ScrAdrH= (unsigned char)(PageTemp/256);
break;
case 3://第3屏
PageTemp = OrdinatY*0x28+ OrdinatX + 0x4b00;
ScrAdrL= (unsigned char)(PageTemp%256);
ScrAdrH=(unsigned char)(PageTemp/256);
break;
default:
break;
}
W_COM =0x46; /*设定光标位置命令*/
W_DAT=ScrAdrL; /*从0000位置开始*/
W_DAT=ScrAdrH;
//MyDelay(0x9);
W_COM =0x42; /*允许MPU连续地把显示数据写入显示区内命令*/
}
void WriteOneHZ(uint PagSel,uchar CurHIGH,uchar CurLOW,uchar*ZiKu)/*在指定位置显示=个汉字*/
{ uchar i;
SetCursor(PagSel,CurHIGH,CurLOW);
i=0;
do{W_DAT=ZiKu[i];
i++;}while(i<0x10);
SetCursor(PagSel,CurHIGH+1,CurLOW);
i=16;
do{W_DAT=ZiKu[i];
i++;}while(i<0x20);
}
void MyDelay(uint delx)/*延时子程序*/
{ uint i=0;
while(i<delx)
{i++;}
}
/*光棒消失函数,即求得实际显示数据的原码*/
/*屏编号,屏坐标X,屏坐标Y,光棒长度*/
/*屏编号取值有1,2,3三种*/
/*横向坐标以8个点为单位,因此字符为1汉字为2*/
/*纵向坐标以1个点行为单位,汉字换行以0x10为单位*/
void MoveCursorFar(uchar PagSel,uchar CurHIGH,uchar CurLOW,uchar State)//光棒消失函数
{
//SetCursor(PagSel,CurHIGH,CurLOW);
uchar i;
do {
SetCursor(PagSel,CurHIGH,CurLOW);
i=0;
do
{W_DAT=0x00;
i++;}while(i<0x10);
i=16;
SetCursor(PagSel,CurHIGH+1,CurLOW);
do{
W_DAT=0x00;
i++;}while(i<0x20);
CurHIGH++;
CurHIGH++;
}while(--State);
}
/*光棒产生函数,即求得实际显示数据的反码*/
/*屏编号,屏坐标X,屏坐标Y,光棒长度*/
/*屏编号取值有1,2,3三种*/
/*横向坐标以8个点为单位,因此字符为1汉字为2*/
/*纵向坐标以1个点行为单位,汉字换行以0x10为单位*/
void MoveCursor(uchar PagSel,uchar CurHIGH,uchar CurLOW,int Length)//光棒移动函数
{
//SetCursor(PagSel,CurHIGH,CurLOW);

uchar i;
if(Length<0) return;
else
{
while(Length/2){
Length-=2;
SetCursor(PagSel,CurHIGH,CurLOW);
i=0;
do
{W_DAT=0xff;
i++;}while(i<0x10);
i=16;
SetCursor(PagSel,CurHIGH+1,CurLOW);
do{W_DAT=0xff;
i++;}while(i<0x20);
CurHIGH++;
CurHIGH++;
};
if(Length%2==1)
{
SetCursor(PagSel,CurHIGH,CurLOW);
i=0;
do
{W_DAT=0xff;
i++;}while(i<0x10);
i=16;
}
}
}

void WriteOneChar(uint PagSel,uchar CurHIGH,uchar CurLOW,uchar*ZiKu)/*在指定位置显示1个字符*/
{ uchar i;
SetCursor(PagSel,CurHIGH,CurLOW);
i=0;
do{W_DAT=ZiKu[i];
i++;}while(i<0x10);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -