跟我学51单片机(七)——LCD1602液晶显示模块

发布者:boyatang最新更新时间:2013-01-26 来源: dzsc关键字:51单片机  LCD1602  液晶显示 手机看文章 扫描二维码
随时随地手机看文章
  本刊上期介绍单片机捕获红外遥控器解码方法电路原路和程序设计方法,并给出了实例。这一讲将介绍单片机驱动LCD1602 液晶显示模块。通过该讲,读者可以掌握LCD1602 液晶的工作原理和如何通过单片机来驱动LCD1602 液晶。

  一、原理简介

  液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点,在嵌入式应用系统中得到越来越广泛的应用,这讲中向大家介绍的LCD1602 液晶显示模块(其内部控制器为HD44780 芯片),它可以显示两行,每行16 个字符,因此可相当于32 个LED 数码管,而且比数码管显示的信息还多。采用单+5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比。

  LCD1602 外观如图1(a) 所示。1602 字符型LCD 模块的管脚分布如图1(b) 所示, 其管脚各功能如表1 所示。

图1 (a) LCD1602外观图 (b) LCD1602管脚分布图

  值得提出的是,各种液晶厂家均有提供几乎都是同样规格的1602 模块或兼容模块,尽管各厂家的对其各自的产品命名不尽相同;但其最初采用的LCD 控制器采用的是HD44780,在各厂家生产的1602 模块当中,基本上也都采用了与之兼容的控制IC,所以从特性上基本上是一样的;当然,很多厂商提供了不同的字符颜色、背光色之类的显示模块。

  LCD1602 有11 个控制指令, 见表2。其中,DDRAM :显示数据RAM,用来寄存待显示的字符代码;CGROM :字符发生存储器;CGRAM :用户自定义的字符图形RAM。限于篇幅原因在此不做详细叙述,读者可以上网查看HD44780 芯片资料和LCD1602 数据手册。

  这里介绍几个LCD1602 编程时经常用到的几个指令,见表3。

[page]

二、电路详解

  如图2 所示,1602 液晶的控制管脚都接到了单片机管脚上,前文提到,在功能设置指令中可以将液晶设为8 位数据接口和4 位数据接口,图中采用的是8位的数据接口,当然也可以当四位数据接口来用。液晶电源正端接5V,负端接地,背光正端接5V,负端接地。此外,液晶的偏压管脚(VO)接到一个电位器的中间抽头,电位器的两端分别接5V 和地,这样就可通过调节电位器来实现对1602 液晶对比度的调节。经实验测试,笔者手里的1602 液晶的偏压管脚的电压调节到0.3~0.4V 时对比度效果最好,也可以将该管脚通过一个1k 的电阻下拉到地。读者可以自己实践测试。

图2 1602液晶与单片机的连接图

图2 1602液晶与单片机的连接图

  三、程序设计

  在对1602 液晶设计程序前,我们先看下其读写时序图,从图3 和图4 可以看出,1602 液晶的读写操作时序可总结成表4 所示。

图3 1602液晶读操作的时序图

图3 1602液晶读操作的时序图

图4 1602液晶写操作的时序图

图4 1602液晶写操作的时序图

  对照时序,我们可以很容易的写出驱动液晶的各个子函数,如下所示。

  写命令函数:向寄存器写入控制字

  参数:command - 控制字

  void LCD_en_command(unsigned char command)

  {

  LCD_delay(); // 延时一段时间

  LCD1602_RW=LOW; // 写命令时,R/W 为低电平

  LCD1602_RS=LOW; // 写入指令,RS 为低电平

  LCD1602_EN=HIGH; // 置高使能线

  LCDIO=command; // 接收命令字并送到数据总线上

  LCD1602_EN=LOW; // 在使能线的下降沿写入数据

  }

  写数据函数:向寄存器写入数据

  参数:dat - 待要显示数据

  void LCD_en_dat(unsigned char dat)

  {

  LCD_delay(); // 延时一段时间

  LCD1602_RW=LOW; // 写指令时,R/W 为低电平

  LCD1602_RS=LOW; // 写入数据,RS 为高电平

  LCD1602_EN=HIGH; // 置高使能线

  LCDIO=dat; // 接收数据并送到数据总线上

  LCD1602_EN=LOW; // 在使能线的下降沿写入数据

  }

