📄 lcdlib.c
字号:
for(j=0;j<LCDHEIGHT;j++){
for(i=0;i<LCDColumn;i++){
data=0;
showrow=LCDCurrentDspTxt+j/LCDTxtMode_TxtHeight;
if(showrow>LCDRow-1)
showrow-=LCDRow;
txtdata=LCDTxtBuffer[showrow][i];
if(txtdata>=128)
txtdata=' ';
txtdata=LCDTxtData[txtdata][j%LCDTxtMode_TxtHeight];
#if(LCDDATA_ORDER == LCDDATA_SWAPW) //高低字交换
*pLCDBuffer=((txtdata>>7)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>6)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>5)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>4)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>3)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>2)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>1)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>0)&0x1)*0xff;
pLCDBuffer++;
#else
*pLCDBuffer=((txtdata>>4)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>5)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>6)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>7)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>0)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>1)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>2)&0x1)*0xff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>3)&0x1)*0xff;
pLCDBuffer++;
#endif
}
}
#elif (LCDCOLOR==COLOR64K)
unsigned short int *pLCDBuffer=(unsigned short int *)pLCDFB;
for(j=0;j<LCDHEIGHT;j++){
for(i=0;i<LCDColumn;i++){
data=0;
showrow=LCDCurrentDspTxt+j/LCDTxtMode_TxtHeight;
if(showrow>LCDRow-1)
showrow-=LCDRow;
txtdata=LCDTxtBuffer[showrow][i];
if(txtdata>=128)
txtdata=' ';
txtdata=LCDTxtData[txtdata][j%LCDTxtMode_TxtHeight];
*pLCDBuffer=((txtdata>>7)&0x1)*0xffff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>6)&0x1)*0xffff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>5)&0x1)*0xffff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>4)&0x1)*0xffff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>3)&0x1)*0xffff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>2)&0x1)*0xffff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>1)&0x1)*0xffff;
pLCDBuffer++;
*pLCDBuffer=((txtdata>>0)&0x1)*0xffff;
pLCDBuffer++;
}
}
#endif
}
void LCD_printf(const char *format,...)
{
int i,j=0;
int LCDCurrentDspTxt=0;
va_list v_list;
char *ptr;
static char tbuf[256];
va_start(v_list, format); // Initialize variable arguments.
vsprintf(tbuf, format, v_list );
va_end(v_list);
ptr= tbuf;
if(LCDdspMode!=DspTxtMode)
return;
/*格式化字符串*/
for(i=0;ptr[i]!=0;i++){
if(ptr[i]=='\n'){ //换行
LCDCurrentPrnTxt++;
if(LCDCurrentPrnTxt>LCDRow-1){
LCDCurrentPrnTxt-=LCDRow;
LCDIsprnOverPage=TRUE;
}
if(LCDIsprnOverPage)
LCDCurrentDspTxt=LCDCurrentPrnTxt;
for(;j<LCDColumn;j++) //补齐空格
LCDTxtBuffer[LCDCurrentPrnTxt][j]=0;
j=0;
}
else{
if(j<LCDColumn)
LCDTxtBuffer[LCDCurrentPrnTxt][j++]=ptr[i];
}
}
LCD_TxtRefresh(LCDCurrentDspTxt);
}
void LCD_ChangeMode(int mode)
{
LCDdspMode=mode;
}
#if (USE_MINIGUI==0) && (DIRECT_DISPLAY==0)
extern U32 LCDBuffer[LCDHEIGHT][LCDWIDTH];
//extern U32 *LCDBuffer[];
void LCD_Refresh()
{
int i,j;
U32 lcddata;
U32 pixcolor; //一个像素点的颜色
U32 *p=pLCDFB;
U8* pbuf=(U8*)LCDBuffer[0];
if(LCDdspMode!=DspGraMode)
return;
#if (LCDCOLOR==GRAY16)
for(i=0;i<LCDWIDTH*LCDHEIGHT/8;i++){
lcddata=0;
for(j=28;j>=0;j-=4){
pixcolor=0xf-(pbuf[0]+pbuf[1]+pbuf[2])/48; //变换RGB色彩为灰度
lcddata|=pixcolor<<j;
pbuf+=4;
}
#if(LCDDATA_ORDER == LCDDATA_SWAPW) //高低字交换
lcddata=(lcddata>>16)|(lcddata<<16);
#endif
*(pLCDFB+i)=lcddata;
}
#elif (LCDCOLOR==COLOR256)
for(i=0;i<LCDWIDTH*LCDHEIGHT/4;i++){
lcddata=0;
#if(LCDDATA_ORDER == LCDDATA_SWAPW) //高低字交换
for(j=0;j<32;j+=8){
pixcolor=(pbuf[0]&0xe0)|((pbuf[1]>>3)&0x1c)|(pbuf[2]>>6); //变换RGB
// R G B
lcddata|=pixcolor<<j;
pbuf+=4;
}
#else
for(j=24;j>=0;j-=8){
pixcolor=(pbuf[0]&0xe0)|((pbuf[1]>>3)&0x1c)|(pbuf[2]>>6); //变换RGB
// R G B
lcddata|=pixcolor<<j;
pbuf+=4;
}
#endif
*p=lcddata;
p++;
}
#elif (LCDCOLOR==COLOR64K)
//#define RGB888_RGB565(p) ((p[0]>>3)|((p[1]&0xfc)<<3)|((p[2]&0xf8)<<8))
// R G B
#define RGB888_RGB565(p) ((p[2]>>3)|((p[1]&0xfc)<<3)|((p[0]&0xf8)<<8))
for(i=0;i<LCDWIDTH*LCDHEIGHT/2;i++){
pixcolor=RGB888_RGB565(pbuf); //变换RGB
lcddata=pixcolor;
pbuf+=4;
pixcolor=RGB888_RGB565(pbuf); //变换RGB
lcddata|=pixcolor<<16;
pbuf+=4;
*p=lcddata;
p++;
}
#endif
}
#endif //#if (USE_MINIGUI==0) && (DIRECT_DISPLAY==0)
//文本模式下清除屏幕?
void LCD_Cls()
{
LCDCurrentPrnTxt=0, //打印文本所在的行
LCDIsprnOverPage=FALSE;
memset(LCDTxtBuffer,0,LCDRow*LCDColumn);
}
void LCD_TestShow()
{
int i,j;
for(j=0;j<LCDHEIGHT;j+=16){
for(i=0;i<40;i++){
*(pLCDFB+0+i+j*40)=0xffffffff;
*(pLCDFB+40+i+j*40)=0xeeeeeeee;
*(pLCDFB+80+i+j*40)=0xdddddddd;
*(pLCDFB+120+i+j*40)=0xcccccccc;
*(pLCDFB+160+i+j*40)=0xbbbbbbbb;
*(pLCDFB+200+i+j*40)=0xaaaaaaaa;
*(pLCDFB+240+i+j*40)=0x99999999;
*(pLCDFB+280+i+j*40)=0x88888888;
*(pLCDFB+320+i+j*40)=0x77777777;
*(pLCDFB+360+i+j*40)=0x66666666;
*(pLCDFB+400+i+j*40)=0x55555555;
*(pLCDFB+440+i+j*40)=0x44444444;
*(pLCDFB+480+i+j*40)=0x33333333;
*(pLCDFB+520+i+j*40)=0x22222222;
*(pLCDFB+560+i+j*40)=0x11111111;
*(pLCDFB+600+i+j*40)=0x00000000;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -