51单片机通过DHT11温度传感器读取温度(2)
一.LCD1602的使用
1.概念:LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)
2.引脚定义
具体说明
(1)VSS:模块供电电源地
(2)VDD:模块供电电源的正极
(3)RS:数据/命令选择,当处于高电平时选择数据寄存器,当处于低电平时选择指令寄存器。RS 为低电平 R/W 为高电平时可以读忙信号,当RS 为高电平 R/W 为低电平时可以写入数据。
(4)R/W:读写选择,当处于高电平时进行读操作,当处于低电平时进行写操作
(4)E:使能信号,当电平由高电平变成低电平时,开始执行指令
(5)D:数据,D0-D7是数据位
3.显示方法
由图可以知道,如果要第二行第一列显示,则只需要写入40H,但是这样是不行的,因为写入显示地址时要求最高位 D7 恒定为高电平 1,所以需要加上80H,则最后的结果为40H+80H=C0H
显示内容与对应的位数
4.时序图
(1)读时序
(2)写时序
(3)时序时间
二.LCD1602的时序分析
1.写指令
由条件可以知道RS = 0;由时序图可以看到R/W = 0处于低电平,同时E = 0,并延时TR的时间长度,过后进行数据建立连接,然后将E端电平拉高,同时延迟Tpw的时间,之后欧E端电平被拉低,并延迟THD1的时间
2.写数据
由条件可以知道RS = 1;由时序图可以看到R/W = 0处于低电平,同时E = 0,并延时TR的时间长度,过后进行数据建立连接,然后将E端电平拉高,同时延迟Tpw的时间,之后欧E端电平被拉低,并延迟THD1的时间
三.LCD1602程序代码实现
编程实现要求,要求实现写数据,写指令与读忙碌
#include#include "intrins.h" sbit RS = P1^0; sbit RW = P1^1; sbit E = P1^2; #define data_buffer P0 /* 用于读取LCD1602的忙碌状态 */ void check_lcd_busy() { char tep = 0x80; data_buffer = 0x80; while(tep & 0x80) { RS = 0; RW = 1; E = 0; _nop_(); E = 1; _nop_(); tep = data_buffer; } } void lcd_write_cmd(char cmd) { check_lcd_busy(); RS = 0; RW = 0; E = 0; data_buffer = cmd; _nop_(); E = 1; _nop_(); E = 0; _nop_(); } void lcd_write_data(char datashow) { check_lcd_busy(); RS = 1; RW = 0; E = 0; data_buffer = datashow; _nop_(); E = 1; _nop_(); E = 0; _nop_(); }