题目:基于AT89S52单片机的上位机软件开发姓名:袁扬学号:2009821135专业:嵌入式系统方向指导老师:杨小来设计时间:2011-6-26基于AT89S52单片机控制的上位机软件开发项目设计报告基于AT89S52单片机的上位机软件开发设计报告[项目概述]随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计是数据采集及处理,显示系统与单片机有效结合,本设计是通过在“单片机原理及应用”课堂上学习的知识的综合应用,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。LED显示屏是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。图文显示屏可与计算机同步显示汉字、英文文本和图形;视频显示屏采用微型计算机进行控制,图文、图像并茂,以实时、同步、清晰的信息传播方式播放各种信息,还可显示二维、三维动画、录像、电视、VCD节目以及现场实况。LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。它的优点:亮度高、工作电压低、功耗小、微型化、易与集成电路匹配、驱动简单、寿命长、耐冲击、性能稳定。[项目要求]设计一个能显示16X64点阵图文LED显示屏,要求能显示文字和温度,显示文字和温度应稳定、清晰,文字和温度显示,以循环左移或右移的方式显示。我设计的LED显示屏系统是由中央控制器、1302、16*64LED点阵、串口通信部分组成。LED显示屏作为一种新型的显示器件,是由多个发光二极管按矩阵形式排列封装而成,通常用来显示时间、图文等信息。本设计是基于AT89S52单片机的16x64显示屏,其中包含了硬件、软件、调试等方案的设计。此外、该设计只需简单的级联就能实现显示屏的拓展,但级联时要注意不要超过驱动负载范围。[关键字]:AT89S52;LED点阵;DS1302;串口通信一系统设计LED显示屏系统总体设计初步确定设计系统由单片机主控模块、时间模块、LED显示模块、显示驱动模块、串口接收模块共5个模块组成,电路系统框图如下图所示。LED显示屏系统总体框架图列驱动器电源16X64LED显示点阵行驱动器单片机1302读取时间串口接收数据二.硬件设计部分1、电路原理图LED点阵显示屏设计原理电路图2、物品实物图LED点阵显示屏设计实物图3、元件清单LED点阵显示屏设计元件清单1LED点阵显示屏设计元件清单2三.软件设计部分本系统的软件系统主要分为主程序、LED显示程序、温度程序、点阵驱动程序。3.1系统主程序本设计的系统软件能使系统LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。系统主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口;然后以“卷帘出”效果显示图形,停留约几秒;接着向上滚动显示“--------”这几个汉字及一个图形,然后以“卷帘入”效果隐去图形。由于单片机没有停机指令,所以可以设置系统程序不断的循环执行上述显示效果。单元显示屏可以接收来自控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示板可扩展至更多的显示单元,用于显示更多的显示内容。如果想改变些事内容,先用字模产生字代码,将用这段代码覆盖原来的代码,即可显示你想要的内容。简单流程图如下:开始系统初始化“卷帘出”显示效果“上滚屏”显示效果“卷帘入”显示效果系统主程序流程图3.2LED点阵显示程序显示程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:刷频率(帧频)=1/16×T0溢=1/16×f/12(65536-t)其中f位晶振频率,t为定时器T0初值(工作在16位定时器模式)。然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。下图为显示驱动程序(显示屏扫描函数)流程图图文显示一般有静态和动态显示两种方案,静态方案虽然设计简单,但其使用的管脚太多,如本设计中16x64的点阵共有1024个发光二极管,显然单片机没有这么多的端口,如果我采用锁存器来扩展端口,按8位的锁存器来计算,16x16的点阵需要1024/8=128个锁存器。这个数字很庞大,因为我们仅仅是16x64的点阵,在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。因此在实际应用中的显示屏几乎都不采用这种设计,而采用另外一种称为动态扫描的显示方法。动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套驱动器。具体就16x64的点阵来说,把进入中断定时器赋初值读取行号并增加1送新行显示数据消隐切换显示数据发送新行号,打开显示退出中断所有同1行的发光管的阳极连在一起,把所有同1列的发光管的阴极连在一起(共阳极的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定时间,然后熄灭;再送出第二行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;以此类推,第16行之后,又重新燃亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。采用扫描方式进行显示时,每一行有一个行驱动器,各行的同名列共用一个驱动器。显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。从控制电路到列驱动器的数据传输可以采用并列方式或串行方式。显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。当列数很多时,并列传输的方案是不可取的。采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下留给行显示的时间就太少了,以致影响到LED的亮度。解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,传送下一列数据。为了达到重叠处理的目的,列数据的显示就需要具有所存功能。经过上述分析,就可以归纳出列驱动器电路应具有的功能。对于列数据准备来说,它应能实现串入并处的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示3.3串口通信模块1、AT89C52单片机芯片,用于控制串口通信。2、接口电平转换芯片MAX3232,用于实现TTL电平和RS-232电平的转换。3、1302程序流程图如下所示:主机部分从机部分4、串口电路图3.4点阵驱动程序各行的同名列共用一个列驱动,数据通常存储在单片机的存储器中,按8位一个字节的形式存放。由于列线过多,故多采用串行传输。由于每次要传输16位,而且数据要逐位输给驱动器,只有当一行中各列数据都已传输到位后,这一行的各列才能进行并行显示,耗时较长。为了满足以上要求,驱动选择74LS595移位寄存器。74HC595是硅结构的CMOS器件,。74HC595是有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。其特点:8位串行输入/8位串行或并行输出存储状态寄存器,三种状态;输出寄存器可以直接清除100MHz的移位频率。输出能力:并行输出,总线驱动;串行输出;标准中等规模集成电路。74LS595的管脚图及其说明如下图所示。图三74LS154管脚图对3个输入信号进行译码。得到8个输出状态。G1,G2A,G2B,为数据允许输出端,G2A,G2B低电平有效。G1高电平有效。A,B,C为译码信号输出端,Y0~Y7为译码输出端,低电平有效图四:74LS595管脚图点阵驱动模块管脚及其说明:QA--QH:八位并行输出端。QH':级联输出端。SI:串行数据输入端。74595的控制端说明:/SCLR(10脚):低点平时将移位寄存器的数据清零。SCK(11脚):上升沿时数据寄存器的数据移位。QA--QB--QC--...--QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了)RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。(5V时,大于几十纳秒就行了),更新显示数据。/G(13脚):高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。3.5其他程序其他程序包括延时程序,闹铃程序,警报程序,闪烁程序。其中闹铃程警报程序用延时函数来实现。闪烁程序用定时器的中断来完成的。3.6程序中的注意点在程序中应加延时函数,和查表功能。程序用调用函数,最好在头文件申明函数,主函数一般最后写。为了使程序更加容易写,我们要分模块来完成程序。3.7程序清单设计者:袁扬设计时间:2011年4月25号16*64LED点阵显示屏由于程序所占页面很大,因此我省去很多程序,只在下面加上主要程序。完整程序到我的代码中查询。#includereg51.h#includeDS1302.H#includecode.h//点阵定义开始sbitDdat=P3^0;//点阵数据sbitDclk=P3^1;//数据时钟sbitDlat=P1^6;//数据锁存sbitRes=P1^5;//总清除sbitG1=P1^7;//154G1#defineH_addP1//154IN//点阵定义结束//串口定义开始typedefunsignedcharBYTE;#defineSIM_INBUF_LEN128BYTEidatasim_uart_Buff[SIM_INBUF_LEN];//模拟串口定义结束///////////////////////////////////////////////////voidRS232_Init(){SCON=0x50;//UART工作于模式1,REN=1TMOD=0x20;//Timer1工业于模式2PCON|=0x80;//SMOD1=1TH1=0xe6;//波特率2400Bdsat12MHzTL1=0xe6;//波特率2400Bdsat12MHzTR1=1;//启动Timer1}voidRS232_SendData(uns