LCD 1602 稳定显示

发布者:幸福自在最新更新时间:2016-05-17 来源: eefocus关键字:LCD  稳定显示 手机看文章 扫描二维码
随时随地手机看文章
1LCD 1602简介笔记整理

LCD1602可显示两行,每行16个字符,不能显示汉字。16脚的LCD 1602带背光,14脚的不带背光。

 

2LCD1602 端口引脚

不一一记录手册上面是咋个描述LCD 1602的了。记录一下操作过程,下图是LCD 1602在51单片机上面的连线。

LCD 1602 稳定显示 李园7舍_404

 

 

图1 LCD 与单片机接线图

D0-D7引脚连接在单片机的P0端口。

LCD_RS	= P1^0;
LCD_RW	= P1^1;
LCD_EN	= P2^5;

 

查看LCD 1602手册,得到LCD引脚组合的含义如下:

 

表格1:LCD操作模式

 

模式

输入

输出

读状态

RS=0,RW=H,EN为高变低脉冲

输出:D0~D7个状态值

读数据

RS=1,RW=1,EN为高变低脉冲

输出:无

写指令

RS=0,RW=0,D0--D7=数据,EN由高脉冲变为低脉冲

输出D0--D7状态值

写数据

RS=1, RW=0, D0--D7=数据,EN由高脉冲变为低脉冲

输出D0--D7状态值

可以参照图1的接线图对这些模式和输入输出做出相应的理解。模式、输入都是跟单片机I/O端口相连的端口。输出是使LCD显示的内容。在编写程序时,可以先设置LCD显示内容的格式(初始化LCD),然后再对LCD进行读写操作。这些过程由LCD跟单片机相连的I/O端口来完成。

 

 

3LCD 1602的操作时序

查看LCD 1602手册,以LCD写操作时序为例记录在对LCD操作的过程中需要注意到的延迟语句的编写,否则可能导致对LCD的操作失败。

LCD 1602 稳定显示 李园7舍_404

 

 

图2 LCD的写操作时序

根据表一LCD的操作时序可知,在RS,RW,E(N),DB7.0(D0-D7)满足一定时序的高低电平条件时就可以对LCD进行写操作。变化都不是瞬间的,在对RS等置高置低时,RS等变高变低有一个下划的过度时间,如果这种过渡的时间超过单片机内一条或几条指令的执行时间,则这种时序就有可能会被错开。如现在对LCD进行写操作,将RS置高,RW置低,准备好DB7.0数据,E由高变低等操作由以下代码完成:

LCD_RS	= 1;
LCD_RW	= 0;
DB7_0	= ‘A’;
LCD_EN	= 1;
LCD_EN	= 0;

RS在高电平时选择数据寄存器,在低电平时选择指令寄存器。

RW在高电平时进行读操作,在低电平时进行写操作。

E(N)为使能端,当E(N)端由高电平跳变为低电平时,LCD模块执行命令。

DB7.0为8位双向数据。

其中LCD_RS等都是单片机控制LCD RS等端口的引脚,如果(^-^)只有RS端彻底变为1的时间超过以上的所有代码执行时间,则在E低脉冲到来之时,RS还是低电平,所以由于RS的电平不满足条件对LCD的写操作将会失败。当然,传说LCD的电平变化时间比指令执行时间快,但是为了可靠稳定,在程序中肯定需要等待对应的端口彻底变为需要电平时再写其它端口的值。就这么等待太长时间肯定是会为程序的执行结果带来影响,只需要等待端口的电平能完全变化的时间即可。手册中有说明的:

LCD 1602 稳定显示 李园7舍_404

 

 

图3 LCD初始化图

虽然需要等待的时间对于人类来说实在是可以忽略不计,但在LCD类中来说却是必须的。如果没有这些等待,那么就有可能遇不到LCD与你写入内容的邂逅或者出现偶尔成功偶尔失败的场景。

在每次读/写指令后都应该等待一段时间来等待LCD 端口电平的彻底变化,可用keil软件模拟一段时间,用5ms(等待时间小于5ms者)等时间代替需要等待的时间都是可以的。

 

4 LCD1602的指令集 相关

4.1 LCD指令集笔记

在LCD 1602指令集中,对LCD来说有四种意思:

(1)      RS和RW都为0时表示对LCD写指令操作,包括写入LCD的显示模式和设定LCD地址的指令。.显示模式包括清屏、地址归为、显示状态、进入点设定、功能设定、游标显示模式操作;关于地址的操作包括设定CGRAM地址、设定DDRAM地址。

(2)      当RS=0,RW=1时,表示读LCD状态,此时可以读取LCD忙信号,同时可以读取地址计数器的值。忙信号的状态用来确定LCD内部动作是否完成,若在LCD内部出于忙状态时对LCD进行读写操作将会失败。

(3)当RS=1时,若RW=0表示写数据操作,若RW=1表示读数据操作。

 

4.2 CGRAM

CGRAM为LCD模块内部的字符发生存储器,里面存了不同的点阵字符图形,包括阿拉伯数字,英文大小写字符等。每个字符都有一个固定的代码,如‘A’的代码是01000001,(41H),需要显示‘A’时只需要将地址为41H中的点阵图形显示出来就可以看见‘A’了。具体字符点阵图查看手册为全宜。

 

4.3 LCD1602显示屏内部显示地址表

输入显示字符地址,也就是告诉LCD在哪里显示字符。LCD供两行,第一行可立即显示字符的地址为00H—0FH,第二行可立即显示字符的地址为40H—67H,如果在其它地址中显示字符,需要通过移屏指令[00011000:整屏左移光标跟着移动; 00011100:整屏右移光标跟着移动]将它们移入可显示区域方可正确显示。当要在00H处显示字符时,写入的地址应为00H + 80H(因为置LCD显示位置时要求D7位始终为1,手册中‘置数据存储器地址’指令)

 

5 LCD 1602程序编写

5.1 LCD初始化

//----------------------- ---------
//写命令,初始化端口设置LCD显示模式
//----------------------- ---- ----
void LCD_mode_init()
{
	LCD_EN	= L;
	
	//等待LCD电路完全接通
	delay_ms( DELAY_TIME_FOR_INIT );
	
	//P0= 00111000设置16x2显示,5x7点库,8位数据端口
	write_command( 0x38 );
	delay_ms( DELAY_TIME );

	//LCD开显示,显示光标,光标闪烁
	write_command( 0x0f );

	//读写字符后地址指针、光标加1,整屏显示不移动
	write_command( 0x06 );

	//清显示,便对LCD写入
	write_command( 0x01 );
}


根据图3,当LCD电路接通之时,需要用约15ms的时间来让LCD VDD电压达4.5V,虽然在开启单片机电源的时候程序还未执行到初始化程序就已经过了15ms让LCD VDD电源达4.5V。但也有可能程序中只包含了LCD程序,初始化被放在了最前面,15ms的时间足以让单片机运行很多指令了(可以由单片机的机器周期和一条指令执行的机器周期数比较一下),为了防止在LCDVDD电源未达4.5V时单片机程序已经执行到设置LCD显示模式的指令,就在进入LCD初始化程序时等待15ms的时间,让LCD电源初始化完毕。

 

5.2 写指令

//-------- -----
//写命令
//--------- ----
void write_command( uchar command )
{
	while( lcd_busy() );
	LCD_RS	= L;
	LCD_RW	= L;
	delay_ms(DELAY_TIME); 
	
	P0	=  command;

	//等待数据稳定
	delay_ms(DELAY_TIME);
	LCD_EN	= H;

	//让使能位保持到一,负脉冲跳变
	delay_ms( DELAY_TIME );
	LCD_EN	= L;
    delay_ms( DELAY_TIME );
}


写指令前首先要检查LCD内部操作是否已经完成,LCD的BF位(D7)为高电平表示忙,为低电平表示空闲。同理,在对每一个端口设置高低电平后,同样需要一段时间来等待电平的彻底变化。

 

5.3 写数据

//-----------------------
//写数据,写LCD显示内容
//-----------------------
void write_data( uchar wdata )
{
	while( lcd_busy() );
	LCD_RS	= H;
	LCD_RW	= L;
	LCD_EN	= L;
	P0	= wdata;
	
	//等待DB0-DB7数据稳定
	delay_ms( DELAY_TIME );
	LCD_EN	= H;
	
	//让使能位充分达到1
	delay_ms( DELAY_TIME );
	LCD_EN	= L;
	delay_ms( DELAY_TIME );
}

 
5.4 检测LCD忙信号

//--------------------
//检测LCD的忙信号
//--------------------
bit lcd_busy()
{                          
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    delay_ms( DELAY_TIME );
    result = (bit)(P0&0x80);
    LCD_EN = 0;
    return result; 
}


在检测LCD忙信号的同时,还可以设置一下原本该低或该高的位的状态。P0端口是连接到D0—D6端口的I/O引脚,0x80就是用来检测D7位状态的数据。

 

5.5 延迟函数