[page]

要使1602 液晶能正常工作和操作方便,除了写数据和命令函数外,还需要进行初始化等操作,先将本讲中所用到的操作1602 液晶的主要函数设计如下。

  液晶初始化函数:设置液晶的工作方式

  void LCD_init(void)

  {

  delaylcd_nms(5);

  LCD_en_com_nobusy(DATA_MODE);

  // 延时5ms, 写指令,不检测忙信号

  delaylcd_nms(5);

  LCD_en_com_nobusy(DATA_MODE);

  // 延时5ms, 写指令,不检测忙信号

  delaylcd_nms(5);

  LCD_en_com_nobusy(DATA_MODE);

  // 延时5ms, 写指令,不检测忙信号

  LCD_en_com(DATA_MODE);

  // 设置为8位数据传送模式

  delaylcd_nms(5);

  LCD_en_com(OPEN_SCREEN); // 开显示

  LCD_en_com(DISPLAY_ADDRESS); // 设置显示地址

  CLEARSCREEN; // 清屏

  }

  设置显示坐标函数:设置字符的显示位置,行、列坐标

  参数: x -列坐标,y -行坐标

  void LCD_set_xy( unsigned char x, unsigned char y )

  {

  unsigned char address;

  if (y == LINE1) // 判断行

  address = LINE1_HEAD + x; // 设置列坐标

  else

  address = LINE2_HEAD + x;

  LCD_en_command(address); // 将地址写入寄存器

  }

  写字符函数:向液晶写一个字符

  参数:x -列坐标,y -行坐标,dat -将要显示的字符数据

  void LCD_write_char( unsigned x,unsigned char y,unsigned char dat)

  {

  LCD_set_xy( x, y ); // 首先设置显示坐标

  LCD_en_dat(dat); // 写数据

  }

  写字符串函数:向液晶写入字符串

  参数:x -列坐标,y -行坐标,*s -将要显示的字符串数据

  void LCD_write_string(unsigned char x,unsigned char y,unsigned

  char *s)

  {

  LCD_set_xy( x, y ); // 首先设置显示坐标

  while (*s) // 判断是否结束

  {

  LCDIO=*s;// 循环调用写数据函数

  LCD_en_dat(*s);

  s ++;

  }

  }

  四、调试要点与实验现象

  接好硬件(特别是连接好1602 液晶),通过冷启动方式将程序所生成的。hex 文件下载到单片机运行后,复位单片机,然后可在学习板上看到液晶的显示的字符(如图5 所示)。

图5 1602液晶显示界面

图5 1602液晶显示界面

  调试时应注意的是,因为液晶的内部显示操作需要一定的时间,因此如果单片机在对1602 液晶写操作时不进行读忙操作,就应该延时足够的时间(可用延时函数)以让液晶内部能够接收命令或数据,否则会让液晶无法工作或者工作不正常。此外对于V0 管脚,作为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,因此可通过一个电位器实现对其的电压调整,前文提到,将其调节到0.3~0.4V 时对比度效果最好。

  五、总结

  本讲介绍了字符型液晶1602 的工作原理并给出了实例,通过该讲,读者可以了解和掌握51 单片机驱动1602 液晶的方法。下讲将讲述单片机驱动带字库的128X64 液晶,敬请期待。

关键字:51单片机  LCD1602  液晶显示 引用地址:跟我学51单片机(七)——LCD1602液晶显示模块

上一篇:基于单片机和GSM的家庭防盗系统的设计
下一篇:跟我学51单片机(八)——图型带字库液晶128×64

推荐阅读最新更新时间:2024-03-16 13:17

