lcd显示汉字——取模加显示

1、显示汉字,有专门的的字库,但是汉字很多,每一个汉字都需要专门的编码,需要更大的存储空间存放字库,因此需要外部 flash

2、无论是汉字还是英文,显示的原理都是一样的——都是像素点的亮灭,显示出我们想要的形状,不同lcd的分辨率会有不一样。

像素点展示

3、如同上面一个汉字“实”,编码如下(阴码——1为亮,0为灭;阳码——1为灭,0为亮)

{0x08,0x20,0x30,0x21,0x20,0x21,0x21,0x22,0x28,0xE2,0x26,0x24,0xA0,0x28,0x60,0x30,

 0x2F,0xE0,0x20,0x30,0x20,0x28,0x20,0x24,0x20,0x22,0x28,0x21,0x30,0x20,0x00,0x00},/*"实",4*/

那么我们在显示的时候,在为1 的地方一个点就好,为0的地方就

0x08:——0000 1000,再看看第一张图片,从上往下找,第五个像素点就点亮

相应的,16 x 16 的汉字就需要16 x 16个像素点才能显示一个汉字,一个16进制数为8位,还差8位,因此需要两个16进制数才能显示一列的像素点。

4、取模软件使用的是:PCtoLCD2002完美版,软件界面如下图所示。主要设置字的大小就好就好,注意:在字的大小上面还有一个对应的英文大小,这个是取英文字母字模大小,但是,谁会去取英文字母的模呢,除非尺寸不和要求。

[PCtoLCD2002完美版界面图]

之后点击界面1 的齿轮,进行设置。怎么选择的取模方式,那么在写显示函数的时候就得使用相同的方式进行对像素点进行处理。

设置界面

1、阴码——1为亮,0为灭;阳码——1为灭,0为亮;

2、取模方式:怎么取的就怎么进行显示就好,如逐列式,就是一列一列读;像oled比较特殊,需要列行式,显示的时候也是八行显示像素点为一个阵列。

3、方向是哪个方向得看 ——取模走向,顺向就从上往下取;

4、C51时使用C语言取模的固定操作;

5、点阵大小就是最后生成的数组是多少个一行,如24,那么就是24个数据一行,剩下的就在下一行,这个不影响数据内容,只是最后你复制的时候需不需要进行改一下格式,好看一点而已,至于前缀后缀那些也只是最后生成的数组是什么样的。如下数据:
{0x08,0x20,0x30,0x21,0x20,0x21,0x21,0x22,0x28,0xE2,0x26,0x24,0xA0,0x28,0x60,0x30,0x2F,0xE0,0x20,0x30,0x20,0x28,0x20,0x24}, {0x20,0x22,0x28,0x21,0x30,0x20,0x00,0x00},/*"实",0*/
最后在数组里面使用的时候肯定要改一下格式而已,要不然如何使用。

5、程序源码

  • 相关程序的编写得参考你是用的LCD或者OLED屏,查看显示字符的函数,知道扫描方向(当然取模的时候就知道扫描方向了),哪个是x,哪个是y,加以修改就可得到显示汉字的函数。
const unsigned char Word[100] = "实践班";//将取模的汉字全部放在这
const unsigned char WordCode[10][32] = {//汉字的模,一 一对应,不能乱了顺序
{0x08,0x20,0x30,0x21,0x20,0x21,0x21,0x22,0x28,0xE2,0x26,0x24,0xA0,0x28,0x60,0x30,
0x2F,0xE0,0x20,0x30,0x20,0x28,0x20,0x24,0x20,0x22,0x28,0x21,0x30,0x20,0x00,0x00},/*实",0*/
 
{0x00,0x04,0x7C,0xFC,0x44,0x04,0x47,0xF8,0x44,0x88,0x7C,0x88,0x00,0x02,0x09,0x02,
0x09,0x04,0xFF,0xC8,0x09,0x30,0x92,0x28,0x52,0x44,0x12,0x82,0x02,0x1F,0x00,0x00},/*"践",1*/
 
{0x21,0x08,0x21,0x0C,0x3F,0xF8,0x21,0x10,0x21,0x11,0x00,0x42,0x1F,0x84,0x00,0x18,
0xFF,0xE0,0x00,0x00,0x21,0x04,0x21,0x04,0x3F,0xFC,0x21,0x04,0x21,0x04,0x00,0x00},/*"班",2*/
};
 //显示一个汉字,16*16
void DisplayWord(u8 x0,u8 y0,u8 *buf)     
{
    u8 temp = 0,t1 = 0,i = 0,j = 0,x = x0,y = y0,num = 0;
    for(i=0;i<strlen((char *)Word);i++)
    {
        if(buf[i]==Word[i]&&buf[i+1]==Word[i+1])num = i/2;      //一个汉字占两个字节
    }
    for(i = 0;i < 32;i++)//32 是由于一列16 个像素点,需要两个编码才能控制一列,因此需要在32个8位编码
    {
        temp = WordCode[num][i];
        for(t1 = 0;t1 < 8;t1++)
        {               
            if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);//点亮一个像素点
            temp <<= 1;//依次找完
            y++;
            if(y >= y0 + 16)
            {
                y = y0;
                x++;//换列
            }
        }
    }
}
//显示汉字字符串,16*16
void DisplayStringWord(u8 x,u8 y,u8 *buf,u16 color)
{    
    u8 i = 0,j = 0, x1 = x, y1 = y;
    POINT_COLOR = color;
    
    for(i=0;i<strlen((char *)buf);i+=2)
    {
        DisplayWord(x1,y1,&buf[i]);
        x1 = x1 + 16;
    }
}

最后

如果你不理解上面的叙述,那么你可以将某个英文的编码找出来,然后按照顺序一个一个按照二进制进行排列,
如:上面 “实” 的编码

{0x08,0x20,0x30,0x21,0x20,0x21,0x21,0x22,0x28,0xE2,0x26,0x24,0xA0,0x28,0x60,0x30,
0x2F,0xE0,0x20,0x30,0x20,0x28,0x20,0x24,0x20,0x22,0x28,0x21,0x30,0x20,0x00,0x00}
0x08——0000 1000
0x20——0010 0000
.......
依次写完,你会理解像素点显示的奥秘

就这样写下来,你会发现,怎么有点像,好像之后一半,然后再组合下,在倒一下......,真的比较神奇。
当然最好的对象是数字——0,不信你自己试试看,试了之后再来理解我说的话,再看下文章,你会豁然开朗。

这个方法是出自我们创新班的一位大佬,我看他这样搞,我也试着这样做。
当然了,不同的显示屏的驱动代码不同,自然显示方式也有差异,因此,必须的参考代码中是怎么显示英文的,然后试着改怎么显示中文。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容