?? lcd.c
字號:
#ifdef HY_12864B
#include "..\h\globle.h"
#include "..\h\lcd.h"
extern void RESET(void);
extern void INITIAL(void);
extern void CLEARPAGE(byte);
extern void ROLL(byte);
extern void CHAR_PR(byte,byte,byte);
byte PROMPT_X; //當前光標橫坐標
byte PROMPT_Y; //當前光標縱坐標(0-7)
byte V_PROMPT_Y; //虛擬當前光標縱坐標(0--0xff)
//word V_PROMPT_Y; //虛擬當前光標縱坐標(0--0xffff)
byte BACKSPACECODE;
byte CHAR_WIDTH=16; //輸出字符的寬度
byte CHAR_HEIGHTH=16; //輸出字符的高度
/*
void LcdReset(void)
{
RESET();
}
*/
void LcdInit(void)
{
INITIAL();
PROMPT_X=0;
PROMPT_Y=0;
V_PROMPT_Y=0;
}
void LcdClearLine(byte line)
{
CLEARPAGE(line);
}
void LcdClearAll(void)
{
byte i;
for(i=0;i<8;i++)
CLEARPAGE(i);
}
void LcdRoll(byte pixels) //每次卷動pixels像素
{
ROLL(PROMPT_Y*8+pixels);
}
byte LcdPutOne(byte x,byte y,byte code0) //輸出一個字符,(x,y)為坐標,y是行號
{
CHAR_PR(x,y,code0);
return(code0);
}
void NextLine(void)
{
byte i,line;
line=CHAR_HEIGHTH/8;
PROMPT_X=0;
V_PROMPT_Y+=line;
PROMPT_Y+=line;
if(PROMPT_Y>=TOTAL_PAGES) PROMPT_Y-=8;
if(V_PROMPT_Y>=TOTAL_PAGES)
{
LcdRoll(CHAR_HEIGHTH); //如果超出范圍則自動卷動屏幕
for(i=0;i<line;i++)
LcdClearLine(PROMPT_Y+i); //并將不應該出現的行清楚
}
}
void BackSpace(void)
{
PROMPT_X-=CHAR_WIDTH;
if(PROMPT_X>=0x80) PROMPT_X=0; //只能在本行有效
LcdPutOne(PROMPT_X,PROMPT_Y,BACKSPACECODE);
}
/*
void SuperBackSpace(void)
{
byte k;
PROMPT_X-=CHAR_WIDTH;
if(PROMPT_X>=0x80)
{
k=V_PROMPT_Y; //此段代替上一行代碼,可以清除上一行顯示,不建議使用
V_PROMPT_Y-=CHAR_HEIGHTH/8;
if(k<V_PROMPT_Y) V_PROMPT_Y=k;
PROMPT_Y=V_PROMPT_Y%8;
}
LcdPutOne(PROMPT_X,PROMPT_Y,BACKSPACECODE);
}
*/
byte LcdPutChar(byte charcode)
{
if(charcode==LR ) NextLine(); //遇到回車符則換行
else
{
if(charcode<0x40) {CHAR_WIDTH=8;CHAR_HEIGHTH=16;BACKSPACECODE=BACKSPACECODE8_16;}
else if(charcode<0x80) {CHAR_WIDTH=6;CHAR_HEIGHTH=8;BACKSPACECODE=BACKSPACECODE8_8;} //CHAR_WIDTH=8;
else if(charcode<0xd0) {CHAR_WIDTH=16;CHAR_HEIGHTH=16;BACKSPACECODE=BACKSPACECODE16_16;}
else if(charcode<0xe0) {CHAR_WIDTH=24;CHAR_HEIGHTH=24;BACKSPACECODE=0xdf;}
else if(charcode<0xf0) {CHAR_WIDTH=32;CHAR_HEIGHTH=32;BACKSPACECODE=0xef;}
else if(charcode<0xfd) {CHAR_WIDTH=12;CHAR_HEIGHTH=16;BACKSPACECODE=BACKSPACECODE12_16;}
//else
if(charcode==BACKSPACE) BackSpace(); //退一格
else
{
if((PROMPT_X+CHAR_WIDTH)>TOTAL_X_PIXELS) NextLine(); //如果右邊超出顯示范圍則從下一行顯示,或卷頁
LcdPutOne(PROMPT_X,PROMPT_Y,charcode);
PROMPT_X+=CHAR_WIDTH;
}//else BACKSPACE
}//else LR
return(charcode);
}
void Display(byte *string) //從當前坐標處開始輸出字符串,具有自動換行、退格功能,能夠自動卷動屏幕
{
byte i=0;
byte charcode;
while((charcode=*(string+i))!=STRING_END)
{
LcdPutChar(charcode);
i++;
} //while
}
void DisplayNumber(word number) //number為要顯示的數字
{
byte NumDisplay[5];
byte i,*string;
bit rtn=0;
NumDisplay[0]=number/10000; //最高位
number-=NumDisplay[0]*10000;
NumDisplay[1]=number/1000;
number-=NumDisplay[1]*1000;
NumDisplay[2]=number/100;
number-=NumDisplay[2]*100;
NumDisplay[3]=number/10;
number-=NumDisplay[3]*10;
NumDisplay[4]=number;
string=NumDisplay;
for(i=0;(i<5)&&(rtn==0);i++) //尋找第一個不為0的數字位置//保證至少輸出一個數字
{
if(*(string+i)!=0) rtn=1;
}
for(i-=1;i<5;i++)
{
LcdPutChar(*(string+i));
}
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -