首页资源分类其它科学普及 > 跟我学51单片机_七_LCD1602液晶显示模块

跟我学51单片机_七_LCD1602液晶显示模块

已有 445487个资源

下载专区

文档信息举报收藏

标    签:跟我学51单片机_七_LCD1602液晶显示模块

分    享:

文档简介

跟我学51单片机_七_LCD1602液晶显示模块

文档预览

制作入门 ●●● 作者 / 赵亮 跟我学51单片机(七) LCD1602液晶显示模块 本刊上期介绍单片机捕获红外遥控器解码方法电 路原路和程序设计方法,并给出了实例。这一讲将介 绍单片机驱动 LCD1602 液晶显示模块。通过该讲,读 者可以掌握 LCD1602 液晶的工作原理和如何通过单片 机来驱动 LCD1602 液晶。 一、原理简介 液晶显示模块具有体积小、功耗低、显示内容丰富、 超薄轻巧等优点,在嵌入式应用系统中得到越来越广 泛的应用,这讲中向大家介绍的 LCD1602 液晶显示模 块(其内部控制器为 HD44780 芯片),它可以显示两 行,每行 16 个字符,因此可相当于 32 个 LED 数码管, 而且比数码管显示的信息还多。采用单 +5V 电源供电, 外围电路配置简单,价格便宜,具有很高的性价比。 LCD1602 外观如图 1(a) 所示。1602 字符型 LCD 模块的 管脚分布如图 1(b) 所示,其管脚各功能如表 1 所示。 值得提出的是,各种液晶厂家均有提供几乎都是 同样规格的 1602 模块或兼容模块,尽管各厂家的对其 各自的产品命名不尽相同 ;但其最初采用的 LCD 控制 器采用的是 HD44780,在各厂家生产的 1602 模块当中, 基本上也都采用了与之兼容的控制 IC,所以从特性上 基本上是一样的 ;当然,很多厂商提供了不同的字符 颜色、背光色之类的显示模块。 LCD1602 有 11 个 控 制 指 令, 见 表 2。 其 中, DDRAM :显示数据 RAM,用来寄存待显示的字符代码 ; CGROM :字符发生存储器 ;CGRAM :用户自定义的字符 图形 RAM。限于篇幅原因在此不做详细叙述,读者可 以上网查看 HD44780 芯片资料和 LCD1602 数据手册。 这里介绍几个 LCD1602 编程时经常用到的几个指 令,见表 3。 (a) 图1 (a) LCD1602外观图 74 2011. 07 www.ele169.com (b) (b) LCD1602管脚分布图 制作入门 表 1 LCD1602 模块的管脚功能 管脚号 管脚名称 状态 1 Vss 2 Vdd 3 V0 4 RS 输入 5 R/W 输入 6 E 输入 7 DB0 三态 8 DB1 三态 9 DB2 三态 10 DB3 三态 11 DB4 三态 12 DB5 三态 13 DB6 三态 14 DB7 三态 15 LEDA 输入 16 LEDK 输入 管脚功能描述 电源地 电源正极 液晶显示偏压信号 寄存器选择 读、写操作 使能信号 数据总线0(LSB) 数据总线1 数据总线 数据总线 数据总线 数据总线 数据总线 数据总线(MSB) 背光+5V 背光地 表 2 LCD1602 模块控制指令 指令 清屏 归位 输入方式设置 显示开关控制 光标、画面位移 功能设置 CGRAM地址设置 DDRAM地址设置 读BF及AC值 写数据 读数据 功能 清DDRAM和AC值 AC=0,光标、画面回HOME位 设置光标、画面移动方式 设置显示、光标及闪烁开、关 光标、画面移动,不影响DDRAM 工作方式设置(初始化指令) 设置CGRAM地址。A5~A0=0~3FH DDRAM地址设置 读忙标志BF值和地址计数器AC值 数据写入DDRAM或CGRAM内 从DDRRAM或CGRAM数据读出 表3 清屏指令 RS R/W 0 0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 1 功能 :清除液晶显示器,即将 DDRAM 的内容全部填入 " 空白 " 的 ASCII 码 20H ;光标归位,即将光标撤回液晶显示屏的左上方 ;将地 址计数器 (AC) 的值设为 0。 显示开关控制指令 RS R/W 0 0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1D C B 功能 :设置显示、光标及闪烁开、关。 其中 :D 表示显示开关 :D=1 为开,D=0 为关 ; C 表示光标开关 :C=1 为开,C=0 为关 ; B 表示闪烁开关 :B=1 为开,B=0 为关。 光标、画面位移指令 RS R/W 0 0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 00 0 1 S/C R/L * * 功能 :光标、画面移动,不影响 DDRAM。 其中 :S/C=1 :画面平移一个字符位 ; S/C=0 :光标平移一个字符位 ; R/L=1 :右移 ;R/L=0 :左移。 功能设置指令 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 DL N F * * 功能 :工作方式设置(初始化指令)。 其中 :DL=1,8 位数据接口 ;DL=0,四位数据接口 ; N=1,两行显示 ;N=0,一行显示 ; F=1,5×10 点阵字符 ;F=0,5×7 点阵字符。 www.ele169.com 2011. 07 75 制作入门 +5 VSS VDD VO RS R/ W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 BL+ BL- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27 R12 10Kk +5 图2 1602液晶与单片机的连接图 表 4 LCD1602 模块的读写时序 RS R/W E 0 0 下降沿 0 1 高电平 1 0 下降沿 1 1 高电平 功能 写命令 读忙标志和AC码 写数据 读数据 图3 1602液晶读操作的时序图 二、电路详解 如图 2 所示,1602 液晶的控制管脚都接到了单片 机管脚上,前文提到,在功能设置指令中可以将液晶 设为 8 位数据接口和 4 位数据接口,图中采用的是 8 位的数据接口,当然也可以当四位数据接口来用。液 晶电源正端接 5V,负端接地,背光正端接 5V,负端接 地。此外,液晶的偏压管脚(VO)接到一个电位器的 中间抽头,电位器的两端分别接 5V 和地,这样就可通 过调节电位器来实现对 1602 液晶对比度的调节。经实 验测试,笔者手里的 1602 液晶的偏压管脚的电压调节 到 0.3~0.4V 时对比度效果最好,也可以将该管脚通过 一个 1k 的电阻下拉到地。读者可以自己实践测试。 三、程序设计 在对 1602 液晶设计程序前,我们先看下其读写 时序图,从图 3 和图 4 可以看出,1602 液晶的读写操 76 2011. 07 www.ele169.com 图4 1602液晶写操作的时序图 作时序可总结成表 4 所示。 对照时序,我们可以很容易的写出驱动液晶的各 个子函数,如下所示。 写命令函数 :向寄存器写入控制字 参数 :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; // 在使能线的下降沿写入数据 制作入门 } 要使 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 所示)。 调试时应注意的是,因为液晶的内部显示操作需 要一定的时间,因此如果单片机在对 1602 液晶写操 作时不进行读忙操作,就应该延时足够的时间(可用 延时函数)以让液晶内部能够接收命令或数据,否则 会让液晶无法工作或者工作不正常。此外对于 V0 管脚, 作为液晶显示器对比度调整端,接正电源时对比度最 弱,接地电源时对比度最高,对比度过高时会产生“鬼 影”,因此可通过一个电位器实现对其的电压调整,前 文提到,将其调节到 0.3~0.4V 时对比度效果最好。 五、总结 本讲介绍了字符型液晶 1602 的工作原理并给出 了实例,通过该讲,读者可以了解和掌握 51 单片机 驱动 1602 液晶的方法。下讲将讲述单片机驱动带字库 的 128X64 液晶,敬请期待。 END 图5 1602液晶显示界面 套件销售 本刊提供单片机实验套件。有兴趣的读者请联系杂 志读者服务部,电话 010-59741650 / 020-87382727 / QQ :1312968332 www.ele169.com 2011. 07 77

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。