8乘88x8点阵汉字显示.docx
《8乘88x8点阵汉字显示.docx》由会员分享,可在线阅读,更多相关《8乘88x8点阵汉字显示.docx(20页珍藏版)》请在冰豆网上搜索。
![8乘88x8点阵汉字显示.docx](https://file1.bdocx.com/fileroot1/2022-11/26/eb10a8b6-6d1d-4dce-b7b3-eb9055c8aafc/eb10a8b6-6d1d-4dce-b7b3-eb9055c8aafc1.gif)
8乘88x8点阵汉字显示
单片机课程设计
题目:
8*8点阵汉字显示器
专业班级:
******
姓名:
******
学号:
*********
一.摘要:
用TOP-23088DH-U8*8点阵块设计制作一个8*16点阵汉字显示器。
通过51单片机作为控制系统,由8255的A口为段数据口向两块点阵提供行数据,C口提供扫描列信息,通过74LS154译码后进行扫描,当点阵的行接高电平,列为低电平时,同时选通,则在该点的LED点亮。
由于实验箱上所提供的驱动电流太低,不足以点亮二极管,所以在电路中增加一个74LS254芯片,以提供点亮LED所需的驱动电流。
同时在P1.0-P1.2口接3个开关,形成按键控制功能选择。
点阵模块图如下:
如上图所示,本实验通过列扫描方式,扫描同时给行线送显示数据。
当扫描到某列,则该列选通,其他列截止,选通瞬间送显示数据,则所对应的二极管亮。
点阵依靠循环点亮每一列(或行),快速循环形成一屏图像,而每一屏快速交替,可进一步形成动画的效果。
二.设计任务和要求:
(1)基本要求:
1.能显示8*8的汉字,用两个8*8点阵,显示“大连”。
2.通过键盘控制可以改变显示的汉字与图形。
3.通过键盘控制,可以实现彩灯控制功能,发光管从内向外周期显示和相反显示。
(2)发挥要求:
1.增加驱动电路,提高显示亮度。
三.方案选择和论证:
3.1:
方案论证:
控制模块由8051、74LS154,8255组成,其中,采用51单片机制做一个最小系统,包含有时钟信号电路、复位电路等,154是4线转16线译码器,4线端接8255的PC.0-PC.3口,16线端低电平有效,控制点阵的16列,245是对列的驱动,8255的PA.0-PA.7用于将行扫描数据进行高速串-并转换,实验箱内部便可提供较大电流总够控制点阵的8行,这样,点阵的128个点中被选通的就亮。
显示模块由2块8×8点阵组成,通过相互并联转换成16×8点阵。
3.2:
方案选择:
(1).实验仪器
名称
数量
8051
1
74LS154
1
8255
1
8X8点阵
2
74LS245
1
面包板
2
导线
若干
万用表
1
(2).流程图:
Y
N
N
Y
N
Y
N
(3).硬件连接
四.实际操作与调试:
(1)实际制作
使用keil先对软件程序进行编译测试并进行proteus仿真,调试成功后开始硬件部分。
(2).软件调试:
编程思路为:
先对相关变量进行初始化,循环扫描点亮16列LED,一帧图像扫描完毕后,列指针向右移动一位,再扫描下一帧图像。
依此类推,列指针共向右移动16位,这样主观上就感觉向左滚动,移动一个汉字(列指针右移16位)后,字指针指向下一个汉字,这样就能在显示屏上看到汉字滚动。
(3).实验程序:
ORG0000h
LJMPSTART
ORG0030H
START:
MOVDPTR,#8003H;控制口地址
MOVA,#80H;8255初始化,A.B.C口均输出
MOVX@DPTR,A
MOVP1,#0ffH;P1口在输入前要先置1
LJMPKEY1;跳到KEY1
K2:
LCALLKEY2
KEY1:
JNBP1.0,K2;当为0时(P1.0未按下),则跳转K2,转判P1.1
MOVR0,#00H;列号
MOVR1,#00H;字型码偏移地址
MOVR3,#10H;计数(扫描16列)
A1:
MOVDPTR,#8002H;C口地址
MOVA,R0;将列号给出
MOVX@DPTR,A
INCR0;加1,为下一列做准备
MOVDPTR,#TAB5;取字型码首地址
CLRA
ADDA,R1;字型码偏移量
MOVCA,@A+DPTR
INCR1;为下一个字型码准备
MOVDPTR,#8000H
MOVX@DPTR,A;字型码从A口输出
LCALLDELAY
DJNZR3,A1;判断16列是否扫描完,未结束则继续扫描
MOVDPTR,#8000H;清零
MOVA,#00H
MOVX@DPTR,A
LJMPKEY1
RET
CLEAR:
MOVDPTR,#8000H;清零
MOVA,#00H
MOVX@DPTR,A
LCALLDELAY1
RET
K3:
LCALLKEY3
KEY2:
JNBP1.1,K3;当为0时(P1.1未按下),则跳转K3,转判P1.2
LD1:
MOVR5,#7FH
CD1:
LCALLS1;调用S1
JNBP1.1,CLEAR;当P1.1未按下(运行过程中中断),则清零
DJNZR5,CD1
LD2:
MOVR5,#44H;LD2-LD16均与LD1类似
CD2:
LCALLS2
JNBP1.1,CLEAR
DJNZR5,CD2
LD3:
MOVR5,#3FH
CD3:
LCALLS3
JNBP1.1,CLEAR
DJNZR5,CD3
LD4:
MOVR5,#34H
CD4:
LCALLS4
JNBP1.1,CLEAR
DJNZR5,CD4
LD5:
MOVR5,#2FH
CD5:
LCALLS5
JNBP1.1,CLEAR
DJNZR5,CD5
LD6:
MOVR5,#24H
CD6:
LCALLS6
JNBP1.1,CLEAR
DJNZR5,CD6
LD7:
MOVR5,#1FH
CD7:
LCALLS7
JNBP1.1,CLEAR
DJNZR5,CD7
LD8:
MOVR5,#14H
CD8:
LCALLS8
DJNZR5,CD8
LD9:
MOVR5,#7FH
CD9:
LCALLS16
JNBP1.1,CLEAR
DJNZR5,CD9
LD10:
MOVR5,#44H
CD10:
LCALLS15
JNBP1.1,CLEAR
DJNZR5,CD10
LD11:
MOVR5,#3FH
CD11:
LCALLS14
JNBP1.1,CLEAR
DJNZR5,CD11
LD12:
MOVR5,#34H
CD12:
LCALLS13
JNBP1.1,C1
DJNZR5,CD12
LD13:
MOVR5,#2FH
CD13:
LCALLS12
JNBP1.1,C2
DJNZR5,CD13
LD14:
MOVR5,#24H
CD14:
LCALLS11
JNBP1.1,C3
DJNZR5,CD14
LD15:
MOVR5,#1FH
CD15:
LCALLS10
JNBP1.1,C4
DJNZR5,CD15
LD16:
MOVR5,#14H
CD16:
LCALLS9
DJNZR5,CD16
LJMPKEY2
RET
C1:
LCALLCLEAR
C2:
LCALLCLEAR
C3:
LCALLCLEAR
C4:
LCALLCLEAR
S1:
MOVDPTR,#8002H;C口
MOVA,#07H;列号
MOVX@DPTR,A
MOVA,#00H;字型码
MOVDPTR,#8000H
MOVX@DPTR,A;字型码从A口输出
LCALLDELAY
MOVDPTR,#8002H
MOVA,#08H;列号
MOVX@DPTR,A
MOVA,#0d1H;字型码
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET;SI功能为选通中间两列亮
S2:
LCALLS1
MOVDPTR,#8002H
MOVA,#06H
MOVX@DPTR,A
MOVA,#22H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#09H
MOVX@DPTR,A
MOVA,#6fH
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET;S2为让第6和9列亮,S3-S8以此类推
S3:
LCALLS2
MOVDPTR,#8002H
MOVA,#05H
MOVX@DPTR,A
MOVA,#24H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0AH
MOVX@DPTR,A
MOVA,#55H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S4:
LCALLS3
MOVDPTR,#8002H
MOVA,#04H
MOVX@DPTR,A
MOVA,#28H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0BH
MOVX@DPTR,A
MOVA,#75H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S5:
LCALLS4
MOVDPTR,#8002H
MOVA,#03H
MOVX@DPTR,A
MOVA,#0F0H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0CH
MOVX@DPTR,A
MOVA,#0d5H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S6:
LCALLS5
MOVDPTR,#8002H
MOVA,#02H
MOVX@DPTR,A
MOVA,#28H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0DH
MOVX@DPTR,A
MOVA,#7fH
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S7:
LCALLS6
MOVDPTR,#8002H
MOVA,#01H
MOVX@DPTR,A
MOVA,#24H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0EH
MOVX@DPTR,A
MOVA,#55H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S8:
LCALLS7
MOVDPTR,#8002H
MOVA,#00H
MOVX@DPTR,A
MOVA,#22H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0FH
MOVX@DPTR,A
MOVA,#55H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S9:
LCALLS10
MOVDPTR,#8002H
MOVA,#07H
MOVX@DPTR,A
MOVA,#00H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#08H
MOVX@DPTR,A
MOVA,#0d1H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET;中间两列亮
S10:
LCALLS11
MOVDPTR,#8002H
MOVA,#06H
MOVX@DPTR,A
MOVA,#22H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#09H
MOVX@DPTR,A
MOVA,#6fH
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET;S10-S16以此类推
S11:
LCALLS12
MOVDPTR,#8002H
MOVA,#05H
MOVX@DPTR,A
MOVA,#24H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0AH
MOVX@DPTR,A
MOVA,#55H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S12:
LCALLS13
MOVDPTR,#8002H
MOVA,#04H
MOVX@DPTR,A
MOVA,#28H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0BH
MOVX@DPTR,A
MOVA,#75H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S13:
LCALLS14
MOVDPTR,#8002H
MOVA,#03H
MOVX@DPTR,A
MOVA,#0F0H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0CH
MOVX@DPTR,A
MOVA,#0d5H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S14:
LCALLS15
MOVDPTR,#8002H
MOVA,#02H
MOVX@DPTR,A
MOVA,#28H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0DH
MOVX@DPTR,A
MOVA,#7fH
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S15:
LCALLS16
MOVDPTR,#8002H
MOVA,#01H
MOVX@DPTR,A
MOVA,#24H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0EH
MOVX@DPTR,A
MOVA,#55H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
S16:
MOVDPTR,#8002H
MOVA,#00H
MOVX@DPTR,A
MOVA,#22H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#8002H
MOVA,#0FH
MOVX@DPTR,A
MOVA,#55H
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
RET
K1:
LCALLKEY1
KEY3:
JNBP1.2,K1;当为0时(P1.2未按下),则跳转K1,转判P1.0
MOVR0,#00H
MOVR1,#00H
MOVR3,#10H
A3:
MOVDPTR,#8002H
MOVA,R0
MOVX@DPTR,A
INCR0
MOVDPTR,#TAB4;KEY3与KEY1类似,只是调用字型码4
CLRA
ADDA,R1
MOVCA,@A+DPTR
INCR1
MOVDPTR,#8000H
MOVX@DPTR,A
LCALLDELAY
DJNZR3,A3
MOVDPTR,#8000H
MOVA,#00H
MOVX@DPTR,A
LJMPKEY3
RET
DELAY:
MOVR7,#0FH
D1:
MOVR6,#0FH
D2:
DJNZR6,D2
DJNZR7,D1
RET
DELAY1:
MOVR7,#0FFH
D3:
MOVR6,#0FFH
D4:
DJNZR6,D4
DJNZR7,D3
RET
TAB5:
DB22h,24h,28h,0f0h,28h,24h,22h,00h;大
DB0d1h,6fh,55h,75h,0d5h,7fh,55h,55h;连
TAB4:
DB00h,00h,00h,70h,88h,84h,42h,21h
DB21h,42h,84h,88h,70h,00h,00h,00h;“爱心形状”
END
(4).硬件调试:
将万用表打到二极管端,用红表笔接点阵的某个管脚,黑表笔接另一个管脚,若点亮,则选通。
依次测出每个管脚所担任的行和列,其中,低电平选通列,高电平选通行。
通过wave的软件将程序下载到实验箱中,初始为黑屏,因为没有按键被按下。
之后通过按键进行控制,看显示是否正确,若点阵全都不亮,则首先要仔细检查程序,很可能是程序出了问题,因为之前已经对硬件进行测试了,若确定程序没有问题,则很可能是连线出现了断线,或者是连线连错了,点阵实验的线较多,所以需要在实验之前对每根线路进行检测,检测的方法是使用万用表检测是否出现短路现象。
由于线较多,所以很容易接连错了,也有可能是前面对LED的能否正常工作没有测试到位导致部分电路问题被遗漏。
若测试时就只有几个点不亮,这时就能确定点阵极性及那些点是坏点。
(5).调试中的问题记录:
搭线的时候要细心,由于线较多,所以会插错管脚,或接触不良,注意不要带电操作,否则容易烧坏芯片。
面包板与线的接触,要注意每根导线均导通,且与面包板接触良好。
五.发挥部分设计与调试:
由于实验箱所能提供的驱动电流太低,所以程序下载后,可能导致LED亮度较暗,或者不亮。
因此,我们加入一个74LS245芯片,该芯片是对列的驱动,8255的PA.0-PA.7用于将行扫描数据进行高速串-并转换,实验箱内部便可提供较大电流总够控制点阵的8行,这样,点阵的128个点中被选通的就亮。
因此亮度提高。
其余部分调试,与基本任务中的调试相同。
六.实验数据记录与测试结果分析:
静态显示“大连”:
静态显示“爱心”(图案):
由内向外显示“大连”:
由外向内显示“大连”:
当点阵的行接高电平,列为低电平时,同时选通,则在该点的LED点亮。
通过程序传送,通过51单片机作为控制系统,由8255的A口为段数据口向两块点阵提供行数据,C口提供扫描列信息,通过74LS154译码后进行扫描。
七.实验总结:
1.实验过程中的问题与分析:
(1)程序关键之处在于串口发送列数据的延时控制,否则很难观测到扫描图像。
同时,行数据的延时控制也很重要,这决定整个画面是否闪烁。
(2)要注意与面包板接触问题,导线与面包板接触良好。
(3)为了是提高显示图形的亮度,加了一块74LS245对行进行驱动
2.收获与感想:
通过此次实验,我学到了许多实验上的知识,如利用单片机进行汉字点阵的扫描显示及控制的基本知识,使我对单片机有了更充分的认识;此外,又学会了部分芯片的使用,懂得了动态电子指示牌实现的原理,培养了兴趣,通过硬件的连接,让我在实验中提高了动手实践,硬件的多次连接让我提高了发现问题和处理问题的能力。