⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 user_lcd.c

📁 ucos 在GAMEBOY上的移植
💻 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 + -