基于proteus 18LCD1602液晶显示字符的51单片机开发实例

1. 基于proteus的51单片机开发实例18-LCD1602液晶显示1.1. 实验目的图1 LCD1602显示电路前面我们已经学习了使用数码管显示数字和简单

其实基于proteus 18LCD1602液晶显示字符的51单片机开发实例的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享基于proteus 18LCD1602液晶显示字符的51单片机开发实例的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

我们已经学会了如何使用数码管来显示数字和简单的字符。但数码管的显示内容有很大的局限性。例如,显示的字符数量有限,在显示复杂的字符形状时,显示效果不是很好。例如用8段数码管显示字符“S”时,效果如下图。可以看出,这个“S”与数字“5”非常相似。事实上,在数码管显示的字符的段码表中,字符“S”和数字“5”的段码是相同的。

数码管显示数字和字符

在本例中,我们使用更丰富的LCD 来显示字符和数字。使用LCD1602液晶显示两行字符“老马士图单片机”和“0123456789”,从而熟悉和掌握LCD1602液晶的原理、驱动方法和编程实现。

这个例子有两个目的:

1、了解LCD1602液晶的显示原理及驱动电路设计;

2、掌握51单片机编程控制LCD1602液晶显示字符和数字的方法。

1.2. 设计思路

本例从LCD1602液晶的工作原理开始。根据其工作原理,在proteus中画出LCD1602液晶的工作电路,然后利用51单片机编程实现LCD1602液晶的显示控制。

1.3. 基础知识

LCD大家一定都很熟悉了。液晶的显示内容可分为段式、字符式、点阵式三种。分段液晶的显示内容与数码管相同,其原理和驱动方法可借鉴数码管。本例中我们使用的LCD1602液晶是字符液晶。下面的实施例将研究点阵液晶。

首先我们从字面上来了解一下LCD1602液晶。 16表示液晶屏每行可以显示16个字符,02表示液晶屏有两行。因此,LCD1602液晶总共可以显示32个字符。

下面两张图是LCD1602液晶的实物图和引脚图。

LCD1602液晶屏实物图

LCD液晶引脚图

我们知道,单片机编程主要是根据不同的情况(模拟功能除外)检测端口的电平,并控制端口输出高低电平。因此,对于控制LCD1602液晶,了解其引脚功能是编程的必要条件。

1.3.1. Lcd1602液晶的引脚功能

VSS:电源地

VDD:电源

VEE:LCD对比度调节引脚,可通过电位器连接到VDD来调节对比度。

RS:寄存器选择引脚。当RS=0时,选择指令寄存器;当RS=1时,选择数据存储器。

R/W:读写控制引脚。当R/W=0时,可以对LCD1602进行写操作,当R/W=1时,可以对LCD1602进行读操作。

E:使能信号引脚。在该引脚的下降沿,数据被写入LCD1602。当该引脚为高电平时,可以从LCD1602 读取数据。

D0~D7:数据总线引脚。

LEDA:背光电源地

LEDK:背光电源

1.3.2. LCD1602液晶显示字符的过程

通过电路和编程来控制LCD1602液晶显示字符,需要解决三个问题。

1、字符标准ASCII码的生成

常用字符的标准ASCII码必须手动生成。在程序中定义字符常量或字符串常量时,C语言编译后会自动生成其标准ASCII码。只要将生成的标准ASCII码通过单片机的I/O口发送到LCD1602的数据显示寄存器DDRAM,内部控制电路就会自动将字符传输到显示器上。

单片机中字符数据或字符串数据的定义一般采用数组的方式。例如定义一个字符串unsigned char code string[ ]={‘laomashitu mcu’};如您所见,该数组没有定义长度。 C51会根据字符串的长度自动指定数组的长度。注意该数组的最后一个。默认字符为空字符“\0”,字符串用双引号括起来。

2. LCD1602显示模式设置

