📄 lcddriver.c
字号:
{
SendLcdDat(FigMode);//写入高8位数据
SendLcdDat(FigMode);//写入低8位数据
}
if(j<=32)
{
LCD_GdramAdd(j+xteam);
LCD_GdramAdd(0x0);
}
}
if(Ghang==2)
{ LCD_GdramAdd(32);
LCD_GdramAdd(0x0);
}
for(i=0;i<=7;i++)
{
SendLcdDat(FigMode);//写入高8位数据
SendLcdDat(FigMode);//写入低8位数据
}
}
else
{
for(j=0;j<=15;j++)
{
for(i=0;i<=7;i++)
{
SendLcdDat(FigMode);//写入高8位数据
SendLcdDat(FigMode);//写入低8位数据
}
if(j<=32)
{
LCD_GdramAdd(j+xteam);
LCD_GdramAdd(0x8);
}
}
}
LCD_Function2(0x11);
LCD_Function2(0x01);
}
/*-----------------字反显---------------- */
/*=====形参中的Ghang2和Gteam2为人眼看到的行或列;FigMode为反显模式,1:执行反显模式;0:取消反显模式 */
void LCD_FgByte(unsigned int Ghang2,unsigned int Gteam2,unsigned int num2,unsigned int FigMode)
{
unsigned int i,j,xteam,rlteam;
LCD_Function(1); //选择扩充功能
LCD_Function2(0x10);
switch (Ghang2)
{
case 1: rlteam=Gteam2-1;
LCD_GdramAdd(0x0);
LCD_GdramAdd(rlteam);
xteam=1;
break;
case 2: rlteam=Gteam2-1;
LCD_GdramAdd(0x10);
LCD_GdramAdd(rlteam);
xteam=17;
break;
case 3: rlteam=Gteam2+7;
LCD_GdramAdd(0x0);
LCD_GdramAdd(rlteam);
rlteam=Gteam2+7;
xteam=1;
break;
case 4: rlteam=Gteam2+7;
LCD_GdramAdd(0x10);
LCD_GdramAdd(rlteam);
xteam=17;
break;
default:return;
}
if(FigMode==1)
FigMode=0x0FF;
if((Ghang2==1)||(Ghang2==2))
{
for(j=0;j<=15;j++)
{
for(i=0;i<num2;i++)
{
SendLcdDat(FigMode);//写入高8位数据
SendLcdDat(FigMode);//写入低8位数据
}
if(j<=32)
{
LCD_GdramAdd(j+xteam);
LCD_GdramAdd(rlteam);
}
}
}
else
{
for(j=0;j<=15;j++)
{
for(i=0;i<num2;i++)
{
SendLcdDat(FigMode);//写入高8位数据
SendLcdDat(FigMode);//写入低8位数据
}
if(j<=32)
{
LCD_GdramAdd(j+xteam);
LCD_GdramAdd(rlteam);
}
}
}
LCD_Function2(0x11);
LCD_Function2(0x01);
}
void LCD_FgByte2(unsigned int Ghang2,unsigned int Gteam2,unsigned int num2,unsigned int FigMode)
{
unsigned int i,j,xteam,rlteam,mm;
LCD_Function(1); //选择扩充功能
LCD_Function2(0x10);
switch (Ghang2)
{
case 1: rlteam=(Gteam2-1)/2; // 16 byte 1.2; 3.4
LCD_GdramAdd(0x0);
LCD_GdramAdd(rlteam);
mm=Gteam2%2;
xteam=1;
break;
case 2: rlteam=(Gteam2-1)/2;
LCD_GdramAdd(0x10);
LCD_GdramAdd(rlteam);
mm=Gteam2%2;
xteam=17;
break;
case 3: rlteam=(Gteam2+15)/2;
LCD_GdramAdd(0x0);
LCD_GdramAdd(rlteam);
mm=Gteam2%2;
xteam=1;
break;
case 4: rlteam=(Gteam2+15)/2;
LCD_GdramAdd(0x10);
LCD_GdramAdd(rlteam);
mm=Gteam2%2;
xteam=17;
break;
default:return;
}
if(FigMode==1)
FigMode=0x0FF;
if((Ghang2==1)||(Ghang2==2))
{
for(j=0;j<=15;j++)
{
for(i=0;i<num2;i++)
{
if((mm==0)&&(i==0))
{
SendLcdDat(0x00);//写入高8位数据
SendLcdDat(FigMode);//写入低8位数据
}
else
{
if((rlteam+(i+1)/2)>=8) break;
SendLcdDat(FigMode);//写入高8位数据
if(i<(num2-1))
{
SendLcdDat(FigMode);///写入低8位数据
i=i+1;
}
else
{SendLcdDat(0x00);}//写入低8位数据
}
}
if(j<=32)
{
LCD_GdramAdd(j+xteam);
LCD_GdramAdd(rlteam);
}
}
}
else
{
for(j=0;j<=15;j++)
{
for(i=0;i<num2;i++)
{
if((mm==0)&&(i==0))
{
SendLcdDat(0x00);//写入高8位数据
SendLcdDat(FigMode);//写入低8位数据
}
else
{
if((rlteam+(i+1)/2)>=16) break;
SendLcdDat(FigMode);//写入高8位数据
if(i<(num2-1))
{
SendLcdDat(FigMode);
i=i+1;
}//写入高8位数据
else
{SendLcdDat(0x00);}//写入低8位数据
}
}
if(j<=32)
{
LCD_GdramAdd(j+xteam);
LCD_GdramAdd(rlteam);
}
}
}
LCD_Function2(0x11);
LCD_Function2(0x01);
}
void LCD_Error(void)
{
}
void DisplayDD(void)
{
Display(LCDvarb.str[0]+LCDvarb.LCD_Line1*2-2,0x80);
Display(LCDvarb.str[1]+LCDvarb.LCD_Line2*2-2,0x90);
Display(LCDvarb.str[2]+LCDvarb.LCD_Line3*2-2,0x88);
Display(LCDvarb.str[3]+LCDvarb.LCD_Line4*2-2,0x98);
}
void LCD_Renovate(void)
{
unsigned int i;
LCDvarb.lcd_Fault=0;
if(LCDvarb.lcd_Gconter>=LCD_Gset)//=================
{
LCDvarb.lcd_Gconter=0;
if(LCDvarb.LCD_Change==0)
{
DisplayDD();
LCD_CMD(LCDvarb.C_Place);
LCD_Cursor(LCDvarb.C_Mode);
}
else
{
LCDvarb.LCD_Change=0;
DisplayDD();
if(LCDvarb.F_Mode!=0)
{
if((LCDvarb.F_OldNum!=LCDvarb.F_Num)||(LCDvarb.F_OldPlace!=LCDvarb.F_Place))//判断新旧是否一致
{ if(LCDvarb.F_OldNum!=0)
{
for(i=0;i<LCDvarb.F_OldNum;i++)
{
if((LCDvarb.F_OldPlace+i)<=4)
LCD_FgRow((LCDvarb.F_OldPlace+i),0);
}
if(LCDvarb.F_Num!=0)
{
for(i=0;i<LCDvarb.F_Num;i++)
{
if((LCDvarb.F_Place+i)<=4)
LCD_FgRow((LCDvarb.F_Place+i),1);
}
LCDvarb.F_OldMode=1;
}
else
LCDvarb.F_OldMode=0;
}
else
{
if(LCDvarb.F_Num!=0)
{
for(i=0;i<LCDvarb.F_Num;i++)
LCD_FgRow((LCDvarb.F_Place+i),1);
LCDvarb.F_OldMode=1;
}
else
LCDvarb.F_OldMode=0;
}
LCDvarb.F_OldNum=LCDvarb.F_Num;
LCDvarb.F_OldPlace=LCDvarb.F_Place;
}
}
else
{
LCD_Function(1);
LCD_Function2(0x10);
LCD_Function2(0x00);
}
LCD_CMD(LCDvarb.C_Place);
LCD_Cursor(LCDvarb.C_Mode);
}
}
}
void LCDtest(void)
{
if(LCDvarb.lcd_Gconter>LCD_Gfult)
{
LCDvarb.lcd_Fault=1;
LCD_Error();
}
LCDvarb.lcd_Gconter=LCDvarb.lcd_Gconter+1;
}
/*-----------Init Lcd---------------*/
void Lcd_Init(void)
{
EALLOW;
LCD_MuxCtrl=0x00;
LCD_DirCtrl=0x0FFFF;/////////////////////////////////////////////////
GpioMuxRegs.GPGMUX.all=GpioMuxRegs.GPGMUX.all&0x0FFCF;
GpioMuxRegs.GPGDIR.all=GpioMuxRegs.GPGDIR.all|0x030;
EDIS;
LCD_Function(0);
LcdDelay(60);
LcdDelay(60);
LCD_CMD(0x30);//8位,基本指令集
LcdDelay(60); //100us
LcdDelay(60);
LCD_CMD(0x30);
LcdDelay(50);//37us
LCD_CMD(0x0F);//B为显示使能
LcdDelay(60);
LcdDelay(60);//100us
LCD_CMD(0x01);//清屏
LcdDelay(5000);//10ms
LcdDelay(5000);
LcdDelay(5000);
LCD_CMD(0x06);//光标右移
LcdDelay(60);//
}
/*=======================与应用程序接口函数=====================================*/
void Lcd_LoadData(char *str8,char *str9)
{
unsigned int i;
for(i=0;i<17;i++)
{
*(str8+i)=*(str9+i);
}
}
void LCD_InitY(void)//初始化函数
{
Lcd_Init();
LCD_FgClear();
LCDvarb.LCD_Line1=1;
LCDvarb.LCD_Line2=1;
LCDvarb.LCD_Line3=1;
LCDvarb.LCD_Line4=1;
LCDvarb.lcd_Fault=0;
LCDvarb.lcd_Gconter=0;
LCDvarb.lcd_Gset=LCD_Gset;
LCDvarb.C_Mode=1;
LCDvarb.C_Place=0x80;
LCDvarb.F_Place=0;
LCDvarb.F_Num=0;
LCDvarb.F_OldPlace=0;
LCDvarb.F_OldNum=0;
LCDvarb.F_Mode=0;
LCDvarb.F_OldMode=1;
LCDvarb.LCD_Change=0;
Lcd_LoadData(LCDvarb.str[0],"你在他乡还好吗");
Lcd_LoadData(LCDvarb.str[1],"是否有太多改变");
Lcd_LoadData(LCDvarb.str[2],"你那一往情深的");
Lcd_LoadData(LCDvarb.str[3],"笑容");
}
void LCD_FlagSet(unsigned int Mode)//改变显存标志函数
{
LCDvarb.LCD_Change=Mode;
}
void LCD_Convert(unsigned int Line,unsigned int num5,unsigned int mode5)
{
LCDvarb.LCD_Change=1;
LCDvarb.F_Place=Line;
LCDvarb.F_Num=num5;
LCDvarb.F_Mode=mode5;
}
void LCD_CursorSet(unsigned int CursorPlace,unsigned int CursorMode)//设置光标位置及状态
{
LCDvarb.C_Mode=CursorMode;
LCDvarb.C_Place=CursorPlace;
}
void LCD_CursorPinc(void)//光标位置增1
{
unsigned int i,j;
i=(LCDvarb.C_Place>=0x80)&&(LCDvarb.C_Place<0x87);
j=(LCDvarb.C_Place>=0x88)&&(LCDvarb.C_Place<0x8F);
i=i||j;
j=(LCDvarb.C_Place>=0x90)&&(LCDvarb.C_Place<0x97);
i=i||j;
j=(LCDvarb.C_Place>=0x98)&&(LCDvarb.C_Place<0x9F);
i=i||j;
if(i)
LCDvarb.C_Place=LCDvarb.C_Place+1;
else
{
if(LCDvarb.C_Place==0x87) LCDvarb.C_Place=0x90;
if(LCDvarb.C_Place==0x97) LCDvarb.C_Place=0x88;
if(LCDvarb.C_Place==0x8F) LCDvarb.C_Place=0x98;
if(LCDvarb.C_Place==0x9F) LCDvarb.C_Place=0x80;
}
}
void LCD_LightE(unsigned int Modes)
{
if(Modes==1)
{LCD_BGI=0;}
else
{LCD_BGI=1;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -