标签:
一个:先上图看到的结果,下面的屏幕截图android在测试的结果“SD卡测试”、、“GPS测试”和其他字符24x24字体进来。
二:
1)简单介绍
《信息交换用汉字编码字符集》是由中国国家标准总局1980年公布,1981年5月1日開始实施的一套国家标准。标准号是GB
2312—1980
GBK与GB 2312—1980国家标准所相应的内码标准兼容,同一时候在字汇一级支持ISO/IEC10646—1和GB 13000—1的所有中、日、韩(CJK)汉字,共计20902字。
这样的表示方式也称为区位码。
三:代码实现
当中用到的hkk.h库文件我已经上传的CSDN(http://download.csdn.net/detail/funbox/7650167)上面,实用到的朋友能够下载使用
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ioctl.h> #include <stdio.h> #include <unistd.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <sys/mman.h> #include <linux/fb.h> #include <linux/android_pmem.h> #include "hkk24.h" typedef unsigned long U32; typedef unsigned short U16; typedef unsigned char U8; U8* string_def[] = {{" SD卡測试"},{" Camera測试"}, {"音频測试"},{"重力传感器"}, {" LCD測试" },{" GPS測试"}, {"背光測试"},{"触屏測试"}, {"按键測试"},{" OTG測试"}, {"蓝牙測试"},{" WIFI測试"}, {" HDMI測试"},{" NFC測试"}, {"指南针測试"},{"陀螺仪測试"}, }; /* =============================================================================== Function : PutPixel 功能 :画单个像素(一个点) 入口參数 :U16 x:点的X坐标 U16 y:点的y坐标 U16 c:点的颜色 =============================================================================== */ void PutPixel(U16 x, U16 y) { set_pixel(x, y, 0, 0, 255, 0); } /* =============================================================================== Function : WriteHZ24 功能 :画中文24点阵汉字 入口參数 :U16 x:汉字X坐标 U16 y:汉字Y坐标 U16 c:汉字颜色 U16 bk_c:汉字背景颜色 U32 addr:汉字所在地址 =============================================================================== */ void WriteHZ24(U16 x, U16 y, U16 c, U16 bk_c, U32 addr) { U16 i16, j16, zg; U32 mask, buf; U8 const *pZK; pZK = &HZ24KFont[addr]; for(i16=0; i16<24; i16++) { buf= pZK[3*i16]<<16 | pZK[3*i16 + 1]<<8 | pZK[3*i16 + 2]; mask = 0x800000; for(j16=0; j16<24; j16++) { if(buf & mask) { PutPixel(x+j16,y+i16); } else { //*addr_ptr = bk_c; //????
?
?
??
????
?
? } mask = mask >> 1; } } } /* =============================================================================== Function : WriteEN24 功能 :画英文24*16点阵汉字 入口參数 :U16 x:汉字X坐标 U16 y:汉字Y坐标 U16 c:汉字颜色 U16 bk_c:汉字背景颜色 U32 addr:英文所在地址 =============================================================================== */ void WriteEN24(U16 x, U16 y, U16 c, U16 bk_c, U32 addr) { U16 i16, j16, zg; U32 mask, buf; U8 const *pZK; pZK = &ENG24Font[addr]; for(i16=0; i16<24; i16++) { buf= pZK[2*i16]<<8 | pZK[2*i16 + 1]; mask = 0x8000; for(j16=0; j16<24; j16++) { if(buf & mask) { PutPixel(x+j16,y+i16); } else { //*addr_ptr = bk_c; } } mask = mask >> 1; } } /* =============================================================================== Function : Lcd_Put24 功能 :画24点阵的文字 入口參数 :U16 x:文字X坐标 U16 y:文字Y坐标 U16 c:文字颜色 U16 bk_c:文字背景颜色 U8* string:文字内容 =============================================================================== */ void Lcd_Put24(U16 x, U16 y, U16 c, U16 bk_c, U8* string) { U8 i8; U16 Block, Pos; U16 nm; U32 addr; U8 size; //printf("Lcd_Put24 string = %s\n",string); size = strlen(string); for(i8 = 0;i8 < size;i8++) { printf("string[%d]:%x\n",i8,string[i8]); } for(i8=0; i8<size; i8++) { if(string[i8]==0) break; if(string[i8]>128) { nm = 0; Block = string[i8]; Pos = string[++i8]; nm = Block<<8|Pos; //nm = 0xb0a1; printf("nm = 0x%x\n",nm); //addr = (((nm>>8) - 0x0b0 )*94 + ((nm&0x00ff) - 0xa1 )+1410)*72; addr = (((nm>>8) - 0xa1 )*94 + ((nm&0x00ff) - 0xa1))*72; WriteHZ24(x+i8*13, y, c, bk_c, addr); } else { addr = (2*94+(string[i8]-0x21))*72; WriteHZ24(x+i8*15, y,c,bk_c,addr); //addr = (string[i8]-0x20)*48; //WriteEN24(x+i8*13, y,c,bk_c,addr); } } } int main(int argc, char ** argv) { U8 i8; gr_init(); draw_line(0,0,300,300); Lcd_Put24(0,0,0,0,"啊薄病场础怠丁贰浮埂骸尽取摇堋妗稹鳌齄亚忆"); Lcd_Put24(0,50,0,0,"Yayi"); for(i8 = 0;i8 < 8;i8++) { Lcd_Put24(0,100+i8*50,0,0,string_def[i8*2]); Lcd_Put24(300,100+i8*50,0,0,string_def[i8*2+1]); } exit(EXIT_SUCCESS); }
版权声明:本文博客原创文章。博客,未经同意,不得转载。
标签:
原文地址:http://www.cnblogs.com/hrhguanli/p/4659405.html