lcd1602

上传人:oq****t 文档编号:3504076 上传时间:2017-08-06 格式:DOC 页数:14 大小:109KB
返回 下载 相关 举报
lcd1602_第1页
第1页 / 共14页
lcd1602_第2页
第2页 / 共14页
lcd1602_第3页
第3页 / 共14页
lcd1602_第4页
第4页 / 共14页
lcd1602_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《lcd1602》由会员分享,可在线阅读,更多相关《lcd1602(14页珍藏版)》请在金锄头文库上搜索。

1、第八章 LCD应用编程及与机器人的集成技术LCD(Liquid Crystal Display )的应用很广泛,简单如手表上的液晶显示屏,仪表仪器上的液晶显示器或者笔记本电脑上的液晶显示器,都用LCD。在一般的办公设备上也很常见,如传真机,复印件,以及一些娱乐器材玩具等也常常见到LCD 的踪影。本章应用LCD作为机器人状态显示窗口,使机器人在运行过程中能够向你显示信息。LCD 显示器的介绍本章使用的LCD 为字符型点阵式LCD 模块(Liquid Crystal Display Module),简称LCM,或者是字符型LCD。字符型液晶显示模块是一种专门用于显示字母、数字、符号等的点阵式液晶显

2、示模块。每一个显示的字符(或字母、数字等)是由5*7 或5*11 点阵组成。点阵字符位之间有一空点距的间隔,起到字符间距和行距的作用。本章所使用的LCD 显示器可显示两行,每行由16 个点阵字符组成,能显示所有ASCII字符,如图8-1 所示,每个字符由 5*7 点阵组成。图8-1 1602 LCD 实物图任务一 认识LCD显示器LCD显示器连接LCD1602 有八个数据引脚(D0 D7 )与AT89S52 相连,用于接收指令和数据;AT89S52通过RS ,RW 和E 这三个端口控制 LCD 模块。表8-1 为LCD 的引脚说明,图8-2 为LCD引脚与AT89S52 连接示意图。表8-1

3、LCD 显示器引脚说明编 号 符 号 引脚说明 编 号 符 号 引脚说明1 GND 电源地 9 D2 双向数据口2 Vcc 电源正极 10 D3 双向数据口3 V0 对比度调节 11 D4 双向数据口4 RS 数据/命令选择 12 D5 双向数据口5 R/W 读/写选择 13 D6 双向数据口6 E 模块使能端 14 D7 双向数据口7 D0 双向数据口 15 BLA 背光源正极8 D1 双向数据口 16 BLK 背光源地C51 单片机与智能机器人110Vo:直接接地,对比度最高。RS:MCU 写入数据或者指令选择端。MCU 要写入指令时,使RS 为低电平;MCU 要写入数据时,使RS 为高电

4、平。R/W:读写控制端。R/W 为高电平时,读取数据;R/W 为低电平时,写入数据。E:LCD 模块使能信号控制端。写数据时,需要下降沿触发模块。D0D7:8 位数据总线,三态双向。该模块也可以只使用4 位数据线D4 D7 接口传送数据。BLA:需要背光时,BLA 串接一个限流电阻接V CC,BLK 接地。BLK:背光地端。图8-2 LCD 模块于MCU 连接图说明实际上,是LCD 模块与教学板相连,相关电路图见附件。LCD 控制器接口说明基本操作时序在LCD 时序图中,在将E 置高电平前,先设置好RS 和R/W 信号,在E 下降沿到来之前,准备好写入的命令字或数据。只需在适当的地方加上延时,

5、就可以满足要求了。读状态 输入:RS=L,RW=H ,E=H输出:DB0DB7= 状态字写指令 输入:RS=L,RW=L,E= 下降沿脉冲,DB0 DB7= 指令码输出:无读数据 输入:RS=H,RW=H,E=H输出:DB0DB7= 数据写数据 输入:RS=H,RW=L ,E=下降沿脉冲,DB0DB7=数据输出:无状态字说明STA7 STA6 STA5 STA4 STA3 STA2 STA1 STA0C51 单片机与智能机器人111D7 D6 D5 D4 D3 D2 D1 D0STA0-6 当前数据地址指针的数值STA7 读写操作使能 1:禁止 0:允许注:对控制器每次进行读写操作之前,都必须

6、进行读写检测,确保STA7 为0。指令说明显示模式设置指令码 功能0 0 1 1 1 0 0 0 设置16*2 显示,5*7 点阵,8 位数据接口0 0 1 0 1 0 0 0 设置16*2 显示,5*7 点阵,4 位数据接口显示开/关及光标设置指令码 功能0 0 0 0 1 D C BD=1 开显示;D=0 关显示C=1 显示光标;C=0 不显示光标B=1 光标闪烁;B=0 光标不闪烁0 0 0 0 0 1 N SN=1 当读或写一个字符后地址指针加一,且光标加一N=0 当读或写一个字符后地址指针减一,且光标减一S=1 当写一个字符,整屏显示左移(N=1 )或右移(N=0),以得到光标不移动

