51单片机之 LCD1602液晶显示屏
一、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液晶显示屏相关推荐
- 51单片机用c语言在液晶1602上显示汉字,lcd1602与单片机连接图,基于51单片机的lcd1602液晶显示屏连接电路图...
描述 LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符.LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示, ...
- 51单片机控制LCD1602模块
51单片机控制LCD1602模块 视频播放:LCD1602视频 (1)LCD1602概述 先来看看LCD1602什么意思?Liquid Crystal Display(LCD)表示液晶显示,1602 ...
- 51单片机驱动——LCD1602
51单片机驱动--LCD1602 1.描述 51单片机控制LCD1602屏幕显示测量数据.固定字符串等,大家复制过去可以直接使用,相关注释我已标明. 2.子文件 LCD1602.c #include ...
- 51单片机与LCD1602接口电路与程序
51单片机与LCD1602接口电路与程序 一.工作方式:间接工作方式. 二.实现功能:显示"Hope the epidemic will pass soon". 三.仿真电路图: ...
- 基于51单片机的LCD1602显示温湿度
51单片机基础难点知识理解后,直接通过下面3个小项目可以更好理解51单片机.中断 定时器 串口甚至是基础的IO输入输出都有结合,再加上一些外设模块的学习(如1602显示屏,L298N电机驱动等) 项目 ...
- 51单片机 DHT11+LCD1602温湿度显示 + Proteus仿真
51单片机 DHT11+LCD1602温湿度显示+ Proteus仿真 主程序代码 #include <reg52.h> #include <LCD1602.h> #inclu ...
- 基于51单片机的lcd1602万年历设计_温度+闹钟心得
基于51单片机的lcd1602万年历设计_温度+闹钟心得 下载地址 https://download.csdn.net/download/weixin_44017446/10908985 当看到这个学 ...
- 基于51单片机的LCD1602电子钟闹钟proteus仿真设计
本设计是基于51单片机的LCD1602电子钟闹钟proteus仿真设计 源码+仿真+原理图+器件清单 仿真软件版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编 ...
- 【Proteus仿真】51单片机+DS1302+lcd1602显示
[Proteus仿真]51单片机+DS1302+lcd1602显示 Proteus仿真 工程架构 项目工程 文件结构 主程序代码 #include <reg52.h> #include & ...
最新文章
- Java虚拟机 —— 类的加载机制
- Chapter 2 Open Book——34
- python就业方向哪个好-学习python就业方向都有哪些?
- opencv轻松入门面向python下载_OpenCV轻松入门:面向Python
- 学术英语:关于such as, for example, etc., and so on, i.e., 和e.g.的使用
- 基于TableStore构建简易海量Topic消息队列
- Vss2005局域网开发权限设置指南
- 一周学会Mootools 1.4中文教程:(4)类型
- 【C#设计模式——创建型模式】抽象工厂模式
- oracle 并置,Oracle Coherence中文教程二:安装Oracle Coherence
- 用 Python 编辑 PDF 文件
- 前端——》H5页面开屏分离特效
- 两寸证件照的尺寸是多少?如何换两寸证件照的背景色?
- 商超霸主之争:天猫节节败退 沦为京东陪练
- 十分钟手把手教你设计简单易用的组件级考试题(单选、多选、填空、图片),建议收藏
- 一个男人的一生应该有几个女人?
- Java基础 println print 实现输出换行
- 大数据在线分析处理和常用工具
- 截屏工具、录屏工具不能用?是因为这个!!
- chart.js使用学习——柱状图(1:基本用法)
热门文章
- 北京公交IC 卡充值地点
- debian 11 apt 安装软件报错:Media change: please insert the disc labeled
- kali linux 2.0安装教程,kali linux2.0安装vega
- Cocos2d-x 屏幕适配
- git从本地仓库更新项目到远程仓库指定分支
- 保姆级Windows下载安装PaddleGAN并使用教程
- mysql上机实验报告_数据库上机实验7实验报告.doc
- 中国第一台103型电子计算机诞生于,第一台计算机诞生于几年?
- 干货 | 带你解锁AC/DC、DC/DC转换器基础
- 一图看懂信用报告在线查询指南