为了让LCD1602液晶显示字符,必须设置“是否有光标、光标移动方向、光标是否闪烁、字符移动方向”等,这样液晶屏才会显示按设计要求进行展示。这些设置是通过一系列控制指令来实现的。下面详细描述控制指令。

基于proteus 18LCD1602液晶显示字符的51单片机开发实例

需要说明的是,发送控制指令时,需要相应设置RS和R/W引脚的电平。不同的指令对RS和R/W引脚的电平有不同的要求。

3. 如何指定字符显示位置

要显示字符,必须让LCD1602液晶控制器知道它要显示在哪里,即要显示在哪一行哪一列。也就是说,首先要向LCD控制器输入要显示的字符的地址。 (具体地址定义详见下面的控制指令)。

LCD1602液晶内部显示地址如下图所示。指定显示位置的方法是“80H+地址码(第一行00H~0FH,第二行40H~4FH)”。例如,要显示第一行第二列的字符,则地址码应指定为80H+01H=81H。

LCD1602液晶内部显示地址

1.3.3. LCD1602液晶的控制指令

清屏指令

清除屏幕上显示的内容。用于清除DDRAM和AC的值。

归零指令

将屏幕光标返回到原点。

输入方式选择指令

设置光标和屏幕的移动方式。

I/D=1:数据读写操作完成后,AC自动加1;

I/D=0:数据读写操作后,AC自动减1。

S=1:数据读写操作完成后,屏幕移动;

S=0:数据读写操作后,屏幕保持不变。

显示开关控制指令

用于设置显示、光标和闪烁的打开和关闭。

D=1:显示开启;

D=0:显示关闭。

C=1:光标处于打开状态;

C=0:光标关闭。

B=1:闪烁;

B=0:闪烁。

光标和画面移动指令

用于移动光标和屏幕而不影响DDRAM。

S/C=1:屏幕移动一位字符;

S/C=0:光标移动一个字符。

R/L=1:右移;

R/L=0:左移。

功能设置指令

用于设置工作模式。 (初始化命令)

基于proteus 18LCD1602液晶显示字符的51单片机开发实例

DL=1:8位数据接口;

DL=0:4位数据接口。

N=1:两行显示;

N=0:显示一行。

F=1:5*10点阵字符;

F=0:5*7点阵字符。

CGRAM设置指令

用于设置CGRAM地址,A5~A0=0x00~0x3f。

DDRAM设置指令

用于设置DRAM地址。

N=0:一行显示,地址:A6~A0=0~4fH;

N=1:两行显示,第一行地址A6~A0=0~2fH,第二行地址A6~A0=40~64H。

l读RF和AC指令

BF=1:忙;

BF=0:准备就绪。此时AC值为最新地址设置(CGRAM或DDRAM)的值。

写数据指令

用于将地址码写入DDRAM中,使LCD显示相应的图形或将用户创建的图形存储到CGRAM中。

读数据指令

根据当前设置的地址从DDRAM或CGRAM读取数据。

1.3.4. LCD1602的初始化步骤:

1、设置LCD1602的功能;

2、设置LCD1602的输入模式

3、设置LCD1602的显示模式

4. 清除LCD1602的屏幕

1.4. 电路设计

本例电路如图1所示,LCD1602液晶的数据引脚连接到单片机P3口的P3.0~P3.7。 LCD1602液晶的控制引脚RW、RS、E分别与P2口的三个引脚相连。整体电路非常简单。

1.5. 程序设计

1.6. 实例仿真

程序编译完成后,将生成的hex文件加载到proteus电路的单片机中,开始仿真,看看LCD1602显示的内容是否符合设计预期。

下面的视频是这个例子的模拟过程。

用户评论

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
琴断朱弦

Proteus 上做项目真的很方便!之前想尝试51单片机,感觉教程都太难懂了,这个例子刚好解决了我的问题,操作也很清晰。

    有12位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
