一、LCD1602的使用

从上图可知,不是所有的地址都可以直接用来显示字符数据,只有第一行中的 00-0F,第二行中的 40-4F 才能显示,其他地址只能用于存储。

从上图可以看到,以上给的时间参数全部是 ns 级别的,而 51 单片机的机器周期是 1us,指令周期是 2-4 个机器周期,所以即便在程序里不加延时程序,也可以很好的配合 LCD1602 的时序要求了。

LCD1602 操作步骤如下所示:
(1)初始化
(2)写命令(RS=L),设置显示坐标
(3)写数据(RS=H)
在此,不需要读出它的数据的状态或者数据本身。所以只需要看两个写时序:
① 当要写指令字,设置 LCD1602 的工作方式时:需要把 RS 置为低电平,RW置为低电平,然后将数据送到数据口 D0~D7,最后 E 引脚一个高脉冲将数据写入。
② 当要写入数据字,在 1602 上实现显示时:需要把 RS 置为高电平,RW 置为低电平,然后将数据送到数据口 D0~D7,最后 E 引脚一个高脉冲将数据写入。
写指令和写数据,差别仅仅在于 RS 的电平不一样而已。

二、硬件设计

这里原理图是使用的 8 位 LCD1602 接口设计,从上图中可以看出,该电路是并不是独立的, LCD1602 的 8 位数据口 DB0-DB7与单片机的 P00-P07 管脚连接,LCD1602 的 RS、RW、E 脚与单片机的 P26、P25、P27 管脚连接。RJ1 是一个电位器,用来调节 LCD1602 对比度即显示亮度。

1、编写lcd.h

#ifndef _lcd_H
#define _lcd_H#include "public.h"//#define LCD1602_4PINS#ifndef uchar
#define uchar unsigned char
#endif#ifndef uint
#define uint unsigned int
#endif#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;void LCD_WriteCmd(u8 cmd);
void LCD_WriteData(u8 dat);
void LcdInit();
void LCD_Clear();
void LCD_Dispstring(u8 x,u8 line,u8 *p);#endif

2、编写lcd.c

#include "lcd.h"void Lcd1602_Delay1ms(uint c)
{uchar a,b;for (; c>0; c--){for (b=199;b>0;b--){for(a=1;a>0;a--);}      }}#ifndef    LCD1602_4PINS
void LCD_WriteCmd(uchar com)
{LCD1602_E = 0;LCD1602_RS = 0;       LCD1602_RW = 0; LCD1602_DATAPINS = com;     Lcd1602_Delay1ms(1);       LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;
}
#else
void LCD_WriteCmd(uchar com)
{LCD1602_E = 0;     LCD1602_RS = 0;    LCD1602_RW = 0;    LCD1602_DATAPINS = com;   Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;//    Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com << 4; Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;
}
#endif#ifndef   LCD1602_4PINS
void LCD_WriteData(uchar dat)
{LCD1602_E = 0;    LCD1602_RS = 1;    LCD1602_RW = 0;    LCD1602_DATAPINS = dat;Lcd1602_Delay1ms(1);LCD1602_E = 1;   Lcd1602_Delay1ms(5);   LCD1602_E = 0;
}
#else
void LCD_WriteData(uchar dat)
{LCD1602_E = 0;LCD1602_RS = 1;    LCD1602_RW = 0;LCD1602_DATAPINS = dat;    Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4; Lcd1602_Delay1ms(1);LCD1602_E = 1;Lcd1602_Delay1ms(5);LCD1602_E = 0;
}
#endif#ifndef       LCD1602_4PINS
void LcdInit()
{LCD_WriteCmd(0x38);LCD_WriteCmd(0x0c);LCD_WriteCmd(0x06);LCD_WriteCmd(0x01); LCD_WriteCmd(0x80);
}
#else
void LCD_Init()
{LCD_WriteCmd(0x32);    LCD_WriteCmd(0x28);  LCD_WriteCmd(0x0c);  LCD_WriteCmd(0x06); LCD_WriteCmd(0x01); LCD_WriteCmd(0x80);
}
#endifvoid LCD_Clear()
{LCD_WriteCmd(0x01);LCD_WriteCmd(0x80);
}void LCD_Dispstring(u8 x,u8 line,u8 *p)
{char i=0;if(line<1){   while(*p!='\0'){if(i<16-x){LCD_WriteCmd(0x80+i+x);  }else{LCD_WriteCmd(0x40+0x80+i+x-16);    }LCD_WriteData(*p);p++;i++; }   }else{while(*p!='\0'){if(i<16-x){LCD_WriteCmd(0x80+0x40+i+x);  }else{LCD_WriteCmd(0x80+i+x-16);  }LCD_WriteData(*p);p++;i++; }   }
}

3、编写main.c

