51单片机玩转物联网基础篇06-LCD1602液晶显示器

前言

本节我们开始学习LCD1602,LCD1602是字符型液晶显示屏,在实际项目中应用非常广泛,学完本节就可以逐步开发一些好玩的应用了。

一、基础知识

1.LCD1602简介

LCD1602是字符型液晶显示模块,专门用于显示字母、数字、符号等点阵式LCD,顾名思义,LCD1602一共可以显示两行,每一行能够显示16个字符数据,采用5V供电,具有低功耗、长寿面、搞可靠性等特性,实物图如下:
在这里插入图片描述

(1) 引脚说明
在这里插入图片描述

在 LCD1602 内部含有 80 个字节的 DDRAM,它是用来寄存显示字符的。其地址和屏幕的对应关系如下
在这里插入图片描述

从上图可知,LCD1602中80个字节并不是所有的都用来显示数据,只有第一行的00-0F,第二行的40~4F用来显示,其他地址只能用来存储

(2) 指令表
在这里插入图片描述

(3) 常用指令说明

  • 清屏指令
    在这里插入图片描述
    功能:清楚屏幕,置AC为0

  • 模式设置指令
    在这里插入图片描述
    功能:光标和显示模式设置
    设定每次输入1位数据后光标的移位方向,并且设定每次写入后的字符是否移动。
    I/D(光标移动方向): 1:右移 0:左移
    S(显示屏整体是否移动): 1 :有效右移 0:无效

  • 显示开关控制指令
    在这里插入图片描述
    功能:控制显示器开/关,光标开/关,光标是否闪烁
    D:1,开启显示功能; 0,关闭显示功能
    C:1,有光标;0,无光标
    B:1,光标闪烁;0,光标不闪烁

  • 功能设定指令
    在这里插入图片描述
    功能:设置数据总线位数、显示行数、字型
    DL:1,数据总线为8位; 0,数据总线为4位
    N:1,显示2行;0,显示1行
    F:1,5X7点阵;0,5X10点阵

2.硬件设计

打开硬件设计电路,LCD相关电路如下
在这里插入图片描述
注意:R7控制LCD1602驱动电压,可调,一般设计需要10K可调电阻,也可以字型调试OK后,焊接固定电阻。

二、实例

1.创建工程

将上一节工程复制出来,并修改名字为05-lcd1602
在这里插入图片描述

2.修改程序

/*------------------------------------------------------
*店铺网址:https://shop321633213.taobao.com/?spm=a1z10.3-c.0.0.33816af5iLgN2F
*适用于A08开发板
*实验现象:驱动LCD1602
*QQ群:906015840
* ------------------------------------------------------*/ 

#include<reg51.h> //头文件
#include <intrins.h> 
#define uchar unsigned char
#define uint unsigned int 
uchar code table_xiaoyi[]="XIAOYI IOT";         //
uchar code table_xiaoyi_welcome[]="Welcome!";                                 
sbit LCD_EN=P3^7;   //液晶使能信号
sbit LCD_RS=P3^5;   //数据/命令选择端
sbit LCD_WR=P3^6;

void delay_ms(uint ms)
{
  uint x,y;
 for(x=ms;x>0;x--)
 for(y=110;y>0;y--);
}

void write_com(uchar com) //命令
{
   LCD_RS=0;        //选择写命令
   P0=com;
   delay_ms(5);
   LCD_EN=1;        //使能信号
   LCD_EN=0;         //关闭使能
}

void write_data(uchar date) //数据
{
  LCD_RS=1;        //选择写数据
  P0=date;
  delay_ms(5);
  LCD_EN=1;
  LCD_EN=0;
}

void init()
{
  LCD_EN=0;
  write_com(0x38);         //00111000        设置16*2显示,5*7点阵 8为数据接口
  write_com(0x0c);   //00001100        设置开显示,不显示光标
  write_com(0x06);         // 00000110        写一个字符后地址指针加 1
  write_com(0x01);         //00000001        显示清0,数据指针清零        
}