//-------- -----
//延迟函数
//--------- ----
void delay_ms( uint ms )
{	
	uint i, j;
	for(i = ms; i > 0; i--){
		for(j = 110; j > 0; j--){
			;
		}
	}
}


根据单片机的晶振和keil执行指令的时间计算,以上延迟函数约延迟ms 毫秒的时间。DELAY_TIME的宏值为5,表示延迟5毫秒的时间。LCD有的端口不需要延迟这么长的时间,这个可以调试到适合相应端口最适合的延迟时间即可。借助手册和枚举调试法。

 

5.6 运行结果

将初始化函数放置在main函数中后,将LCD的显示地址设置在第一行第一列(此指令在写指令集中,可调用write_command( 0x80)来完成),然后写字符到LCD第一行中。再将显示地址跳到第二行,地址后移需要显示字符传长度个单位,写入显示的字符传,对整个屏幕移位(由写指令集中指令完成,移字符传长度那么多位,移完一个停留的时间需要长点,如200ms左右的时间)。

然后让程序等待,只为LCD操作演示^-^。

程序的效果为:首先在第一行显示了指定的字符串。当移入第二行字符串时,由于是整个屏幕的移动,所以第一行字符串也随之移入了屏幕的左边。

现将两行的字符串显示在LCD屏幕之上,不采取移动的操作。

LCD 1602 稳定显示 李园7舍_404

 

 

 

6 总结

电平变化时不是瞬间的,需要用延迟函数来等待相应位彻底的编程预期的电平。这是跟写其它程序的一个区别。每逢遇到对硬件引脚电平的置位时,都需要结合手册看看对应引脚的灵敏度,若高出指令执行时间徐许多数量级就不用延迟语句,否则应当考虑用延迟语句来等待。应该走进硬件的操作时序世界中去才能编写好它们的程序。

 

此次笔记记录完毕。

关键字:LCD  稳定显示 引用地址:LCD 1602 稳定显示

上一篇:51单片机 RAM 数据存储区
下一篇:51单片机UART通信[发送接收数字字母中文,控制LED亮灭]

推荐阅读最新更新时间:2024-03-16 14:54

