?? user_lcd.c
字號:
#define LCD_GLOBALS
#include "includes.h"
/*
*************************************************************
* GBA BG3模式下 字符 LCD顯示
*
* printLCD("%s","hello!\r\n");
* 目前支持的控制字符有
* '\r' 回車歸頭
* '\n' 回車換行
* '\t' TAB 跳格 默認(rèn)4格 可以在driver.h中重新定義
*
*
* 作者: 李強(qiáng) (mail2li@21cn.com or mail2li@163.com)
*
* 聲明: 你僅可以將以下代碼使用在你的商用或非商用,獲利或非獲利軟件中
* 你可以任意修改以下代碼,
* 唯一要求:請保留本信息及本人名字等信息
*
***********************************************************
*/
#if (ASC_FONT_W == 6 && ASC_FONT_H == 12)
#include "zm6X12.C"
#elif (ASC_FONT_W == 8 && ASC_FONT_H == 12)
#include "zm8X12.C"
#elif (ASC_FONT_W == 8 && ASC_FONT_H == 16)
#include "zm8X16.C"
#else
#error "Font define error"
#endif
u16 __inline Mode3_Getpixel(u16 x, u16 y)
{
return VideoBuffer[y*X_Size + x];
}
u16 __inline Mode3_Putpixel(u16 x ,u16 y,u16 color)
{
return (VideoBuffer[y*X_Size + x] = color);
}
// 清屏 顯示位置歸頭
void CLS(void)
{
u16 i;
for(i=0;i<X_Size*Y_Size;i++)
VideoBuffer[i] = BackGround;
setxy(0,0);
}
// 向LCD中寫一個ASCII字符的點陣
u8 lcd_putc( u8 chASC)
{
u8 i,j,k;
u8 zm; // 指向字母點陣數(shù)據(jù)
switch(chASC)
{
case '\r': /*回車 (歸頭)*/
CursorSiteX=0;
break;
case '\n': /*換行*/
CursorSiteY+=ASC_FONT_H;
break;
case '\t': /*TAB*/
k = TABLE_WIDE-(CursorSiteX/ASC_FONT_W)%TABLE_WIDE;
for(;k!=0;k--)
{
for(i=0;i<ASC_FONT_H;i++)
{
for (j=0 ; j<ASC_FONT_W ; j++)
{
Mode3_Putpixel(CursorSiteX+j , CursorSiteY+i , BackGround);
}
}
CursorSiteX+=ASC_FONT_W;
}
break;
default: /*其他*/
if(chASC < 0x7f && chASC> (' '-1)) // 漢字不在處理之列
{
for(i=0;i<ASC_FONT_H;i++)
{
zm = ASCK[chASC-' '][i];
for (j=0 ; j<ASC_FONT_W ; j++)
{
if ( testb(zm, 7) )
Mode3_Putpixel(CursorSiteX+j , CursorSiteY+i , ForeGround );
else
Mode3_Putpixel(CursorSiteX+j , CursorSiteY+i , BackGround );
zm <<= 1;
}
}
CursorSiteX+=ASC_FONT_W;
}
break;
}
if(CursorSiteX>=LCD_X)
{
CursorSiteX=0;
CursorSiteY+=ASC_FONT_H;
}
if(CursorSiteY>=LCD_Y)
{
CursorSiteX = 0;
CursorSiteY = 0;
}
return chASC;
}
hzchar lcd_puthz(hzchar hz ) //顯示一個漢字字符
{
// 暫空....
return hz;
}
u8 lcd_puts( u8 * str )
{
for(;*str!=0;str++)
{
if(*str<0x7F)
{
lcd_putc(*str); /*是ASCII字符*/
}
else
{
hzchar hz = *str;
hz <<= 8;
str++;
hz+=*str; /*將漢字GB碼整合為int*/
lcd_puthz(hz); /*是漢字*/
}
}
return true;
}
void lcd_init(void)
{
SetMode(MODE_3|BG2_ENABLE);
SetColor(COLOR_WHITE, COLOR_BLACK);
CLS();
}
const cons lcd[1] = {
LCD,
"LCD",
#ifdef BUF_GLOBALS
NULL, // LCD的顯存管理體系不是使用隊列的
NULL,
#endif
lcd_init,
lcd_putc,
lcd_puthz,
lcd_puts,
NULL, // LCD是單向的
};
void printLCD(const char *fmt, ...) //顯示字符串,允許中西文混排 目前暫時不支持中文:字庫太占用空間了
{
va_list args;
va_start (args, fmt);
printk(lcd, fmt, args);
va_end(args);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -