仿真原理图如下:

1.LCD1602正常显示两行数据

/*------------------------
功能:LCD1602显示两行数据
Author: Zhang Kaizhou
Date: 2019-6-3 12:42:22
------------------------*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned intuchar code table0[] = {"0123456789ABCDEF"}; // 每行的字符数据
uchar code table1[] = {"0123456789abcdef"};
sbit lcdrs = P1^2; // LCD数据/命令选择端
sbit lcdrw = P1^3; // LCD读写选择端
sbit lcden = P1^4; // LCD使能端,高脉冲有效
uchar num;void init();
void writeCommand(uchar command);
void delay(uchar xms);
void writeData(uchar dat);void main()
{init();writeCommand(0x80); // 将数据指针定位到第一行的首地址for(num = 0; num < 16; num++){writeData(table0[num]);delay(5);}writeCommand(0x80 + 0x40); // 将数据指针定位到第二行的首地址for(num = 0; num < 16; num++){writeData(table1[num]);delay(5);}while(1);
}/*初始化LCD1602的设置*/
void init()
{lcden = 0; // 拉低使能端,准备产生使能高脉冲信号writeCommand(0x38); // 显示模式设置(16x2, 5x7点阵,8位数据接口)writeCommand(0x0c); // 开显示,不显示光标writeCommand(0x06); // 写一个字符后地址指针自动加1writeCommand(0x01); // 显示清零,数据指针清零
}/*写指令函数*/
void writeCommand(uchar command)
{lcdrs = 0; // 命令选择lcdrw = 0;P0 = command;delay(5);lcden = 1; // 产生一个正脉冲使能信号delay(5);lcden = 0;
}/*写数据函数*/
void writeData(uchar dat)
{lcdrs = 1; // 数据选择lcdrw = 0;P0 = dat;delay(5);lcden = 1;delay(5);lcden = 0;
}/*延时函数*/
void delay(uchar xms)
{uint i, j;for(i = xms; i > 0; i--)for(j = 110; j > 0; j--);
}

2.整屏左移显示

/*------------------------
功能:LCD1602整屏左移显示
Author: Zhang Kaizhou
Date: 2019-6-3 12:35:23
------------------------*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned intuchar code table0[] = {"0123456789ABCDEF"}; // 每行的字符数据
uchar code table1[] = {"0123456789abcdef"};
sbit lcdrs = P1^2; // LCD数据/命令选择端
sbit lcdrw = P1^3; // LCD读写选择端
sbit lcden = P1^4; // LCD使能端,高脉冲有效
uchar num;void init();
void writeCommand(uchar command);
void delay(uchar xms);
void writeData(uchar dat);void main()
{init();writeCommand(0x80 + 0x10); // 将数据指针定位到第一行的非显示存储区for(num = 0; num < 16; num++){writeData(table0[num]);delay(5);}writeCommand(0x80 + 0x50); // 将数据指针定位到第二行的非显示存储区for(num = 0; num < 16; num++){writeData(table1[num]);delay(5);}for(num = 0; num < 16; num++) // 循环整屏左移{writeCommand(0x1c); // 整屏左移delay(100);}while(1);
}/*初始化LCD1602的设置*/
void init()
{lcden = 0; // 拉低使能端,准备产生使能高脉冲信号writeCommand(0x38); // 显示模式设置(16x2, 5x7点阵,8位数据接口)writeCommand(0x0c); // 开显示,不显示光标writeCommand(0x06); // 写一个字符后地址指针自动加1writeCommand(0x01); // 显示清零,数据指针清零
}/*写指令函数*/
void writeCommand(uchar command)
{lcdrs = 0; // 命令选择lcdrw = 0;P0 = command;delay(5);lcden = 1; // 产生一个正脉冲使能信号delay(5);lcden = 0;
}/*写数据函数*/
void writeData(uchar dat)
{lcdrs = 1; // 数据选择lcdrw = 0;P0 = dat;delay(5);lcden = 1;delay(5);lcden = 0;
}/*延时函数*/
void delay(uchar xms)
{uint i, j;for(i = xms; i > 0; i--)for(j = 110; j > 0; j--);
}