7、而屏幕移动的效果S=0 当写一个字符,整屏显示不移动其它设置指令码 功能01H 显示清屏:1、数据指针清零 2、所有显示清零02H 显示回车:1、数据指针清零初始化过程(复位过程) 延时15ms 写指令38H(不检测忙信号)(或28H ,表示4 位数据接口,下同) 延时15ms 写指令38H(不检测忙信号) 延时15ms 写指令38H(不检测忙信号)(以后每次写指令、读/写数据操作之前都均需检测忙信号) 写指令38H:显示模式设置 写指令08H:显示关闭 写指令01H:显示清屏 写指令06H:显示光标移动设置 写指令0cH:显示开及光标设置数据指针(地址)设置LCD 控制器内部带有80X8 位

8、(80 字节)的RAM 缓冲区,对应关系如图8-3:C51 单片机与智能机器人112图8-3 LCD 内部RAM 地址映射图数据地址设置指令码:80H+地址码(027H,4067)。任务二 编写LCD模块驱动程序在本任务中,你将通过编写程序来驱动LCD 显示器,并显示你的机器人所要显示的字符或字符串,这样你就可以不需要调试终端的帮助而显示字符或者字符串。元件清单:(1)1602LCD 显示器(2)跳线线路连接传统的连线是图8-2 介绍的八位数据线接法,而教材采用的是四位数据线传输方式来进行LCD 显示。为什么只用四线传输?因为这样可以节省接口开销。由于LCD 的指令和数据都是八位的,因此在传输

9、时要传输两次才能完成一次操作。电路的连接如图8-4 所示。图8-4 四口数据线连接LCD例程:LCDdisplay.c 接通主板电源 输入、保存并运行LCDdisplay.cC51 单片机与智能机器人113 连接LCD 显示器模块,验证显示器是否显示字符串/*=1602 液晶显示的实验例子-| DB4-P0.4 | RW-P2.1| DB5-P0.5 | RS-P2.2| DB6-P0.6 | E-P2.0| DB7-P0.7 |-=*/#include #include #define LCM_RW P2_1 /定义引脚#define LCM_RS P2_2#define LCM_E P2_

10、0#define LCM_Data P0#define Busy 0x80 /用于检测 LCM 状态字中的Busy 标识/*-子函数声明-*/void Write_Data_LCM(unsigned char WDLCM);void Write_Command_LCM(unsigned char WCLCM,BuysC);void Read_Status_LCM(void);void LCM_Init(void);void Set_xy_LCM(unsigned char x, unsigned char y);void Display_List_Char(unsigned char x, u

11、nsigned char y, unsigned char *s);void main(void)LCM_Init(); /LCM 初始化delay_nms(5); /延时片刻( 可不要)while(1)Display_List_Char(0, 0, );Display_List_Char(1, 0, Robot-AT89S52);/*=函数名:Read_Status_LCM()功 能:忙检测函数=*/void Read_Status_LCM(void)unsigned char read=0;C51 单片机与智能机器人114LCM_RW = 1;LCM_RS = 0;LCM_E = 1;LC

12、M_Data = 0xff;doread = LCM_Data;while(read & Busy);LCM_E = 0;/*-函数名:Write_Data_LCM ( )功 能:对LCD 1602 写数据-*/void Write_Data_LCM(unsigned char WDLCM)Read_Status_LCM(); /检测忙LCM_RS = 1;LCM_RW = 0;LCM_Data &= 0x0f;LCM_Data |= WDLCM&0xf0;LCM_E = 1; /若晶振速度太高可以在这后加小的延时LCM_E = 1; /延时LCM_E = 0;WDLCM = WDLCM的行都

13、被替换成由文件名所指定的文件的内容。如果文件名由引号(“ ”)括起来,那么就在源程序所在位置查找该文件;如果在这个位置没有找到该文件,或如果文件名由尖括号()括起来,那么就在系统文件下查找。这个指令教材在最开始就用了,如 #include 。所谓文件包含就是指一个源文件可以将另一个源文件的全部内容包含进来。但要注意的是,对文件包含并不是把两个文件连接起来,而是编译时作为一个源程序编译,得到一个目标文件,比如HEX 文件。被包含的文件常在文件的头部,所以被称为“头文件”,可以以“.h”为后缀,也可以以“.c”为后缀。对于比较大的程序,用#include 指令把各个文件放在一起是一种优化程序的方法

14、,之前的例程就是这样做的。现在,将LCD 显示部分作为头文件LCD.H 保存,内容如下:#define LCM_RW P2_1#define LCM_RS P2_2#define LCM_E P2_0#define LCM_Data P0#define Busy 0x80 /用于检测 LCM 状态字中的Busy 标识void Read_Status_LCM(void)unsigned char read=0;LCM_RW = 1;LCM_RS = 0;LCM_E = 1;LCM_Data = 0xff;doread = LCM_Data;while(read & Busy);LCM_E = 0;C51 单片机与智能机器人119void Write_Data_LCM(unsigned char WDLCM)Read_Status_LCM(); /检测忙LCM_RS = 1;LCM_RW = 0;LCM_Data &= 0x0f;LCM_Data |= WDLCM&0xf0;LCM_E = 1; /若晶振速度太高可以在这后加小的延时LCM_E = 1; /延时LCM_E = 0;WDLCM = WDLCM#include #include void Forward(void)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号