失心疯i

这篇博客写的真好啊,直接用 Proteus 模拟,没必要找真实的硬件调试,确实省时省力。对于像我刚接触单片机的学习者来说,简直是福音

    有9位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
孤街浪途

终于找到一篇解释清楚1602液晶显示的教程了!以前在其他地方看都是乱七八糟的,这个例子一步步讲解,太实用啦!希望能看到更多Proteus的51单片机开发实例。

    有7位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
病房

对 3G 手机开发没啥感觉,但 Proteus模拟 51 开发实例我倒是挺感兴趣的,以前也学过一点C语言,这次要好好跟着教程把这个LCD1602显示字符弄懂了!

    有20位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
弃我者亡

话说Proteus 模拟的环境真的逼真吗?我现在还在用 KEIL 编译,感觉模拟的效果不是特别理想。希望这篇文章能帮我弥补一下模拟环境的不足。

    有10位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
你很爱吃凉皮

51单片机入门确实比较难,我一直在找资源学习,这个基于 Proteus 的开发实例非常不错,界面友好清晰易懂,操作非常简单,我决定跟着教程练一练!

    有5位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
醉枫染墨

其实Proteus模拟挺方便的,但是还是建议大家实际操作硬件,毕竟实践才是检验技术的真理。理论知识固然重要,但还是要结合实际项目来巩固学习效果

    有20位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
逃避

这个例子做得不错,LCD1602 这块模块确实很有用,以后可以用它来做一个简单的显示仪器啊! Proteus 可以调换一些硬件组件吗?比如我想要用SPI接口连接LCD,该怎么操作呢?

    有12位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
■孤独像过不去的桥≈

想学51单片机编程,但是自己买硬件太贵了,刚好看到这个基于 Proteus 的实例,试着用着看吧!希望教程能涵盖更多实用案例。

    有10位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
自繩自縛

Proteus 这工具挺好用的,模拟效果确实不错。不过我有个问题想问,这个51单片机的开发例子里面,如果想要实现一些更复杂的功能,比如用声音信号控制LCD的显示内容,该如何修改代码呢?

    有19位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
猫腻

基于 Proteus 的 51 单片机开发实例,确实方便学习,但是模拟环境毕竟有限制,不能完全替代实际硬件操作。建议大家在掌握理论知识后,还是尽量去实操一个完整的项目!

    有16位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
柠栀

这个博客写的很通俗易懂,我是一个新手,看了之后感觉可以动手实践一下了!希望以后能看到更多关于 Proteus 和 51 单片机的案例

    有18位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
海盟山誓总是赊

Proteus 真的是学习单片机的好工具啊!不用担心硬件调试问题就能够方便的编写代码和仿真。这款LCD1602液晶显示字符模块真不错,可以用在各种小型电子项目中!

    有15位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
熟悉看不清

这个例子太棒了!我也想学习怎么用 Proteus 开发 51 单片机项目,请问还有别的教程可以推荐吗?希望看到更多关于 LCD 和 51 单片机的案例分享!

    有6位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
打个酱油卖个萌

Proteus 是个很好的开发工具,但是有些时候模拟环境并不能完全精确的反映硬件实际效果,还是要注重实际操作体验!

    有11位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
浮世繁华

想要了解 Proteus和 51 单片机之间的原理机制,还需要去学习相关的电子工程知识。 这篇文章提供了基本的学习内容,但是建议大家深入学习相关理论,才能更全面地掌握技术

    有11位网友表示赞同!

基于proteus 18LCD1602液晶显示字符的51单片机开发实例
肆忌

基于 Proteus 的 51 单片机开发实例有很多实用价值,特别是对于入门者来说非常友好。希望未来能看到更多更复杂的案例分享!

    有10位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/101672.html

(0)
小su's avatar小su
上一篇 2024年8月30日 上午2:17
下一篇 2024年8月30日 上午2:24

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注