摘 要
本设计制作出一个三维立体显示图案的LED光立方。本产品不仅可以像发光二极管点阵一样显示平面的静态或动态画面,还可以显示立体的静态或动态画面,打破了传统的平面显示方案。同时又增加了显示的花样和立体图案显示效果,可以广泛用于传媒信息显示和各种装饰显示,为将来显示技术的进步和发展指导了方向,光立方显示比发光二极管点阵更具有视觉效果,而且画面图案更加非富多彩。
本设计是采用ATS52单片机为核心控制器,八D边沿触发器(三态)74LS573扩展I/O口,完成硬件电路设计。通过软件编程控制数据下载到单片机完成设计图案的显示。软件采用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。
关键词: 52单片机;74HC573锁存器;8*8*8LED显示;
1
ABSTRACT
This design produced a three-dimensional pattern of the LED light cube. This product can not only like a light-emitting diode dot matrix display plane static or dynamic screen can also display three-dimensional static or dynamic images,and to break the traditional program.While increasing the display patterns and three-dimensional effect can be widely used to display and decorative display for future progress and development to guide the direction,light cube display more visual effects than the light-emitting diode dot matrix,and the picture is more rich colorful. With a combination of graphics and characters more perfect display characteristics.
The design is ATS52 MCU core controller,eight D edge flip-flop 74LS574 (tri-state) expansion I/O port completion of the hardware circuit design. Programmed by software to control the data is downloaded to the MCU to complete the designs of the show. This design software is a top-down modular design,the system moving in the direction of distributed,small development,enhance the stability of the system's scalability and running.
KEY WORDS: 52single-chip;74HC573latch;8*8*8 3DLED;
2
目录
1、设计要求与方案…………………………………………………………………1 1.1设计目的……………………………………………………………………1 1.2设计要求……………………………………………………………………1 1.3设计思路……………………………………………………………………1 1.4设计的总体要求及方案选择……………………………………………2 2、工作原理………………………………………………………………………3 2.1模块的简介…………………………………………………………………3 2.2 3DLED光立方工作原理……………………………………………………4 3、方案选择…………………………………………………………………………5 3.1电源的选择…………………………………………………………………5 3.2 3D显示核心控制器…………………………………………………………5 3.3 I/O口扩展芯片的选择……………………………………………………6 3.4 LED发光显示二级管………………………………………………………6 4、硬件整体设计概述及功能分析…………………………………………………8 4.1 系统概述 …………………………………………………………………8 4.2 系列单片机简介……………………………………………………………9 4.3 时钟电路设计………………………………………………………………9 4.4 复位电路设计……………………………………………………………10 4.5 74HC573芯片连接电路图与介绍…………………………………………11 5、主程序设计思路………………………………………………………………13 5.1程序流程框图………………………………………………………………13 5.2显示程序的设计……………………………………………………………13 5.2.1 LED显示屏的数据传送……………………………………………13 5.2.2 显示程序的设计……………………………………………………14 6、硬件电路设计…………………………………………………………………15 6.1 单片机与74HC573连接线路图……………………………………………15 6.2 LED焊接方法………………………………………………………………15 6.2.1焊前准备工作……………………………………………………15 6.2.2焊接…………………………………………………………………16 6.3 整体实物图………………………………………………………………17 7、程序设计分析与选择…………………………………………………………18 7.1单片机C语言主要特点……………………………………………………19 7.2单片机C语言与标准语言的区别…………………………………………19
3
7.3数据类型的选用…………………………………………………………20 7.4算法设计问题……………………………………………………………20 7.5数据存储器的分配…………………………………………………………21 7.6单片机C语言与汇编语言的混合编程……………………………………21 7.7程序分析选择……………………………………………………………23 8、程序设计………………………………………………………………………24 9、设计结果分析…………………………………………………………………28 总 结………………………………………………………………………………30 致谢…………………………………………………………………………………31 参考文献……………………………………………………………………………32
4
1、设计要求与方案
1.1 设计目的
在当今现代信息化社会的高速发展过程中,大屏幕显示已经从公共信息展示等商业应用向消费类多媒体应用渗透。随着宽带网络的发展,数字化的多媒体内容将在信息世界中占据主流,新型的大屏幕显示设备将代替传统电视机成为人们享受信息和多媒体内容的中心。为追求舒适、逼真、清晰的3D视频显示,为此制作出一个三维立体显示图案的LED光立方。该设计方案将打破了传统的平面显示视频的方法,该方案设计的LED显示屏显示画面色彩鲜艳,立体感强,静如油画,可以广泛应用于广告公司、交通运输、车站、商场、医院、宾馆、证券市场、工业企业管理等公共场所。 1.2 设计要求
(1)毕业设计(论文)中心突出,内容充实,论据充分,论证有力,数据可靠,结构紧凑,层次分明,图表清晰,格式规范,字迹工整,结论正确。 (2)设计制作一个8*8*8的三维的发光二极管显示方阵,能够通过编写程序来实现对每一个发光二级管控制,从而来显示多种多样的图案。控制显示输出至少二十种显示效果。
(3)通过大量编写程序调试实验现象结果分析研究数据形成规律,对规律总结得出结论并初步确定算法。 1.3 设计思路
本设计根据二极管点阵的原理由单片机I/O口控制点亮不同的二极管从而组成出不同的画面,根据人眼的视觉暂留现象即当物体移去时视觉神经对物体的印象不会立即消失而是要延续0.1-0.4秒的时间 ,来设置每幅画面的延迟时间使连续的一系列画面呈现动态。每一个层面的二极管阳极接在一起受一路I/O口控制,实际电路中该路I/O口输出的控制信号通过5V继电器的吸合和断开来控制的,再输入发光二极管的阳极使其驱动。每一个二极管的阴极分别受单片机扩展后的I/O控制。每个灯都是由片选端口和控制端口共同决定亮或灭。因此,我们可以随意的来点亮立方体中任意一处的灯,来构建多种多样的图案。 1.4 设计的总体要求及方案选择
本次设计制作一个8*8*8的三维的发光二极管立方显示体,能够通过编写程序来实现对每一个发光二级管的亮灭控制,从而可以显示多种多样的图案。
5
为了吸引观众增强显示效果,可以有多种显示模式。最简单的显示模式是静态显示。与静态显示模式相对应,就有各种动态显示模式,它们所显示的图文都是能够变化的。按照图文运动的特点又可以分为闪烁、平移、旋转、缩放等多种显示模式。产生不同显示显示模式的方法,并不意味着一定要重新编写显示数据,可以通过一定的算法从原来的显示数据直接生成。这样程序书写就不会过于繁琐和重复,而且对核心控制器的内存空间要求不高。
借鉴单片机控制LED点阵显示的原理,通过系统分析,确定该系统该具有哪些功能,有哪些模块,各个模块之间是怎样连接,以及怎样组合电路是最合理最简单的,即硬件方案设计。编写硬件电路的相对应软件程序部分,利用仿真软件对程序进行测试修改。电路系统焊接完毕后,测试整个的系统模块的功能,看各个功能是否能正常运行,并依据实验结果找出程序中的错误,改正这些错误至测试成功完成毕业设计要求。
6
2、工作原理
2.1模块的简介
有8个8*8点阵,再用8个引脚来当充当各个8*8点阵的“开关”。只要将个灯阳极连在一起,在连到这个引脚上。采用了HC573暂存的方法,来分别把个灯的亮灭信息存到这个上面,然后再一起输出到灯上,573的个输出引脚控制前面所述每一个面的个灯;而每层灯的阴极全连接在一起接入单片机,由单片机控制的每一个层灯。通过单片机主控芯片ATS52来控制所有灯的亮灭,从而控制P0、P1、P2实现控制X、Y、Z空间立体控制来显示我们所需要显示的现象。如图2.1和2.2所示。整个设计主要分为三个模块分别是主控模块、驱动模块、显示模块.
图2.1 层面
图2.2 个灯孔
7
2.2 3DLED光立方工作原理
本设计介绍一个3D LED光立方显示屏的制作,在单片机的P0口输出显示代码,然后把扫描片选择锁存器送入74HC573,通过片选哪一列对应的芯片就可以把显示的内容送到显示屏显示。考虑到P0口必需设置上拉电阻,我们采用4.7 kΩ排电阻作为上拉电阻。
设计原理:利用单片控制LED点阵显示的原理和控制技术,来制作控制光立方显示。通过编写程序控制不同LED的显示,显示所要显示的内容。根据人眼的视觉暂留效应,设置每幅画面的延迟时间使连续的一系列画面呈现动态。最终达到所要显示的内容。每个灯都是由层控制端和列控制端共同决定亮或灭。
单片机 层驱动器列驱动器LED光立方 图2.2 LED光立方整体显示框图
在三维光立方中采用动态扫描显示,这种显示方式巧妙地利用了人眼的视觉暂留特性。将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。最典型的例子就是电影放映机。在电子领域中,因为这种动态扫描显示方式极大的缩减了发光单元的信号线数量,因此在LED显示技术中被广泛使用。现简单描述一下用动态扫描显示的方式,显示字符“B”的过程。
图2.3 用动态扫描显示字符“B”的过程
8
3、方案选择
3.1电源的选择
方案一:采用普通干电池作为LED系统的电源,由于点阵系统耗电量较大,点阵系统一般悬挂在高处上,一直不停的工作。使用干电池需经常换电池,不符合节约型社会的要求。
方案二:采用一块LM7805三端集成稳压器。把市电经变压器降压输入电路,而后整流送到LM7805三端稳压器稳压输出作为工作电压。不仅功率上可以满足系统需要,不需要更换电源,并且比较轻便,使用更加安全可靠。
方案三:采用5V电源的移动充电宝。
基于以上分析,决定选取5V电源的移动充电宝供电电源。 3.2 3D显示核心控制器
控制部分是整个系统的核心部分,其功能可以实现与上位机通信接收上位机发送的数据和控制指令经处理过后控制显示屏显示内容。其常用的电子设计方法有单片机、DSP、及EDA技术。
方案一:单片机
单片机是集成了CPU,ROM,RAM和I/ O口的微型计算机。它有很强的接口性能,非常适合于工业控制,因此又叫微控制器(MCU)。单片机品种齐全,型号多样 CPU 从8,16,32到位,多采用RISC 技术,片上I/O非常丰富,有的单片机集成有A/ D,“ 看门狗”,PWM,显示驱动,函数发生器,键盘控制等。它们的价格也高低不等,这样极大地满足了开发者的选择自由。除此之外单片机还具有低电压和低功耗的特点。随着超大规模集成电路的发展,单片机在便携式产品中大有用武之地。
方案二:DSP 芯片
DSP 又叫数字信号处理器。顾名思义,DSP主要用于数字信号处理领域,非常适合高密度,重复运算及大数据容量的信号处理。现在已经广泛应用于通信、便携式计算机和便携式仪表、雷达、图像、航空、家用电器、医疗设备等领域。 DSP区别于一般微处理器的另一重要标志是硬件乘法器以及特殊指令,一般微处理器用软件实现乘法,逐条执行指令,速度慢。DSP 依靠硬件乘法器单周期完成乘法运算,而且还具有专门的信号处理指令。它的强大数据处理能力和高运行速度,是最值得称道的两大特色。芯片内置544字的高速SRAM。外部可寻址K字程序/数据及I/O,令周期在25ns~50ns之间,实时性处理比16位单片
9
机快2倍以上,可取代一般的单片机。
方案三:EDA
EDA(即Electronic Design Automation) 即电子设计自动化,它是以计算机为工具,在EDA 软件平台上,对用硬件描述语言HDL 完成的设计文件自动地逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至对于特定目标芯片进行适配编译、逻辑影射和编程下载等。而且MCU和DSP都是通过串行执行指令来实现特定功能,不可避免低速,而FPGA/CPLD则可实现硬件上的并行工作,在实时测控和高速应用领域前景广阔;另一方面,FPGA/CPLP器件在功能开发上是软件实现的,但物理机制却和纯硬件电路一样,十分可靠。
基于以上分析,三种设计方式相比较各有优点且都能够实现控制功能,但单片机的技术门槛较低开发成本也较低非常适合初学者进行学习和锻炼使用。现在市场上常用的单片机主要有MCS-52、AVR、ARM、PIC等。其中应用最广泛的单片机首推Intel的52系列,由于产品硬件结构合理,指令系统规范,加之生产历史“悠久”,有先入为主的优势常作为单片机学习的教材。所以决定选取52系列单片机作为控制部分的核心器件。 3.3 I/O口扩展芯片的选择
方案一:选取串口输入并口输出芯片74LS1,虽然I/O口使用较少,由于本次设计共需要72路I/O口,列驱动电路就需要8块74LS1。显示数据是先后顺序给送去的,显示会有延迟,而LED动态显示的刷新的时间控制大约10ms,实时性差,效果不好。
方案二:74HC573 跟74LS573的管脚一样。器件的输入是和标准CMOS 输出兼容的;加上拉电阻,他们能和HC/ALSTTL 输出兼容。当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。8块74HC573共用个I/O口,数据可以并行写入芯片,延迟时间少,满足设计要求。
综合以上比较,决定选取74HC573作为列线驱动I\\O口扩展芯片。 3.4 LED发光显示二级管
LED是一种固体光源,当它两端加上正向电压时就可以发光。采用不同的材料,可制成不同颜色的发光二极管。作为一种新的光源,广受欢迎而得以快速发展。从而在各种各样的传媒信息的宣传中得以体现。简述其分类方法如下。
1)按颜色分类
1 0
单基色显示屏:单一颜色(红色、绿色、黄色、蓝色等等)。
双基色显示屏:红和绿双基色,256级灰度、可以显示65536种颜色。 全彩色显示屏:红、绿、蓝三基色,256级灰度的全彩色显示屏可以显示一千六百多万种颜色。
2)按使用场合分类
室内显示屏:发光点较小,一般Φ3mm--Φ8mm,显示面积一般零点几至十几平方米。
室外显示屏:面积一般几十平方米至几百平方米,亮度高,可在阳光下工作,具有防风、防雨、防水功能。
3)按发光点直径分类
室内屏:Φ3mm、Φ3。75mm、Φ5mm。
室外屏:Φ10mm、Φ12mm、Φ16mm、Φ19mm、Φ21mm、Φ26mm。 基于以上分析结果,加上由于成本和控制的难易程度,决定选取单色Φ3mm绿光LED作为本次设计显示色彩,亮度高,显示效果很好。
11
4、硬件整体设计概述及功能分析
4.1 系统概述
3D LED光立方总体框图如图3.1所示。电路大体上可以分成核心控制电路、显示驱动电路、串信通信电路三部分。核心控制电路部分包括一个52系统CUP和一些外围电路。在整个电路当中此电路部分可以相当于一个上位机,它负责控制整个电路以及相应的程序的运行、与PC机的串行通讯、以及给显示屏部分发送命令。单片机根据编写好的内容和指令通过I/O口扩展后驱动8*8*8 LED光立方显示屏。本次设计将以此方案为指导思想展开具体的硬件电路设计。
显示电路采用动态扫描方式进行显示时,每列有一个列驱动器,各列的同名行共用一个行驱动器。由单片机给出的行选通信号,从第一列开始,按顺序依次对各列进行扫描选通,根据锁存器的特性可以把数据锁存输出。这样就可以把八列的数据输出显示,完成列线数据的传送。另一方而,根据各列层面要显示的数据,通过三极管驱动继电器来控制相应层面的电平,列与层面的数据结合共同来显示图案。
复位 电路 ATS52 时钟 电路 行 驱 动 器 8*8*8LED 点阵 显示屏
图4.1 系统结构设计总图
电 源 列驱动器 1 2
4.2 系列单片机简介
单片机(Microcontroller,又称微处理器)是在一块硅片上集成了各种部件的微型机,这些部件包括处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。单片机最小系统包括时钟电路和复位电路。 时钟电路用于产生ATS52单片机工作时必需的控制信号。单片机的内部电路正是在时钟信号的控制下,严格地按照时序执行指令进行工作。复位电路是为单片机初始化操作准备的。只要单片机的复位引脚RST上的复位信号要持续两个机器周期(24个时钟周期)以上,就可以使ATS52单片机复位。如图3.2所示。
图4.2 单片机最小系统电路图
4.3 时钟电路设计
ATS52单片机各功能部件的运行都以时钟信号为基准,有条不紊、一拍一拍地工作。因此时钟频率直接影响单片机的处理速度,时钟电路的质量也是直接影响单片机系统的稳定性。常用的时钟电路有两种方式,一种是内部时钟方
1 3
式,另一种是外部时钟方式。本次采用外部时钟方式。
ATS52单片机芯片内部设有一个由反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡电路的的输入端和输出端,时钟可有内部或外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。系统采用的定时元件为石英晶体和电容组成的并联谐振回路。时钟频率fosc采用12MHZ,C1、C2的电容值取30pF,电容的大小起频率微测的作用。如3.3图所示。
图4.3 时钟电路图
4.4 复位电路设计
ATS52单片机在启动运行时或者出现死机时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,PC初始化为0000H。单片机从这个状态开始执行程序。除了进入系统的正常初始化之外,当程序行出错(如程序“跑飞”)或操作错误使系统处于 “死锁”状态时,也需要按复位键即RST脚为高电平,使ATS52摆脱“跑飞”“死锁”状态而重新启动程序。
单片机有多种复位方式,常用的复位操作有上电复位和手动按键电平复位方式。本设计采用手动按键电平复位方式,电路搭建图见图4.4。上电复位是通过外部复位电路的电容充电来实现的,复位电路产生的复位信号(高电平有效)由RST通过复位电路相连,手动输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号对ATS52单片机进行复位。当上电时,C3相当于短路,有时碰到干扰时会造成错误复位,可在复位端加个去耦电容,可以复位电路更加可靠。
1 4
图4.4 按键电平复位电路图
4.5 74HC573芯片连接电路图与介绍
图4.5 74HC573芯片连接电路图
1 5
74HC573 跟74LS573的管脚一样。器件的输入是和标准CMOS 输出兼容 的;加上拉电阻,他们能和HC/ALSTTL 输出兼容。
当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同 步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。 输出能直接接到CMOS,NMOS 和TTL 接口上操作电压范围:2.0V~6.0V,低输入电流:1.0uA,CMOS 器件的高噪声抵抗特性。 管脚功能图:
管脚功能图
74HC573功能表 INPUTS 输入 OE H L L L 74HC573逻辑图
LE X L H H D X X L H
Outputs输出 Q (HC573) Z NO CHANGE * L H 1 6
5、主程序设计思路
5.1 程序流程框图
系统软件采用汇编语言编写,按照模块化的设计思路设计程序。首先分析程序所要实现的功能,程序要实现可静态显示、动态显示、三维立体显示。通过按键控制程序选择不同的显示程序进行显示。
图5.1 主程序流程图
1 7
程序开始时首先必须对单片机进行初始化设置,其中初始化设置的内容包括:中断优先级的设定,中断初始化,定时器初始化,串行通信时通信方式的选择和波特率的设定,各IO口功能的设定等。把各子程序写为一个可单独执行的完整子程序段。各子程序编译没有错误后再下载到单片机进行仿真验证,这两项都通过后再将所有的程序整合到一起,形成一个完整的程序再进行编译和仿真验证。
5.2 显示程序的设计
5.2.1 LED显示屏的数据传送
动态扫描显示是把整个LED屏幕分成若干部分,每一幅画面显示过程是显示完一部分后,又显示第二部分……直到显示完最后一部分又重新开始显示第一部分,重复循环进行。在重复扫描速度足够快的情况下,我们看到的就是一幅稳定的静态画面。也就是说采用动态扫描显示需要不断进行画面的刷新。动态扫描分为行扫描和列扫描,两种方式区别在于选通端和数据输入端分别是行还是列。先选通列然后再从行送入对应列的数据,这样从第1列到第8列循环往复,只要切换的速度足够的快利用人眼的延时特性就可以看见一幅稳定的画面。
5.2.2 显示程序的设计
显示采用的是扫描显示方式,选通一列后按照列对应的数据表的数据第i列对应的列数据为数组中的第i和第i+7个元素。将对应数据由低至高位依次从控制端口输出显示。向右逻辑移位所得结果通过单片机端口输出到锁存器,通过片选需要显示对应的锁存器在输出显示。如此依次循环选通各列来显示所需画面。
动态显示程序流程图见5.2.2。把显示的数据送到P0口,相应的锁存器接收数据,再把片选锁存器的数据送到端口,相应锁存器接收数据并锁存输出显示,接着把下一组数据送到P0口,改变片选锁存器的数据,送到相应锁存器输出显示,直到把所有的数据局输出传送完毕后,显示完成后,退出显示程序,等待指令。输出形式多种多样,可以静态输出图案,也可以动态、左移、右移、循环等花样显示。
显示数据送0 1 8 开始 程序初始化 选通列,送锁存输出
图5.2.2 显示程序流程图
6、硬件电路设计
6.1 单片机与74HC573连接线路图
首先在porter平台里画出单片机ATS52与芯片74HC573的连接图,变
换成PCB图,转印在PCB板上面,然后再根据图把各个元器件焊接上去。但考虑到PCB板太小,不能满足灯座的占地面积,所以把PCB板重新固定在20*22的万能板上。如图5.1所示。
1 9
图6.1 单片机与74HC573连接线路图
6.2 LED灯焊接方法
6.2.1 焊接前准备工作
准备好烙铁、焊锡丝、钳子等工具,以及LED。LED的正负极很好判别,长的引脚为+,短的为-。LED最好选用直径3mm的LED,推荐选绿色。长脚的LED可以省很多工作量。实际测量长脚是29mm,短脚为27mm,由于LED光立方板子灯的间距决定了,每个LED的间距是20mm。这样长短引脚都符合这个尺寸。由于所有LED框架焊接好后,一旦有LED损坏更换难度很大,所以焊接前要测试所有LED,用一般数字显示万用表打到二极管量程,用万用表红表笔接长引脚,黑的接短引脚。LED正常发光并且亮度基本一致,这样的LED就是好的,否则是坏灯。如果为了确保可靠也可以焊接好一层后测试LED是否能点亮。 6.2.2 焊接
将8个LED焊接为一组,可以通过2种方法完成。
2 0
方法一:需要用钳子将LED的正极扭弯,这个弯,一定要小,正好露出LED外围打弯正合适,LED的正极折弯后留下的引脚长度必须大于LED的间距20mm,以确保有足够的重合位LED灯脚全部折好后,就可以焊接了,为了方便焊接可以在万能板上面钻几个2mm的孔,间距为 8个洞洞置以便焊接。焊接细节,将一个LED正极的引脚靠近到另一个LED正极的打弯处,然后上焊锡焊接,焊接要光亮可靠,有一定机械强度。这样将全部LED焊接成8个一组的LED灯排待用。焊接时避免用过多助焊剂,要不会粘到LED表面,影响外观。焊机避免正负2极短路。注意每一层的二极管都是共阴的。
方法二:需要借助一个工艺设备,这个东西可以自己动手制作,用这个辅助焊接当然要容易些。焊接方法也是一样的,将一个LED正极的引脚靠近到另一个LED正极的打弯处,然后上焊锡焊接,焊接要光亮可靠,有一定机械强度。这样将全部LED焊接成8个一组的LED灯排待用。焊接小经验,由于LED灯脚有一定弹性,一个LED的引脚靠近到另一个LED正极的打弯处时,一松手就又弹远了,所以建议焊接时多掰一点,掰过了之后利用弹性将两个要焊接的引脚 靠进,这样焊接会容易许多。如图6.2.2所示。
图6.2.2 灯焊接模具
6.3整体实物图
整个光立方的连接是用排线和杜邦线连接而成,这样方便拆和安装,但过
2 1
程比较繁琐,也很容易出错误,有事也会产生接触不良。整体图如图6.3.1和图6.3.2所示。
图6.3.1 排线和杜邦线连接图
2 2
6.3.2 整体实物图
2 3
7 程序设计的选择与分析
作为一种结构化的程序设计语言,C语言的特点就是可以使你尽量少地对硬件进行操作,具有很强的功能性、结构性和可移植性,常常被优选作为单片机系统的编程语言。但是基于单片机的C语言和标准C语言有很大区别,如何结合单片机的系统资源,用C语言开发符合实际工程需要的单片机系统,对用编程者来说具有十分重要的意义。
7.1单片机C语言主要特点
用C 编写程序比汇编更符合人们的思考习惯,开发者可以摆脱与硬件无必要的接触,更专心的考虑功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。C语言具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,将功能模块化,由不同的模块完成不同的功能[1],这样可使整个应用系统程序结构清晰,易于调试和维护。不同的功能模块,分别指定相应的入口参数和出口参数,对于一些要重复调用的程序一般把其编成函数,这样可以减少程序代码的长度,又便于整个程序的管理,还可增强可读性和移植性。 在实际单片机程序设计中,程序结构一般均采用如下结构: #include { inti,j; /* 整型变量声明部份*/ Function1(…); /* 功能函数说明部份*/ ……} 7.2 单片机C语言与标准C语言的区别 由于现在越来越多的产品都采用单片机开发,所完成的计算和控制工作也日趋复杂,但是单片机系统是一种资源十分有限的系统,这主要表现在程序存储器资源的不足,因此在程序设计时如何使用好这些有限的资源就显得十分重要。用C语言编程虽然具有许多的优点,但是生成的代码相对要长,要是编程技术不好,生成的代码甚至有可能比汇编语言生成的代码长几倍,因此对编程者来说,应该注意到单片机C语言和一般意义上的标准C语言的区别,对程序进行适当的优化。 7.3 数据类型的选用 2 4 单片机C语言编程不同于一般的C语言编程的显著的一个特点,就是要和程序存储器资源结合起来,虽然其提供的数据据类型十分丰富,但是只有bit和char等数据类型是是机器语言直接支持的数据类型,用此类数据类型的语句所生成的代码较短;而其它的数据类型如整型、浮点型等数据要有一定的内部程序或内部函数的支持,相对来说用该类数据类型的语句生成的代码要长。有些C语言程序表面上看起来十分的简单,但在在实际编译时,生成的代码却相当长。因此我们要按照实际需要,合理地选用数据,可以大大的减少所生成的代码长度。例如在S52中每种数据类型变量所占用存储器字节数和经编译后生成的代码长度如表1所示: 通过表1我们知道,不同的数据类型所生成的机器代码长度相差很多,相同 类型的数据类型有无符号对机器代码长度也有影响。在程序编译时生成机器代码长的数据类型的优先级越高,不同的数据类型在进行程序运算时要转化为高优先级的的数据类型,相应的代码长度也会增长[2]。因此我们应尽可能地使用bit,char等机器语言直接支持的数据类型,无符号数的变量应声明为无符号数,尽可能地减少程序中使用的数据类型的种类。 7.4算法设计问题 单片机C语言和标准C语言存在着很大差别,在计算机上进行C语言程序 设计时由于不必考虑程序代码的长短,只需考虑程序功能实现,但是在单片机上进行C语言程序设计就必须考虑系统的硬件资源。有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码长度非常长。不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一些优化算法[2]。 在单片机C语言编译成机器代码时,不同的运算生成的机器代码的长度相差很大,尽可能地减少程序中对某种数据类型的运算种类,越复杂的数据类型效果越明显。在进行数据计算时,在一定的精度范围内,可以用一些近似的计算来完成一些运算,既不损失精度又能减少大量的代码。比如:用逻辑AND/&取模比MOD/%操作更有效。 在用热敏电阻测量温度时,可根据热敏电阻—温度特性公式来求值。数学 2 5 表达式表示为:RT=RT0expB(1/T-1/T0) 如果直接按照公式温度时程序结构简单,算法复杂度不高,但是程序将调用 7.5 数据存储器的分配 单片机内部数据存储器RAM只有几百字节,如果扩展外部存储器RAM来提高 数据存储量话必将会增加了硬件成本,使系统更加的复杂,访问外部存储器比访问内部存储器所需的代码也要长得多。有效地使用片内存储器、提高存储器空间的利用率对开发者来说十分关键。 内部处理器、内部堆栈、压缩栈、所有程序变量和所有包含进来的库函数都将使用数量有限的内部数据存储器RAM。因为C语言采用了存储器的覆盖技术[2],可以在程序进行连接时,它将那些已经被其它程序段释放了的存储器空间重新定义给另一个程序段的变量使用,当这个程序运行结束时再将这些存储器释放以供其它程序段使用。全局变量的作用范围是整个程序,因此不能被释放;静态变量由于在函数的调用中专用不变,也不能被释放;只有局部变量中的动态变量可以被释放。 因此在进行程序设计时应该尽量的使用局部变量,提高内部数据存储器的使用率。在C语言中程序中间结果及参数传传递是通过内部的寄存器来完成的,要是内部的存储器不够,将会给你的程序带来许多莫名其妙的错误。例如在进行程序设计时语句不应该太长,一个长语句可以分成多个语句,这样的话可以大的减少中间变量,当然太长时就会造成临时寄存器的不够用,导致计算出错。 7.6 单片机C语言与汇编语言的混合编程 在绝大多数场合采用C语言编程即可完成预期的目的,但是对实时时钟系 统、要求执行效率高的的系统就不适合采用C语言编程,对这些特殊情况进行编程时要结合汇编语言。汇编语言具有直接和硬件打道、执行代码的效率高等特点,可以做到C语言所不能做到的一些事情,例如对时钟要求很严格时,使用汇编语言成了唯一的选择。这种混合编程[2]的方法将C语言和汇编语言的优点结合起来,已经成为目前单片机开发最流行的编程方法。 2 6 目前大多数据单片机系统,在C语言中使用汇编语言有两种情况:一种是汇编程序部分和C程序部分为不同的模块,或不同的文件,通常由C程序调用汇编程序模块的变量和函数(也可称为子程序或过程);另一种是嵌入式汇编,即在C语言程序中嵌入一段汇编语言程序。 当汇编程序和C程序为不同模块时程序一般可分为若于个C程序模块和汇编程序模块,C程序模块通常是程序的主体框架,而汇编程序模块通常由用C语言实现效率不高的函数组成,也可以是已经成熟的、没有必要再转化成C语言的汇编子程序。在这种混合编程技术中,关键是参数的传递和函数的返回值。它们必须有完整的约定,否则数据的交换就可能出错。 对于嵌入式汇编,可以在C程序中使用一些关键字嵌入下些汇编程序,这种方法主要用于实现数算或中断处理,以便生成精练的代码,减少运行时间。当汇编函数不大,且内部没有复杂的跳转时,可以用嵌入式汇编实现。 ATS52单片机内置模拟比较器,13脚即P1.1是比较器的负输入端,12脚即P1.0是比较器的正输入端,比较器的输出端做在了CPU内部即P3.6未被引出,CPU可以直接读取P3.6状态来判定两输入端比较的结果其和一个外部电阻及一个外部电容器就可以设计成一个A/D转换器,采用RC模拟转换的原理,来检测外部P1.1引脚的输入电压。由于系统对时钟要求很严格,因此就采用了C语言和汇编语言混合编程技术,程序调用形式如下: 汇编子程序: PUBLIC _AD ;入口地址 con SEGMENT CODE ;程序段 RSEG con _AD: SETB P3.7 ;充电 Loop: JB P3.6,AD_END ;开始计数匹配 INC A CJNE A,#100,Loop AD_END: CLR P3.7; 放电 CJNE A,#100,Ret_Val ;看结果是否有溢出,有溢出说明结果不对 SJMP Con_OV;返回值 Ret_Val:DEC A MOV R7, A; A/D转换的结果保存在R7中,传递给主程序 Con_OV: RET END 单片机C程序: include 2 7 unsigned char AD(unsigned char);//在C程序中声明汇编模数转换子程序 …………… void timer0(void) interrupt 1 using 1{ ……… unsigned char x; x=AD(); //在C程序中调用汇编程序 ……… } Main{ //主程序 ……… } 在以上程序中,函数的返回值为一无符号字符型数,根据调用规则,返回值在R7中,这样才可保证数据的传递不出错。另外,在调用过程中,必须注意寄存器的入栈。这样在以后用到A/D转换时,在C语言中调用汇编语言子程序AD()即可。 7.7 程序分析选择 C语言具有很强的功能性和结构性,可以缩短单片机控制系统的开发周期, 而且易于调试和维护,已经成为目前单片机语言中最流行的编程语言。所以本设计选取C语言作为编辑语言。 8程序设计 2 8 #include uchar_ceng[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar table_erwei[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF}; uchar LED_A[]={0x00, 0x7E, 0x88, 0x88, 0x88, 0x88, 0x7E, 0x00}; uchar LED_B[]={0x00, 0x6C, 0x92, 0x92, 0x92, 0x92, 0xFE, 0x00}; uchar LED_C[]={0x00, 0x00, 0x82, 0x82, 0x82, 0x82, 0x7C, 0x00}; uchar LED_D[]={0x00, 0x7C, 0x82, 0x82, 0x82, 0x82, 0xFE, 0x00}; void delay(uint z); void erwei(); void ceng(); void juxing(); void LEDA(); void LEDB(); void LEDC(); void LEDD(); void main() { while(1) { 2 9 ceng(); delay(200); erwei(); delay(200); LEDA(); delay(200); }} void delay(uint z) { uchar x,y; for(x=0;x P2=0xFF;P0=0xFF; for(a=0;a<8;a++) { P1=table_erwei[a]; delay(200);delay(200); } for(a=8;a>0;a--) { P1=table_erwei[a]; 3 0 delay(200);delay(200); } } void ceng() { uint i; P2=0xFF;P0=0xFF; for(i=0;i<8;i++) { P1=uchar_ceng[i]; delay(200); delay(200); delay(200); } for(i=7;i>0;i--) { P1=uchar_ceng[i]; delay(200); delay(200); delay(200); } } void LEDA() { uint b; P1=0XFF; 3 1 P2=0XFF; for(b=0;b<8;b++) { P0=LED_A[b]; delay(200); } } 9 设计结果分析 3 2 本次光立方的设计,主要控制电路是采用双面附铜板,灯座是用万能板焊 接而成。因为考虑在作图是的方面,设想完全采用排线和杜邦线将整个电路连接。而事实在实际的操作过程中,产生很多的问题。最主要的问题,就是将已经连接好的电路运行时,只要光立方有触动,运行就会出现乱码。因为在连线的接触点有接触不良的问题产生,而这也是避免不了的。这就是用外界线连接电路的最大弊端。 采用排线和杜邦线连接整个电路有很大的弊端。但是,用porter99SE作图时,简单方便很多,大大节省的作图时间。而且,在拆取过程和组装过程也很方便。 总 结 3 3 毕业设计是学生即将完成学业的最后一个重要环节,它既是对学校所学知识的全面总结和综合应用,又为今后走向社会的实际操作应用铸就了一个良好的开端。所以在此有必要对这次的毕业设计作一个系统的总结,说一说自己内心的想法。 这次毕业设计,我选择了实做的题目:基于单片机的8*8*8*的光立方的设计。本次设计达设计预期要求:LED显示屏各点亮度均匀、充足,可显示图形和简单的文字,而且显示图形和文字显示稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。 本次毕业设计不仅是对我的一种锻炼,也是对我大学年所学知识的综合检查。从开始设计到设计的完成,我感觉收获很多,不仅在理论上有了很大的升华,并且还在实践中锻炼了自己。使自己成长了许多。 本文首先对整个系统的工作原理和实现方法进行了简单的介绍,给出了系统工作的整体框图。在此基础上,介绍了系统设计用到的各个模块的功能特性,并进性了方案比较,选择出了最优越的方案。在理论上对整个系统有一定了解的情况下,进行了系统模块的电路的设计,充分利用各方面的资料,发挥我所学的特长。整个系统的开发过程是曲折的,首先在硬件设计上,由于以前所学课程有一定的基础,我多方查阅资料,不断的向老师、同学学习请教,以确保设计的电路系统完整,并能实现最完美的系统功能。经过几个月学习,我设计出了各个部分模块的电路图,并实现了电路图的组合。经过测试与修改,与指导老师最终完善了硬件电路的设计,并能够比较理想的完成本次毕业设计功能。 在完成毕业设计的过程中也存在一些问题:没有考虑仿真软件是一个理想的仿真环境,而实际连接的电路板与仿真现象有差异。譬如连接不当,驱动能力不强,相邻器件间的干扰等问题会导致在仿真软件中能良好运行的程序,出现显示问题,经过排查和合理的器件摆放焊接,问题解决。 对于软件设计,因为以前的编程经验不够,因此,在这方面花费了很多的精力和时间。尽管过程很艰难,但是在真正意义上学到了知识,为以后的工作和学习积累了宝贵的经验。 总体来说这次的毕业设计很成功,达到了预期的设计要求。不仅学到了许多课本上学不到的知识,提高了自己动手动脑的能力,丰富了创新和创造的思维。有点缺憾是时间有限,不能进一步深入和扩散学习和研究。希望有时间可以对程序和电路图作更进一步的改进,譬如实现显示图案的上下移动,对角线移动,三色显示等。在研制过程中注重先进、适用的原则,注重科技与应用结合,来用产、学、研结合,侧重于科研技术转化为生产力。本系统经过了设计阶段、开发实现阶段以及最后的应用测试阶段。经过1个月的努力,核心问题已经全部解决,所有功能均已基本实现,只是在通用性上还有待提高。这次毕 3 4 业设计的经历使我对52单片机的一些特征、性能,以及应用及原理有了深刻的了解,真正做到了学有所得、学有所用,可以说获益匪浅。 但是,总的说来,由于我在理论和实践方面存在一定的不足,所以在设计思路和实现功能上难免有不足之处,请各位老师多多批评指正。 设计结束了,但学习仍在继续。从这次的毕业论文设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,实践是检验真理的唯一标准。我们电子专业的学习更是如此,不仅要有丰富的理论知识,还要有很强的动手能力,只有理论与实践并重,专业水平才能提高,这就是在这次毕业设计中的最大收获。在今后的人生中,不断对自己所学的知识进行更新,进行补充。 致 谢 3 5 在论文即将完成之际,我首先向关心、帮助、指导我的导师——万系杰老师表示衷心的感谢并致以崇高的敬意! 在这三年的大学学习生涯中,我的人生步伐一直向前,在学习上和思想上,以及动手能力上都受益匪浅,这除了自身的努力外与电子办公室的各位老师的辛勤帮助、热心鼓舞、积极开导是分不开的。谨向各位老师们致以衷心的感谢和崇高的敬意!本课题在选题及设计过程中一直得到万老师的悉心指导。万老师曾多次为我指点迷津,帮助我开拓设计思路,精心点拨、热忱鼓励。万老师以其渊博的学识、严谨的治学态度、求实的工作作风和他敏捷的思维、饱满的工作热情以及对我的耐心指导和严格要求给我留下了深刻的印象,使我在理论和实际应用两方面的能力都得到了很大的提高,使我受益匪浅。万老师治学严谨、待人诚恳,他高屋建瓴的学术眼光、对事业孜孜不倦地追求和勤奋不辍的精神将使我终生受益,是我终生学习的榜样,在此向恩师致以最诚挚的谢意。 在此,我还要感谢在一起设计讨论的同学,正是由于你们的帮助和支持,我才能克服一个又一个的困难和疑惑,直至本设计的顺利完成。感谢你们给予我的帮助并且对于我提出的任何难题都给予热心、耐心的解答,使我受益颇深。 最后,我要向在百忙之中抽时间对本文进行审阅、评议的老师表示感谢! 3 6 参考文献 [1] 关积珍.LED显示屏发展状况及趋势[J].世界电子元器件。 [2] 关积珍,陆家和我国LED显示屏技术和产业发展及展望。 [3] Jeyamkondan S,Jayas D S,Holly R A.16x16 dot matrix LED has 4mm profile. Electronics Weekly,11/26/2003 Issue 2125,36-36,1/9p,1c;(AN 11842012). [4] 缪思恩 LED大屏幕显示电路设计[J].电子技术应用,1996,(08):56-77. [5] Dave Jackson. 关于DSP芯片的问与答.今日电子 ,1998,(12):1-7. [6] 卢弥坚.主从分布式LED大屏幕显示系统[J].电脑与信息技术,1997,(04): 6-13. [7] 高胜东,梁采,张宏富.一种LED大屏幕显示系统[J].成都:气象学院学报,1998,(03):108-120. [8] 张全福.汇编语言程序设计实验教学改革与探索.教学研究,2005,(06):3-5. [9] 文哲雄.用单片机控制LED显示屏[D].佛山:佛山科学技术学院,1995,(05):5-10. [10] 郑刚,李宇成.LED大屏幕显示系统的设计[J].北方工业大学学报,2001,(03):43-47. [11] 李元生. LED光柱专用驱动器[J]. 家庭电子,2005,(04):1-7. 2002,(03) :56-78. [13] 李桂平.LED屏幕显示器的设计[J].零陵师范学院学报,2002,(09):367-380. [14] David F Rogers.Computer graphics algorithm[M].Beijing:China Machine Press,2002:97-99. [15] Marston,R.Radio-Electronics,Working with LED display drivers[J]. Mar1992,Vol. 63 Issue 3 658p,3 charts,23 diagrams;(AN 9206290756). [12] 陈新忠.基于RS232总线的单片机多机通信软件设计[J].现代电子技术, 37
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务