void main(void) //主函数
{
  uchar i;
  LCD_WR=0;
  init();
 // 写第一行数据
  write_com(0x80); 
 for(i=0;i<10;i++)
  {
    write_data(table_xiaoyi[i]);
    delay_ms(5);
  }
 // 写第二行数据
  write_com(0x80+0x40);        
 for(i=0;i<8;i++)
  {
    write_data(table_xiaoyi_welcome[i]);
    delay_ms(5);
  }
 while(1);
}

程序中将字符串"XIAOYI IOT"显示在第一行,"Welcome"显示在第二行。

三、运行

将上述程序生成的hex文件烧录到板子中,板子显示如下:
在这里插入图片描述

四、结语

如您在使用过程中有任何问题,请加QQ群进一步交流。

QQ交流群:906015840 (备注:物联网项目交流)

源码获取:扫描下方二维码,关注公众号,回复"51单片机"即可

硬件获取:淘宝搜索店铺"小驿物联"。
在这里插入图片描述
一叶孤沙出品:一沙一世界,一叶一菩提

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于使用51单片机控制LCD1602液晶显示器,需要了解以下几个方面的知识: 1. 硬件连接:将LCD1602液晶显示器51单片机连接,具体连接方式可以参考LCD1602液晶显示器的数据手册。 2. 通信协议:LCD1602液晶显示器使用的是并行通信协议,通信时需要向液晶显示器发送指令和数据。 3. 控制流程:51单片机控制LCD1602液晶显示器的流程主要包括初始化、设置光标位置、写入指令和数据等。 下面给出一个简单的示例代码,实现对LCD1602液晶显示器的控制: ```c #include <reg51.h> #define LCD_DATA P0 // 数据口 sbit RS = P2^0; // RS口 sbit RW = P2^1; // RW口 sbit EN = P2^2; // EN口 void delay(unsigned int time) // 延时函数 { unsigned int i, j; for(i = time; i > 0; i--) { for(j = 10; j > 0; j--); } } void write_command(unsigned char command) // 写入指令 { RW = 0; // 写模式 RS = 0; // 写入指令 LCD_DATA = command; EN = 1; delay(5); EN = 0; } void write_data(unsigned char data) // 写入数据 { RW = 0; // 写模式 RS = 1; // 写入数据 LCD_DATA = data; EN = 1; delay(5); EN = 0; } void init_lcd() // 初始化LCD { write_command(0x38); // 设置8位数据总线,2行显示,5x7点阵字符 write_command(0x0c); // 显示开,光标不显示,光标闪烁不显示 write_command(0x06); // 光标右移,字符不移动 write_command(0x01); // 清屏 } void set_cursor_pos(unsigned char row, unsigned char col) // 设置光标位置 { unsigned char pos; if(row == 1) { pos = 0x80 + col - 1; } else if(row == 2) { pos = 0xc0 + col - 1; } write_command(pos); } void main() { init_lcd(); // 初始化LCD set_cursor_pos(1, 1); // 设置光标位置,第1行第1列 write_data('H'); // 写入字符'H' write_data('e'); // 写入字符'e' write_data('l'); // 写入字符'l' write_data('l'); // 写入字符'l' write_data('o'); // 写入字符'o' set_cursor_pos(2, 1); // 设置光标位置,第2行第1列 write_data('W'); // 写入字符'W' write_data('o'); // 写入字符'o' write_data('r'); // 写入字符'r' write_data('l'); // 写入字符'l' write_data('d'); // 写入字符'd' while(1); } ``` 在上述代码中,首先定义了硬件连接的端口,然后实现了写入指令和数据的函数,以及初始化LCD、设置光标位置和主函数。在主函数中,首先初始化LCD,然后设置光标位置,写入字符,最后进入死循环。这样就可以实现对LCD1602液晶显示器的简单控制了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物联网客栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值