单片机报告.docx
《单片机报告.docx》由会员分享,可在线阅读,更多相关《单片机报告.docx(19页珍藏版)》请在冰豆网上搜索。
单片机报告
江苏理工学院
JIANGSUUNIVERSITYOFTECHNOLOGY
单片机课程设计报告
作品名称:
LED点阵屏显示
学院:
计算机工程学院
专业:
计算机
班级:
12东计B
组员:
谢帆邱刚施坡严云霞
2013年6月
摘要:
本设计基于单片机技术,采用89C51单片机为控制核心,以C52P0、P2口为行驱动,来实现对LED点阵的控制;在驱动芯片与LED点阵之间添加了三极管和限流电阻,选用8050做开关三极管,使其工作在饱和导通状态,增加LED的亮度,也解决了芯片驱动能力有限的问题;LED点阵采用动态扫描的方式显示各种字符和数字,程序设计采用C语言,经测试,整机功能基本齐全,LED显示内容基本到位,本系统的电源部分是+5V的稳压电源,电源效率高,波纹稳定,符合课设要求。
关键词:
89C51LED电子显示屏动态显示开关电源
一、需求分析及功能要求
需求分析:
LED点阵显示屏是一种简单的汉字显示器,具有价廉、易于控制、使用寿命长等特点,可广泛应用于各种公共场合,如车站、码头、银行、学校、火车、公共汽车显示等。
本次实验设计一个能显示16*8点阵图文LED显示屏,要求能根据提供的字库码能显示图形或文字,并且要求显示的滚动图形或文字稳定、清晰。
功能要求:
1、加深对单片机89C51工作原理的理解;
2、熟练使用PROTEL软件,合理布线生成PCB版图;
3、学习用多个LED显示屏按矩阵的方式排列在一起显示复杂的字符的工作原理;
4、提高焊接技术及程序的编写技术。
设计一个能显示16*8点阵图文LED显示屏,要求显示的滚动图形或文字稳定、清晰。
二、方案及总体设计
不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到想要的显示结果。
这种同时控制各个发光二极管点亮灭的方法称为静态驱动显示方式。
所谓动态扫描,简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(如8行)的同名列共用一个口驱动。
以8*8点阵为例,把所有同一行发光管的阳极连在一起,把所有同一列发光管的阴极连在一起(共阳),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其点亮一定的时间,然后熄灭;再送出第二行的数据并锁存,然后选通第二行使其点亮相同的时间,然后熄灭……第十六行之后又重新点亮第一行,这样反复轮回。
当这样轮回的速度足够快时,由于人眼的视觉暂留现象,我们就能看到显示屏上稳定的图形了。
采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个驱动器。
显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。
显示时,要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。
从控制电路到列驱动器的数据传输可以采用并行方式。
三、硬件电路器件选择
(1)主要设备选择:
1、STC89C52RC(1个)
STC89C52RC是STC公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用STC公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大STC89C52RC单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。
图STC89C52RC管脚示意图
主要性能参数:
·与MCS-51产品指令系统完全兼容
·4k字节可重擦写Flash闪速存储器
·1000次擦写周期
·全静态操作:
0Hz-24MHz
·三级加密程序存储器
·128×8字节内部RAM
·32个可编程I/O口线
·2个16位定时/计数器
·6个中断源
·可编程串行UART通道
·低功耗空闲和掉电模式
2、LED点阵模块(2个)
LED显示屏是将发光二极管按行按列布置的,驱动时也就按行按列驱动。
在扫描驱动方式下可以按行扫描按列控制,当然也可以按列扫描按行控制。
LED显示屏现多采用多块8×8点阵显示单元拼接而成。
本设计就是使用2块LG12088BH组成16×8点阵,以满足汉字显示的要求。
8×8LED点阵是最基本的点阵显示模块,理解了8×8LED点阵的工作原理就可以基本掌握LED点阵显示技术。
8×8点阵LED结构等效电路如图7,LG12088BH焊接面引脚如图8。
从图中(本图的LED阵列采用共阳的接法)可以看出,8×8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上。
要实现显示图形或字体,只需考虑其显示方式,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。
当采用按行扫描按列控制的驱动方式时,LED显示屏8行的同名列共用一套列驱动器。
行驱动器一行的行线连接到电源的一端,列驱动器一列的列线连接到电源的另一端。
应用时还应在各条行线或列线上接上限流电阻。
扫描中控制电路将行线的1到8轮流接通高电平,使连接到该行的全部LED器件接通正电源,但具体那一个LED导通,还要看它的负电源是否接通,这就是列控制的任务了。
当对应的某一列置0,则相应的二极管就亮;反之则不亮。
例如:
如果想使屏幕左上角LED点亮,左下角LED熄灭的话,在扫描到第一行时,第一列的电平就应该为低,而扫描到第八行时第一列的电平就应该为高。
这样行线上只管一行一行的轮流扫描,列线上进行通断控制,实现了行扫描列控制的驱动方式。
图78×8点阵LED结构等效电路
图8LG12088BH焊接面引脚图(型号朝下)
3.三极管S8050(8个)
8050三级管相关参数如下:
S8050的伏安曲线如下:
4.电源设备
1、5V电源(1个)
本设计中我们外接了一个5V稳压电源。
四、系统硬件电路的设计
目前,单片机技术在各个领域中正得到越来越广泛的应用,世界上许多集成电路生产厂家相继推出了各种类型的单片机。
在单片机家族的众多成员中,MCS-51系列单片机以其优越的性能、熟练的技术、高可靠性和高性价比,成为国内单片机应用领域中的主流。
与其配套的MCS-51系列单片机的各类开发系统、各类软件也越来越完善,可以极方便地利用现有资源,开发出用于不同目的是各类应用系统。
XTAL2(18脚):
接外部晶体和微调电容的一端。
在S51中它是振荡电路反相放大器是输出端,振荡电路的频率就是晶体的固有频率。
若需要采用外部时钟电路时,该管脚输入外部时钟脉冲,要检查S51的振荡电路是否正确工作,可用示波器查看XTAL2端是否有脉冲信号输出。
XTAL1(19脚):
接外部晶体的微调电容的另一端。
在片内它是振荡电路反相放大器的输入端。
在采用外部时钟时,该管脚必须接地。
4.1单片机系统及外围电路
本系统采用89C52RC作控制器,整个电路主要由单片机系统及外围而电路、驱动显示电路、电源电路等部分组成。
为了简化显示屏电路,降低成本,本系统在单片机部分不加字库存储器。
而在PC机上编辑汉字和字符显示信息,并将其转换为相应的点阵显示数据,然后通过串口(采用RS-232通信标准)送给单片机存储并进行显示处理。
单片机采用89C51或其兼容系统的芯片。
系统采用24MHz或更高频率的晶振,以获得较高的刷新频率,使显示更稳定。
单片机的串口与列驱动器相连,用来送显示数据。
P0口、P2口控制三极管驱动电路,其中P0口需要接相应的上拉电阻,P3.0~P3.4口则用来发送控制信号,相关硬件原理图见后面附录。
4.2行驱动电路
LED显示屏驱动电路的设计应与所用控制系统相配合。
驱动通常分为动态扫描型及静态锁存型驱动二大类。
本实验以动态扫描型驱动电路的设计来进行分析。
动态扫描型驱动方式是指显示屏上的8行发光二极管共用一组列驱动寄存器,然后通过行驱动管的分时工作,来使每行LED的点亮时间占总时间的1/16。
此实验中每行的刷新速率100Hz,利用人眼的视觉暂留效应,就可以看到一幅完整的文字或画面。
4.3LED显示原理图
五、软件设计
显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按计的要求显示。
根据软件分层次设计的原理,可把显示屏的软件系统分层两大层:
第一层是底层的显示驱动程序;第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其他控制信号,配合完成LED显示屏的扫描显示工作。
显示驱动程序由定时器T0中断程序实现。
系统应用程序完成系统环境(出始化)等工作,由主程序实现。
5.1系统主程序的设计
显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
根据软件分层次设计的原理,可把显示屏的软件系统分成两大层:
第一层使底层的显示驱动程序;第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其他控制信号,配合完成LED显示屏的扫描显示工作。
显示驱动程序由定时器T0中断程序实现。
系统应用程序完成系统环境设置初始、显示结果处理等工作,由主程序来实现。
从有利于实现较复杂的算法和有利于程序结构化考虑,显示屏程序适宜采用C语言来编写。
系统主程序开始后,首先对系统环境初始化,包括设置定时器、中断和端口。
5.3汉字表示及显示原理
计算机用编码的方式来处理和使用字符,英文在计算机内是用一个ASCII码来表示,而中文汉字则由两个ASCII码表示。
1981年我国正式发布国家标准——《信息交换用汉字编码字符集—基本集》[GB2312-80]。
在这个标准中共收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。
另外。
GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,GB2312将汉字分为94个区,每个区用一个区码表示;每个区又对应有94个汉字,用位码加以表示,因此也称为区位码。
01-09区为符合、数字区,16-87区为汉字区,10-15区、88-94区是有待进一步标准化的空白区。
GB2312还将收录的汉字分成两级:
第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母、笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首、笔画顺序排列,故而GB2312最多能表示6763个汉字。
六、调试过程
6.1焊接后实物效果图:
6.2调试过程分析:
单片机应用系统的硬件调试和软件调试是分不开的。
许多硬件故障在软件调试时才能发现,但通常要先排除系统中明显的硬件故障。
本次试验用的WAVE的SP51仿真器进行调试的。
工作可以分为四步:
(1)目测检查
根据硬件逻辑设计图,仔细检查样机线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,必要时可用万用表检测线路通断情况。
(2)电源调试
样机的第一次通电测试很重要,若样机中存在电源故障,则加电后将造成器件损坏。
调试的方法有两种:
一种是断开样机稳压电源的输出端检查空载时电源工作情况;另一种是拔下样机上的主要集成芯片,检查电源的负载能力(用假负载)。
确保电源无故障并性能符合设计要求。
(3)通电检查
在确保电源良好前提下,接通电源。
最好在电源与其余电路之间串接一个电流表。
若接通后电流很大,必须立即切断电源。
电源大得超出正常范围,说明电路中有短路或故障。
通电检查的主要目的是看系统是否存在短路或由元器件损坏、装配错误引起的电流异常。
(4)检查相应芯片的逻辑关系
加电后检查各芯片插座上相关引脚的电位,仔细测量相应的输入输出电平是否正常。
单片机系统大都是数字逻辑电路,使用电平检查法可首先查出逻辑设计是否正确,选用器件和连接关系是否符合要求等。
一、Keil运行过程
1、新建工程文件,选STC公司的AT89C52单片机;
2、新建文件file,new,保存(***.c)--后缀.C很重要;
3、右击“Target”选”optionsfortarget…”(下图)在OutPut中选中CreatHex;
二、Hex程序文件下载至单片机
1、打开“驱动精灵”软件,插上单片机,安装驱动(USB2.0)。
2、右击我的电脑—管理—设备管理器—看串口(一般是COM3或者COM5)
3、打开下载程序软件;
4、软件设置;
注意事项:
MCU选择STC89C52,COM选择相应串口,打开文件,在单片机关闭情况下点download,提示上电时候再给单片机上电。
七、实验总结及心得体会
这次单片机课程设计我们历时两个星期,在我们班里算是倒数几组完成的吧,但经过这两个星期的实践和体验下来,我们又怎么会去在乎那个先后问题呢,因为对我来说学到的不仅是那些知识,更多的是团队和合作。
现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!
过没想到这项看起来不需要多少技术的工作却是非常需要耐心和精力在两个星期后的今天我已明白课程设计对我来说的意义,它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结,虽然我们这次花去的时间比别人多,但我相信我们得到的也会更多!
作为一名计算机的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似的课程设计就为我们提供了良好的实践平台。
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:
C语言、模拟和数字电路知识等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
后,要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
我觉得作为一名计算机系的学生,单片机的课程设计是很有意义的。
更重要的是如何把自己平时所学的东西应用到实际中。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的学习,自己逐步从基础慢慢开始弄懂它。
我认为这个收获应该说是相当大的。
觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。
附录A:
参考文献
1.黄维翼。
单片机应用与项目实践。
清华大学出版社,2010
2.张有德。
单片微型机原理.应用与实验(C51版)。
复旦大学出版社,2006
附录B:
元器件清单
序号
名称
数量
序号
名称
数量
1
5V稳压电源
1
6
1.5kΩ电阻
16
2
电源插座
1
7
11.0592M晶振
1
3
30UF/5V电解电容
1
8
万用电路板12×18cm
1
4
30UF/5V电解电容
1
9
8*8点阵
2
5
100Ω电阻
8
10
200Ω
1
11
10UF电解电容
1
14
S8050三极管
16
12
开关
1
13
导线
*
附录C:
源程序
/********************************************************************
*文件名:
点阵显示.c
***********************************************************************/
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
//圆形显示
unsignedchartabDispScan[]=
{
0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f,
0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000,
};
unsignedchartabDispBuf[]=
{
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
};
voidtimer0()interrupt1
{
staticunsignedcharcnt=8;
TH0=65436/256;
TL0=65436%256;
//P0=tabDispScan[cnt]%256;
P1=tabDispScan[cnt]/256;
P2=tabDispBuf[cnt];
cnt++;
if(cnt>15)
cnt=8;
}
/********************************************************************
*名称:
Main()
*功能:
主函数
*输入:
无
*输出:
无
***********************************************************************/
voidmain()
{
TMOD=0x01;
TH0=65436/256;
TL0=65436%256;
TR0=1;
ET0=1;
EA=1;
while
(1);
}