4、LED1602液晶模组介绍及其编程使用

简介: 4、LED1602液晶模组介绍及其编程使用

一、1602的基本介绍


1602是基本的液晶模块,其中16表示一行显示16个字符,02表示显示2行。1602也就是表示2行,每行16个字符的液晶模块。而1602前面的字母是表示厂家名称。

image.png

黑屏白字的显示效果较好,有背光的液晶模块表示背光板电源后屏幕有底光,显示效果较好,但是功耗比较大,没有背光板的模块教薄,不适合在光线较暗的环境中使用。


常用的芯片封装技术:

SMT/TAB/COG/COF/COB 外观上通常是一个黑色的水滴状凸起

image.png


1、引脚分布及含义

(一般来说都是做成16个引脚)

image.png

VEE是调节对比度的问题,需要接一个可调的电阻来进行调节

DB0-DB7是数据总线,DB0是数据总线的最低位

并行方法:DB0-DB7 (消耗资源,但是速度快)

串行方法:DB4-DB7 (节约资源,但是速度慢)


2、1602液晶拨快的驱动电路

image.png

(由于基本是写数据进去1602,所以RW控制读写的位直接接地)


www.Alldatasheet.com 可以查到1602的主控芯片HD44780U,也就是用stm8与44780U两个芯片的交互。


二、1602的编程使用


1602液晶模组的引脚含义

RS/RW/EN 这几个控制线是必用的,DB0-DB7是数据总线


1、时序图

弄清楚读时序图: (少用)

image.png


2、读时序操作–向1602读出数据命令(少用)

可见:

读取状态:RS = 0, RW = 1, EN = 1,tDDR时间之后,就可以读出状态。

读取数据:RS = 1, RW = 1, EN = 1,tDDR时间之后,就可以读出数据。

操作过程:

image.png


3、写时序操作–向1602写入数据命令(常用)

写入状态:RS = 0; RW = 0; 准备好data; EN = 1 ----> 0

写入数据:RS = 1; RW = 0; 准备好data; EN = 1 ----> 0

image.png

(上诉的上升沿全部改为下降沿,产生一个下降沿才可以实现数据的写入)


三、1602三大寄存器介绍


问题1:那就是我们所写入的数据或者的读出的数据是来自哪里,或者是写入了哪里?

问题2:思考如何在DDRAM地址显示出字符?


CGROM:字符产生器单元

CGRAM:用户自定义字符产生器RAM单元

DDRAM:显示数据存放RAM单元

image.png


常见的ROM有:EEPROM,EPRROM,Flash闪存(掉电不会丢失,但是数据比较慢)

常见的RAM:SRAM,SROM(掉电之后会丢失,但是速度比较快)


1、CGROM:字符产生器单元

HD44780控制器芯片中已经内置了192个常用字符的字摸,存放在掉电不丢失的字符产生器CGROM中,也就是为了简便用户进行取模。

image.png


2、CGRAM:用户自定义字符产生器RAM单元

在上诉中,除此之外,另外还有8个允许用户自定义的字符产生RAM存在与CGRAM中。也就是其了造字的作用。自己造字的一个空间

image.png


3、DDRAM:显示数据存放RAM单元

这个是一个显示数据的RAM单元,用来存放需要被显示的字符代码,其共有80个字节的大小,一行最多可以支持40个字节。但是1602只需要前面的16个字节大小,后面的暂时不需要的。

image.png

总结:

image.png


4、指令集

问题3:以上知道了读写数据的指的是字模,而读写的命令又是指什么呢?

命令是是让液晶表示一定的功能。指令集如下所示:

image.png


四、1602的具体编程实现


数据用来显示不同的功能,命令用来挑选1602的功能

写入状态:RS = 0; RW = 0; 准备好data; EN = 1 ----> 0

写入数据:RS = 1; RW = 0; 准备好data; EN = 1 ----> 0


问题:为什么第一行的显示地址是0x80?

原因:地址需要偏移,需要加一个80的地址

image.png

确定所需要的命令

image.png

确定好电路连接

image.png

代码如下:显示两行字符串