无人驾驶/无线充电/LCD车身 看未来汽车技术
说到未来汽车的发展趋势,相信大伙儿在各种美国大片诸如 环形使者 、 地心引力 、 雷神 等等等(好吧,雷神也实在是太未来了)都能够看出个端倪来了。一直在传说,从未见实现,这也是铁铮铮的现实。可偏偏就有一些不信邪的人对这些未知的领域发起挑战,他们是谁?他们在做什么?接下来就让网络红人 妈妈再打我一次 的 妈妈 和她的 女儿 给大家做逐一介绍。这里顺带留个小问题:妈妈一共有多少辆车,答案在文章结尾揭晓! ● 沃尔沃无人驾驶汽车 最近几年,伴随着人工智能技术的发展,无人驾驶汽车这一概念已经逐渐从理论走向实践,全球无论汽车行业还是互联网行业巨头都纷纷表示会涉水这片红海地带,其中包括有日产汽车和美国谷歌公司等。作为以汽车
[汽车电子]
LCD-FSMC原理简介
一个小技巧:查看某个函数的定义,先把光标移到这个函数上,然后按F12键。 一。 FSMC简介 FSMC全称“静态存储器控制器”。 使用FSMC控制器后,可以把FSMC提供的FSMC_A 作为地址线,而把FSMC提供的FSMC_D 作为数据总线。 (1)当存储数据设为8位时 (FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b) 地址各位对应FSMC_A ,数据位对应FSMC_D (2)当存储数据设为16位时 (FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryData
[单片机]
<font color='red'>LCD</font>-FSMC原理简介
msp430和stm32 lcd屏驱动程序
最近使用了一块MSP430F5529单片机做课设,自带的拓展板上有一块12864的COG的LCD屏,记录下使用的驱动程序。 硬件原理图: COG_CS为片选信号,每次数据或指令通信完毕,需要拉低拉高一次。COG_RST为上电复位引脚,正常工作后不控制。 COG_A0是数据命令选择端,低电平表示传输的是数据,高电平表示传输的时命令。 COG_SCLK是时钟信号,上升沿有效。 COG_SDA为数据线,只能写不能读,无法读取COG内部的显存数据。COG_BKLED为背光控制IO,低电平背光点亮,高电平背光熄灭。 驱动程序: 头文件: #ifndef LCD_H_ #define LCD_H_ #define LCD_
[单片机]
msp430和stm32 <font color='red'>lcd</font>屏驱动程序
GVCOMTM运算放大器 降低功耗以实现更高效的LCD及OLED驱动
随着信息时代的进步,显示面板需求量正在以势不可挡之势持续快速地增长着,与此同时,面板的低功耗技术也越来越引起关注。 电视、显示器以及平板电脑中,最关键的元器件莫过于液晶 (LCD及OLED) 显示面板。随着显示面板的广泛应用,降低面板功耗以及降低面板共用级电压(VCOM)来源——VCOM放大器的结温变得越来越重要。 液晶显示通过打开和关闭玻璃基板上独立的薄膜晶体管来控制每个像素。液晶面板采用逐行扫描技术,依次打开每一行像素的栅极电压,以允许源极电压(由源极驱动芯片产生)流向每个像素。改变像素电容上面的电压差,可以控制每个像素对光的透过率,从而显示整个图像。这些TFT电路使用铟锡氧化物(ITO)电极,这是一种半透明的金属层。
[电源管理]
GVCOMTM运算放大器 降低功耗以实现更高效的<font color='red'>LCD</font>及OLED驱动
Bootloader中LCD硬件初始化和软件驱动程序设计
Android系统在正常启动中,刷屏功能一般在内核中执行,而Bootloader的任务应该是执行硬件初始化,并尽快跳转到Linux内核。在Bootloader启动过程中使能一个显示驱动,实现刷屏功能,并不违背这一目标。本文通过对Bootloader的原理分析和嵌入式芯片C6310中LCD控制器的研究,设计了Bootloader中LCD硬件初始化和软件驱动程序。该设计完善了Bootloader的扩展功能,加快了手机动画的实现,改善了客户的使用体验。 Android自2011年以来实现了计算机诞生以来最快速度的用户群体增长,目前Android以每天85万新激活数的速度快速征服世界,在世界范围内成为占有率最高的智能手机操作系
[单片机]
Bootloader中<font color='red'>LCD</font>硬件初始化和软件驱动程序设计
基于DSP的彩色TFT-LCD数字图像显示技术研究
计算机技术的飞速发展,嵌入式图像系统广泛应用于办公设备、制造和流程设计、医疗、监控、卫生设备、交通运输、通信、金融银行系统和各种信息家电中。所谓嵌入式图像系统,是指以图像应用为中心,以计算机技术为基础,软件、硬件可裁减,对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式图像系统对图像显示技术提出了各种严格要求,必须选择合适的显示器,设计出合理的显示控制方法。 系统硬件设计   系统要构建一个嵌入式、高速、低功耗、低成本的图像显示硬件平台,要求能真彩显示静态或动态彩色图像。为达到真彩和无拖影的显示动态图像,同时兼顾低功耗的要求,采用SHARP(夏普)公司的LQ057Q3DC02彩色TFT-LCD作为显示器;
[医疗电子]
基于DSP的彩色TFT-<font color='red'>LCD</font>数字图像<font color='red'>显示</font>技术研究
国际金融危机使液晶产品价格持续走低
席卷全球的金融危机让整个液晶电视产业如此深刻地体会到外部环境对产业的影响不是教科书式的,而是要实实在在地展现出来,产业界认识到这次的液晶循环周期着实被外部环境打乱了。 货币贬值助韩企面板降价 从表1可以看出,1美元能兑换的韩币从今年1月份的942元涨到10月份的1292元,韩币整整贬值了37%。韩国的两大面板巨头,LG和三星,一直以来都在大尺寸面板领域扮演着举足轻重的角色,这两家面板公司的出货量占据着全球40%以上的市场份额。根据Displaybank的数据,今年9月份,LG和三星大尺寸面板出货量的全球市场占有率分别为22.2%和21.6%,两者的一举一动可谓液晶电视面板产业的风向标。由于液晶面板产业在韩
[家用电子]
国际金融危机使液晶产品价格持续走低
2010年 LED产业照明市场发展前景
虽LED业者一致认为,LED最终应用将面向广大的照明市场,然由于现阶段LED照明价格仍贵,以千流明为单位作比较,LED价格尚高出萤光灯10倍以上,故导致2009年LED在整体照明市场渗透率尚不到0.5%。预估2012年当LED发光效率达130 lm/W,且LED成本每千流明为5美元时,才是LED照明大量被采用时程。    在LED照明市场起飞以前,另一LED应用已如火如荼展开-也就是大尺寸LCD显示器用LED背光。在常规NB方面,2009年每2台NB中有1台已使用LED背光,故LED NB可谓是全民机种。    2009 年LED TV主要在三星电子(Samsung Electronics)力推之下,引发其它电视大厂跟进
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved