本实验在驱动前一个实验的基础上实现了汉字和字母的显示。主要在于汉字写入函数Draw_Text16()和ASCII写入函数Draw_ASCII()的编写,这两个函数主要用到一个两重循环给每个点赋值相应的颜色,汉字占用16*16个像素比ASCII的8*16复杂一点,需要在第二层循环再来一次,具体实验代码后有详细注释。区分汉字与ASCII也很简单,ASCII码的最高位是0,而中文的最高位是1,因此当读取到的一个字节的最高位是0,则该字节为ASCII码,它的下一个字节与这个字节无关。编码规则:每个汉字是由两个字节表示的,前一个字节表示的区号,后一个字节表示的位号,那么汉字在汉字库中的位置为:94×(区号-1)+(位号-1)。具体到汉字在某一数据库中的位置,还需要乘以一个汉字字模所占的字节数,即[94×(区号-1)+(位号-1)]×一个汉字字模所占字节数。如一个字模大小为16×16的宋体数据库,库里每个汉字所占的字节为16×16÷8=32,则每个汉字在该宋体数据库中的位置为:[94×(区号-1)+(位号-1)]×32。
本实验实验代码如下:
#define
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "lcdlib.c"
#include "lcdlib.h"
#include "font_libs.h"
#define LCD_XSIZE
#define LCD_YSIZE
#define SCR_XSIZE
#define SCR_YSIZE
volatile static unsigned short LCD_BUFFER[SCR_YSIZE][SCR_XSIZE];
void delay(int times)//延时函数
{
}
void Lcd_init(void)
{
}
void Draw_Circular(U32 c)//画圆函数
{
}
//绘制屏幕背景颜色,颜色为c
void Brush_Background( U32 c)
{
}
void PutPixel(U32 x,U32 y, U32 c )//绘制像素点
{
}
void Draw_Text16(U32 x,U32 y,U32 color,const unsigned char ch[])//绘制大小为16×16的中文字符
{
}
void Draw_ASCII(U32 x,U32 y,U32 color,const unsigned char ch[])//绘制大小为8×16的ASCII码
{
}
void Main(void)
{
Brush_Background(0xffffff);//绘制背景为白色
for(i=0;i<length-1;i++)
{
}
while(1);
}