点阵LED数码图形显示的课程设计.docx
《点阵LED数码图形显示的课程设计.docx》由会员分享,可在线阅读,更多相关《点阵LED数码图形显示的课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
![点阵LED数码图形显示的课程设计.docx](https://file1.bdocx.com/fileroot1/2023-6/20/be2285c9-cb8f-48ae-be00-11eea529bbbf/be2285c9-cb8f-48ae-be00-11eea529bbbf1.gif)
点阵LED数码图形显示的课程设计
8×8点阵LED数码图形显示器的课程设计
第一章总体方案设计
1.1总体设计要求
本系统采用单片机AT89C51为LED显示屏的控制核心,制造一种简单的8×8显示屏,能够在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字稳定、清晰无串扰,图形或文字显示有静止、移入移出等显示方式。
本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
根据设计要求,初步确定设计方案如下:
1.选择AT89C51单片机(晶振频率为f=12MHZ)作为整个系统的核心器件,对整个系统进行总体控制,发送并时时处理系统信息。
2.通过编程显示数字:
“★,●,心形图”。
3.动态显示,即跑马灯文字幕,每0.25秒左移一次。
4.扫描信号连接到单片机的P0口,显示信号连接到单片机的P2口。
5.点阵的点亮过程有程序控制,由驱动电路完成,点阵采用单色显示,其中驱动电路采共阴型高态扫描、高态显示信号的驱动电路。
1.2系统框图
本文设计行、列驱动电路,显示屏电路,运用单片机的智能化,系统的将每个功能电路模块连接在一起,总体结构设计如下图1-1所示:
图1-1系统框图
第二章系统硬件电路的设计
本系统的硬件电路是由单片机最小系统、动态显示驱动电路两部分组成。
其中,单片机最小系统包括电源电路、复位电路和晶振电路构成;显示部分使用共阴型高台扫描、高态显示信号驱动电路,完成“跑马灯”文字幕效果。
2.1单片机最小系统设计
2.1.1单片机的时钟电路
AT89C51单片机内部的振荡电路是一个高增益反向放大器,引线X1和X2分别是放大器的输入端和输出端。
单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。
AT89C51的时钟产生方式有两种:
内部时钟电方式和外部时钟方式。
由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。
内部时钟方式:
利用其内部的振荡电路在X1和X2引线上外接定时元件,内部振荡电路产生自激振荡。
最常用的是在X1和X2之间接晶体振荡器与电路构成稳定的自激振荡器,如图2-1电路所示为单片机最常用的时钟振荡电路的接法,其中晶振可选用振荡频率为12MHz的石英晶体,电容器一般选择30PF左右。
图2-1使用片内振荡电路的时钟电路
2.1.2单片机的复位电路
本设计中AT89C51是采用上电自动复位和按键复位两种方式。
最简单的复位电路如图2-2所示。
上电瞬间,RC电路充电,RST引线端出现正脉冲,只要RST端保持10ms以上的高电平,就能使单片机有效地复位。
其中R1和R2分别选择200Ω和2KΩ的电阻,电容器一般选择22μF。
图2-2AT89C51的复位电路
2.1.3AT89C51的最小应用系统
AT89C51是片内有程序存储器的单片机,要构成最小应用系统时只要将单片机接上外部的晶体或时钟电路和复位电路即可,如图2-3所示。
这样构成的最小系统简单可靠,其特点是没有外部扩展,有可供用户使用的大量的I∕O线。
图2-3AT89C51单片机构成的最小系统
2.2显示器及接口设计
2.2.18×8点阵LED显示器的组成原理及控制方式
本次设计中采用8×8点阵LED显示器,简称LED点阵板或LED矩阵板。
它是以发光二极管为像素,按照行与列的顺序排列起来,用集成工艺制成的显示器件。
有单色和双色之分,这种显示器有共阳极接法和共阴极接法两种,设计中用到的是共阳极的显示器。
共阳极接法的原理图如图2-4所示,图中画出了8×8点阵的二极管。
每一行发光二极管的阳极接在一起,有一个引出端r,每一列发光二极管的阴极接在一起,有一个引出端c。
当给发光二极管阳极引出端r1加高电平,阴极引出端c1加低电平时,左上角的二极管被点亮因此,对于行和列的电平进行扫描控制时,可以达到显示不同字符的目的。
图2-48×8点阵LED显示器组成原理图
(1).“★”在8X8LED点阵上显示图如下图所示
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
1
2
3
4
5
6
7
8
12H,14H,3CH,48H,3CH,14H,12H,00H
(2).“●”在8X8LED点阵上显示图如下图所示
●
●
●
●
●
●
●
●
●
●
●
●
1
2
3
4
5
6
7
8
00H,00H,38H,44H,44H,44H,38H,00H
(3).心形图在8X8LED点阵上显示图如下图所示
●
●
●
●
●
●
●
●
●
●
●
●
●
●
1
2
3
4
5
6
7
8
30H,48H,44H,22H,44H,48H,30H,00H
图2-58×8点阵LED引脚的排列图
2.2.28×8点阵LED显示器与单片机的接口
8×8点阵LED的引脚图如图2-5所示,当采用单片机进行控制时,连接点阵显示器的共阳极r端需经驱动三极管9012与单片机的P2口相连,而共阴极c端需经限流电阻与单片机的P0口相连。
在编程控制时,将8×8点阵LED显示分成行和列两部分,字符数据从P0口输出,扫描控制字从P2口输出,每一列由一个字节的数据组成,数据可一次送入,然后扫描一行,显示一个字需要扫描8次。
2.2.3驱动电路的设计
显示器驱动是一个非常重要的问题,如果驱动能力差,显示器亮度就低;而驱动器长期在超负荷下运行则很容易损坏。
如果是静态显示,则LED驱动器的选择较为简单,只要驱动器的驱动能力与显示器工作电流相匹配即可。
而且只须考虑段的驱动,因为,共阳极接+5V,而共阴极接地,所以位的驱动无须考虑。
动态显示则不然,由于一位数据的显示是由段和位选信号共同配合完成的,因此,必须同时考虑段和位的驱动能力,而且段的驱动能力决定位的驱动能力。
理论分析表明,同样的驱动器,当其驱动静态显示器时,其亮度为驱动动态显示器的n倍,n近似为显示位数。
所以要使动态显示器达到静态显示器的亮度,必须将驱动器能力提高n倍。
本设计中,因为采用了8×8点阵LED显示器,用AT89C51单片机进行控制,因此它很适宜于按扫描方式动态显示多个字符数据,所以我们只选用了8个PNP型三极管作为驱动显示器的电路。
如图2-6所示,因AT89C51单片机的I∕O口有20mA的吸入电流,正因为这一特点,使的本设计中的驱动电路部分大大简化,不用附加专门的驱动电路即可正常工作。
图2-6显示驱动电路
2.3电源电路的设计
电源电路采用普通集成稳压电路,在本设计中,由于考虑到成本问题,这部分电路就以输出+5V的稳压电源代替。
第三章.8×8点阵显示器控制系统的硬件设计
3.1硬件系统的总体设计
根据设计要求与设计方案,硬件电路的设计框图如图3-1所示。
硬件电路结构由8个部分组成:
时钟电路、复位电路、按键接口电路、电源电路、点阵显示阳极驱动电路、点阵显示阴极驱动电路和8×8点阵显示电路。
图3-18×8点阵显示器组成原理框图
3.2单片机AT89C51芯片的性能及功能的分析
3.2.1AT89C51的主要特性:
·32条可编程I/O线·两个16位定时器/计数器
· 6个中断源·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
3.2.2AT89C51管脚说明:
①VCC:
供电电压。
GND:
接地。
②P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
③ P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
④ P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
⑤P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
⑥RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
⑦ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
⑧/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
⑨ /EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
⑩XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.3具体电路及功能分析
3.3.1显示电路
本设计采用双色8×8点阵模块显示,但是在设计中我们只用单色显示,我们通过改变限流电阻的阻值的大小来改变显示字符的亮度。
3.3.2电源电路
电源电路采用普通的三端集成稳压电源。
为整个系统提供+5V的电压。
3.3.3电路原理图
图3-2电路原理图
3.4.硬件系统连线
(1).把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;
(2).把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;
(3).把“单片机系统”区域中的P2.0/A8端子用导线连接到“独立式键盘”区域中的SP1端子上;
第四章系统软件电路的设计
4.1软件设计思想
主程序先进行设置中断,并启动,再进行键盘扫描载入★,●,心形图,然后判断一组字型是否扫描完,按不同情况进行循环调用子程序。
进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用键盘扫描子程序进行延时,判断是否退出相应的方式显示子程序。
设计过程中,能很好得提高按键响应速度。
如图4-1所示为软件系统框图。
图4-1软件设计框图
字符编码:
8×8点阵可以看成是从上至下8个字节,每个字节8位,因为该点阵为共阴型点阵,因此若该灯亮,则该位为“1”;该灯不亮,则该位为“0”。
所以★,●,心形图的编码为,从上至下:
“★”:
12H,14H,3CH,48H,3CH,14H,12H,00H
“●”:
00H,00H,38H,44H,44H,44H,38H,00H
“心形图”:
30H,48H,44H,22H,44H,48H,30H,00H
4.2主程序设计
主程序首先设置并启动T0中断,然后调用初始化程序,为后面程序要用到的数据调入,并清零一些用到的数据单元,然后载入★,●,心形图,进行扫描。
图4-2为主程序流程图。
图4-2主程序流程图
主程序如下:
COLUMNREGP0;行
ROWREGP2;列
SCANCODEEQU10000000B;扫描码
SPEEDEQU1;0.25s延迟
S_TIMEEQU-2500;2.5ms扫描时间
ORG0000H;程序从0000H地址开始
JMPMAIN;跳至MAIN
ORG000BH;TIMER0中断向量
JMPTIMER0;跳至TIMER0中断子程序
MAIN:
MOVIE,#82H;设定TIMER0中断
MOVTOMD,#01H;使用T0定时器,方式1
MOVSP,#60H;移开堆栈指针
SETBRS0;切换到RB1
MOVR1,#20H;显示存储起始地址
MOVR2,#8;扫描8行
MOVR3,#SCANCODE;载入扫描码
CLRRS0;切换回RB0
MOVTH0,#0F6H;设定每行扫描时间
MOVTL0,#3CH;设定每行扫描时间
SETBTR0;启动TIMER0
LOOP:
MOVDPTR,#TABLE;将数据指针指向TABLE地址
MOVR4,#4;4组字型
SJMP$;等待中断或其他
4.3子程序设计
子程序中包括动态显示程序、按键程序、延时程序和中断程序四种,下面依次详细介绍。
4.3.1动态显示程序设计
本系统中采用左移动态显示方式。
对于8×8LED阵列,其左移就是显示4个不同的字型。
首先扫描第一个字型,同样是8行、8次扫描,8次显示;完成第一个字型后,再扫描第二个字型;完成第二个字型后,再扫描第三个字型······依次类推,即可产生“★,●,心形图”左移的感觉。
假如第一个字型的编码为00H00H36H49H49H36H00H00H;第二个字型的编码为00H1CH22H41H41H22H1CH00H,也就是把第一个字型编码中,第1行显示数据,变为第8行显示数据、第2行显示数据,变为第1行显示数据、第3行显示数据,变为第2行显示数据、第4行显示数据,变为第3行显示数据······依次类推。
当第一个字型扫描完成后,就进行这样的调整动作,以产生第二个字型的编码。
同样的,当第二个字型扫描完成后,就进行这样的调整动作,以产生第三个字型的编码。
这个调整动作是将8个编码根据顺序填入存储器,调整存储器地址的程序流程图如图4-3所示。
图4-3动态显示流程图
动态显示子程序如下:
MOVR2,#8;转移次数
MOVR0,#20H;R0内置目的存储器地址
MOVR1,#21H;R1内置来源存储器地址
MOV28H,@R0;先将第一行内容搬至28H地址
MOVE_L:
MOVA,@R1;将来源存储器内容搬至ACC
MOV@R0,A;将ACC内容搬至目的存储器
INCR0;下一个目的地址
INCR1;下一个来源地址
DJNZR2,MOVE_L;跳至MOVE_L,执行8次
RET;返回
4.3.2按键程序设计
系统中采用独立式非编码键盘,在P1口接一个按键,P0端口分别控制8×8LED阵列。
当有键按下时,对应的LED亮;反之则灭。
如图4-4所示为按键控制流程图。
图4-4按键流程图
按键子程序如下:
ORG0000H
START:
MOVP1,#0FFH;置P1口为输入状态
LOOP:
MOVA,P1;读入P1口状态数据
NOP
MOVP0,A;将状态数据送入P0口,控制LED阵列
SJMPLOOP;继续循环
END
4.3.3延时程序设计
延时程序在单片机编程中使用非常广泛,也很重要,在本设计的程序中用到了延时子程序。
已知晶振12MHZ,所以机器周期为1μs,但执行一次DJZN操作为2μs,则延时时间是(1×200×250)次×2μs/次=100000μs=100ms。
延时流程图如图4-5所示。
图4-5延时流程图
程序如下:
DELAY:
MOVR7,#1
D1:
MOVR6,#200
D2:
MOVR5,#250
DJNZR5,$
DJNZR6,D2
DJNZR7,D1
RET
4.3.4中断程序设计
显示程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定。
根据设计要求,设定扫描时间为2.5ms,那么定时器T0定时2.5ms,则定时初值计算公式为:
定时时间t×时钟频率/12
中断流程图如图4-6所示。
图4-6中断流程图
中断子程序如下:
TIMER0:
CLRTR0;关闭TIMER0
PUSHA;储存ACC
SETBRS0;切换到RB1
MOVCOLUMN,#0;关闭LED阵列
MOVA,@R1;取出显示信号
;使用共阳极式LED阵列,则加入下一列指令
CPLA
MOVROW,A;输出显示信号
MOVA,R3;载入扫描码
MOVCOLUMN,A;输出扫描码(显示一行)
RRA;下一个扫描码
MOVR3,A;储存下一个扫描码
INCR1;下一个显示信号
DJNZR2,NEXT_C;未超过8行则跳至NEXT_C
MOVR2,#8;重新开始扫描
MOVR1,#20H;从第一行开始扫描
NEXY_C:
MOVTH0,#F6H;设定每行扫描时间
MOVTL0,#3CH;设定每行扫描时间
SETBTR0;启动TIMER0
CLRRS0;切换回RB0
POPA;取回ACC
RETI
第五章调试及性能分析
5.1软件调试
软件调试主要是利用计算机仿真针对程序中可能存在的错误进行检测,直到得到正确的显示结果。
按照程序流程图在KEILC51软件中编写好程序,在此软件中检测编写好的程序是否有误语法错误。
此次软件调试参考前面的子程序,选择动态显示程序和延时程序进行调试,并观察其结果,如图5-1、5-2所示。
图5-1动态显示程序调试结果
图5-2延时程序调试结果
5.2性能分析
此次系统设计结果较好,LED显示屏能很好的显示信息。
这个方案设计的8x8的点阵LED图文显示屏,电路简单,成本较低,且较容易扩展成更大的显示屏;显示屏各点亮度均匀、充足;显示图形或文字稳定、清晰无串扰;可用静止、移入移出等多种显示方式显示图形或文字。
总结
通过此次论文设计,让我学到了许多知道的和不知道的,都有提高,在单片机的选择、显示屏的组合还有各种器件的选用有了一个明确的认识,程序设计上清晰地思路,理论在实践方面的运用能力有巨大的提高。
在实践以前,由于对单片机有一定的兴趣,我通过课外学习已经接触了很多概念以及设计方式,但不专业。
但是通过这次深层次的学习、设计我有了一定的实践经验和理论基础,也让我可以进行更深的研究学习,在设计思路上,通过查阅资料了解了许多方法,认识到形式的多样性,模仿优秀作品是每个设计师必走之路,但是做设计必须要有自己的思想,人也要有自己的鲜明个性,久了就成了自己的风格,风格的养成与一个人的艺术素养和个人修养有直接关系。
要拓展自己的知识面,使自己的知识系统化知识需要接触社会的方方面面,光有书本知识是远远不够的。
要求自己在以后的学习中多想,多读,多学。
要求自己的写作水平一定要过硬。
经验的提高,让我今后在设计时更加方便、快捷,也为毕业后的就业提供了保障。
参考文献
[1]张晓峰,高斌·电气自动化实验教程·国防工业出版社,2010年3月
[2]楼然苗,李光飞·51系列单片机设计实例·北航出版社,2005年1月
[3]王幸之,钟爱琴,王雷,王闪·AT89系列单片机原理与接口技术·北京航空航天大学出版社,2004年5月
[4]朱定华·单片机原理及接口技术·电子工业出版社,2001年4月
[5]赵茂泰·智能仪器原理及应用·电子工业出版社,2004年2月
[6]范力旻·单片机原理及应用技术·电子工业出版社,2009年1月
附录
1.1元件清单
元器件名称
型号
数目
1、AT89C51单片机
1块
2、晶振
12MHZ
1块
3、PNP三极管
9012
8只
4、8×8点阵共阳LED显示器
共阳
1块
5、按钮开关
1只
6、极性电容
20uf
1只
7、瓷片电容
30pf
2只
8、电阻
1kΩ
9只
9、电阻
10kΩ
1只
10、电阻
270Ω
8只
11、电源
5V
1个
1.2程序清单
COLUMNREGP0;行
ROWREGP2;列
SCANCODEEQU10000000B;扫描码
SPEEDEQU1;0.25s延迟
S_TIMEEQU-2500;2ms扫描时间
ORG0000H;程序从0000H地址开始
JMPSTART;跳至START
ORG000BH;TIMER0中断向量
JMPTIMER0;跳至TIMER0中断子程序
START:
MOVIE,#82H;设定TIMER0中断
MOVTOMD,#01H;使用T0定时器,方式1
MOVSP,#60H;移开堆栈指针
SETBRS0;切换到RB1
MOVR1,#20H;显示存储起始地址
MOVR2,#8;扫描8行
MOVR3,#SCANCODE;载入扫描码
CLRRS0;切换回RB0
MOVTH0,#0F6H;设定每行扫描时间
MOVTL0,#3CH;设定每行扫描时间
SETBTR0;启动TIMER0
LOOP:
MOVDPTR,#TABLE;将数据指针指向TABLE地址
MOVR4,#4;4组字型
NEXT:
MOVR2,#8;加载数据数量
MOVR0,#20H;储存存储器起始地址
CALLLOADING;加载一个字型
CALLDELAY;延时
DJNZR4,NEXT;跳至NEXT形成一个循环
JMPLOOP;跳至LOOP形成一个循环
LOADING:
MOVR3,#0;间距
L_1:
MOVA,R3;将间距放入ACC
MOVCA,@A+DPTR;读入数