3.刷屏显示多行字符

/*----------------------------
功能:LCD1602刷屏显示多行字符
Author: Zhang Kaizhou
Date: 2019-6-4 16:15:43
-----------------------------*/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned intuchar code table0[] = {"0123456789ABCDEF"}; // 每行的字符数据
uchar code table1[] = {"0123456789abcdef"};
uchar code table2[] = {"Welcome to here!"};
uchar code table3[] = {"I'm ZKZ!"};
uchar code table4[] = {"Life is nice!"};
uchar code table5[] = {"Tomorrow is OK!"};sbit lcdrs = P1^2; // LCD数据/命令选择端
sbit lcdrw = P1^3; // LCD读写选择端
sbit lcden = P1^4; // LCD使能端,高脉冲有效
uchar num;void init();
void writeCommand(uchar command);
void delay(uint xms);
void writeData(uchar dat);void main()
{init();/*第一屏*/writeCommand(0x80); // 将数据指针定位到第一行首for(num = 0; num < strlen(table0); num++){writeData(table0[num]);delay(5);}writeCommand(0x80 + 0x40); // 将数据指针定位到第二行首for(num = 0; num < strlen(table1); num++){writeData(table1[num]);delay(5);}delay(2000);writeCommand(0x01);/*第二屏*/writeCommand(0x80); // 将数据指针定位到第一行首for(num = 0; num < strlen(table2); num++){writeData(table2[num]);delay(5);}writeCommand(0x80 + 0x40); // 将数据指针定位到第二行首for(num = 0; num < strlen(table3); num++){writeData(table3[num]);delay(5);}delay(2000);writeCommand(0x01);/*第三屏*/writeCommand(0x80); // 将数据指针定位到第一行首for(num = 0; num < strlen(table4); num++){writeData(table4[num]);delay(5);}writeCommand(0x80 + 0x40); // 将数据指针定位到第二行首for(num = 0; num < strlen(table5); num++){writeData(table5[num]);delay(5);}while(1);
}/*初始化LCD1602的设置*/
void init()
{lcden = 0; // 拉低使能端,准备产生使能高脉冲信号writeCommand(0x38); // 显示模式设置(16x2, 5x7点阵,8位数据接口)writeCommand(0x0c); // 开显示,不显示光标writeCommand(0x06); // 写一个字符后地址指针自动加1writeCommand(0x01); // 显示清零,数据指针清零
}/*写指令函数*/
void writeCommand(uchar command)
{lcdrs = 0; // 命令选择lcdrw = 0;P0 = command;delay(5);lcden = 1; // 产生一个正脉冲使能信号delay(5);lcden = 0;
}/*写数据函数*/
void writeData(uchar dat)
{lcdrs = 1; // 数据选择lcdrw = 0;P0 = dat;delay(5);lcden = 1;delay(5);lcden = 0;
}/*延时函数*/
void delay(uint xms)
{uint i, j;for(i = xms; i > 0; i--)for(j = 110; j > 0; j--);
}

4.其他显示方式可通过改变写入指令来实现…

