找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 19298|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机LCD显示的理解,真正去学会运用LCD1602

  [复制链接]
跳转到指定楼层
楼主
ID:425175 发表于 2019-1-30 15:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这几天学了LCD1602模块及其显示原理,下面是我对LCD1602显示的理解。
1.1 LCD1602模块
1602字符型液晶,常用16*2的点阵显示(主要是5*7点阵/每字符),初始化好后,写命令设置显示坐标,写数据到8位数据总线上并显示LCD上。
1.1.1 LCD1602模块引脚图
如下图,为LCD1602模块的引脚图(51单片机开发板),通过旋钮电位器(顺时针可以加亮,反之亦然)。
图1.1.1 LCD1602引脚图
       GND、VCC分别是电源地、电源正极。
       VO:对比度调整端,若仅仅接地,对比度会很高,常常接上一个几K的电位器或可变电阻来调节对比度以实现理想的显示效果。
       RS:寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
       RW:读写信号线,高电平时进行读操作,低电平时进行写操作。(一般对于单纯的LCD显示只用到写操作)。
       E :使能信号。
       DB0-DB7:8个数据I/O口。
       BG_VCC、BG_GND分别是背光电源正极、负极。

1.1.2 LCD1602.h
     下面是LCD1602工作时序,如图


图1.1.2 LCD1602工作时序图

1.初始化之前需要编写‘写命令操作’。
对于WriteCom(),由前面知道,写操作需要RW为低电平即‘0’,并且通过使RS为低电平即‘0’来选择命令寄存器,才能写入命令到DATAPINS。另外,每次命令输入DATAPINS就位后,令使能信号产生一个下降沿,将DATAPINS的命令写进LCD1602

  1. void LcdWriteCom(uchar com)      //写入命令
  2. {
  3.       LCD1602_E = 0;         //使能清零

  4.       LCD1602_RS = 0;        //选择发送命令
  5.       LCD1602_RW = 0;      //选择写入

  6.       LCD1602_DATAPINS = com;    //放入命令
  7.       Lcd1602_Delayms(1);                   //等待数据稳定


  8.       LCD1602_E = 1;           //写入时序,一个下降沿,将命令传达到LCD
  9.       Lcd1602_Delayms(5);        //保持时间
  10.       LCD1602_E = 0;
  11. }
复制代码


2.‘写数据操作’也类似,不同之处是RS为高电平即‘1’选择数据寄存器,将数据写入DATAPINS,其他都一样。
  1. void LcdWriteData(uchar dat) //写入数据

  2. {

  3. LCD1602_E = 0; //使能清零
  4. LCD1602_RS = 1; //选择输入数据
  5. LCD1602_RW = 0; //选择写入
  6. LCD1602_DATAPINS = dat; //写入数据
  7. Lcd1602_Delayms(1);
  8. LCD1602_E = 1; //写入时序,一个下降沿
  9. Lcd1602_Delayms(5); //保持时间
  10. LCD1602_E = 0;

  11. }
复制代码

3.写命令操作编完后就可以进行LCD1602的初始化了。

  1. void LcdInit()                                         //LCD初始化子程序

  2. {
  3.      LcdWriteCom(0x38);  //功能设定 0011 1000 (8位数据线、显示2行、每个字符为5*7点阵)

  4.       //
  5.       LcdWriteCom(0x0c);  //显示开关控制 0000 1100(或+光标不闪烁0x0d:0000 1101)(开显示、不开光标、光标闪烁或不闪烁)
  6.       LcdWriteCom(0x06);  //进入模式设置 0000 0110(写入数据后光标右移一位及显示屏不动)
  7.       LcdWriteCom(0x01);  //清屏
  8.       LcdWriteCom(0x80);  //设置数据指针起点 //DB7为高电平

  9. }
复制代码

4.调用LCD1602显示
  1. void  LCD1602_display()

  2. {

  3.       unsigned int i,j;
  4.       unsigned char  Compu[9]="computer";
  5.       unsigned char  Dog[5]="dog";
  6.       LcdInit();
  7.       LcdWriteCom(0x80+15);//第一行显示C
  8. LcdWriteData(‘C’);
  9. LcdWriteCom(0x80);
  10.    /*其他方式显示:for循环语句显示字符串*/
  11.       for(i=0;i<8;i++) //第一行显示‘computer’

  12.      {
  13.                 LcdWriteData(Compu[i]);
  14.       }

  15.       LcdWriteCom(0x80+0x40);
  16.       for(j=0;j<3;j++)// //第二行显示‘dog’
  17.      {

  18.                 LcdWriteData(Dog[j]);
  19.       }
  20. }
复制代码

     好了,今天的分享就先到这,虽然只是小case,但是做个总结还是蛮有意义的!


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏10 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:478928 发表于 2019-2-21 18:26 | 只看该作者
nice看了你的总结明白了很多东西
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表