📄 lcddriver.c
字号:
#include "LZK.h"
//////////////////////////////////////////////////////////////////////////////
void LCD_Cs(void)
{
uint8 data ucTMP;
SFRPAGE = 0x00;
EMI0CF = 0x27;
EMI0TC = 0xff;
SFRPAGE = 0x0f;
ucTMP = ucP4DATA & 0xC0 | 16;
P4 = ucTMP;
SFRPAGE = 0x00;
}
void LCD_Reset(void)
{
LCD_RST=0;
DmS(20);
LCD_RST=1;
}
void LCD_Wcommand(uint8 t)
{
LCD_COMMAND = t;
}
void LCD_Wdata(uint8 t)
{
LCD_DATA = t;
}
/////////////////////////////////////////////////////////////
void LCD_ClearAll()
{
uint16 i;
LCD_Cs();
LCD_Wcommand(0XB0); /*SET PAGE ADDRESS*/
LCD_Wcommand(0X10); /*SET COLUMN ADDRESS MSB(00000000)*/
LCD_Wcommand(0X00); /*SET COLUMN ADDRESS LSB(00000000)*/
LCD_Wcommand(0X89); /*SET RAM ADDRESS CONTROL*/
for(i=0;i<3840;i++)
LCD_Wdata(0x00);
ExInSRAM_Select(0);
}
void LCD_Initialize()
{
LCD_Reset();
DmS(20);
/****************************
*** 240128-052W
****************************/
LCD_Cs(); /* ExSRAM Page 16. */
LCD_Wcommand(0xE2); /* System reset*/
DmS(1);
LCD_Wcommand(0xEB); /* Set lcd bias ratio: 111010_10 */
LCD_Wcommand(0x25); /* Set mux rate and temperature compensation*/
LCD_Wcommand(0x81);
LCD_Wcommand(0xA5); /* Set gain and potentiometer 1_01_00101 */
LCD_Wcommand(0x2F); /* Set power control 00101_1_11 */
LCD_Wcommand(0xAF); /* Display Enable: 1010111_1 */
DmS(10);
LCD_Wcommand(0x40); /* Set start line: 01_000000 */
LCD_Wcommand(0xA4); /* Set all pixel on: 1010010_DC[1] */
LCD_Wcommand(0xA6); /* Set inverse display: 1010011_DC[0] */
LCD_Wcommand(0x89); /* Set ram address control: 10001_001 */
LCD_Wcommand(0xC8); /* Set lcd mapping control: 1100_1_0__0 */
ExInSRAM_Select(0); //
}
void LCD_WByte(uint8 x,uint8 y,uint8 t)
{
LCD_Cs();
LCD_Wcommand(176+y);
LCD_Wcommand(16+x/16);
LCD_Wcommand(x%16);
LCD_Wdata(t);
ExInSRAM_Select(0);
}
void LCD_WPoint(uint8 x,uint8 y,bit k)
{
LCD_Cs();
LCD_Wcommand(176+y/8);
LCD_Wcommand(16+x/16);
LCD_Wcommand(x%16);
if(k)
LCD_Wdata(0x01<<y%8);
else
LCD_Wdata(0x00);
ExInSRAM_Select(0);
}
/********************************************************************************/
void LCD_Chinese(uint8 x,uint8 y,uint8 *str,bit k,bit t)
{
uint8 *OffSet;
uint8 i;
uint16 AddOffSet;
OffSet=strstr(Index, str);
AddOffSet=(OffSet-Index)<<4;
if(!t)
{
if(!k)
{
for(i=0;i<16;i++)
LCD_WByte(x+i,y,CAlib[AddOffSet++]);
for(i=0;i<16;i++)
LCD_WByte(x+i,y+1,CAlib[AddOffSet++]);
}
else
{
for(i=0;i<16;i++)
LCD_WByte(x+i,y,~CAlib[AddOffSet++]);
for(i=0;i<16;i++)
LCD_WByte(x+i,y+1,~CAlib[AddOffSet++]);
}
}
else
{
if(!k)
{
for(i=0;i<16;i++)
LCD_WByte(x+i,y,FAlib[AddOffSet++]);
for(i=0;i<16;i++)
LCD_WByte(x+i,y+1,FAlib[AddOffSet++]);
}
else
{
for(i=0;i<16;i++)
LCD_WByte(x+i,y,~FAlib[AddOffSet++]);
for(i=0;i<16;i++)
LCD_WByte(x+i,y+1,~FAlib[AddOffSet++]);
}
}
}
void LCD_Ascii(uint8 x,uint8 y,uint8 *str,bit k)
{
uint8 *OffSet;
uint8 i;
uint16 AddOffSet;
OffSet=strstr(Index, str);
AddOffSet=(OffSet-Index)<<4;
if(!k)
{
for(i=0;i<8;i++)
LCD_WByte(x+i,y,CAlib[AddOffSet++]);
for(i=0;i<8;i++)
LCD_WByte(x+i,y+1,CAlib[AddOffSet++]);
}
else
{
for(i=0;i<8;i++)
LCD_WByte(x+i,y,~CAlib[AddOffSet++]);
for(i=0;i<8;i++)
LCD_WByte(x+i,y+1,~CAlib[AddOffSet++]);
}
}
void LCD_CAstr(uint8 x,uint8 y,uint8 *str,bit k,bit t)
{
uint8 rega[2];
uint8 regc[3];
while( *str != 0 )
{
if( (uint8)*str < 0xA0 )
{
strncpy(rega, str, 1);
rega[1]=0;
LCD_Ascii(x,y,rega,k);
str=str+1;
x=x+8;
}
if( (uint8)*str >= 0xA0 )
{
strncpy(regc, str, 2);
regc[2]=0;
LCD_Chinese(x,y,regc,k,t);
str=str+2;
x=x+16;
}
}
}
void LCD_math(uint8 x,uint8 y,char t,bit k)
{
uint8 i;
uint16 AddOffSet;
AddOffSet=6048+16*t;
if(!k)
{
for(i=0;i<8;i++)
LCD_WByte(x+i,y,CAlib[AddOffSet++]);
for(i=0;i<8;i++)
LCD_WByte(x+i,y+1,CAlib[AddOffSet++]);
}
else
{
for(i=0;i<8;i++)
LCD_WByte(x+i,y,~CAlib[AddOffSet++]);
for(i=0;i<8;i++)
LCD_WByte(x+i,y+1,~CAlib[AddOffSet++]);
}
}
void LCD_Num(uint8 x,uint8 y,uint16 t,bit k,uint8 *str)
{
char a,b,c,d;
a=(int)t/1000;
b=(int)t/100-a*10;
c=(int)t/10-a*100-b*10;
d=(int)t%10;
if(a!=0)
{
LCD_math(x,y,a,k);
LCD_math(x+8,y,b,k);
LCD_math(x+16,y,c,k);
LCD_math(x+24,y,d,k);
LCD_CAstr(x+32,y,str,0,0);
}
if(a==0&&b!=0)
{
LCD_math(x,y,b,k);
LCD_math(x+8,y,c,k);
LCD_math(x+16,y,d,k);
LCD_CAstr(x+24,y,str,0,0);
}
if(a==0&&b==0&&c!=0)
{
LCD_math(x,y,c,k);
LCD_math(x+8,y,d,k);
LCD_CAstr(x+16,y,str,0,0);
}
if(a==0&&b==0&&c==0)
{
LCD_math(x,y,d,k);
LCD_CAstr(x+8,y,str,0,0);
}
}
void LCD_Sum(uint8 x,uint8 y,uint16 t,bit k,uint8 *str)
{
uint8 a,b,c;
a=(int)t/100;
b=(int)t/10-a*10;
c=(int)t%10;
if(t<10)
{
LCD_CAstr(x,y,"0.",k,0);
LCD_math(x+16,y,c,k);
LCD_CAstr(x+24,y,str,0,0);
}
else if(t>9&&t<100)
{
LCD_math(x,y,b,k);
LCD_CAstr(x+8,y,".",k,0);
LCD_math(x+16,y,c,k);
LCD_CAstr(x+24,y,str,0,0);
}
else if(t>100)
{
LCD_math(x,y,a,k);
LCD_math(x+8,y,b,k);
LCD_CAstr(x+16,y,".",k,0);
LCD_math(x+24,y,c,k);
LCD_CAstr(x+32,y,str,0,0);
}
}
/****************************************************************************************/
void LCD_ErrorItem(uint8 x,uint8 y,uint8 *error)
{
char a,b;
a=error[0]/10;
b=error[0]%10;
LCD_math(x,y,a,0);
LCD_math(x+8,y,b,0);
LCD_Ascii(x+16,y,"/",0);
a=error[1]/10;
b=error[1]%10;
LCD_math(x+24,y,a,0);
LCD_math(x+32,y,b,0);
LCD_Ascii(x+40,y,"/",0);
a=error[2]/10;
b=error[2]%10;
LCD_math(x+48,y,a,0);
LCD_math(x+56,y,b,0);
a=error[3]/10;
b=error[3]%10;
LCD_math(x+96,y,a,0);
LCD_math(x+104,y,b,0);
LCD_Ascii(x+112,y,":",0);
a=error[4]/10;
b=error[4]%10;
LCD_math(x+120,y,a,0);
LCD_math(x+128,y,b,0);
LCD_Ascii(x+136,y,":",0);
a=error[5]/10;
b=error[5]%10;
LCD_math(x+144,y,a,0);
LCD_math(x+152,y,b,0);
switch(error[6])
{
case 0:LCD_CAstr(128,y+2,"无 ",0,0);
break;
case 1:LCD_CAstr(128,y+2,"缺相A ",0,0);
break;
case 2:LCD_CAstr(128,y+2,"缺相B ",0,0);
break;
case 3:LCD_CAstr(128,y+2,"缺相C ",0,0);
break;
case 4:LCD_CAstr(128,y+2,"投励失败 ",0,0);
break;
case 5:LCD_CAstr(128,y+2,"失控 ",0,0);
break;
case 6:LCD_CAstr(128,y+2,"失步 ",0,0);
break;
case 7:LCD_CAstr(128,y+2,"失步再整步",0,0);
break;
case 8:LCD_CAstr(128,y+2,"再整步失败",0,0);
break;
case 9:LCD_CAstr(128,y+2,"遥调失败 ",0,0);
break;
case 10:LCD_CAstr(128,y+2,"通信失败 ",0,0);
break;
case 11:LCD_CAstr(128,y+2,"PT断线 ",0,0);
break;
case 12:LCD_CAstr(128,y+2,"CT断线 ",0,0);
break;
case 13:LCD_CAstr(128,y+2,"切换失败 ",0,0);
break;
case 14:LCD_CAstr(128,y+2,"机柜很热 ",0,0);
break;
case 15:LCD_CAstr(128,y+2,"快熔熔断 ",0,0);
break;
case 16:LCD_CAstr(128,y+2,"KQ误开通 ",0,0);
break;
default:break;
}
}
void LCD_Day(uint8 x,uint8 y,uint8 z,uint8 i,uint8 j,uint8 k,uint8 m)
{
uint8 a,b;
bit sk;
a=x/10;
b=x%10;
if(m==1)sk=1;
else sk=0;
LCD_math(88,4,a,sk);
LCD_math(96,4,b,sk);
a=y/10;
b=y%10;
if(m==2)sk=1;
else sk=0;
LCD_math(112,4,a,sk);
LCD_math(120,4,b,sk);
a=z/10;
b=z%10;
if(m==3)sk=1;
else sk=0;
LCD_math(136,4,a,sk);
LCD_math(144,4,b,sk);
a=i/10;
b=i%10;
if(m==4)sk=1;
else sk=0;
LCD_math(168,4,a,sk);
LCD_math(176,4,b,sk);
a=j/10;
b=j%10;
if(m==5)sk=1;
else sk=0;
LCD_math(192,4,a,sk);
LCD_math(200,4,b,sk);
a=k/10;
b=k%10;
if(m==6)sk=1;
else sk=0;
LCD_math(216,4,a,sk);
LCD_math(224,4,b,sk);
}
void LCD_Clock(void)
{
uint8 a,b;
RTC8563_Read();
a=RTCData[2]/10;
b=RTCData[2]%10;
LCD_math(192,13,a,0);
LCD_math(200,13,b,0);
a=RTCData[1]/10;
b=RTCData[1]%10;
LCD_math(216,13,a,0);
LCD_math(224,13,b,0);
if(AcctimeTemp != RTCData[2])
{
AcctimeTemp = RTCData[2];
AccHour++;
if(AccHour>23)
{
AccDay++;
AccHour = 0;
}
Dyn_to_Flash();
Flash_128_Write(0,Flash,128,0);
}
}
void LCD_Key(uint8 HK0,uint8 HK1,uint8 HK2,uint8 HK3,uint8 HK4,uint8 HK5)
{
LCD_math(176,12,HK0,0);
LCD_math(184,12,HK1,0);
LCD_math(192,12,HK2,0);
LCD_math(200,12,HK3,0);
LCD_math(208,12,HK4,0);
LCD_math(216,12,HK5,0);
switch(hunt)
{
case 60:break;
case 61:LCD_math(176,12,HK0,1);
break;
case 62:LCD_math(184,12,HK1,1);
break;
case 63:LCD_math(192,12,HK2,1);
break;
case 64:LCD_math(200,12,HK3,1);
break;
case 65:LCD_math(208,12,HK4,1);
break;
case 66:LCD_math(216,12,HK5,1);
break;
default:break;
}
}
void LCD_PassWord(uint8 key)
{
switch(key)
{
case 1:if(hunt==60)
{
if(seek==11)
{
CH2[0]=S1_Key1;
CH2[1]=S1_Key2;
CH2[2]=S1_Key3;
CH2[3]=S1_Key4;
CH2[4]=S1_Key5;
CH2[5]=S1_Key6;
}
else if(seek==12)
{
CH2[0]=S2_Key1;
CH2[1]=S2_Key2;
CH2[2]=S2_Key3;
CH2[3]=S2_Key4;
CH2[4]=S2_Key5;
CH2[5]=S2_Key6;
}
hunt=61;
LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
}
else
{
hunt=60;
if(seek==11)
{
S1_Key1=CH2[0];
S1_Key2=CH2[1];
S1_Key3=CH2[2];
S1_Key4=CH2[3];
S1_Key5=CH2[4];
S1_Key6=CH2[5];
LCD_Key(S1_Key1,S1_Key2,S1_Key3,S1_Key4,S1_Key5,S1_Key6);
}
if(seek==12)
{
S2_Key1=CH2[0];
S2_Key2=CH2[1];
S2_Key3=CH2[2];
S2_Key4=CH2[3];
S2_Key5=CH2[4];
S2_Key6=CH2[5];
LCD_Key(S2_Key1,S2_Key2,S2_Key3,S2_Key4,S2_Key5,S2_Key6);
}
}
break;
case 2:hunt=60;
if(seek==11)
LCD_Key(S1_Key1,S1_Key2,S1_Key3,S1_Key4,S1_Key5,S1_Key6);
else if(seek==12)
LCD_Key(S2_Key1,S2_Key2,S2_Key3,S2_Key4,S2_Key5,S2_Key6);
break;
case 3:CH2[hunt-61]=CH2[hunt-61]+1;
if(CH2[hunt-61]>9)
CH2[hunt-61]=0;
LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
break;
case 4:CH2[hunt-61]=CH2[hunt-61]-1;
if(CH2[hunt-61]>9)
CH2[hunt-61]=9;
LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
break;
case 5:hunt=hunt-1;
if(hunt<61)
hunt=66;
LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
break;
case 6:hunt=hunt+1;
if(hunt>66)
hunt=61;
LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
break;
default:break;
}
}
/********************************************************************************/
void LCD_Coordinate(void)
{
uint8 i,j;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -