基于单片机的LED点阵汉字显示.docx
- 文档编号:11887156
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:17
- 大小:527.17KB
基于单片机的LED点阵汉字显示.docx
《基于单片机的LED点阵汉字显示.docx》由会员分享,可在线阅读,更多相关《基于单片机的LED点阵汉字显示.docx(17页珍藏版)》请在冰豆网上搜索。
基于单片机的LED点阵汉字显示
河南理工大学
《单片机应用与仿真训练》设计报告
题目:
LED点阵显示屏设计
姓名:
吴朝阳310808030322
宋发旺310808030318
专业班级:
电信08-3班
指导老师:
高如新、苏珊
所在学院:
电气工程与自动化学院
2011年11月26日
摘要
此次设计是基于AT89S52的16×16LED点阵显示,要求分时切换显示“河南理工学电气学院”。
此次设计应用Proteus设计硬件电路原理图并进行仿真调试,实现了在计算机中完成电路原理图设计、电路分析与仿真及系统测试。
由于Proteus元件库中没有AT89S52,本次仿真用AT89C51单片机作为主控制器,来实现对16×16LED点阵汉字的分时切换显示。
软件采用C51,由KeiluVision3来编写。
此次设计所需硬件有:
AT89S52单片机一个、3线-8线译码器74HC138芯片一片、数据传送器74HC574芯片四片、MATRIX-8X8-RED芯片四片、按键五个以及晶振等。
此次设计利用四片MATRIX-8X8-RED芯片构成16×16LED点阵,一片3线-8线译码器74HC138芯片同时作为四片MATRIX-8X8-RED芯片的行扫描,四片数据传送器74HC574芯片分别作为四片MATRIX-8X8-RED芯片的列扫描,来驱动四片MATRIX-8X8-RED芯片分时切换显示“河南理工学电气学院”。
此次设计有五个按键,一个复位按键,四个功能键,分别为暂停、下一个、上一个和黑屏。
目录
1概述2
1.1LED电子显示屏2
1.2Proteus2
1.3AT89S522
2系统总体方案及硬件设计2
2.1系统总体方案及功能2
2.2硬件设计2
3软件设计2
3.1设计方案2
3.2程序流程图2
4Proteus软件仿真2
4.1仿真步骤2
4.2仿真结果2
5课程设计体会2
参考文献2
附1:
源程序代码2
附2:
系统原理图2
1概述
1.1LED电子显示屏
近年来,LED显示屏由于具有亮度高,寿命长,功耗小,性能稳定,驱动简单以及可视距离远等优点,已经成为新一代的信息传播媒体工具。
目前,LED显示屏应用十分广泛,如证券交易显示、金融信息显示、体育场馆显示比赛信息、广告,城市广场群显示、道路交通信息显示等领域。
显示汉字信息时,一般需要多个LED点阵显示组合,最常见的组合方式有8x8,16×16,32×16等。
由于显示屏的显示信息有限,当显示信息较多时,一般需要进行分批显示或者滚动显示,显示方式有静态显示和动态显示两种。
点阵式LED汉字广告屏绝大部分是采用动态扫描显示方式,这种显示方式巧妙地利用了人眼的视觉暂留特性。
将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。
以8×8点阵模块为例,说明一下其使用方法及控制过程。
图1中,水平线Y0、Y1……Y7叫做行线,接内部发光二极管的阳极,每一行8个LED的阳极都接在本行的行线上。
相邻两行线间绝缘。
同样,竖直线X0、X1……X7叫做列线,接内部每列8个LED的阴极,相邻两列线间绝缘。
在这种形式的LED点阵模块中,若在某行线上施加高电平(用“1”表示),在某列线上施加低电平(用“0”表示)。
则行线和列线的交叉点处的LED就会有电流流过而发光。
比如,Y7为1,X0为0,则右下角的LED点亮。
再如Y0为1,X0到X7均为0,则最上面一行8个LED全点亮。
图表1.1LED点阵原理图
1.2Proteus
Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译。
Proteus具有丰富的器件库:
超过27000种元器件,可方便地创建新元件;智能的器件搜索:
通过模糊搜索可以快速定位所需要的器件;智能化的连线功能:
自动连线功能使连接导线简单快捷,大大缩短绘图时间;支持总线结构:
使用总线器件和总线布线使电路设计简明清晰;可输出高质量图纸:
通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。
Protues提供了丰富的仿真资源。
仿真元器件资源:
仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。
仿真仪表资源:
示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。
理论上同一种仪器可以在一个电路中随意的调用。
除了现实存在的仪器外,Protues还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。
这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。
这些都尽可能减少了仪器对测量结果的影响。
Protues还提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号。
1.3AT89S52
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
其引脚图如下:
图表1.2AT89S52引脚图
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0不具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:
外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。
FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
2系统总体方案及硬件设计
2.1系统总体方案及功能
此次设计利用四片MATRIX-8X8-RED芯片构成16×16LED点阵,一片3线-8线译码器74HC138芯片同时作为四片MATRIX-8X8-RED芯片的行扫描,四片数据传送器74HC574芯片分别作为四片MATRIX-8X8-RED芯片的列扫描,来驱动四片MATRIX-8X8-RED芯片分时切换显示“河南理工学电气学院”。
方框图如下:
图表2.1硬件工作框图
设置的按键功能:
按键1:
复位
按键2:
显示下一个汉字
按键3:
显示上一个汉字
按键4:
黑屏
按键5:
暂停
2.2硬件设计
时钟电路由一个晶振和两个小电容组成,用来产生时钟频率,如下图:
图表2.2振荡电路
AT89C52单片机芯片内部有一个反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡器电路的输入端和输出端,时钟可由内部和外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。
系统采用的定时元件为石英晶体和电容组成的并联谐振回路。
晶振频率选择12MHz,C1、成的电容值取22PF,电容的大小频率起微调的作用。
复位电路由一个电阻、按键和一个电容组成,用来产生复位信号,使单片机上电的时候复位。
如下图:
图表2.3复位电路
单片机有多种复位电路,本系统采用电平式开关复位与上电复位方式,当上电时,C1相当于短路,使单片机复位,在正常工作时,按下复位时单片机复位。
在有时碰到干扰时会造成错误复位,但是大多数条件下,不会出现单片机错误复位,而可能会引起内部某些寄存器错误复位,在复位端加一个去耦电容,则会得到很好的效果。
显示电路由四片MATRIX-8X8-RED芯片构成的16×16LED点阵、四片数据传送器74HC574芯片和一片3线-8线译码器74HC138芯片组成。
用来分时切换显示汉字。
如下图:
图表2.4显示电路
3软件设计
3.1设计方案
由于C语言具有代码效率高、数据类型及运算符丰富和良好的程序结构,此次设计采用C语言。
采用C语言不必对单片机和硬件接口结构有很入的了解,编译器可以自动完成变量的存储单元的分配,编程者可以专注于应用软件部分的设计,大大加快软件的开发速度。
此次设计要求分时切换显示“河南理工大学电气学院”和四个功能按键,分别是显示下一个、显示上一个、黑屏和暂停。
程序设计方法采用结构化程序设计,具体方法采用自顶向下,逐步细化。
按照硬件原理图,点阵显示器译码方法采用软件译码法,显示方式采用动态显示。
因此,首先用字模提取工具提取字模数据,用一个一维数组存放。
动态显示要求对于每一片MATRIX-8X8-RED芯片需要有两种信号控制:
一个是由一片3线-8线译码器74HC138芯片来选择四片MATRIX-8X8-RED芯片的第几行亮;另一个是由四片数据传送器74HC574芯片分别为四片MATRIX-8X8-RED芯片传送字模数据。
在这两个信号控制下使四片MATRIX-8X8-RED芯片依次按行扫描,扫描一边之后再扫描一边,如此不断重复,虽然在任意时刻每片MATRIX-8X8-RED芯片只有一行被点亮,但由于显示器具有余辉效应,而人眼又具有视觉惰性,所以看起来就会看到一个汉字被点亮。
由于要求分时切换显示,所以采用循环结构,每个汉字扫描四十边后扫描下一个汉字。
至于功能键:
显示下一个只需要跳出四十边扫描即可;显示上一个只需要把四片数据传送器74HC574芯片传送的字模换成上一个汉字的字模即可;黑屏只需要停止四片数据传送器74HC574芯片传送字模即可;暂停只需要不断的扫描同一个汉字即可。
3.2程序流程图
图表3.1程序流程图
4Proteus软件仿真
4.1仿真步骤
此次课程设计仿真利用Proteus进行仿真,步骤如下:
(1)打开Proteus仿真软件,然后选择设计图纸。
(2)选取仿真所需的元器件,并设置属性值。
(3)把元器件放到图纸的合适位置,然后连线,适当使用网络标号可以使原理图看起来简单明了。
(4)双击单片机,将编译成功的程序烧进单片机。
单击proteus中的play进行仿真。
(5)单击各个功能按键,看看是否达到预期结果。
如果没有,修改程序,重新调试,直到达到预期结果。
4.2仿真结果
经过几次调试,仿真结果如预期一样,功能按键也满足相应功能。
结果如下:
图表4.1仿真结果
5课程设计体会
作为一名大四学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似的课程设计就为我们提供了良好的实践平台。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
这次单片机课程设计我们历时一个月,从理论到实践,学到了很多的东西。
同时不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。
这次的课程设计还让我学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
更重要的是,我在这一设计过程中,学会了坚持不懈,不轻言放弃。
回顾起此次单片机课程设计,我感慨颇多,最重要的是感触是:
遇到一个问题时,最重要的一件事就是马上思考检查问题出在哪边,而不是抱怨或者马上请教同学老师。
只有这样我们才能真正的学会单片机,才能越学越会。
自己的独立处理问题的能力才会得到提高。
还有无论编程中遇到什么问题,都不要怨天尤人。
无论自己的程序有多好,都不能骄傲。
只有这样做到不骄不躁,力量才会源源不断,才会有更多的灵感。
此外,要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
在整个课程设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。
而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。
虽然这个课程设计做的还是有一些遗憾,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富。
参考文献
[1]余发山,王福忠.单片机原理及应用技术.徐州:
中国矿业大学出版社,2008.157-163241-251
[2]楼然苗,李光飞,等.51单片机设计实例.北京:
北京航空航天大学出版社,2007.94-101
[3]贾宗璞,许合利,等.C语言程序设计.徐州:
中国矿业大学出版社,2007.14-16、93
[4]李忠国,陈刚,等.单片机应用技能实训.北京:
人民邮电出版社,2007,169-187
[5]阳进,等.基于单片机的LED显示屏的汉字显示.北京:
清华大圩出版社,2005,43-86
附1:
源程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineout1P0
sbitclc=P1^3;
sbitoe3=P1^4;
sbitoe4=P1^5;
sbitoe5=P1^6;
sbitoe6=P1^7;
sbitfun2=P2^1;
sbitfun3=P2^2;
sbitfun4=P2^3;
sbitfun5=P2^4;
#definettP1
voiddelay(uintj)
{
uchari=250;
for(;j>0;j--)
{
while(--i);
i=100;
}
}
ucharcodestring[]=
{0x40,0x04,0x3F,0xFE,0x10,0x08,0x00,0x08,0x80,0x48,0x67,0xE8,0x24,0x48,0x0C,0x48,0x14,0x48,0x24,0x48,0xE7,0xC8,0x24,0x48,0x20,0x08,0x20,0x08,0x20,0x28,0x20,0x10,//河0
0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x04,0x7F,0xFE,0x48,0x24,0x44,0x44,0x5F,0xF4,0x41,0x04,0x41,0x04,0x5F,0xF4,0x41,0x04,0x41,0x04,0x41,0x14,0x40,0x08,//南1
0x00,0x08,0x13,0xFC,0xFA,0x48,0x22,0x48,0x23,0xF8,0x22,0x48,0xFA,0x48,0x23,0xF8,0x20,0x40,0x20,0x50,0x23,0xF8,0x3C,0x40,0xE0,0x40,0x40,0x44,0x0F,0xFE,0x00,0x00,//理2
0x00,0x00,0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,0x00,0x00,//工3
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x02,0x80,0x02,0x80,0x02,0x40,0x04,0x40,0x04,0x20,0x08,0x10,0x10,0x0E,0x60,0x04,0x00,0x00,//大4
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,//学5
0x02,0x00,0x02,0x00,0x02,0x10,0x7F,0xF8,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,0x02,0x00,0x02,0x04,0x02,0x04,0x01,0xFC,0x00,0x00,//电6
0x10,0x00,0x10,0x08,0x1F,0xFC,0x20,0x00,0x2F,0xF0,0x40,0x00,0xBF,0xE0,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x22,0x00,0x12,0x00,0x0A,0x00,0x04,//气7
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,//学8
0x00,0x80,0x78,0x40,0x4F,0xFE,0x54,0x02,0x58,0x14,0x63,0xF8,0x50,0x00,0x48,0x08,0x4F,0xFC,0x48,0xA0,0x68,0xA0,0x50,0xA0,0x41,0x22,0x41,0x22,0x42,0x1E,0x4C,0x00,//院9};
voidmain()
{
bitj=1,f=1;
uchari,n,m;
while
(1)
{for(m=0;m<10;m++)//共有10个汉字
{for(n=0;n<40;n++)//每个汉字整屏扫描40次
{if(!
fun
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 LED 点阵 汉字 显示