📄 lcd.c
字号:
#include "lcd.h"
#include "ehardware.h"
#include "var.h"
#include "lib2.h"
#include "io.h"
#include "eelib.h"
//#pragma memory = default
/**************7******6*****5*****4*****3*****2*****1*****0************/
/****LcdCtl_ NU8 LCDST Nu6 E2 E1 RST RW DI */
/**********************************************************************/
void LcdReset()
{
unsigned char initi;
ttt:
LcdDir=1;
LCDCONTROL=LcdCtrl;
LCDCS=0;
LCDCONTROL=0;
LcdPowerOff();
RtcDlyCnt=20;
while(RtcDlyCnt);
LcdPowerOn();
LcdDir=1;
LCDCONTROL=LcdCtrl;
LcdRst=0;
LCDCONTROL=LcdCtrl;
T0Delay=100;
while(T0Delay);
LcdRst=1;
LCDCONTROL=LcdCtrl;
T0Delay=100;
while(T0Delay);
LcdDir=0;
LCDCONTROL=LcdCtrl;
RtcDlyCnt=50;
do{
LcdRegPin=0;
LCDCONTROL=LcdCtrl;
LcdRWPin=1;
LCDCONTROL=LcdCtrl;
LcdCS1Pin=1;
LcdCS2Pin=1;
LCDCONTROL=LcdCtrl;
LcdEnablePin=1;
LCDCONTROL=LcdCtrl;
initi=LCDCS;
LcdEnablePin=0;
LCDCONTROL=LcdCtrl;
}while(((initi&0x80!=0)||(initi&0x10!=0))&&RtcDlyCnt);
if(!RtcDlyCnt) goto ttt;
}
unsigned char StringLength(unsigned char *Str)
{
unsigned char icnt;
icnt=0;
while(Str[icnt]!='\0')
{
icnt++;
if(icnt>250)break;
}
return icnt;
}
void LcdCmd(unsigned char cmd,unsigned char LcdMode)
{
LcdDir=1;
LCDCONTROL=LcdCtrl;
LcdEnablePin=1;
LCDCONTROL=LcdCtrl;
switch (LcdMode)
{
case 0:
LcdCS1Pin=1;
LcdCS2Pin=1;
LCDCONTROL=LcdCtrl;
break;
case 1:
LcdCS1Pin=1;
LCDCONTROL=LcdCtrl;
break;
case 2:
LcdCS2Pin=1;
LCDCONTROL=LcdCtrl;
break;
default:
break;
}
LcdRegPin=0;
LcdRWPin=0;
LCDCONTROL=LcdCtrl;
LCDCS = cmd;
LcdEnablePin=0;
LCDCONTROL=LcdCtrl;
switch (LcdMode)
{
case 0:
LcdCS1Pin=0;
LcdCS2Pin=0;
LCDCONTROL=LcdCtrl;
break;
case 1:
LcdCS1Pin=0;
LCDCONTROL=LcdCtrl;
break;
case 2:
LcdCS2Pin=0;
LCDCONTROL=LcdCtrl;
break;
default:
break;
}
}
/*=========================*/
void LcdData(unsigned char cc,unsigned char LcdMode)
{
LcdDir=1;
LCDCONTROL=LcdCtrl;
LcdEnablePin=1;
LCDCONTROL=LcdCtrl;
switch (LcdMode)
{
case 0:
LcdCS1Pin=1;
LcdCS2Pin=1;
LCDCONTROL=LcdCtrl;
break;
case 1:
LcdCS1Pin=1;
LCDCONTROL=LcdCtrl;
break;
case 2:
LcdCS2Pin=1;
LCDCONTROL=LcdCtrl;
break;
default:
break;
}
LcdRegPin=1;
LcdRWPin=0;
LCDCONTROL=LcdCtrl;
LCDCS = cc;
LcdEnablePin=0;
LCDCONTROL=LcdCtrl;
switch (LcdMode)
{
case 0:
LcdCS1Pin=0;
LcdCS2Pin=0;
LCDCONTROL=LcdCtrl;
break;
case 1:
LcdCS1Pin=0;
LCDCONTROL=LcdCtrl;
break;
case 2:
LcdCS2Pin=0;
LCDCONTROL=LcdCtrl;
break;
default:
break;
}
}
/*=========================*/
void LcdClear(void)
{
unsigned char initi,initj;
LcdCmd(0xc0,0); /* Scan Start (0-63), 0xc0 to 0xff c0 */
LcdCmd(0x03f,0); /* Display on/off, 0x3f = on , 0x3e = off */
for (initi=0;initi<8;initi++) /* Fill the screen to blank */
{
LcdCmd(0xb8|initi,0); /* X Page (0-7), 0xb8 to 0xbf */
for (initj=0;initj<64;initj++)
{
LcdCmd(0x40|initj,0); /* Y Line (0-63), 0x40 to 0x7f */
LcdData(0x00,0); /* Access to two LCD area */
}
}
LcdCmd(0x03f,0); /* Display on/off, 0x3f = on , 0x3e = off */
Index0=0;
Index1=0;
Index2=0;
Index3=0;
}
/*=========================*/
void LcdClearU(unsigned char lin)
{/*Line=0-7*/
unsigned char initj;
LcdCmd(0xc0,0); /* Scan Start (0-63), 0xc0 to 0xff c0 */
LcdCmd(0x03f,0); /* Display on/off, 0x3f = on , 0x3e = off */
LcdCmd(0xb8|lin,0); /* X Page (0-7), 0xb8 to 0xbf */
for (initj=0;initj<64;initj++)
{
LcdCmd(0x40|initj,0); /* Y Line (0-63), 0x40 to 0x7f */
LcdData(0x00,0); /* Access to two LCD area */
}
initj=lin/2;
switch (initj)
{
case 0:
if (Index0==0)
Index0=0;
break;
case 1:
if (Index1==0)
Index1=0;
break;
case 2:
if (Index2==0)
Index2=0;
break;
case 3:
if (Index3==0)
Index3=0;
break;
default:
break;
}
}
/*=========================*/
void LcdTestU(void)
{
unsigned char initj;
for (initj=0;initj<64;initj++)
{
LcdCmd(0x40|initj,0); /* Y Line (0-63), 0x40 to 0x7f */
LcdData(0xff,0); /* Access to two LCD area */
}
}
/*=========================*/
void LcdChar(unsigned char cc,unsigned char lx,unsigned char ly)
{/*lx=0-7,ly=0-15*/
unsigned char loop;
Lcdk=ly*8;
LcdCmd(0xc0,0); /* Scan Start (0-63), 0xc0 to 0xff c0 */
LcdCmd(0x03f,0); /* Display on/off, 0x3f = on , 0x3e = off */
for (loop=0;loop<8;loop++)
{
if ((Lcdk+loop)>63)
{
LcdCmd(0xb8|(lx&0x07),2); /* X Page (0-7), 0xb8 to 0xbf */
LcdCmd(0x40|((Lcdk+loop)&0x3f),2);/* Y Line (0-63),0x40 to 0x7f */
LcdData(ASCII[(cc-0x20)*8+loop],2);
}
else
{
LcdCmd(0xb8|(lx&0x07),1); /* X Page (0-7), 0xb8 to 0xbf */
LcdCmd(0x40|((Lcdk+loop)&0x3f),1);/* Y Line (0-63),0x40 to 0x7f */
LcdData(ASCII[(cc-0x20)*8+loop],1);
}
}
}
/*=========================*/
void LcdHChar(unsigned char cc,unsigned char lx,unsigned char ly)
{/*lx=0-3,ly=0-7*/
unsigned char loop1,loop2;
unsigned char *zPtr;
unsigned char HzTempBuff[128];
LcdCmd(0xc0,0); /* Scan Start (0-63), 0xc0 to 0xff c0 */
LcdCmd(0x03f,0); /* Display on/off, 0x3f = on , 0x3e = off */
A16=1;
EEReadB(E2PROMCS+(HzCodeAddress+cc/4)*PkgLen,HzTempBuff);
zPtr=HzTempBuff+(cc&0x03)*32;
loop2=0;
Lcdk=ly*16;
for (loop1=0;loop1<16;loop1++)
{
if ((Lcdk+loop1)>63)
{
LcdCmd(0xb8|((lx*2)&0x07),2);
LcdCmd(0x40|((Lcdk+loop1)&0x3f),2);
LcdData(*(zPtr+loop1),2);
}
else
{
LcdCmd(0xb8|((lx*2)&0x07),1);
LcdCmd(0x40|((Lcdk+loop1)&0x3f),1);
LcdData(*(zPtr+loop1),1);
}
}
for (loop1=16;loop1<32;loop1++)
{
if ((Lcdk+loop2)>63)
{
LcdCmd(0xb8|((lx*2+1)&0x07),2); /* X Page (0-7), 0xb8 to 0xbf */
LcdCmd(0x40|((Lcdk+loop2)&0x3f),2); /* Y Line (0-63), 0x40 to 0x7f */
LcdData(*(zPtr+loop1),2);
}
else
{
LcdCmd(0xb8|((lx*2+1)&0x07),1); /* X Page (0-7), 0xb8 to 0xbf */
LcdCmd(0x40|((Lcdk+loop2)&0x3f),1); /* Y Line (0-63), 0x40 to 0x7f */
LcdData(*(zPtr+loop1),1);
}
loop2++;
}
}
/*=========================*/
void LcdEng(unsigned char *c,unsigned char len,unsigned char lx,unsigned char ly)
{/*lx=1-8,ly=1-16*/
unsigned char d=0;
for (d=0;(d<len)&&(c[d]!='\0');d++)
LcdChar(c[d],lx,ly+d);
}
/*=========================*/
void NewHzDisp(unsigned char *HzString,unsigned char Place)
{
unsigned char d=0;
for (d=0; d<8;d++)
{
if(HzString[d]==0xff) return;
LcdHChar(HzString[d],Place,d);
}
}
/*=========================*/
void MessageShow(unsigned char Place,unsigned char Noi)
{
if(!LanguageFlag)
NewHzDisp(LcdMessageC[Noi],Place);
else
{
LcdClearU(Place*2+1);
LcdEng(&LcdMessageE[Noi][0],16,Place*2,0);
}
}
/*=========================*/
void TimeDisp(unsigned char order)
{
if(order==1)
{
LcdEng(TimeStr,10,3,1); /*===date&week___yyyy/mm/dd--weekday===*/
LcdEng("--",2,3,11);
LcdChar(TimeStr[20],3,13);
}
else if(order==2)
LcdEng(TimeStr+11,8,5,1); /*==time___hh:mm:ss===*/
else
{
if(!Flag_New)
{
if(PMode!=PhoneStatusCheck) LcdEng(TimeStr,16,3,0); /*===date&week___yyyy/mm/dd--weekday===*/
else LcdEng(TimeStr,16,7,0);
}
else
LcdEng(TimeStr,16,3,0); /*===date&week___yyyy/mm/dd--weekday===*/
}
}
/*=========================*/
void MoneyShow(void)
{
unsigned char MoneyShowBuf[6];
IntToStr(MoneyShowBuf,MoneyLeft);
if(MoneyShowBuf[1]==0)
MoneyShowBuf[0]=0x20;
else
MoneyShowBuf[0]=MoneyShowBuf[1];
if(MoneyShowBuf[2]==0)
MoneyShowBuf[1]=0x20;
else
MoneyShowBuf[1]=MoneyShowBuf[2];
if(MoneyShowBuf[3]==0)
MoneyShowBuf[2]=0x30;
else
MoneyShowBuf[2]=MoneyShowBuf[3];
MoneyShowBuf[3]=0x2e;
MoneyShowBuf[4]=MoneyShowBuf[4];
MoneyShowBuf[5]=0x30;
LcdEng(MoneyShowBuf,6,5,8);
}
/*=========================*/
void LcdRoll(unsigned char * buff,unsigned char len,unsigned char page)
{
unsigned char lri;
if(len>=15)
{
for(lri=0;lri<15;lri++)
LcdChar(*(buff+len-15+lri),page,lri);
}
else
{
for(lri=15-len;lri<15;lri++)
LcdChar(*(buff+len-15+lri),page,lri);
}
}
void CallTimeShow(unsigned int Sec)
{
unsigned char temp[9];
unsigned char icnt;
TimeIntToString(temp,Sec);
for(icnt=6;icnt>=5;icnt--)
temp[icnt+1]=temp[icnt-1];
for(icnt=4;icnt>=3;icnt--)
temp[icnt]=temp[icnt-1];
temp[2]=':';
temp[5]=':';
if(IPCard_Flag)
{
if(temp[1]==0x30)
{
for(icnt=0;icnt<5;icnt++) //5
LcdChar(temp[icnt+3],5,icnt+11); //icnt+11
}
else
{
for(icnt=0;icnt<7;icnt++)
LcdChar(temp[icnt+1],5,icnt+9);
}
}
else
{
if(temp[1]==0x30)
{
for(icnt=0;icnt<5;icnt++)
if(IP_Flag) LcdChar(temp[icnt+3],7,icnt+4);
else LcdChar(temp[icnt+3],7,icnt+2); //icnt+11
}
else
{
for(icnt=0;icnt<6;icnt++)
if(Flag_Ring)LcdChar(temp[icnt+1],7,icnt+2);
else LcdChar(temp[icnt+1],7,icnt+4);
}
}
}
void LcdUnion(void)
{/*lx=0-3,ly=0-7*/
unsigned char initi,initj;
unsigned char *zPtr;
LcdCmd(0xc0,0); /* Scan Start (0-63), 0xc0 to 0xff c0 */
LcdCmd(0x03f,0); /* Display on/off, 0x3f = on , 0x3e = off */
zPtr=Unicom;
for (initi=0;initi<8;initi++) /* Fill the screen to blank */
{
LcdCmd(0xb8|initi,1); /* X Page (0-7), 0xb8 to 0xbf */
for (initj=0;initj<64;initj++)
{
LcdCmd(0x40|initj,1); /* Y Line (0-63),0x40 to 0x7f */
LcdData(*(zPtr+initi*64+initj),1); /* Access to two LCD area */
}
}
LcdCmd(0x03f,0); /* Display on/off, 0x3f = on, 0x3e = off */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -