基于单片机88点阵控制系统设计单片机课程设计毕设论文Word下载.docx
《基于单片机88点阵控制系统设计单片机课程设计毕设论文Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机88点阵控制系统设计单片机课程设计毕设论文Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
目录
1绪论1
2总体设计方案1
2.1硬件电路组成及介绍1
2.1.1AT89C51单片机2
2.1.2LED显示屏4
2.2系统各单元电路设计4
2.2.1最小系统4
2.2.2驱动电路设计6
2.2.3上拉电阻7
2.2.4显示电路7
2.2.5时钟电路8
2.3字符的点阵显示原理及字库代码获取方法9
3程序设计11
3.1程序流程图11
3.2程序设计11
4调试及性能分析15
4.1系统调试15
4.1.1软件调试15
4.1.2硬件调试15
4.2性能分析15
4.3实物效果图16
5设计总结17
心得体会18
参考文献19
附录20
附录1原件清单20
附录2硬件原理图20
1绪论
LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。
它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。
同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。
目前大多数的LED点阵显示系统自带字库。
其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只能按照预先的设计进行。
而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示等。
这时一般的显示系统就很难达到要求。
另外,由于受到存储器本身的局限,其特殊字符往往难以显示,同时显示内容也不能随意更改。
因此就提出了一种利用PC机和单片机控制的LED显示系统通信方法。
该方法可以对显示内容进行实时控制,从而实现诸如动态显示效果。
同时用户也可以在PC机上进行显示效果的预览,显示内容亦可以即时修改。
同时它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。
并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。
LED显示屏发展较快,本文讲述了基于AT89C51单片机8×
8LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术。
LED电子显示屏是随着计算机及相关的微电子﹑光电子技术的迅猛发展而形成的一种新型信息显示媒体。
它利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本低等特点,在短短的十来年中,迅速成长为平板显示的主流产品,在信息显示领域得到了广泛的应用。
LED点阵电子显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。
它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。
2总体设计方案
2.1硬件电路组成及介绍
本产品采用以AT89C51单片机为核心芯片的电路来实现,AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C51是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C51是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
我们把行列总线接在单片机的I/O口,然后把上面分析到的扫描代码送入总线,就可以得到显示的字符了。
我们在实际应用中是将LED点阵的8条列线通过驱动电路接在P1口,8条行线通过限流电阻接在P0口。
单片机AT89C51按照设定的程序在P1和P0接口输出与内部字符对应的代码电平送至LED点阵的行列线(高电平驱动),从而选中相应的象素LED发光,并利用人眼的视觉暂留特性合成整个字符的显示。
再改变取表地址实现字符的滚动显示。
LED点阵总体框图如图1.1所示,点阵电路大体上可以分成微机本身的硬件、显示驱动电路、控制信号电路三部分。
控制电路部分包括一个51CUP和一些外围电路。
在整个电路当中此控制电路部分相当于一个上位机,它负责控制整个电路以及相应的程序的运行、与PC机的串行通讯、以及给屏体电路部分发送命令。
点阵显示屏体、以及它的行和列的各个驱动电路。
由于两部分的电路在制板时可以放到一起,所以可以将其字库放到控制电路部分使用串行通讯方式来与屏体电路部分进行数据和命令的传送。
此显示电路采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。
由行译码器给出的行选通信号,从第一行开始,按顺序依次对各行进行扫描(把该行与电源的一端接通)。
另一方而,根据各列锁存的数据,确定相应的列驱动器是否将该列与电源的另一端接通。
接通的列,就在该行该列点燃相应的LED;
未接通的列所对应的LED熄灭。
可通过扫描输出口的控制实现颜色的转换。
硬件电路组成框图如图1所示:
图1硬件电路组成框图
2.1.1AT89C51单片机
图片见如下:
图2AT89C51
(1).管脚说明
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)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
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:
来自反向振荡器的输出
2.1.2LED显示屏
本次设计中采用8*8点阵LED显示器,简称LED点阵板或LED矩阵板。
它是以发光二极管为像素,按照行与列的顺序排列起来,用集成工艺制成的显示器件。
有单色和双色之分,这种显示器有共阳极接法和共阴极接法两种,设计中用到的是共阳极的显示器。
LED显示屏色彩丰富,3基色的发光管的可以显示全彩色,显示显示方式变化多(文字、图形、动画、视频、电视画面等)、亮度高,是集光电子技术、微电子技术、计算
机技术、信息处理技术于一体的高技术产品,可用来显示文字、计算机屏幕同步的图形。
其次,LED显示屏的象素采用LED发光二极管,将多个发光二极管以序列的形式构成
LED显示阵列,这种显示屏具有耗电省、成本低、亮度清晰度高、寿命长等优点,而且LED显示屏以其受空间限制较小,并可以根据用户要求设计屏的大小,具有全彩色效果,视角大,是信息传播设施划时代的产品。
再次,LED显示屏应用广泛,金融证券、银行利率、商业广告、文化娱乐等方面,显示效果清晰稳定,越来越多的地方开始使用LED电子显示屏,有巨大的社会效益和经济效益。
具有耗电少、使用寿命长、成本低、亮度高、故障少视角大、可视距离远等特点,,是目前国际上使用广泛的显示系统。
2.2系统各单元电路设计
2.2.1最小系统
最小系统包括晶体振荡电路、复位开关和电源部分。
如图4所示:
图4AT89C51单片机最小系统
复位电路:
单片机在启动运行时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作,另外,在单片机工作过程中,如果出现死机时,也必须对单片机进行复位,使其重新开始工作。
其电路图如图5。
.
图5电路的设计
电源电路:
电源电路采用普通集成稳压电路,在本次设计中,由于考虑到成本问题,这
部分电路就以输出+5V的稳压电源代替。
晶体振荡电路:
AT89C51单片机芯片内部设有一个由反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡电路的的输入端和输出端,时钟可有内部或外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。
系统采用的定时元件为石英晶体和电容组成的并联谐振回路。
晶振频率fosc采用12MHZ,C1、C2的电容值取30pF,电容的大小起频率微调的作用。
2.2.2驱动电路设计
正向点亮一颗LED,至少也要10~20mA,若电流不够大,则LED不够大。
而不管是AT89C51的I/O口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2mA而已。
因此很难直接高态驱动LED,这时候就需要额外的驱动电路,通常有共阳型与共阴型LED阵列驱动电路,本设计才用共阴型高态扫描信号驱动电路。
共阴型LED阵列驱动电路采用高态扫描,也就是任何时间只有一个高态信号,其它则为低态。
一行扫描完成后,再把高态信号转化到近邻的其他行,扫描信号接用一个反向驱动器,AT89C51本身内置一个反向驱动器,本设计将AT89C51作为点矩阵显示控制系统的控制核心,通过点矩阵实时显示并移动字符。
单片机的串口与行驱动器相连,用来发送显示数据信息。
P0口与LED阵列的行引脚相连,送出数据、地址以及系统控制信号。
输出低态时,最大可吸取0.5A,即500mA,若每个LED取30mA,7个LED同时点亮,需要210mA,完全满足LED点亮的基本条件。
所要显示的信号各个经过一个限流电阻送入晶体管的基极,而每个NPN晶体管的的集极连接VCC、射极输出经一个100Ω的限流电阻连接到LED阵列的列阵脚。
对于高态的显示信号,将可提供其所连接LED的驱动电流,而这个驱动电流经过LED到输出端,形成正向回路,即可点亮该LED。
其中每个晶体管任何时间只需负责驱动一个LED,所以选择30mA射极电流的晶体管。
驱动电路如图6所示
图6驱动电路图
2.2.3上拉电阻
从电源高电平引出的电阻接到输出端,如果电平用OC(集电极开路,TTL)或OD(漏极开路,CMOS)输出,那么不用上拉电阻是不能工作的,管子没有电源就不能输出高电平了。
图7上拉电阻
2.2.4显示电路
共阳极接法的原理图如图6所示,图中画出了8*8点阵的二极管。
每一行发光二极管的阳极接在一起,有一个引出端r,每一列发光二极管的阴极接在一起,有一个引出端c。
当给发光二极管阳极引出端r1加高电平,阴极引出端c1加低电平时,左上角的二极管被点亮因此,对于行和列的电平进行扫描控制时,可以达到显示不同字符的目的。
图8显示器组成原理图
图8为8×
8点阵LED外观及引脚图,,只要其对应的X、Y轴顺向偏压,即可使LED发亮。
例如如果想使左上角LED点亮,则电子模块中的0口为1,A口为0即可。
应用时限流电阻可以放在横轴或列轴。
图98×
8点阵LED外观及引脚
(1)把“单片机系统”区域中的P0端口用8芯排芯连接到“点阵模块”区域中的“A~H”端口上;
(2)把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“0~7”端口上;
为了方便于单片机连接,我们在焊接的过程中特意将0~7接口排列出来作为列,将A~H接口作为行,这样我们就可以直接将AT89C51单片机的P0口与0~7接口一次连接,将AT89C51单片机的P1口与A~H接口一次连接。
要使LED发亮即使给予数字端高电平,字母端给予低电平,就能使二极管发亮。
(3)8*8点阵LED显示器与单片机的接口
8*8点阵LED的引脚图如图2-8所示,当采用单片机进行控制时,连接点阵显示器的共阳r端与单片机的P2口相连,而共阴极c端需经限流电阻与单片机的P0口相连。
在编程控制时,将8*8点阵LED显示分成行和列两部分,字符数据从P0口输出,扫描控制字从P2
口输出每一列由一个字节的数据组成,数据可一次送入,然后扫描一行,显示一个字需要扫描8次。
2.2.5时钟电路
单片机的时钟电路AT89C51单片机内部的振荡电路是一个高增益反向放大器,引线X1和X2分别是放大器的输入端和输出端。
单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。
AT89C51的时钟产生方式有两种:
内部时钟电方式和外部钟方式。
由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。
内部时钟方式:
利用其内部的振荡电路在X1和X2引线上外接定时元件,内部振荡电路产生自激振荡。
最常用的是在X1和X2之间接晶体振荡器与电路构成稳定的自激振荡器,如图4所示电路所示为单片机最常用的时钟振荡电路的接法,其中晶振可选用振荡频率为12MHz的石英晶体,电容器一般选择30PF左右。
2.3字符的点阵显示原理及字库代码获取方法
我们以UCDOS中文宋体字库为例,每一个字由8行8列的点阵组成显示。
我们可以把每一个点理解为一个象素,而把每一个字的字形理解为一幅图像。
事实上这个汉字屏不仅可以显示汉字,也可以显示在64象素范围内的任何图形。
如查用8位的AT89C51单片机控制,如图所示
图108×
8点阵等效电路
为了弄清楚汉字的点阵组成规律,首先通过列扫描方法获取汉字的代码。
首先将8行分成4位的上、下两部分,把发光的象素位编为0不发光的象素位为1的十六进制代码。
这样就把要显示的“2”字编为如下代码:
0x00,0x1e,0x30,0x30,0x1c,0x06,0x06,0x3e,
其仿真图11如下:
图11仿真图
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出他的扫描代码从而显示在屏幕上。
上述方法虽然能够让我们弄清楚字符点阵代码的获取过程。
字符点阵显示一般有点扫描、行扫描和列扫描3种。
为了符合视觉暂留要求,点扫描方法的扫描频率必须大于16×
64—1024Hz,周期小于1ms即可。
行扫描和列扫描方法的扫描频率必须大于16×
8—128Hz,周期小于7.8ms即可。
3程序设计
3.1程序流程图
图12主程序流程图
3.2程序设计
KeiluVision3介绍
C语言是一种通用的计算机程序设计语言,在国际上十分流行,它既可用来编写计算机的系统程序,也可用来编写一般的应用程序[5]。
C语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作,表达和运算能力也较强,许多以前只能采用汇编语言来解决的问题现在都可以改用C语言来解决。
KeilC5l是一种专为8051单片机设计的高效率C语言编译器,符合ANSI标准,生成的程序代码运行速度极高,所需要的存储器空间极小,完全可以和汇编语言相媲美。
Keil软件是目前最流行开发MCS-51系列单片机的软件,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision3)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
PROTEUS软件介绍PROTEUS嵌入式系统仿真与开发平台由美国LabcenterElectronic公司开发(授权风标科技公司为中国大陆的总代理)的,是目前世界上最先进最完整的嵌入式系统设计与仿真平台。
PROTEUS可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等全部功能。
PROTEUS软件包在全球拥有庞大的企业用户群,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具,真正实现了在没有目标原形时就可对系统进行调试、测试与验证。
PROTEUS软件包大大提高了企业的开发效率,降低了开发风险。
用EDA设计技术进行电路的设计与实现。
EDA技术的设计思路是:
从元器件的选取到连线,直到电路的调试、分析和软件的编译,都是在计算机中完成,所有的工作先在虚拟环境下进行。
采用EDA技术,在原理图设计阶段就可以对设计进行评估,验证所设计电路是否达到设计要求的技术指标,还可以通过改变元器件参数使整个电路性能达到最优化。
这样就无须多次购买元器件及制板,节省了时间与经费,提高了设计效率与质量。
PROTEUS是一款新的EDA软件。
该软件可以对模拟电路、数字电路、模数混合电路、单片机及外围元器件进行系统仿真,并提供了简便易用的印刷电路板设计工具。
PROTEUS软件提供了三十多个元器件库、数千种元器件。
元器件涉及电阻、电容、二极管、三极管、MOS管、变压器、继电器、各种放大器、各种激励源、各种微控制器、各种门电路和各种终端等。
在PROTEUS软件包中提供的仪表有交直流电压表、交直流电流表、逻辑分析仪、定时/计时器和信号发生器等。
而且PROTEUS还提供了一个图形显示功能,可以将线路上变化的信号,以图形方式实时显示出来,其作用与示波器相似。
PROTEUS提供了丰富的测试信号用于电路测试,这些测试信号包括模拟信号和数字信号
打开keil软件,编写程序如下:
#include"
REG51.H"
voiddelay1ms();
//延时约1ms函数声明
voidmain()
{
unsignedcharcodeled[]={0x18,0x24,0x24,0x24,0x24,0x24,0x24,0x18,//0
0x00,0x18,0x1c,0x18,0x18,0x18,0x18,0x18,//1
0x00,0x1e,0x30,0x30,0x1c,0x06,0x06,0x3e,//2
0x00,0x1e,0x30,0x30,0x1c,0x30,0x30,0x1e,//3
0x00,0x30,0x38,0x34,0x32,0x3e,0x30,0x30,//4
0x00,0x1e,0x02,0x1e,0x30,0x30,0x30,0x1e,//5
0x00,0x1c,0x06,0x1e,0x36,0x36,0x36,0x1c,//6
0x00,0x3f,0x30,0x18,0x18,0x0c,0x0c,0x0c,//7
0x00,0x1c,0x36,0x36,0x1c,0x36,0x36,0x1c,//8
0x00,0x1c,0x36,0x36,0x36,0x3c,0x30,0x1c};
//9
unsignedcharw;
unsignedinti,j,k,m;
while
(1){
for(k=0;
k<
10;
k++)//字符个数控制变量
{
for(m=0;
m<
400;
m++)//每个字符扫描显示400次,控制每个字符显示时间
{
w=0x01;
//行变量w指向第一行
j=k*8;
//指向数组led的第k个字符第一