一、字库格式是先行后列,以12*12格式为例,字库的前两字节为第一行点阵(第一字节8bit,第二字节的高4bit),共 24 字节为一个汉字的内容。其它字库依此类推
二、显示时从高bit位(bit7)到低bit位(bit0)依次显示,该bit位为1则输出字符颜色,为0则输出背景色
三、下面是一个字符的显示例程,从 8*5,12*6,16*8,24*12,。。。
const unsigned long tab_addr_offset_asc[]=
{
offset_asc_8,offset_asc_12,offset_asc_16,offset_asc_24,offset_asc_32,offset_asc_40,offset_asc_48,offset_asc_56,
offset_asc_64,offset_asc_72,offset_asc_80,offset_asc_96,offset_asc_128,offset_asc_end,
}
const unsigned short tab_len_asc[]=
{
0x08,0x0c,0x10,0x30,0x40,0x78,0x90,0xe0,0x100,0x168,0x190,0x240,0x400,
}
const unsigned char tab_xw_asc[]=
{
0x04,0x05,0x07,0x0b,0x0f,0x13,0x17,0x1b,0x1f,0x23,0x27,0x2f,0x3f,
}
const unsigned char tab_yw_asc[]=
{
0x07,0x0b,0x0f,0x17,0x1f,0x27,0x2f,0x37,0x3f,0x47,0x4f,0x5f,0x7f,
}
//*************************************************************************
// 这是一个字符显示程序, 显示数据由 lcd_byte_data 传递
// 显示到 pos_x(行), pos_y(列)
//*************************************************************************
void wr_lcd_hex(unsigned char lcd_byte_data,unsigned char font_ord)
{
unsigned char i,j,k
unsigned char x_w,y_w //行列位宽
unsigned char x_byte_w //行字节宽
unsigned char zoom_bak
unsigned short b_order
x_w=tab_xw_asc[font_ord]
y_w=tab_yw_asc[font_ord]
x_byte_w=x_w
x_byte_w+=0x07
x_byte_w>>=0x03 //每行字节数
clrwdt()
ex_ee_addr.w[0]=lcd_byte_data
ex_ee_addr.w[1]=0x00
ex_ee_addr.val*=tab_len_asc[font_ord]
ex_ee_addr.val+=tab_addr_offset_asc[font_ord]
lcd_set_rang(lcd_pos_x,lcd_pos_x+x_w,lcd_pos_y,lcd_pos_y+y_w)//设定写入区域
b_order=0x00
set_lcd_cs_on
lcd_wr_cmd(lcd_cmd_wr_rams)//写存储器,后跟内容
zoom_bak=zoom
zoom=0x01
x_w++ //宽度实际位数
k=max_45db_buff //进入下面循环程序时自动读入字库
while (b_order<tab_len_asc[font_ord])
{
if (k>=max_45db_buff) //续读字库
{
rd_45db_data(ex_ee_addr.val,rd_45db_buff,max_45db_buff)//读字库
ex_ee_addr.val+=max_45db_buff
i=x_w
k=0x00
}
j=0x80
while ((i)&&(j))
{
if (rd_45db_buff[k]&j)
lcd_wr_color(lcd_word_color)
else
lcd_wr_color(lcd_back_color)
j>>=0x01
i--
}
k++
b_order++
if (i==0x00) //当前行写完,更新行长
i=x_w
}
zoom=zoom_bak
set_lcd_cs_off
//调整到下一显示位置
lcd_pos_x+=x_w
if (lcd_pos_x>max_lcd_pos_x)
{
lcd_pos_x=0x00
lcd_pos_y+=y_w+0x01
if (lcd_pos_y>max_lcd_pos_y)
lcd_pos_y=0x00
}
}
有 *** 作系统的话,直接用 *** 作系统的GUI做硬件移植就好了,也就是说把TFT驱起来,之后GUI里面一般都带汉字库的没有 *** 作系统,就自己加汉字库,存储器够的话呢,就可以直接把hzk16(WPS的汉字库)放进去,存储器不够嘛,就要自己根据用到的字符,从hzk16里面扒自己需要的那些字模了
你现在看到的这两个函数LCD_ShowString()ChineseChar()是你在上层调用的,具体的函数定义你要去看底层是怎么实现的。我先简单介绍下着两个函数LCD_ShowString(12,60,colors[0],colors[7],"-")应该是讲屏幕上x=12,y=60的地方显示一个“-”字符,字符颜色应该是你定义的colors[0],TFT屏的背景颜色是colors[7],这两个是你函数库自己定义的,可以改。
ChineseChar(20,60,1,colors[0],colors[7],1) //带 这个函数和上面那个函数大致相同,至于为什么会显示“带”,是因为最后那个1,这个程序你应该定义一个数组,在这个数组里面对你所要显示的字全部编码并存在这个数组中,最后你只需用想调用数组下标那样调用这个汉子。
至于你想显示班级、姓名 只需用把班级姓名进行编码就可以调用这个ChineseChar()函数进行显示
其实很简单的,只需用该几步就可以达到你想要的,不难~~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)