#include "reg52.h"
#include "lcd.h"typedef unsigned int ui;
typedef unsigned char uc;uc disp[]="love story";void main()
{ui i;LcdInit();for(i=0;i<16;i++){LCD_WriteData(disp[i]);}while(1);
}

注:
在程序中我们可以看到如下程序框架:

#ifndef LCD1602_4PINS ...程序段 1...
#else ...程序段 2...
#endif

这个是条件选择编译结构,意思是:如果没有定义 LCD1602_4PINS 则执行程序段 1,否则执行程序段 2。

51单片机之 LCD1602液晶显示屏相关推荐

  1. 51单片机用c语言在液晶1602上显示汉字,lcd1602与单片机连接图,基于51单片机的lcd1602液晶显示屏连接电路图...

    描述 LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符.LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示, ...

  2. 51单片机控制LCD1602模块

    51单片机控制LCD1602模块 视频播放:LCD1602视频 (1)LCD1602概述 先来看看LCD1602什么意思?Liquid Crystal Display(LCD)表示液晶显示,1602 ...

  3. 51单片机驱动——LCD1602

    51单片机驱动--LCD1602 1.描述 51单片机控制LCD1602屏幕显示测量数据.固定字符串等,大家复制过去可以直接使用,相关注释我已标明. 2.子文件 LCD1602.c #include ...

  4. 51单片机与LCD1602接口电路与程序

    51单片机与LCD1602接口电路与程序 一.工作方式:间接工作方式. 二.实现功能:显示"Hope the epidemic will pass soon". 三.仿真电路图: ...

  5. 基于51单片机的LCD1602显示温湿度

    51单片机基础难点知识理解后,直接通过下面3个小项目可以更好理解51单片机.中断 定时器 串口甚至是基础的IO输入输出都有结合,再加上一些外设模块的学习(如1602显示屏,L298N电机驱动等) 项目 ...

  6. 51单片机 DHT11+LCD1602温湿度显示 + Proteus仿真

    51单片机 DHT11+LCD1602温湿度显示+ Proteus仿真 主程序代码 #include <reg52.h> #include <LCD1602.h> #inclu ...

  7. 基于51单片机的lcd1602万年历设计_温度+闹钟心得

    基于51单片机的lcd1602万年历设计_温度+闹钟心得 下载地址 https://download.csdn.net/download/weixin_44017446/10908985 当看到这个学 ...

  8. 基于51单片机的LCD1602电子钟闹钟proteus仿真设计

    本设计是基于51单片机的LCD1602电子钟闹钟proteus仿真设计 源码+仿真+原理图+器件清单 仿真软件版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编 ...

  9. 【Proteus仿真】51单片机+DS1302+lcd1602显示

    [Proteus仿真]51单片机+DS1302+lcd1602显示 Proteus仿真 工程架构 项目工程 文件结构 主程序代码 #include <reg52.h> #include & ...

最新文章

  1. Java虚拟机 —— 类的加载机制
  2. Chapter 2 Open Book——34
  3. python就业方向哪个好-学习python就业方向都有哪些?
  4. opencv轻松入门面向python下载_OpenCV轻松入门:面向Python
  5. 学术英语:关于such as, for example, etc., and so on, i.e., 和e.g.的使用
  6. 基于TableStore构建简易海量Topic消息队列
  7. Vss2005局域网开发权限设置指南
  8. 一周学会Mootools 1.4中文教程:(4)类型
  9. 【C#设计模式——创建型模式】抽象工厂模式
  10. oracle 并置,Oracle Coherence中文教程二:安装Oracle Coherence
  11. 用 Python 编辑 PDF 文件
  12. 前端——》H5页面开屏分离特效
  13. 两寸证件照的尺寸是多少?如何换两寸证件照的背景色?
  14. 商超霸主之争:天猫节节败退 沦为京东陪练
  15. 十分钟手把手教你设计简单易用的组件级考试题(单选、多选、填空、图片),建议收藏
  16. 一个男人的一生应该有几个女人?
  17. Java基础 println print 实现输出换行
  18. 大数据在线分析处理和常用工具
  19. 截屏工具、录屏工具不能用?是因为这个!!
  20. chart.js使用学习——柱状图(1:基本用法)

热门文章

  1. 北京公交IC 卡充值地点
  2. debian 11 apt 安装软件报错:Media change: please insert the disc labeled
  3. kali linux 2.0安装教程,kali linux2.0安装vega
  4. Cocos2d-x 屏幕适配
  5. git从本地仓库更新项目到远程仓库指定分支
  6. 保姆级Windows下载安装PaddleGAN并使用教程
  7. mysql上机实验报告_数据库上机实验7实验报告.doc
  8. 中国第一台103型电子计算机诞生于,第一台计算机诞生于几年?
  9. 干货 | 带你解锁AC/DC、DC/DC转换器基础
  10. 一图看懂信用报告在线查询指南