#include "iostm8s208mb.h"
#define u8  uint8_t
#define u16 uint16_t
#define u32 uint32_t
typedef unsigned char    uint8_t;
typedef unsigned short   uint16_t;
typedef unsigned long    uint32_t;
#define LED1602EN PF_ODR_ODR4
#define LED1602RW PF_ODR_ODR3
#define LED1602RS PF_ODR_ODR0
#define LED1602Data    PB_ODR
void GPIO_Init(void);
void LED1602_Init(void);  
void LED1602_WriteData(u8 Data);  //写数据
void LED1602_WriteComm(u8 Data);  //写命令
void LED1602_Play(void);    //字符串显示
void LED1602_DataPrev(u8 Data);  //数据准备
void Delay(u16 time);
//显示的两个字符串
u8 StringBuff1[16] = "  Hello World!  ";
u8 StringBuff2[16] = "  My Clichong!  ";
int main( void )
{
  GPIO_Init();
  LED1602_Init();
  LED1602_Play();
  return 0;
}
void GPIO_Init(void)
{
    PF_DDR |= 0x19;
    PF_CR1 |= 0x19;
    PF_CR2 &= 0xE6;
    PB_DDR |= 0xFF;
    PB_CR1 |= 0xFF;
    PB_CR2 &= 0x00;
}
void LED1602_Init(void)
{
    LED1602_WriteComm(0x01);    //清屏功能
    LED1602_WriteComm(0x3C);    //8位2行点阵
    LED1602_WriteComm(0x0D);    //显示功能开启,无光标,光标不闪烁
    LED1602_WriteComm(0x06);    //写入新数据后显示屏不移动仅光标右移
}
void LED1602_DataPrev(u8 Data)
{
    LED1602Data = Data;
}
void LED1602_WriteData(u8 Data)
{
    LED1602RS = 1;
    LED1602RW = 0;
    LED1602_DataPrev(Data);
    Delay(2);
    LED1602EN = 1;  //产生一个下降沿触发,发送命令
    Delay(2);
    LED1602EN = 0; 
}
void LED1602_WriteComm(u8 Data)
{
    LED1602RS = 0;
    LED1602RW = 0;
    LED1602_DataPrev(Data);
    Delay(2);
    LED1602EN = 1;  //产生一个下降沿触发,发送数据
    Delay(2);
    LED1602EN = 0;
}
void LED1602_Play(void)
{
    u8 i;
    for(i = 0; i < 16; i++){
        LED1602_WriteData(StringBuff1[i]);
    }
    LED1602_WriteComm(0xC0);  //注意偏移量为0x80,所以0x40的基础上加上0x80为0xc0才是第二行的第一个,否则会无法显示第二行
    for(i = 0; i < 16; i++){
        LED1602_WriteData(StringBuff2[i]);
    } 
}
void Delay(u16 time)
{
  u8 i,j;  
  while(time--){
    for(i = 0; i < 20; i++)
      for(j = 0; j < 50; j++);
  }
}


目录
相关文章
|
5月前
|
数据格式
51单片机--红外遥控
51单片机--红外遥控
|
5月前
|
芯片
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
|
5月前
|
物联网
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
71 0
|
3月前
|
异构计算
FPGA新起点V1开发板(十)——按键控制LED
FPGA新起点V1开发板(十)——按键控制LED
FPGA新起点V1开发板(十)——按键控制LED
|
5月前
|
传感器 物联网 C语言
单片机在智能家居中的应用:以LED灯控制为例
单片机在智能家居中的应用:以LED灯控制为例
170 0
单片机在智能家居中的应用:以LED灯控制为例
|
5月前
|
人工智能 前端开发 JavaScript
基于单片机智能围床灯
本文介绍了一种以单片机为核心,以单片微处理器为核心,以微处理器为核心,以微处理器为核心,对微机进行了智能化的控制。在目前的现实生活中,床围灯的控制方式大多都是人工开关,特别是在夜间的环境中,非常不方便。在这样的情况下,本课题结合当前的技术发展水平,使得床围灯的控制能够用单片机来实现。这样即给传统家庭带来了革新,又是科研人员及广大民众对美好生活的一种向往。智能床围灯控制系统改善了传统床围灯多终端控制带来的不便利之处,并以此为首要,简化操作流程的同时,也提高了系统的可操作性。这在一定程度上为人们的生活带去了便利,同时还在很大程度上节约了能源的消耗,因此它具备了良好的实用意义。
LabVIEW控制Arduino实现PWM呼吸灯(基础篇—5)
利用LIAT中的模拟I/O函数库,通过LabVIEW和Arduino Uno控制板实现LED灯亮度的调节,产生灯会呼吸的效果。
|
物联网 Android开发
毕业设计 基于51单片机无线蓝牙APP控LED灯亮灭亮度设计
毕业设计 基于51单片机无线蓝牙APP控LED灯亮灭亮度设计
294 1
毕业设计 基于51单片机无线蓝牙APP控LED灯亮灭亮度设计