📄 user_lcd.c
字号:
#define LCD_GLOBALS
#include "includes.h"
/*
*************************************************************
* GBA BG3模式下 字符 LCD显示
*
* printLCD("%s","hello!\r\n");
* 目前支持的控制字符有
* '\r' 回车归头
* '\n' 回车换行
* '\t' TAB 跳格 默认4格 可以在driver.h中重新定义
*
*
* 作者: 李强 (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; // 指向字母点阵数据
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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -