基于8255的LCD动态显示器设计

更新时间:2024-05-16 21:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于8255的LCD动态显示器设计

一、 设计要求

能够学会利用Proteus软件的MCS51单片机仿真学习,根据提供的参考工程,

在proteus平台自己重新设计实验电路所需要的电气原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取、原理图的电气连接、程序的编写编译以及运行,并能查出其错误等。

二、 实验内容

设计一基于8255的LCD动态显示器

三、 实验要求

1. 用数码管或LCD正常显示数字“12345678”。 2. 通过按键可改变显示方式。

3. 设计显示屏的动态效果,用10个按键,每键对应一种滚动技术。

另注,实验发挥部分:

1. 设计所有动作的联合效果。

2. 设计二个变速按键,可多级改变滚动速度。

3. 设计一台魔术电子种,采用自动变换,随机组合,数据每10秒变换一次。 动态显示格式: 1. 静止 2. 整体闪烁 3. 单字闪烁 4. 整体向前、向后滚动 5. 单字移动 6. 两边向中间压缩 7. 中间向两边扩张 8. 上下压缩 9. 文字上下滚动

10. 组合动作(每一字符执行上述一个动作,并同时运动)

四、 实验过程

本次课程设计是在理论课程的基础上,目的在于培养我们的动手能力,通过电路设计、理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,并可能结合实际的实验板进行下载测试。在此基础上根据实验大纲的要求,我们以两人一组的形式在“51单片机课程设计选题表”中任选一空(各组间不能重题),实现其功能。鉴于我们组对于8255通用可编程器件的了解,我们选择基于8255的LCD显示的动态显示器设计这一课题。

1

在考虑本次设计过程中,依据设计基本要求,并且基于8255通用可编程器件等条件,我们把8255器件用来扩展I/O口,以备外接一4X4键盘,以满足通过10个按键来控制10种动态显示,以及通过该I/O口外接一LCD显示器(当然,实验中我们发现不用8255扩展I/O口,单片机AT89C51的四个I/O端口已能满足该实验需要)。但在实验过程中,由于我们所采用的Proteus软件的版本较低,发现该版本中8255所接的键盘不允许接上拉电阻,为此我们改变设计,将键盘接到单片机AT89C51的P1口,并去掉键盘的上拉电阻(这点是键盘设计的不足,虽其能运行正常,经多方面询问这应该就是版本较低原因)。为了能让各器件间联系起来我们又添加了一些逻辑器件,如:与非门等以及74LS373地址锁存器等。

最终设计的电路图如图(1):

LCD1 LM020L AD[0..7] C1 33p 11 1 81 71 41 31 8 7 4 3 E E 7 6 5 4 3 2 1 0 D D D D D D D L O D 7D6D5D4D3D2D1D0DAAAAAAAA X1 19 U1 XTAL1XTAL2C2 33pCRYSTAL18 9 AD[0..7] A[8..15] ALEEAPSENA[8..15] RST 30 31 29 10 11 12 13 14 15 16 17 91 61 51 21 9 6 5 2 U3 74LS373 7Q6Q5Q4Q3Q2Q1Q0QAD0AD1AD2AD3AD4AD5AD6AD7U2 D0 D1 D2 D3 D4 D5 D6 D7 5 RD 36 WR 9 A0 8 A1 35 RESET A15 6 CS E D S S E D S E WR R V V V 41 31 21 11 01 9 8 7 6 5 4 3 2 1 765D3D2D1D0DDDD4 3433323130292827P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51 P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 PA0PA1PA2PA3PA4PA5PA6PA7432140393837 18 19 20 21 22 23 24 25 14 15 16 17 13 12 11 10 DDDNVG 8255A P1.0 0 1 2 3 4 5 6 7 8 9 A B C D E F A15 2 1U4:A 374S00 10P1.1 P1.2 5 4U4:B 674S00 9 U4:C 874S00 13 12U4:D 117408 P1.3 P1.4P1.5P1.6P1.7 图(1)

图中所用器件如表(a):

2

器件名称 单片机 可编程I/O接口芯片 地址锁存器 LCD显示器 器件型号 AT89C51 8255 74LS373 LM020L 表(a) 图中还有CRYSTAL晶振器,RES电阻,CAP电容,BUTTON按钮,与非门,与门等等。 其中主要部分器件使用说明如下:

I .4X4矩阵式键盘识别技术

a) 键盘键号图

用AT89C51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;对应的按键的序号排列如图(2)。

P1.00123456789ABCDEFP1.1P1.2P1.3P1.4P1.5P1.6P1.7 图(2)

b) 4×4矩阵键盘识别处理

每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(行线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键。

c) 键盘扫描程序框图

3

WAIT

P1=0FFH,P1.4=0 P1=0FFH,P1.6=0

没有 没有 有键按下吗? 有键按下吗?

有 有 延时10ms

真的有键按下吗? 没有

根据当前状态识别按键

P1=0FFH,P1.5=0

没有

有键按下吗?

有 延时10ms

没有 真的有键按下吗?

有 根据当前状态识别按键

WAIT 4

延时10ms 真的有键按下吗? 没有 有 根据当前状态识别按键 P1=0FFH,P1.7=0 没有 有键按下吗? 有 延时10ms 真的有键按下吗? 没有 有 根据当前状态识别按键

注:在上图中 调用相应按键识别子程序 转入显示子程序 根据当前状态识别按键

d) 部分汇编程序如下

键盘子程序:

KEYBOARD:

WAIT: MOV P1 ,#0FFH

CLR P1.4 ;置P1.4=0 MOV A ,P1 ANL A ,#0FH XRL A ,#0FH

JZ NOKEY1 ;没有按键跳转到第二列 LCALL DELY10MS ;延时子程序 MOV A ,P1

ANL A ,#0FH XRL A ,#0FH JZ NOKEY1 MOV A ,P1 ANL A ,#0FH CJNE A ,#0EH,NK1 MOV KEYBUF ,#0

LJMP VALUE ;跳转到按键识别子程序 NK1: CJNE A ,#0DH,NK2 MOV KEYBUF ,#1 ACALL DELAY LJMP VALUE

NK2: CJNE A,#0BH ,NK3 MOV KEYBUF ,#2 LJMP VALUE

NK3: CJNE A ,#07H,NK4 MOV KEYBUF ,#3 LJMP VALUE NK4: NOP -------

同样的方法使P1.5,P1.6,P1.7循环置“0”进行键盘扫描,直至有键按下。

DELY10MS: ;延时子程序 MOV R4,#20 D1: MOV R5,#248 DJNZ R5,$ DJNZ R4,D1 RET

5

按键识别及调用相对应键的显示子程序:

MAIN: MOV DPTR ,#7FFFH ;向8255控制口写控制字 MOV A ,#80H MOVX @DPTR ,A

MOV SP,#60H ;设置堆栈

ACALL DELAY ;设置延时子程序 ACALL INIT_LCD ;初始化程?

MOV A,#84H ;从第一行第一列? ACALL WRCOM ACALL KEYBOARD MOV R3,A

DJNZ R3,KEY2 ;根据键盘值选显示方式 ACALL DISPMOD1 ;调用显示子程序 AJMP LAST ;循环末端程序 KEY2: DJNZ R3,KEY3 ACALL DISPMOD2 AJMP LAST KEY3: DJNZ R3,KEY4 ACALL DISPMOD3 AJMP LAST KEY4: DJNZ R3,KEY5 ACALL DISPMOD4 AJMP LAST ???

II .LCD显示技术

1. 本次设计选用字符型LCD,型号为LM020L,如下图所示,其基本特点如下:

LCD1LM020LVEEVDDVSSERWRSD7D6D5D4D3D2D1D0 1413121110987654? 液晶显示器所显示的内容实际上是由若干5X8或5X11点阵块组成的显示字符群。每一点阵块为一个字符位,字符间距和行距都为一个点的宽度。 ? 主控制驱动电路为HD44780及其兼容芯片。 ? 内置字符发生器ROM存储器(CG ROM),可显示192种字符 ? 具有64个字节自定义字符RAM存储器(CG RAM),可自定义8个5X8点阵字符

或4个5X11点阵字符。 ? 具有80个字节的显示数据RAM存储器(DD RAM),用以存放待显示的字符码。

等等 6 321

LM020L显示模块的引脚功能定义

引脚号 符号 输入/输出 电平 功能说明 1 Vss 电源地: 0V 2 VDD 电源: +5V 3 VEE LCD驱动电源: 0-5V 4 RS 输入 1/0 寄存器选择。1:数据;0:指令 5 RW 输入 1/0 读写操作选择:1:读;0:写 6 E 输入 1/0或下降沿 使能信号。写E下降沿有效;读E高电平有效 7 DB0 输入/输出 1/0或三态 数据总线(LSB) 8-13 DB1-DB6 输入/输出 1/0或三态 数据总线 14 DB7 输入/输出 1/0或三态 数据总线(MSB) 2. HD44780的内部结构

控制电路主要由指令寄存器(IR),数据寄存器(DR),忙标志(BF),地址计数器(AC),显示数据寄存器(DD RAM),字符发生器ROM(CG ROM),字符发生器RAM(CG RAM)和时序发生器构成。

3. HD44780的指令集

1) 清屏 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 0 0 1 功能:清显示指令,使DD RAM的内容全部被清除;光标回原位,地址计数器AC=0 2) 输入方式设置 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 1 I/D S 功能:设置光标、画面移动方式。 其中,I/D=1,当从DD RAM(CG RAM)读出数据或把数据写入DD RAM(CG RAM)后,AC自动加1;

I/D=0,当从DD RAM(CG RAM)读出数据或把数据写入DD RAM(CG RAM)后,AC自动减1;

S=1,当进行数据读写后,画面左右移动。当I/D=1时,画面向左移动,反之向右移动;

S=0,当进行数据读写后,画面不动。 3) 显示开关控制 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 1 D C B 功能:对显示的开关进行控制; 其中,D为显示控制,D=1,开显示;D=0,关显示,此时DD RAM的内容保持不变; C为光标控制,C=1,开光标显示;C=0,关光标显示;

B为闪烁控制,B=1,光标所指的字符与光标一起以0.4s交变闪烁;B=0,不闪烁;

7

4) 光标画面移位 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 1 S/C R/L * * 功能:此指令使光标或显示画面在没有对DD RAM进行读写操作时被左移或右移。 其中,S/C为选择画面还是光标进行平移,S/C=1,选择画面平移;S/C=0,选择光标平移;

R/L=1,左移一个字符位;R/L=0,右移一个字符位。 5) 功能设置 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 DL N F * * 功能:工作方式设置(初始化指令) 其中,DL=1,8位数据总线DB7-DB0接口;

DL=0,4位数据总线DB7-DB4接口,DB3-DB0不用;

N为对显示的行数进行控制,N=1,二行显示;N=0,一行显示; F为对点阵的规格进行控制,F=1,5X10点阵;F=0,5X8点阵; 6) CG RAM地址设置 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 1 A5 A4 A3 A2 A1 A0 功能:工作方式设置(初始化指令),这条指令设置CG RAM的地址指针。地址码C5-C0被送入AC。在此后,就可以将用户自定义的显示字符数据写入CG RAM或从CG RAM中读出。

其中,CG RAM地址范围为:A5-A0=0-3FH。 7) DD RAM地址设置 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 A6 A5 A4 A3 A2 A1 A0 动能:工作方式设置(初始化指令),这条指令设置DD RAM的地址指针。地址码00H-4FH有效。在此后,在此后,就可以将显示字符码写入DD RAM或从DD RAM中读出。

注:其它指令略;

4. 程序中LCD指令汇编: 1) 初始化程序 INIT_LCD:

MOV A , #30H ;设置为8为数据总线,1行,5X8点阵 ACALL WRCOM

MOV A , #01H ;清屏幕 ACALL WRCOM

MOV A , #06H ;画面不移动,读写操作后AC加1 ACALL WRCOM

MOV A , #0CH ;开显示,关光标,不闪烁 ACALL WRCOM RET

8

2) 写命令子程序 WRCOM:

PUSH DPH PUSH DPL

MOV DPTR , #7FFCH MOVX @DPTR, A ACALL DELAY

MOV DPTR , #WR_COM MOVX @DPTR, A ACALL DELAY POP DPL POP DPH RET

3) 写数据子程序 WRDATA:

PUSH DPH PUSH DPL

MOV DPTR , #7FFCH MOVX @DPTR, A ACALL DELAY

MOV DPTR , #WR_DAT MOVX @DPTR, A ACALL DELAY POP DPL POP DPH RET

4) 设置自定义字符 WRCGRAM:

PUSH ACC PUSH DPL PUSH DPH PUSH PSW

MOV A , #40H ACALL DELAY ACALL WRCOM MOV R7 , #56H

MOV DPTR, #CGRAM_TABLE1 WR_CGRAM1: CLR A

MOVC A , @A+DPTR ACALL WRDATA INC DPTR

9

DJNZ R7 , WR_CGRAM1 ACALL DELAY POP PSW POP DPH POP DPL POP ACC RET

5) 部分LCD显示示例 a) 向中间压缩

DISPMOD8: ACALL INIT_LCD MOV R1 , #08H MOV DPTR,#TABLE1 DISP10: MOV A , #8FH ACALL WRCOM CLR A

MOVC A , @A+DPTR ACALL WRDATA INC DPTR DISP_LEFT:

ACALL DELAY5 MOV A , #1CH ACALL WRCOM DJNZ R1 , DISP10 RET

b) 向两边扩散

;DISPLAY MODE 7 DISPMOD7: MOV A,#84H ACALL WRCOM MOV A,#34H ACALL WRDATA MOV A,#8BH ACALL WRCOM MOV A,#35H ACALL WRDATA ACALL DELAY2 MOV A,#84H ACALL WRCOM MOV A,#33H ACALL WRDATA

MOV A,#34H ACALL WRDATA MOV A,#8AH ACALL WRCOM MOV A,#35H ACALL WRDATA MOV A,#36H ACALL WRDATA ACALL DELAY2 MOV A,#84H ACALL WRCOM MOV A,#32H ACALL WRDATA MOV A,#33H ACALL WRDATA

10

MOV A,#34H

ACALL WRDATA MOV A,#89H ACALL WRCOM MOV A,#35H

ACALL WRDATA MOV A,#36H

ACALL WRDATA MOV A,#37H

ACALL WRDATA ACALL DELAY2 MOV A,#84H ACALL WRCOM ACALL DISPMOD2 RET

本文来源:https://www.bwwdw.com/article/wsl7.html

Top