LCD1602显示总结相关推荐

  1. C语言 | 基于MPU605(六轴传感器)的I2C实现LCD1602显示(代码类)

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 基于MPU605(六轴传感器)的I ...

  2. 3.5.基于STC89C52+MC20的短信远程控制开关LCD1602显示

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  3. 利用LCD1602显示超声波测距

    利用LCD1602显示超声波测距 介绍 一.需要的器件 二.原理 工程代码 一. LCD1602 二.超声波测距及主程序 运行图 介绍 一.需要的器件 51单片机:任意一款都可以,我这里使用的是STC ...

  4. 基于51单片机的电子钟万年历LCD1602显示

    本设计是51单片机的电子钟万年历LCD1602显示(proteus仿真+程序+报告+器件清单) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编号C0002 ...

  5. (原创)制作一个采用 LCD1602 显示的电子钟,在 LCD 上显示当前的时间。显示格式为“时时:分分:秒秒”。设有 4 个功能键k1~k4,功能如下:(1)k1——进入时间修改。

    (原创)制作一个采用 LCD1602 显示的电子钟,在 LCD 上显示当前的时间.显示格式为"时时:分分:秒秒".设有 4 个功能键k1-k4,功能如下: (1)k1--进入时间修 ...

  6. lcd1602显示和led显示的区别在哪里

    LCD1602显示和LED显示有一些显著的区别: 原理不同:LCD1602显示使用液晶显示技术,而LED显示使用发光二极管(LED)显示技术. 功耗不同:LCD1602显示的功耗通常比LED显示要低. ...

  7. 基于C51单片机的万年历设计(LCD1602显示)

    C51单片机万年历设计 注:该程序基于普中科技C51 V2.2开发板设计,库函数和硬件资料均来自普中科技,侵删.main.c大部分为原创,如有雷同,纯属巧合. 名称:C51万年历. 硬件:以C51芯片 ...

  8. 【Proteus仿真】AT24C02数据读写+LCD1602显示

    [Proteus仿真]AT24C02数据读写+LCD1602显示 Proteus仿真 程序说明 AT24C02采用的IIC通讯,SCK:P20;SDA:P21 按键K1-K4分别接到P30-P33引脚 ...

  9. 【在线仿真】Arduino 超声波测距+LCD1602显示

    [在线仿真]Arduino 超声波测距+LCD1602显示 程序代码 /*LiquidCrystal Library - Hello WorldThis sketch prints "Hel ...

  10. 【Proteus仿真】51单片机制作简易计算器+ LCD1602显示

    [Proteus仿真]51单片机制作简易计算器+ LCD1602显示 Proteus仿真效果演示 程序代码 #include<reg51.h> //头文件 #define uint uns ...

最新文章

  1. C#按关闭按钮实现最小化,按ESC才关闭的实现【含系统消息大全】
  2. 内存淘汰算法_「承」Redis 原理篇——Redis 的内存回收机制
  3. mysql表大小限制_技术分享 | 在磁盘上查找 MySQL 表的大小
  4. C++ delete与 delete []区别
  5. 【机器视觉】 gen_measure_rectangle2算子
  6. Everything的下载
  7. 通过CSS来垂直居中文本
  8. 来看一下:构造函数的小秘密详解
  9. Apache 配置SSL网站
  10. Python 批量生成中文姓名(百家姓)
  11. ThreadLocal原理、ThreadLocal内存泄漏
  12. 汉语字典_Android版最新官方版,汉语字典专业版2020
  13. windows office visio各版本下载
  14. docker-compose+postsql多容器部署django-vue项目
  15. Java 中的 IO 和 NIO
  16. android移动应用技术教程课后答案,完整word版,《Android移动应用基础教程》_习题答案...
  17. 证明:在N维欧式空间中,两两互成钝角的非零向量不多于N+1个
  18. 关于SES2000找管线定位问题的实验
  19. 视频会议系统gk服务器,华为视频会议系统中的终端如何通过GK发起呼叫
  20. 零时科技 || TempleDAO攻击事件分析

热门文章

  1. 合约机乱象频出,运营商利益如何才能得到保障?
  2. 怎么html让元素脱离文档流,子元素设置绝对定位之后脱离文档流!
  3. Flask 和 Django 的比较和选择
  4. wps文档漫游删除_WPS自带的文档漫游和在线模板怎么关闭?
  5. linux系统安装python包
  6. addonsmaker怎么制作_我的世界addons制作器
  7. 权重 缩写 英文_常用英语术语缩写--采购
  8. 以下是一些常用的上位机开发工具:
  9. 虚幻4 UE4 蓝图C++混合编程
  10. 【shell案例】CentOS7安装MySQL脚本案例