字符液晶显示原理实例详解
字符型 LCD 液晶显示程序设计及实践
• 指令7: 字符发生器RAM 地址设置. • 指令8: DDRAM 地址设置.
上一页 下一页 返回
上一页
返回
第二节 LCD1602 显示程序设计及实践
• 开发板上LCD1602 液晶显示模块可以和单片机STC89C 51 直接接口. 电路如图6.5所示.
• LCD1602 的三个控制引脚RS、R/ W、EN 分别接在单片机 的P2. 0、P2. 1、P2.2 引脚. 8位双向数据端口接在单片机 的P0 口. 了解原理图之后. 下面通过写一段程序来实现图6. 2的功 能.
• RS =0.
//表示单片机发送来的是显示数向LCD1602 写
• DelayMs(1). //延时
• EN =1.
//使能有效
上一页 下一页 返回
第一节 LCD1602 显示原理介绍
• P0 =0x34. //确定LCD1602 第二行第一位显示“4” • DelayMs(5). //延时 • EN =0. //关使能端 • 最后我们给出LCD1602 的其余引脚的详细介绍. 见表6.4.
上一页 下一页 返回
第一节 LCD1602 显示原理介绍
• 设置. 一般初始化内容为以下四点: • (1) 清屏. • (2) 功能设置. • (3) 显示与不显示设置. • (4) 输入模式设置. • 接下来. 解决第二个问题———显示内容的来源. LCD1602 液
晶模块内部的字符发生存储器(CGROM) 已经存储了160 个不 同的点阵字符图形.
字符型液晶显示器 -免费下载-精品文档
13章:字符型液晶显示器
13.1.2 显示板控制器的指令系统
指令功能如下: ●指令 8 : DDRAM 地址设置。 ●指令 9 :读状态标志和 AC 中地址。 ●指令 10 :写数据。 ●指令 11 :读数据。
13章:字符型液晶显示器
13.1.3 LCD 显示板与单片机的接口和编程
13章:字符型液晶显示器
Байду номын сангаас
13章:字符型液晶显示器
13.1.2 显示板控制器的指令系统
字符型 LCD 显示板控制器有 11 条指令。它的读写操作,以及屏幕和光标的操作都是通过指令编程来实现的。 R/W 指令 RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
清显示 光标返回 置输入模式 显示开/关控制 光标与字符移位 置功能 置字符发生存储器地址 置数据存储器地址 读忙标志或地址 写数到CGRAM或DDRAM 从CGRAM或DDRAM读数
0 0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 1 0 1
0 0 0 0 0 0 0 1 BF
0 0 0 0 0 0 1
0 0 0 0 0 1
0 0 0 0 1 DL
0 0 0 1 S/C N
0 0 0 D R/ L F
0 1 I/D C • •
0 • S B •
•
字符发生存储器地址AGG
13章:字符型液晶显示器
13 .1.1 字符型 LCD 的结构和引脚
DDRAM :显示数据 RAM 。它用来寄存 待显示的代码。 CGROM :字符发生器ROM。它内部已 经存储了 160 个不同的点阵字符图形, 字符图形用于字符的显示。 CGRAM :字符发生器 RAM 。它是8个 允许用户自定义的字符图形 RAM
1602液晶字符显示
1602液晶字符显示屏的原理管脚功能/1602字符液晶编辑1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:引脚符号功能说明1VSS一般接地2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5R/W R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
6E E(或EN)端为使能(enable)端,写操作时,下降沿使能。
读操作时,E高电平有效7DB0低4位三态、双向数据总线0位(最低位)8DB1低4位三态、双向数据总线1位9DB2低4位三态、双向数据总线2位10DB3低4位三态、双向数据总线3位11DB4高4位三态、双向数据总线4位12DB5高4位三态、双向数据总线5位13DB6高4位三态、双向数据总线6位14DB7高4位三态、双向数据总线7位(最高位)(也是busy flag)15BLA背光电源正极16BLK背光电源负极寄存器选择控制表RS R/W操作说明00写入指令寄存器(清除屏等)01读busy flag(DB7),以及读取位址计数器(DB0~DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.busy flag(DB7):在此位为1时,LCD忙,将无法再处理其他的指令要求。
字符集/1602字符液晶编辑1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
tft显示汉字的原理
tft显示汉字的原理
TFT(Thin-Film Transistor)显示技术是一种广泛应用于液晶显示器的技术。
在TFT显示器上显示汉字的原理如下:
1. 点阵数据:无论是汉字、字符还是图片,都需要点阵数据才能在TFT LCD上显示。
对于汉字和字符,点阵数据是一位代表一个点的数据,即0
或1。
2. 取模后的点阵数据:取模后的点阵数据中,值为1的像素点需要显示画笔颜色,即点亮;值为0的像素点则显示背景颜色。
这种颜色的对比能够显示出汉字或字符。
3. 显示区域:在LCD上显示一个图片或字符需要一个显示区域。
首先确定
其显示起点,然后确定接下来的数据是沿着X轴还是Y轴进行发送,即X
轴或Y轴地址的增长顺序和方向。
4. 汉字和字符显示:汉字或字符通过判断每一位是0还是1来显示背景颜
色或画笔颜色。
为了正常显示想要的效果,需要保证LCD屏的显示起点以
及X轴和Y轴的增长顺序和方向,与对字符或汉字的取模的点阵数据的顺
序保持一致。
如果需要更多关于TFT显示器的信息,建议咨询相关品牌官方客服或查阅技术论坛。
汉字显示LCD的实现原理及简易设计
汉字显示LCD的实现原理及简易设计欧阳三泰1,欧阳希2,欧阳琳3,周 琴4(1.湖南工程学院电气与信息系,湖南 湘潭 411104,2;华东交通大学,江西 南昌 330013;3.武汉理工大学计算机学院,湖北 武汉 430063;4.国防科学技术大学,湖南 长沙 410073) 摘要:介绍了点阵式液晶显示器E DM12864B汉字显示原理、ASCⅡ码的显示原理,描述了“汉字点阵获取程序”算法,重点描述了Windows平台上的软件可视化编程开发工具Delphi610的编程方法以及向导的功能,使开发人员几乎不用加入太多的代码就可以开发出标准的Windows风格的应用程序。
给出了采用点阵式液晶显示器E DM12864B与单片机在动力设备数据采集系统中实现汉字显示的简单应用实例的硬件和软件。
关键词:LC D;点阵液晶显示模块;字符显示中图分类号:T N14119;TP391.43 文献标识码:B 文章编号:1002-1841(2004)10-0035-03Principle and Simply Design of Chinese Characters DisplayOU YANG San2tai1,OU YANG Xi2,OU YANG Lin3,ZH OU Q in4(11Department of E lectrical and In formaton,Hunan Institute of Engineering,X iangtan411104,China;2.Huadong Jiaotong University, Nanchang330013,china;3.School of C omputer Science and Engineering,Wuhan University of T echnology,Wuhan430063,China;4. National University of Defence T echnologe,Changsha410073,China)Abstract:The principle of display the dot matrix LC D m odule that can display the Chinese character and the principle of display the ASCⅡwere presented,and the alg orithm of the s oftware that can get the dot matrix in formation of the Chinese characters were presented,and chiefly introduced the program method and the function of the tools named Delphi610that can develop the s oftware based on Windows,not to need write s o much code.At last,the application used in the power device data collect system using this kind of the dot matrix LC D m odule E DM12864B that can display the Chinese characters was presented.K eyw ord:Liquid Crystal Display Device;D ot Matrix LC D M odule(LC M);Charactes Display1 引言液晶显示器(LC D)能方便、快捷、有效地帮助操作员获取设备运行情况,并能对设备进行交互式的、人性化的操作提示。
字符型液晶LCD1602显示技术
void lcd_displaystr(unsigned char x,unsigned char y,unsigned char code *str) { //x 表示行,y 表示该行的位置(也就是列)
switch(x) {
case 0: write_lcd_command(0x80+y); break; case 1: write_lcd_command(0xc0+y); break;
if(P2_0==0) { mode++; if(mode>=4) mode=0; write_lcd_command(0x01); //清屏 }
while(P2_0==0); } switch(mode)
{ case 0x00:
lcd_displaystr(0,0x00," Study by MCS51 "); lcd_displaystr(1,0x00," Come On Baby! "); break; case 0x01: lcd_displaystr(0,0x00," Welcome To Use "); lcd_displaystr(1,0x00,""); break; case 0x02: lcd_displaystr(0,0x00," QQ:289994918 "); lcd_displaystr(1,0x00,"TEL:07732996883"); break; case 0x03: for(i=0;i<32;i++)
实验9__字符型LCD液晶显示广告牌控制
实验9 字符型LCD液晶显示广告牌控制一、实验目的1、学习字符型LCD的显示原理。
2、学习掌握字符型LCD显示字符的用法。
二、实验预备知识LCD本身不发光,是通过借助外界光线照射液晶材料而实现显示的被动显示器件。
可以显示各种文字、数字、图形。
LM016L为字符型液晶显示器LCD,其图形符号、引脚及属性如图所示。
引脚说明如下:①数据线D7~D0②控制线(有3根:RS、RW、E)③1根地线Vss④两根电源线(V DD、V EE)LM016L的属性设置如下:①每行的字符数为16,行数为2;②时钟为250KHz;③行1的字符地址为80H~8FH④行2的字符地址为C0H~CFH 图5-61 LCD图形符号和引脚三、实验内容字符型LCD液晶显示器的接口电路原理图使用LCD显示两行字符,第一行正中间显示字符为“SHEN ZHEN”,第二行显示字符为“Tel0123456”。
四、程序设计步骤1、PROTEUS电路设计字符型LCD液晶显示器电路原理图如图5-62所示,设计在PROTEU ISIS平台中进行。
(1)新建设计文件菜单【file】/【New Design】,出现选择模板窗口,选中”DEFAULT”模板,再单击”OK”按钮,在文件名框中输入文件名,单击”保存”按钮,则保存新建设计文件,其后缀自动为.DSN。
(2)从PROTEUS库中选取元器件单击“P”按钮,在其左上角“Keywords”(关键字)一栏中输入以下元器件的关键字,将以下元器件添加到对象选择器中。
①AT89C51:单片机②RES:电阻③LM0160L:16×2字符LCD显示器④CAP、CAP-ELEC:电容、电解电容⑤POT-HG:电位器⑥CRYSTAL:晶振(3)放置元器件:按照原理图合理放置元器件。
(4)放置电源和地(终端)单击工具栏中的终端按钮,在对象选择器中选取电源(POWER)、地(GROUND),用上述放置元器件方法分别放置于编辑区中。
字符型LCD的基本显示示例项目
字符型LCD的基本显示示例项目本项目为Creator软件自带的示例,它演示了如何在HD44780型字符LCD 模块上显示文字信息,同时演示了通过PWM的方式直接控制LED闪烁。
示例项目的打开和学习验证:一.对于Creator 2.1 SP1执行菜单项File ——> Open ——> Example Project在弹出的查找示例项目对话框中,按照如下方式选取HelloWorld_Blinky项目点OK后选择一个copy该示例项目的文件夹。
创建项目后会自动打开该示例项目的说明文件HelloWorld_Blinky.pdf,你也可以以后再打开该文件浏览(见下图所示)。
结合该项目说明文档,浏览并理解项目原理图、资源配置文件(配合CY8CKIT-050实验板原理图)、main.c文件。
(注意:该示例中的名为P0_0的数字输出引脚,你应该在资源配置文件中修改为分配到P6[3]端口引脚,这样才符合CY8CKIT-050板的硬件实际情况,这样修改后,程序运行时LED4将会闪烁)关于字符LCD的更多操作,请查阅字符LCD组件的数据手册。
二.对于Creator 3.3执行菜单项File ——> Code Example在弹出的查找代码示例对话框中,按照如下方式选取HelloWorld_Blinky项目点Create Project创建一个该示例项目的copy项目。
创建项目后会自动打开该示例项目的说明文件HelloWorld_Blinky.pdf,你也可以以后再打开该文件浏览(见下图所示)。
结合该项目说明文档,浏览并理解项目原理图、资源配置文件(配合CY8CKIT-050实验板原理图)、main.c文件。
(注意:该示例中的名为P0_0的数字输出引脚,你应该在资源配置文件中修改为分配到P6[3]端口引脚,这样才符合CY8CKIT-050板的硬件实际情况,这样修改后,程序运行时LED4将会闪烁)关于字符LCD的更多操作,请查阅字符LCD组件的数据手册。
1602字符型液晶显示篇
1602字符型液晶显示篇1602字符型液晶显示篇《电子制作》2008年1月站长原创,如需引用请注明出处在日常生活中,我们对液晶显示器并不陌生?液晶显示模块已作为很多电子产品的通过器件,如在计算器?万用表?电子表及很多家用电子产品中都可以看到,显示的主要是数字?专用符号和图形?在单片机的人机交流界面中,一般的输出方式有以下几种:发光管?LED数码管?液晶显示器?发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用?在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点?因此,液晶显示器画质高且不会闪烁?数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便?体积小?重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多?功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多?1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形?液晶显示器具有厚度薄?适用于大规模集成电路直接驱动?易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑?数字摄像机?PDA移动通信工具等众多领域?②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式?字符式?点阵式等?除了黑白显示外,液晶显示器还有多灰度有彩色显示等?如果根据驱动方式来分,可以分为静态驱动(Static)?单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种?③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应?例如屏的第一行的亮暗由RAM区的000H—00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=0 0H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线?这就是LCD显示的基本原理?字符的显示用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮?这样一来就组成某个字符?但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可?汉字的显示汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1?3?5……右边为2?4?6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字?2 1602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母?数字?符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块?下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法?一般1602字符型液晶显示器实物如图1:图11602字符型液晶显示器实物图1.1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图2所示:图21602LCD尺寸图1602LCD主要技术参数:显示容量:16×2个字符芯片工作电压: 工作电流:模块最佳工作电压:字符尺寸:×(W×H)mm引脚功能说明1602LCD采用标准的141所示:编号符号引脚说明1VSS电源地2VDD电源正极3VL液晶显示偏压4RS数据/命令选择5R/W读/写选择6E使能信号7D0数据8D1数据9D2数据10D3数据11D4数据12D5数据13D6数据14D7数据15BLA背光源正极16BLK背光源负极第1脚: VSS为地电源?第2脚: VDD接5V正电源?第3脚: VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度?第4脚: RS为寄存器选择,高电平时选择数据寄存器?低电平时选择指令寄存器?第5脚: R/W为读写信号线,高电平时进行读操作,低电平时进行写操作?当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS 为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据?第6脚: E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令?第7~14脚: D0~D7为8位双向数据线?第15脚: 背光源正极?第16脚: 背光源负极?2.1602LCD的指令说明及时序表2:控制命令表1602液晶模块的读写操作?屏幕和光标的操作都是通过指令编程来实现的?(说明:1为高电平?0为低电平)指令1: 清显示,指令码01H,光标复位到地址00H位置?指令2: 光标复位,光标返回到地址00H?指令3: 光标和显示模式设置I/D: 光标移动方向,高电平右移,低电平左移S: 屏幕上所有文字是否左移或者右移?高电平表示有效,低电平则无效?指令4: 显示开关控制?D: 控制整体显示的开与关,高电平表示开显示,低电平表示关显示C: 控制光标的开与关,高电平表示有光标,低电平表示无光标B: 控制光标是否闪烁,高电平闪烁,低电平不闪烁?指令5: 光标或显示移位该指令设置光标和画面的特性?S/C: 滚动对像的选择,高电平时移动显示的文字,低电平时移动光标?S/C=1画面滚动S/C=0光标滚动R/L:滚动方向的选择R/L=1向右滚动R/L=0向左滚动指令6: 功能设置命令DL: 低电平时为4位总线,高电平时为8位总线N: 低电平时为单行显示,高电平时双行显示F: 低电平时显示5x7的点阵字符,高电平时显示5x11的点阵字符?指令7: 字符发生器RAM地址设置?指令8: DDRAM地址设置?指令9: 读忙信号和光标地址BF: 忙标志位,高电平表示忙,此时模块不接收命令或者数据,如为低,表示不忙?指令10: 写数据?指令11: 读数据?状态字:,低7位为当前数据指针的地址值(即AC值);如下表:,都要确认该位值为0才可进行操作?AC6~0为7位的AC值,表示当前数据指针的地址值?DL: 设置控制器与MCU的接口形式,一般设置为1;DL=1: 数据总线宽度为8位,即DB7~DB0有效;DL=0: 数据总线宽度为4位,即DB7~DB4有效;N: 设置显示字符的行数,1602 LCD一般都设置为1;N=0: 为一行字符;N=1: 为两行字符;F: 设置显示字符的字体,一般设置为0;F=0: 为5X7点阵字符体;F=1: 为5X11点阵字符体;显示状态设置指令:该指令控制着画面?光标和闪烁的开与关?D: 画面显示状态位;D=1为显示开,D=0为显示关;该指令仅影响显示屏的开关,并不影响显存中的数据? C:光标显示状态位;C=1光标显示;C=0光标不显示?B:闪烁显示状态位;B=1时闪烁启动;B=0时闪烁关闭;闪烁只对于当前地址指针指和的字符位有效?光标或画面滚动设置指令:S/C:滚动对像的选择S/C=1 画面滚动S/C=0 光标滚动R/L:滚动方向的选择R/L=1 向右滚动R/L=0 向左滚动输入方式设置指令:该指令的功能在于设置显示字符的输入方式,即在操作数据写入/读出后,AC数据地址指针的修改方式?I/D: I/D=0 AC为自动减1的计数器,操作数据后AC自动减一;I/D=1 AC为自动加1计数器,操作数据后AC自动加1;S: 设置写入字符数据时是否允许画面滚动/光标移动(AC自动变化) S=0 禁止S=1 允许清屏指令:该指令将空格码(0x20)写入显存中;达到清屏显示的功能?归位指令:该指令将6位的CGRAM地址写入地址指针计数器AC内,随后的对数据的操作是对CGRAM的读/读操作?注: CGRAM为用户自定义字符字符的空间,并非对应LCD屏上字符位置的显存(DDRAM)?AC当中,随后的数据操作是对DDRAM(显存)的读/写操作?读数据输入RS=H,R/W=H,E=H输出D0~D7=数据写数据输入RS=H,R/W=L,D0~D7=数据,E=高脉冲输出无表3:基本操作时序表读写操作时序如图3和图4所示:图3读操作时序图4写操作时序3.1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效?要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图5是1602的内部显示地址?图51602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+B(80H)=B(C0H)?在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预?每次输入指令前都要判断液晶模块是否处于忙的状态?1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图6所示,这些字符有:阿拉伯数字?英文字母的大小写?常用的符号?和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”.图6字符代码与图形对应图4.1602LCD的一般初始化(复位)过程延时15ms 写指令38H(不检测忙信号)延时5ms写指令38H(不检测忙信号)延时5ms写指令38H(不检测忙信号)以后每次写指令?读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置写指令0CH :显示开及光标设置延时5ms写指令38H (不检测忙信号BF )延时5ms写指令38H (不检测忙信号BF )延时5ms写指令38H (不检测忙信号BF )写指令38H :显示模式设置写指令08H :显示关闭写指令01H :显示清屏写指令06H :显示光标移动设置写指令38H (不检测忙信号BF )3 1602LCD 的软硬件设计实例在1602LCD 第一行显示网站名:在第二行显示联系电话:8?实验前应先将显示切换开关切换到LCD 工作状态?图71602LCD实验演示图1.硬件原理图1602液晶显示模块可以和单片机AT89C51直接接口,电路如图8所示?图8硬件原理图2.程序流程图图9软件流程图3.软件代码/************************************************************** *************/ /*杭州电子&计算机工作室*//*演示程序*//*目标器件:AT89S51*//*晶振:*//*编译环境:Keil 7.50A*//************************************************************** *************/ /*********************************包含头文件********************************/ #include <>#include <>/*********************************端口定义**********************************/ sbit rs = P1^0;sbit rw = P1^1;sbit ep = P1^2;/********************************显示数据表*********************************/ unsigned char code dis1[] = {""};unsigned char code dis2[] = {"099"};/************************************************************** ***************函数功能:LCD延时子程序入口参数:ms出口参数:*************************************************************** **************/ void delay(unsigned char ms){unsigned char i;while(ms--){for(i = 0; i< 250; i++){_nop_();_nop_();_nop_();_nop_();}}}/************************************************************** ***************函数功能:测试LCD忙碌状态入口参数:出口参数:result*************************************************************** **************/ bit lcd_bz(){bit result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();result = (bit)(P0 & 0x80);ep = 0;return result;}/************************************************************** ***************函数功能:写指令数据到LCD子程序入口参数:cmd出口参数:*************************************************************** **************/ void lcd_wcmd(unsigned char cmd){while(lcd_bz()); //判断LCD是否忙碌rs = 0;rw = 0;ep = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();ep = 0;}/************************************************************** ***************函数功能:设定显示位置子程序入口参数:pos出口参数:*************************************************************** **************/ void lcd_pos(unsigned char pos){lcd_wcmd(pos | 0x80);}/************************************************************** ***************函数功能:写入显示数据到LCD子程序入口参数:dat出口参数:*************************************************************** **************/ void lcd_wdat(unsigned char dat){while(lcd_bz()); //判断LCD是否忙碌rs = 1;rw = 0;ep = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();ep = 0;}/************************************************************** ***************函数功能:LCD初始化子程序入口参数:出口参数:*************************************************************** **************/ void lcd_init(){lcd_wcmd(0x38);delay(1);lcd_wcmd(0x0c);delay(1);lcd_wcmd(0x06);delay(1);lcd_wcmd(0x01);delay(1);}/************************************************************** ***************函数功能:主程序入口参数:出口参数:*************************************************************** **************/ void main(void){unsigned char i;lcd_init(); //初始化LCDdelay(10);lcd_pos(0x01); //设置显示位置i = 0;while(dis1[i] != '\0'){lcd_wdat(dis1[i]); //显示字符i++;}lcd_pos(0x40); //设置显示位置i = 0;while(dis2[i] != '\0'){lcd_wdat(dis2[i]); //显示字符i++;}while(1){;};}/************************************************************** *************标题: LCD1602效果: 本程序在液晶LCD1602上显示两行字符工作于:51开发板作者: 孟庆全网站:*************************************************************** *************/#include ""/********IO引脚定义***********************************************************/sbit LCD_RS=P1^0; //定义引脚sbit LCD_RW=P1^1;sbit LCD_E=P1^2;/********宏定义**************************************************************/ #define LCD_Data P0#define Busy0x80//用于检测LCD状态字中的Busy标识/********数据定义*************************************************************/ unsigned char code uctech[] = {"Happy every day"};unsigned char code net[] = {""};/********函数声明*************************************************************/ void WriteDataLCD(unsigned char WDLCD); //写数据void WriteCommandLCD(unsigned char WCLCD,BuysC); //写命令unsigned char ReadDataLCD(void); //读数据unsigned char ReadStatusLCD(void); //读状态void LCDInit(void); //初始化void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData); //相应坐标显示字节内容void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData); //相应坐标开始显示一串内容void Delay5ms(void); //延时void Delay400ms(void); //延时/***********主函数开始********************************************************/ void main(void){Delay400ms(); //启动等待,等LCD讲入工作状态LCDInit(); //初始化Delay5ms(); //延时片刻(可不要)DisplayListChar(0,0,uctech);DisplayListChar(1,5,net);ReadDataLCD(); //测试用句无意义while(1);}/***********写数据***********************************************************/ void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD(); //检测忙LCD_Data = WDLCD;LCD_RS = 1;LCD_RW = 0;LCD_E = 0; //若晶振速度太高可以在这后加小的延时LCD_E = 0; //延时LCD_E = 1;}/***********写指令**********************************************************/ void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCD(); //根据需要检测忙LCD_Data = WCLCD;LCD_RS = 0;LCD_RW = 0;LCD_E = 0;LCD_E = 0;LCD_E = 1;}/***********读数据*************************************************************/ unsigned char ReadDataLCD(void){LCD_RS = 1;LCD_RW = 1;LCD_E = 0;LCD_E = 0;。
字符型液晶显示器 -免费下载
13章:字符型液晶显示器
13.2.2 HD61830 指令集
3.显示域设置 指令代码为02H。 该指令参数如表13.8所示。
表13.8指令参数
HN 为一行显示所占的字节数。其取值范围为 2 ~ 128 内的偶数值。 由 HN 和 HP 可得显示屏有效显示列数 N =HN×HP 。
13章:字符型液晶显示器
13章:字符型液晶显示器
13.1.2 显示板控制器的指令系统
指令功能如下: ●指令 6 :功能设置命令。 DL =01 时,内部总线为 4 位宽度 DB7 = DB4 ; DL
=0时,内部总线为 8 位宽度。 N = 0 时,单行显示; N =1 时,双行显示。 F =0 时,为显示字形 5×7 点阵; F = 1 时,为显 示字形 5×10 点阵。 ●指令 7 : CGRAM 地址设置。
13章:字符型液晶显示器
13.2.1 HD61830 的特点和引脚
HD61830 的工作时序图
13章:字符型液晶显示器
13.2.1 HD61830 的特点和引脚 使能信号E的作用
13章:字符型液晶显示器
13.2.2 HD61830 指令集
HD61830 的指令结构是一致的,一条 指令由 1 字节的指令代码与 1 字节的指令 参数组成。
13章:字符型液晶显示器
13.1.2 显示板控制器的指令系统
指令功能如下: ●指令 8 : DDRAM 地址设置。 ●指令 9 :读状态标志和 AC 中地址。 ●指令 10 :写数据。 ●指令 11 :读数据。
13章:字符型液晶显示器
13.1.3 LCD 显示板与单片机的接口和编程
13章:字符型液晶显示器
13章:字符型液晶显示器
字符型液晶(LCD)模块原理及设计学习
字符型液晶(LCD)模块原理及设计学习17.1 液晶显示器概述在小型的智能化电子产品中,普通的7段LED数码管只能用来显示数字,若遇到要显示英文字母或图像、汉字时,则必须选择使用液晶显示器(简称LCD)。
LCD显示器的应用很广,简单的如手表、计算器上的液晶显示器,复杂如笔记本电脑上的显示器等,都使用LCD。
在一般的商务办公机器上,如复印机和传真机,以及一些娱乐器材、医疗仪器上,也常常看见LCD的足迹。
LCD可分为两种类型,一种是字符模式LCD,另一种为图形模式LCD。
这里要介绍的LCD 为字符型点矩阵式LCD模组(Liquid Crystal Display Module简称LCM),或称字符型LCD。
市场上有各种不同厂牌的字符显示类型的LCD,但大部分的控制器都是使用同一块芯片来控制的,编号为HD44780,或是兼容的控制芯片。
字符型液晶显示模块是一类专门用于显示字母、数字、符号等的点阵型液晶显示模块。
在显示器件的电极图形设计上,它是由若干个5*7或5*11等点阵字符位组成。
每一个点阵字符位都可以显示一个字符。
点阵字符位之间空有一个点距的间隔起到了字符间距和行距的作用。
目前常用的有16字*1行、16字*2行、20字*2行和40字*2行等的字符模组。
这些LCM 虽然显示的字数各不相同,但是都具有相同的输入输出界面。
这里我们以16字*2行(简称16*2)字符型液晶显示模块为例,详细介绍字符液晶显示模块的应用技术。
读者朋友经过学习并实践实际的LCD程序设计,那么当你学完后,将掌握字符形液晶显示模块的程序设计技术,使液晶显示器听你的指挥显示出各种字符及信息,用到你设计的产品中后添色不少并增强市场竞争力。
字符LCD模块的控制器主要为日立公司的HD44780及其替代集成电路,驱动器为HD44100及其替代的兼容集成电路。
17.2 16*2字符型液晶显示模块(LCM)特性1.+5V电压,反视度(明暗对比度)可调整。
字符型LCD液晶显示器的应用(分析“显示”文档)共10张PPT
学习目标
LCD1602基本操作
LCD1602模块控制
LCD1602的应用
1.LCD1602的基本操作
基本操作
▪单片机与LCD模块之间有四种基本操作:
写命令 读状态
写显示数据
读显示数据
2.LCD1602模块控制端
控制端
设置显示模式,如光标显示L、C字D符闪模烁块等 控制端
3.LCD的1602的应用
2.写命令操作
读数据操作(可以把显示存储区中的数据反读出来,一般比较少用)
0 0 0 1 S/C R/L × × 0 0 1 DL编号N F × ×指令名称 写命令操作(初始化、光标定位等)
控制信号
RS R/W
D7
LCD1602基本操作1
清屏
0
0
0
do{RS R/W源自2归home位1.读状态操作
BF AC6 AC5 AC4 AC3 AC2 AC1 AC0
BF为忙标志位,1表示LCD正在忙,0表示不忙。
do{
i=lcd_r_start();
i&=0x80;
delay(2);
}while(i!=0);
// 调用读状态函数,读取LCD状态字 // 采用与操作屏蔽掉低7位
// 延时
// LCD忙,继续查询,否则退出循环
0 0 0 1 S7/C R/L C×G×RAM地址设置
0
0
0
8
DDRAM地址设置
0
0
1
9
读BF和AC
0
1
BF
命令字 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 001 0 0 0 0 01× 0 0 0 0 1 I/D S 0 0 0 1 DCB 0 0 1 S/C R/L × × 0 1 DL N F × × 1 A5 A4 A3 A2 A1 A0 A6 A5 A4 A3 A2 A1 A0 AC6 AC5 AC4 AC3 AC2 AC1 AC0
字符型 LCD 液晶显示程序设计及实践
• 指令7: 字符发生器RAM 地址设置. • 指令8: DDRAM 地址设置.
上一页 下一页 返回
上一页
返回
图6. 1 LCD1602 的外观
返回
图6.2 LCD1602 的第二行最 右一格显示4
返回
图6.3 1602 的内部显示地址
返回
表6.1 LCD1602 命令类型和 格式要求
返回
表6.3 常用字符代码与图形对应表
返回
表6. 4 引脚接口说明表
返回
图6.5 硬件原理图
返回
第一节 LCD1602 显示原理介绍
• 指令9: 读忙标志和光标地址. BF: 为忙标志位. 高电平时表示忙. 此 时模块不能接收命令或者数据. 如果为低电平则表示不忙.
• 指令10: 写数据. • 指令11: 读数据. • 其中指令1 ~5 被称为LCD 初始化指令. 在每次使用显示屏之前.
都要对其进行初始化
上一页 下一页 返回
第一节 LCD1602 显示原理介绍
• 例如第二行最后一个字符的地址是4FH. 那么是否直接写入40H 就可以将光标定位在第二行第一个字符的位置呢? 这样不行. LCD 1602 对指令格式有严格要求. 对显示位置确定的指令见表6. 1 的指令8. 因为写入显示地址时要求最高位D7 恒定为高电平“1”. 所以实际写入的数据应该是01000000B (40H) + 100 00000B (80H) = 11000000B ( C0H).LCD16 02 对其他每种指令的作用和格式要求具体见表6. 1.
字符显示原理
四、字符显示原理
正确显示字符的要素:
0,0
x_cnt 10,5
Char_ROM
DATA ADDR
屏幕显示 y x1011121314151617
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
CLK
y_cnt
1. 确定屏幕显示起始位置 屏幕显示起始位置由行列计数值决定 2. 求Char_ROM地址 Char_ROM起始地址由所要显示的字符决 定(可将地址用宏定义的方法与字符关联) 3. 读取该地址对应的数据 4. 确定数据位和像素位置的关系 数据位和像素位置的关系由行计数值、起始 行数、字符所占行数决定 5. RGB赋值,显示颜色 若数据为1,则对应位置上的RGB赋值为 字符色,否则RGB值赋值为背景色
addr 0 1 2 data 0000 0804 0804
0 0 0 0
0 0
0 8 0 4
0 0
0 8 0 4
0 0
1 F F C
0 0
0 0 0 4
0 0
0 0 0 4
0 0
0 0 0 0
0 0
0 0 0 0
0 0
0
0 0 0
0
0
0
0
0
0
0 0 0
0
0 0 0
0
0 0 0
0
0 0 0
1 1 1
0 1 4 4
0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0
0 0 F C
0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0
0 0 0 4
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
单片机中液晶字符的显示
达到显示效果% 在厚度不到 % 公分的 &’( 面板中$看似轻薄短小$
其实内部包含二十多项材料及元件所构成$ 不同类型 &’( 所需材料不尽相同$ 基本上 &’( 结构如同三明治 般$在 ! 片玻璃基板内夹者彩色滤光片#偏光板#配向 膜等材料$灌入 液 晶 材 料 !液 晶 空 间 不 到 8!%"9:;"$最 后封装成一个液晶盒<如图所示=%
#" 液 晶 显 示 原 理
!$% 线段的显示" 点阵图形式液晶由 > 行!? 列个显示单元组成$假 设 &’( 显 示 屏 有 :# 行 $每 行 有 %!@ 列 $每 @ 列 对 应 % 个字节的 @ 个位$即每行由 %: 字节$共 %:!@A%!@ 个点 组成$ 屏上 :#!%: 个显示单元和显示 BC> 区 %"!# 个 字节相对应$ 每一字节的内容和屏上相应位置的亮暗 对 应 % 例 如 屏 的 第 一 行 的 亮 暗 由 BC> 区 的 """D # ""ED 的 %: 个字节的内容决定$当!""""AEED 时$则屏 的 左 上 角 显 示 一 条 短 亮 线 $长 度 为 @ 个 点 &当 !FEED"A EED 时$则屏的右下角显示一短亮 线 &当 !"""D"AEED$ !""%D"A""D$ !""!D"AEED$ !""FD"A""D$ ’ !""GD"A EED$!""ED"A""D 时$ 则在屏 的 顶 部 显 示 一 条 由 @ 段
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1602详细资料和实例1602字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采用的1602液晶进行显示的。
而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。
在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。
所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602液晶的正面(绿色背光,黑色字体)1602液晶背面(绿色背光,黑色字体)另一种1602液晶模块,显示屏是蓝色背光白色字体字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:HD44780内置了DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码(指A的字模代码,0x20~0x7F为标准的ASCII码,通过这个代码,在CGROM中查找到相应的字符显示)就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:DDRAM地址与显示位置的对应关系。
(事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码,见字模关系对照表)并不能显示1出来。
这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。
依次类推。
大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了),1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形(无汉字),如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H)(其实是1个地址),显示时模块把地址41H 中的点阵字符图形显示出来,我们就能看到字母“A”。
上表中的字符代码与我们PC中的字符代码是基本一致的。
因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1='A'这样的方法。
PC在编译时就把“A”先转为41H代码了。
字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。
后面我会详细说的。
0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。
那么如何对DDRAM的内容和地址进行具体操作呢,下面先说说HD44780的指令集及其设置说明,请浏览该指令集,并找出对DDRAM的内容和地址进行操作的指令。
共11条指令:HD44780的指令集1.清屏指令功能:<1> 清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCII码20H;<2> 光标归位,即将光标撤回液晶显示屏的左上方;<3> 将地址计数器(AC)的值设为0。
2.光标归位指令功能:<1> 把光标撤回到显示器的左上方;<2> 把地址计数器(AC)的值设置为0;<3> 保持DDRAM的内容不变3.进入模式设置指令功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。
参数设定的情况如下所示:位名设置I/D 0=写入新数据后光标左移1=写入新数据后光标右移S 0=写入新数据后显示屏不移动1=写入新数据后显示屏整体右移1个字4.显示开关控制指令功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。
参数设定的情况如下:位名设置D 0=显示功能关 1=显示功能开C 0=无光标1=有光标B 0=光标闪烁1=光标不闪烁5.设定显示屏或光标移动方向指令功能:使光标移位或使整个显示屏幕移位。
参数设定的情况如下:S/C R/L 设定情况0 0 光标左移1格,且AC值减10 1 光标右移1格,且AC值加11 0 显示器上字符全部左移一格,但光标不动 1 1 显示器上字符全部右移一格,但光标不动6.功能设定指令功能:设定数据总线位数、显示的行数及字型。
参数设定的情况如下:位名设置DL 0=数据总线为4位1=数据总线为8位N 0=显示1行1=显示2行F 0=5×7点阵/每字符1=5×10点阵/每字符7.设定CGRAM地址指令功能:设定下一个要存入数据的CGRAM的地址。
8.设定DDRAM地址指令功能:设定下一个要存入数据的DDRAM的地址。
(注意这里我们送地址的时候应该是0x80+Address,这也是前面说到写地址命令的时候要加上0x80的原因) 9.读取忙信号或AC地址指令功能:<1> 读取忙碌信号BF(FB)的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令;<2> 读取地址计数器(AC)的内容。
10.数据写入DDRAM或CGRAM指令一览。
功能:<1> 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;<2> 将使用者自己设计的图形存入CGRAM。
11.从CGRAM或DDRAM读出数据的指令一览。
功能:读取DDRAM或CGRAM中的内容。
基本操作时序:读状态输入:RS=L,RW=H,E=H输出:DB0~DB7=状态字写指令输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码输出:无读数据输入:RS=H,RW=H,E=H输出:DB0~DB7=数据写数据输入:RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据输出:无呵呵,看到这么多的控制指令希望你没有头晕。
其实这么多的指令刚开始的时候没有必要全部掌握,随着学习的深入可以再尝试去用更复杂的控制指令。
下面让我们一起驱动1602的液晶吧。
下面是我的液晶的连接图,用的是那种蓝底白字的液晶,其实蓝底白字和那种绿底黑字的液晶唯一的区别就是颜色的问题,至于用哪种液晶,就看各位自己的喜好咯。
这就是我做测试用的最小系统,单片机是STC89C516,晶振为12M。
液晶为蓝底白字的那种1602。
当我们硬件连接错误,或者程序错误时就会出现下图这种情况,就是上排显示16的白色的块(蓝底黑字的液晶则显示的是16个黑块)。
下面我们来驱动1602吧,在1602的上排显示“LCD1602 check ok”,下排显示“study up”程序中没有用到忙检测,而是用的是延时函数来替代忙检测:#include<reg52.h> //包含头文件,这个嘛,就不用多说了~~#define uint unsigned int //预定义一下#define uchar unsigned charsbit rs=P3^5; //1602的数据/指令选择控制线sbit rw=P3^6; //1602的读写控制线sbit en=P3^7; //1602的使能控制线/*P2口接1602的D0~D7,注意不要接错了顺序,我以前可在这上面吃过亏~*/uchar code table[]="LCD1602 check ok"; //要显示的内容1放入数组tableuchar code table1[]="study up"; //要显示的内容2放入数组table1 void delay(uint n) //延时函数{uint x,y;for(x=n;x>0;x--)for(y=110;y>0;y--);}/*********************************************************************************/void lcd_wcom(uchar com) //1602写命令函数(单片机给1602写命令){ //1602接收到命令后,不用存储,直接由HD44780执行并产生相应动作rs=0; //选择指令寄存器rw=0; //选择写P2=com; //把命令字送入P2delay(5); //延时一小会儿,让1602准备接收数据en=1; //使能线电平变化,命令送入1602的8位数据口en=0;}void lcd_wdat(uchar dat) //1602写数据函数{rs=1; //选择数据寄存器rw=0; //选择写P2=dat; //把要显示的数据送入P2delay(5); //延时一小会儿,让1602准备接收数据en=1; //使能线电平变化,数据送入1602的8位数据口en=0;}void lcd_init() //1602初始化函数{lcd_wcom(0x38); //8位数据,双列,5*7字形lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位lcd_wcom(0x01); //清屏}void main() //主函数{uchar n,m=0;lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位(也是执行一条命令)for(m=0;m<16;m++) //将table[]中的数据依次写入1602显示{lcd_wdat(table[m]);delay(200);}lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,即下排第5位for(n=0;n<8;n++) //将table1[]中的数据依次写入1602显示{lcd_wdat(table1[n]);delay(200);}while(1); //动态停机}程序写好后烧写进单片机,现在让我们看看效果吧这就是显示的效果。
下面让我们来看看如何显示一个自定义的字符吧我们从CGROM表上可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个,实际只有8个字节可用。