51单片机程序烧写说明
程序烧写说明 USBASP下载器使用方法 启动下载软件PROGISP1.6.7 烧录步骤: 设置编程器及接口,编程器选择USBASP,接口为USB(如图) 选择芯片,在选择芯片下拉列表可以选择正在使用的单片机型号51或者avr均可(常用的51型号为AT89S52,常用的AVR型号为ATMEGA16) 设置熔丝位(若使用51单片机不需要设置熔丝,直接进入下一步),注意SPIEN要始终保持红色,否则容易造成芯片死锁。如图显示的是熔丝的位配置方式,如果不熟悉熔丝功能,可以点击位配置方式旁边的向导方式。设置好熔丝后点击写入。 加载所要烧录的程序文件:点击调入Flash,选择所要烧录的编译好的程序
[单片机]
<font color='red'>51单片机</font>程序烧写说明
51单片机控制+MAX7219+DS1302 电子钟
/************************************************** *程序名称: MAX7219 C语言控制程序 *程序功能: 3线串行控制8位共阴数码管 *3线定义:DIN 串行数据输入 * LOAD 数据锁存 * CLK 时钟输入 ***************************************************/ #in
[单片机]
从零开始51单片机教程 —— 25 动态扫描显示接口电路及程序
动态扫描显示接口电路及程序 在单片机系统中动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就能自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的办法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。 在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,
[单片机]
从零开始<font color='red'>51单片机</font>教程 —— 25 动态扫描显示接口电路及程序
51单片机课程设计——led点阵广告牌程序设计
上学期期末的课设题目是led点阵广告牌,当时的要求如下: (1)能够显示不同字符的LED点阵广告牌; (2)按键切换不同的显示效果(如闪烁,静止,平移等); (3)按键切换不同的显示内容; (4)能够显示图形或自定义字符; (5)其他功能(创新部分); (6)系统调试、分析、总结与功能实现。 当时用的是我用是的普中科技的STC90C51RD+的单片机,不过只要是51单片机,换哪个51内核的芯片都可以,只要电路和程序匹配就可以。 我用的那款普中科技的51单片机可以直接连线决定线路的布置,不需要自己去重新焊一个电路板。 然后我根据任务要求连接了电路,写了对应的程序,还有proteus仿真。 另外,觉得有趣可以点个赞;有什么
[单片机]
<font color='red'>51单片机</font>课程设计——led点阵广告牌程序设计
浅析51单片机P0口上拉电阻的选择应用
  P0口作为I/O口输出的时候时,输出低电平为0 输出高电平为高组态(并非5V,相当于悬空状态,也就是说P0 口不能真正的输出高电平)。给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。   P0作输入时不需要上拉电阻,但要先置1。因为P0口作一般I/O口时上拉场效应管一直截止,所以如果不置1,下拉场效应管会导通,永远只能读到0。因此在输入前置1,使下拉场效应管截止,端口会处于高阻浮空状态,才可以正确读入数据。     由于P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。   1.一般51
[单片机]
51单片机的printf等格式输出函数
在51单片机上使用printf函数、sprintf函数要注意以下几点: 1. 无符号16位数格式符用%d或者%u,千万不能加字母“l”,否则会出错 2. 32位数据格式符必须加字母“l”,否则会出错 3. 8位数据格式符要加字母“b”,例如%bd、%bu等
[单片机]
基于51单片机实现智能照明控制系统的设计
  对一些照明时间较长、照明设备较多的场所(如学校教室、商场等),其照明系统的使用浪费现象屡见不鲜。由于缺乏科学管理和管理人员的责任心不强,有时在借助外界环境能正常工作和夜晚室内空无一人时,整个房间内也是灯火通明。这样下来,无形中所浪费的电能是非常惊人的。据测算,这种现象的耗电占其单位所有耗电的40%左右。因此,有必要在保证照明质量的前提下,实施照明节能措施。这不仅可以节约能源,而且会产生明显的经济效益。   1系统结构和工作原理   系统结构图如图1所示。本系统主要由光照检测电路、热释电红外线传感器及处理电路、单片机系统及控制电路组成。工作时,光照检测电路和热释电红外线传感器采集光照强弱、室人是否有人等信息送到单片机,单片机
[单片机]
基于<font color='red'>51单片机</font>实现智能照明控制系统的设计
51单片机学习:红外遥控实验
实验名称:红外遥控实验 接线说明: 实验现象:下载程序后,数码管上显示数码管上显示红外解码遥控器键值 注意事项:红外接收头凸起处要与PCB板接口凸起丝印处对应 ***************************************************************************************/ #include public.h #include smg.h #include ired.h /******************************************************************************* * 函 数 名 : main * 函数
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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