news 2026/9/4 1:17:52

基于HD44780的字符型液晶显示模块接口的单片机实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于HD44780的字符型液晶显示模块接口的单片机实现

基于HD44780的LCD的实现

—4Bit 接口

前言

HD44780是点阵式的LCD控制器,它能显示英文字母、阿拉伯数字、日文片假名和一般性的符号。微处理器可以使用2种方式来驱动他4-bit或者8-bit。

下面是HD44780的组成图(xiaobin)

网上有许多基于8-bit的文章,我们主要介绍的是另外的一种实现方式:4-bit

一、简介

针对上面的组成图,我们做一简单介绍。详细信息请参见HD44780的数据手册。

1.1 寄存器

HD44780有两个8位寄存器,他们分别是指令寄存器(IR)和数据寄存器(DR)。

IR寄存器存储指令代码,比如显示清除、光标移动、显示数据RAM(DDRAM)和字符生成器RAM(CGRAM)的地址信息。对于MPU来说IR寄存器是只写的。

DR把暂存数据写入DDRAM或CGRAM以及从DDRAM或CGRAM中读取暂存数据。MPU写入数据到DR时,DR会使用内部操作自动写入数据到DDRAM或CGRAM。DR已同样的方式从DDRAM或CGRAM中读取数据。当写入的地址信息是指向IR的时候,数据是DR从DDRAM或CGRAM中读取的。也就是说,我们无论是发送命令,还是发送数据,存储这些信息的是DDRAM或CGRAM。

我们使用的外部接口RS就是来做选择寄存器的。是使用IR,还是DR。这决定了,我们发送过去的信息是命令还是显示数据。

1.2 忙标志(BF)

当BF=1时,表明HD44780在进行内部操作。BF的输出在DB7口。

1.3 地址累加器(AC)

当一个指令把地址信息写到IR,则IR发送这个信息给AC。

之后写到(或读)DDRAM或CGRAM,AC是自动累加1的。AC的输出DB0至DB6

表1 寄存器选择(Register Selection)

RS

R/W

Operation

0

0

IR write as an internal operation(display clear, etc.)

0

1

Read busy flag(DB7) and address counter(DB0 to DB6)

1

0

DR write as an internal operation(DR to DDRAM or CGRAM)

1

1

DR read as an internal operation(DR to DDRAM or CGRAM to DR)

二、程序实现

编写程序之前,我们先要知道HD44780的字符代码和字模。

图2: 基本字符代码和字模(ROM Code:A00)

图2: 扩展的字符代码和字模(ROM Code:A02)

程序流程:

HD44780 指令

Instruction

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

Clear display

0

0

0

0

0

0

0

0

0

1

Return home

0

0

0

0

0

0

0

0

1

-

Entry mode set

0

0

0

0

0

0

0

1

I/D

S

Display on/off control

0

0

0

0

0

0

1

D

C

B

Cursor or display shift

0

0

0

0

0

1

S/C

R/L

-

-

Function set

0

0

0

0

1

DL

N

F

-

-

Set CGRAM address

0

0

0

1

CGRAM Address

Set DDRAM address

0

0

1

DDRAM Address

Read busy flag & address

0

1

BF

DDRAM Address

Write RAM

1

0

Write Data

Read RAM

1

1

Read Data

程序代码:(xiaobin演示之用)

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> CBLOCK 0x0C ENDC ORG 0x00 Begin call LCD_Init movlw 'H' call LCD_Write movlw 'e' call LCD_Write movlw 'l' call LCD_Write movlw 'l' call LCD_Write movlw 'o' call LCD_Write sleep END

电路图:

参考

  • An587
  • How to control a HD44780-based Character-LCD
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 1:15:17

Java开发中的内存泄漏排查思路与实战案例

内存泄漏在Java世界里从来不是一道显性的报错&#xff0c;而是一场缓慢的失血。当GC日志显示堆占用曲线像台阶一样只升不降&#xff0c;当应用在运行数天后从秒级响应退化到持续Full GC&#xff0c;你才会意识到&#xff0c;那些看不见的对象引用已经像野草一样缠住了新生代和老…

作者头像 李华
网站建设 2026/9/4 1:14:48

Java实现人脸相似度比对:OpenCV与DL4J实战指南

简介&#xff1a;本资源是一套基于Java语言实现的人脸相似度比对系统&#xff0c;面向具备Java基础与计算机视觉入门经验的开发者&#xff0c;解决跨图像人脸特征提取、嵌入向量计算及余弦相似度判定等核心问题&#xff0c;适用于身份核验、人脸检索、考勤系统等轻量级AI应用开…

作者头像 李华
网站建设 2026/9/4 1:14:44

STM32驱动步进电机硬件设计实战解析

简介&#xff1a;本资源是一套基于STM32F103ZET6主控的步进电机智能小车驱动板完整硬件设计资料&#xff0c;面向嵌入式开发初学者、智能车竞赛备赛者及电子设计爱好者&#xff0c;解决多传感器融合驱动与运动控制的硬件平台搭建问题。压缩包共49个文件&#xff0c;含Altium De…

作者头像 李华
网站建设 2026/9/4 1:04:14

北京万和热水器维修-欧米到家处理Vanward不点火、不加热、不出热水、水温忽冷忽热、漏水、显示故障代码燃气问题

北京热水器出现故障&#xff0c;建议先判断类型再安排维修热水器是北京家庭使用频率较高的家电之一&#xff0c;尤其进入秋冬季后&#xff0c;燃气热水器、电热水器的使用时间明显增加&#xff0c;不点火、不加热、不出热水、水温忽冷忽热、漏水、显示故障代码、加热速度慢等问…

作者头像 李华
网站建设 2026/9/4 0:53:29

掩码扩散模型的最优调度:从数据几何到去掩码复杂度

掩码扩散模型&#xff08;Masking Diffusion Model&#xff09;是最近几年生成模型方向里非常有潜力的一个分支。与连续空间里依靠高斯噪声破坏图像的 Diffusion Model 不同&#xff0c;掩码扩散模型直接对离散 token 做“替换成 [MASK]”的破坏&#xff0c;让模型一步一步学会…

作者头像 李华
网站建设 2026/9/4 0:53:25

Blender硬表面建模提速:Fluent 4插件全流程实战与排查指南

做 Blender 硬表面建模的开发者&#xff0c;多半会被同一个卡点拦住&#xff1a;模型大形很快搭完&#xff0c;但进入布尔、倒角、清理边线和修复着色之后&#xff0c;工期突然被拉长。Flune 4 这类插件之所以在 Blender 硬表面建模社区里被反复讨论&#xff0c;就是因为它把切…

作者头像 李华