分享

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

 cangsiou 2015-09-26

基于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	0x00Begin	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

 

电路图:



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多