版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 毕毕 业业 设设 计(论文)计(论文)题题 目目: 多变流水灯控制电路的设计多变流水灯控制电路的设计 学学 院:院:电气与电子信息工程学院电气与电子信息工程学院 专业名称:专业名称: 电气自动化技术电气自动化技术 学学 号:号: 05302201110530220111 2008 年年 5 月月 20 日日摘摘 要要本设计是一 led 流水灯的设计。整机以美国 atmel 公司生产的 40 脚单片机 at89c51 为核心,介绍了以它为控制系统的 led 灯的动态设计和开发过程。通过该芯片控制一个行 led 灯按一定顺序亮,文中详细介绍了 led 显示的设计思路。单片机控制系统程序采用单片机
2、汇编语言进行编辑,通过编程控制各显示点对应 led 阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。当然流水灯一般只是在用芯片做控制时起修饰作用,若只用单片机做流水灯,就不能很好体现单片机的强大功能。这里的流水灯只是单片机应用中的最基础的一方面。led 显示以其组构方式灵活、显示稳定、功耗低、寿命长、技术成熟、成本低廉等特点在车站、证券所、运动场馆、交通干道及各种室内/外显示场合的信息发布,公益宣传,环境参数实时,重大活动倒计时等等得到广泛的应用。经实践证明,该系统显示误差小,性能稳定,结构合理,扩展能力强。关键词:汇编语言;at89c51 单片机;动态显示;led abstractthi
3、s design is led flows the lantern floated down river the design. complete machine 40 foot monolithic integrated circuit at89c51 which produces by american atmel corporation is a core, introduced take it as the control system led lamp dynamic design and the performance history. controls a line of led
4、 lamp through this chip to be bright according to certain order, in the article in detail introduced the led demonstrationdesignmentality. the monolithic integrated circuit control system procedure uses the monolithic integrated circuit assembly language to carry on the edition, controls each demons
5、tration point correspondence led anode and the cloudy extreme level through the programming, may effective control each demonstration extinguish brightly. certainly flows the lantern floated down river only is generally when uses the chip makes the control the beautification function, if only uses t
6、he monolithic integrated circuit to do flows the lantern floated down river, cannot very good manifest the monolithic integrated circuit the formidable function.on the one hand here class lantern floated down river only is in the monolithic integrated circuit application most foundation. led demonst
7、rated by its fabric way nimble, the demonstration stable, the power loss low, the life long, the technology mature, the cost inexpensive and so on the characteristics in the station, the negotiable securities, the movement facility, in the transportation yang or male principle and each kind of room/
8、outside the demonstration situation information issued, public welfare propaganda, environment parameter real-time, moves the countdown and so on to obtain the widespread application significantly. after the practice proof, this system demonstration error is small, the performance is stable, the str
9、ucture is reasonable, expansion ability.key word:assembly language ;at89c51 monolithic integrated circuit;dynamic demonstration;led 目目 录录1 1 绪论1 12 整体设计描述. 321 需要体现功能与特点322 设计方案论证 33 电路的硬件设计 5 531 电源设计 532 单片机系统及外围电路 6321 选用单片机.6322 at89c51 芯片介绍6323 单片机系统外围电路94 程序设计.111141 用位控法的程序设计 1242 用循环位移法的程序设计
10、1443 用查表法的程序设计155 5 调整测试工作状态191951 程序分析 19511 程序一19512 程序二.20513 软件调试.226 工作性能分析2361 运行分析2362 性能分析24结论结论2525致谢致谢2626参考文献2727附录 128附录 229附录 3 30 附录 4 311 1 绪绪 论论 单片机一词最初源于“single chip microcomputer”,它忠实地反映了早期单片机的形态和本质。随后按照面向对象,突出控制功能,在片内集成了许多外围叫路及外设接口,突破了传统意义的计算机结构,发展成 microcontroller 的体系结构,目前国外已普遍称之
11、为微控制器 mcu(micro controller unit) 。鉴于它完全作为嵌入式微控制器。由于国内对单片机一词已约定成俗,因此仍沿用至今。但对“单片机”一词的理解,不应现限于“single chip microcomputer”,而应接轨于国际上对单片机的标准称呼“micro controller unit”(mcu) 。单片机的发展大致可分为四个阶段:第一阶段:单片机探索阶段。以 intel 公司 mcs-48,motorola 公司 6801为代表,属低档型 8 位机。第二阶段:单片机完善阶段。以 intel 公司 mcs-51,motorola 公司68hc05 为代表,属高档型
12、 8 位机。此阶段,8 位单片机体系进一步完善,特别是 mcs-51 系列单片机在世界和我国得到了广泛的应用,奠定了它在单片机领域的经典地位,形成了事实上的 8 位单片机标准结构。第三阶段:8 位机和 16 位机争艳阶段,也是单片机向微控制器发展的阶段。此阶段 intel 公司推出了 16 位的 mcs-96 系列单片机,世界其他芯片制造商也纷纷推出了性能优异的 16 位单片机,但由于价格不菲,其应用面受到一定的限制。相反 mcs-51 系列单片机,由于其性能价格比高,却得到了广泛的应用,并吸引了世界许多知名制造厂商,竟相使用以 80c51 为内核,扩展部分测控系统中使用的电路技术、接口技术、
13、a/d、d/a 和看门狗等功能部件,推出了许多与 80c51 兼容的 8 位单片机。强化了微控制器的特征,进一步巩固和发展了 8 位单片机的主流地位。第四阶段:微控制器全面发展阶段。随着单片机在各个领域全面深入地发展和应用,世界各大电气、半导体厂商普遍投入,出现了高速、大寻址范围、强运算能力的 8 位/16 位/32 位通用型单片机以及小型廉价的专用型单片机,百花齐放,全面发展,单片机已进入一个可广泛选择和全面发展的应用时代。mcs-51 系列单片机最初是 hmos 制造工艺,其芯片根据片内 rom 结构可分为 8031(片内无 rom) ,8051(片内有 4kb 掩膜 rom) ,8751
14、(片内有4kb eprom) ,统称为 51 系列单片机。其后又有增强型 52 系列,包括8032、8052、8752 等。hmos 工艺的缺点是功耗较大,随着 cmos 工艺的发展,inter 公司生产了chmos 工艺的 80c51 芯片,大大降低了功耗,并引入了低功耗管理模式,使低功耗具在可控性。chmos 工艺的 80c51 芯片,根据片内 rom 结构,也有80c31、80c51、87c51 三种类型,引脚与 51 系列兼容,指令相同。随后,intel 公司将 80c51 内核使用权以专利互换或出售形式转让给世界许多著名 ic 制造厂商,如philips、nec、amd、dallas
15、、siemens、fujutsu、oki、华邦、lg 等。在保持与 80c51 单片机兼容的基础上,这些公司融入了自身的优势,扩展了针对满足不同测控对象要求的外围电路。这样,80c51 单片机就被众多芯片制造厂商支持,成了事实上标准的 msu 芯片。 2 整体程序设计概述21 需要体现的功能与特点 利用 51 芯片和 led 灯设计一个流水灯电路,要求流水灯工作稳定,有较好的视觉效果。要求用不同方案,实现同样的功能,由浅入深,使这个系统既能实现单纯的流水灯效果,又能实现稍微复杂的流水灯效果。虽然变化是无穷的,但要利用这个方案让人们了解它所用到的各个部分工作原理。22 设计方案论证 由于用 51
16、 芯片控制一组 led 等,还有多余的 i/o 口空余,led 功率不大,不需要用驱动电路,只需要简单的排布就可以。按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。at89c51 单片机是美国 atmel 公司生产的低电压、高性能 cmos 8 位单片机,具有丰富的内部资源:4kb 闪存、128bram、32 根 i/o 口线、2 个 16 位定时/计数器、5 个向量两级中断结构、2个全双工的串行口,具有 4.255.50v 的电压工作范围和 024mhz 工作频率,使用 at89c51 单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光
17、二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。其具体硬件组成如图 2-1 所示。图图 2-12-1 硬件组成硬件组成3 3 电路的硬件设计3.1 电源设计稳压电源的功能是把来自电网的 220v 交流电压转变为所需的、稳定的直流电压。它由电源变压器、整流电路、滤波电路和稳压电路四个部分组成,如图 3-1 所示:u2-+u4u3u1图 3-2 电源电路图u1 u2 u3 u4 u5 o t o t o t o t o t变压器整流电路滤波电路稳 压电路图 3-1 稳压电源的组成框图及工作过程t220v7.5vc3104c2104vin1gnd2v
18、out3ic1 7805r1100vcc1234d1bridgec11000ussw d2led根据要求所确定的稳压电源的电路形式如图 3-2 所示。图中变压器 t 将来自电网的 220v 交流电压变换为整流电路所需要的 7.5v 交流电压,再经整流电桥(4 个二极管)d1 将交流电压变换成脉动的直流电压,随后电解电容器 c1将脉动直流电压中的大部分纹波加以滤除,以得到较为平滑的直流电压。为了得到改善的纹波电压,再将直流电压通过电容 c2,然后经集成稳压器 ic1 稳压,在输出端得到稳定的 5v 直流电压。这时,在输出端接上电容 c3,用以滤除输出端的高频信号,改善负载的瞬态响应,最后即可得到
19、所需的、稳定的直流电压。电路最后接入的发光二极管用做电源指示灯。3.2 单片机系统及外围电路3.2.13.2.1 单片机的选择单片机的选择单片机采用 89c51 或其兼容系列的芯片进行控制,它负责控制整个电路以及相应的程序的运行、以及给屏体电路部分发送命令。这里我们选择了内含 4k字节 flash 的 at89c51,因为我们只需要显示特定的图形和文字,无需庞大的字库,因此 4k flash 已经可以满足字库储存的需求,不需要扩展外存储器。3.2.2at89c513.2.2at89c51 芯片介绍芯片介绍at89c51 是美国 atmel 公司生产的 8 位 flash rom 单片机。其最突
20、出的优点是片内 rom 为 flash rom,可擦写 1000 次以上,应用并不复杂的通用rom 写入器就能方便的擦写,读取也很方便,价格低廉,具有在片程序 rom二级保密系统。因此可灵活应用于各种控制领域。at89c51 包含以下一些功能部件:(1)一个 8 位 cpu ;(2)一个片内振荡器和时钟电路;(3)4kb flash rom ;(4)128b 内 ram;(5)可寻址 64kb 的外 rom 和外 ram 控制电路;(6)两个 16 位定时/计数器;(7)21 个特殊功能寄存器 ;(8)4 个 8 位并行 i/o 口;(9)一个可编程全双工串行口 ;(10)5 个中断源,可设置
21、成 2 个优先级。at89c51 单片机一般采用双列直插 dip 封装,共 40 个引脚,图 3-3 为其引脚排列图。40 个引脚大致可分为 4 类:电源、时钟、控制各 i/o 引脚。 一 电源vcc芯片电源,接+5v;gnd接地端。二 时钟xtal1、xtal2晶体振荡电路反相输入端和输出端。三 控制线控制线共有 4 根,其中 3 根是复用线。所谓复用线是指具有两种功能,正常使用时是一种功能,在某种条件下是另一种功能。1ale/地址锁存允许/片内 eprom 编程脉冲。prog(1)ale 功能:用来锁存 p0 口送出的低八位地址。at89c51 在并行扩展外存储器时,p0 口用于分时传送低
22、 8 位地址和数据信号,且均为二进制数。当 ale 信号有效时,p0 口传送的是低 8 位地址信号;ale 信号无效时,p0 口传送的是低 8 位地址信号。在 ale 信号的下降沿,锁定 p0 口传送的内容,即低 8 位地址信号。需要指出的是,当 cpu 不执行访问外 ram 指令,ale 以时钟振荡频率1/6 的固定频率输出,因此 ale 信号也可作为外部芯片 clk 时钟或其他需要。但是,当 cpu 执行 movx 指令时,ale 将跳过一个 ale 脉冲。(2)功能:片内 eprom 的芯片,在 eprom 编程期间,此引脚输prog图 3-3 at89c51 引脚图p1.01p1.12
23、p1.23p1.34p1.45p1.56p1.67p1.78rst /vpd9p3.0/rxd10p3.1/txd11p3.2/int012p3.3/int113p3.4/t014p3.5/t115p3.6/wr16p3.7/rd17xtal 218xtal 119gnd20p2.021p2.122p2.223p2.324p2.425p2.526p2.627p2.728psen29ale /prog30ea/vpp31p0.732p0.633p0.534p0.435p0.336p0.237p0.138p0.039vcc40u1at89c51入编程脉冲。2 外 rom 读选通信号。psen89c
24、51 读外 rom 时,每个机器周期内两次有效输出。可作为psenpsen外 rom 芯片输出允许的选通信号。在读内 rom 或读外 ram 时,oe无效。psen3rst/vpd复位/备用电源。(1)正常工作时,rst 端为复位信号输入端,只要在该引脚上连续保持两个机器周期以上高电平,at89c51 芯片即实现复位操作,复位后一切从头开始,cpu 从 0000h 开始执行指令。(2)vpd功能:在 vcc掉电情况下,该引脚可接上备用电源,由 vpd向片内 ram 供电,以保持片内 ram 中的数据不丢失。4/vpp内外 rom 选择/片内 eprom 编程电源。ea(1)功能:正常工作时,为
25、内外 rom 选择端。at89c51 单片机eaearom 寻址范围为 64kb,其中 4kb 在片内,60kb 在片外。当保持高电平ea时,先访问内 rom,但当 pc 值超过 4kb 时,将自动转向执行外 rom 中的程序。当保持低电平时,则只访问外 rom,不管芯片内有否内 rom。ea(2)vpp功能:片内有 eprom 的芯片,在 eprom 编程期间,此引脚用于施加编程电源。四 i/o 引脚at89c51 有 p0、p1、p2、p3 4 个 8 位并行 i/o 端口,共 32 个引脚。p0 口是一组 8 位漏级开路型双向 i/o 口,也即地址/数据总线复用口。作为输出口用时,每位能
26、以吸收电流的方式驱动 8 个 ttl 逻辑门电路,对端口写 1时,又可作高阻抗输入端用。在访问外部程序和数据存储器时,它是分时多路转换的地址(低 8 位)/数据总线,在访问期间激活了内部的上拉电阻。在 flash编程时,p0 端口接收指令字节;而在验证程序时,则输出指令字节。验证时,要求外接上拉电阻。p1 口是带内部上拉电阻的双向i/o口,向p1口写入1时p1口被内部上拉为高电平,可用作输入口。当作为输入脚时被外部信号拉低的p1口会因为内部上拉而输出一个电流。flash编程和程序校验期间,p1接收低8位地址。p2 口是带内部上拉电阻的双向i/o口,向p2口写入1时p2口被内部上拉为高电平可用作
27、输入口,当作为输入脚时被外部拉低的p2口会因为内部上拉而输出表 3-1 p3 各端口第二功能电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行movx dptr指令)时,p2口送出高8位地址数据,当使用8位寻址方式(movxri)访问外部数据存储器时,p2口发送p2特殊功能寄存器的内容,在整个访问期间不改变。flash编程和程序校验时,p2也接收高位地址和一些控制信号。p3 口是带内部上拉电阻的双向i/o口,向p3口写入1时p3口被内部上拉为高电平可用作输入口,当作为输入脚时被外部拉低的p3口会因为内部上拉而输出电流。p3口除了作为一般的i/o口线外,更重要的是它的第二功能,如表
28、3-1所示:端口引脚第二功能p3.0rxd串行口输入端p3.1txd串行口输出端p3.20int外部中断0请求输入端p3.31int外部中断1请求输入端p3.4t0定时/计数器0外部信号输入端p3.5t1定时/计数器1外部信号输入端p3.6wr外ram写选通信号输出端p3.7rd外ram读选通信号输出端3.2.33.2.3 单片机系统外围电路单片机系统外围电路单片机系统外围电路形式如图 3-4 所示。单片机振荡器反相放大器的输入端(xtal1)和输出端(xtal2)之间接上 12mhz 或更高频率的晶振,以获得较高的刷新频率,使显示更稳定。电容 c4、c5 是晶振的负载电容,主要起频率微调和稳
29、定的作用。单片机的串行口工作在方式 0 下,作为同步移位寄存器使用,端口 rxd(p3.0)作为数据移位的输入/输出端,而由 txd(p3.1)端输出移位时钟脉冲。移位数据的发送和接收均以 8 位为一帧,不设起始位和停止位,无论输入/输出,均低位在前高位在后。89c51 的通用 i/o 口 p1 作为显示数据和二进制行号的公用输出口。两种数据的输出在时间上是错开的。p1 口的低 4 位与行驱动器相连,送出二进制的行选信号;p1.5p1.7 口则用来发送控制信号。p0 和 p2 口空着,在有必要的时候可以扩展系统的 rom 和 ram。gndc433pfc533pfvccy112mhzr28.2
30、 kgndvccp1.01p1.12p1.23p1.34p1.45p1.56p1.67p1.78rst/vpd9p3.0/rxd10p3.1/txd11p3.2/int012p3.3/int113p3.4/t014p3.5/t115p3.6/wr16p3.7/rd17xtal218xtal119gnd20p2.021p2.122p2.223p2.324p2.425p2.526p2.627p2.728psen29ale/prog30ea/vpp31p0.732p0.633p0.534p0.435p0.336p0.237p0.138p0.039vcc40u1at89c51+c610uabcdg1g
31、ndtxdsckrxdsisclrrck图 3-4 单片机系统外围电路图4 程序设计 从原理图 4-1 中可以看出,如果要让接在 p1.0 口的 led1 亮起来,那么只要把 p1.0 口的电平变为低电平就可以了;相反, 如果要接在 p1.0 口的 led1熄灭,就要把 p1.0 口的电平变为高电平;同理,接在 p1.1p1.7 口的其他 7个 led 的点亮和熄灭的方法同 led1。因此,要实现流水灯功能,我们只要将发光二极管 led1led8 依次点亮、熄灭,8 只 led 灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制
32、二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。 我们知道,目前所有的计算机只能执行二进制代码,即高低电平的信号“语言”,不可能识别其他我们熟知的语言,计算机的 cpu 在设计时就将其所有“功能”都定义有特定的一串二进制代码,这些代码的集合就是该计算机的“语言”,这种语言在早期计算机开发中无可替代的被人们使用。由于一串串的“01”代码不但难记,也极易出错。后来人们将这种一串串特定的代码一一的用人们可以理解并好记忆的字母助记符给予命名,这样,在开发计算机程序时先用助记符将其逻辑功能写出来,当逻辑无问题时,再将助记符逐句“翻译”成对应的一串串二进制代码交计算机运行。这种用助记符临
33、时替代二进制代码的助记符集合,就是我们现在的“汇编语言”。图 4-1 原理图 现在我们虽仍然使用汇编语言,但最后已经不用人工去“翻译”成二进制代码啦,而是交给已有翻译功能的计算机去“翻译”。对于 8051 系列单片机来说,其汇编助记符只有 111 条,这 111 条助记符是被汇编器(“翻译软件”)认可的,你不能自创助记符来编写单片机程序,若你书写的 8051 单片机程序中有不符合这 111 条语句,在最后汇编时就会报错。再着,汇编语言也象我们使用的语言一样有其必须的语法,不能违背。单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告
34、诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简单的流水灯控制功能即实现 8 个 led 灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法(各流程图见附录) 。4.1 用位控法的程序设计这是一种最易理解的方法,采用顺序程序结构,用位指令控制 p1 口的每一个位输出高低电平,从而来控制相应 led 灯的亮灭。程序如下:org 0000h ;单片机上电后从 0000h 地址执行ajmp start ;跳转到主程序存放地址处org 0030h ;设置主程序开始地址s
35、tart:mov sp,#60h ;设置堆栈起始地址为 60hclr p1.0 ;p1.0 输出低电平,使 led1 点亮acall delay ;调用延时子程序setb p1.0 ;p1.0 输出高电平,使 led1 熄灭clr p1.1 ;p1.1 输出低电平,使 led2 点亮 acall delay ;调用延时子程序setb p1.1 ;p1.1 输出高电平,使 led2 熄灭clr p1.2 ;p1.2 输出低电平,使 led3 点亮acall delay ;调用延时子程序setb p1.2 ;p1.2 输出高电平,使 led3 熄灭clr p1.3 ;p1.3 输出低电平,使 le
36、d4 点亮acall delay ;调用延时子程序setb p1.3 ;p1.3 输出高电平,使 led4 熄灭clr p1.4 ;p1.4 输出低电平,使 led5 点亮acall delay ;调用延时子程序setb p1.4 ;p1.4 输出高电平,使 led5 熄灭clr p1.5 ;p1.5 输出低电平,使 led6 点亮acall delay ;调用延时子程序setb p1.5 ;p1.5 输出高电平,使 led6 熄灭clr p1.6 ;p1.6 输出低电平,使 led7 点亮acall delay ;调用延时子程序setb p1.6 ;p1.6 输出高电平,使 led7 熄灭c
37、lr p1.7 ;p1.7 输出低电平,使 led8 点亮acall delay ;调用延时子程序setb p1.7 ;p1.7 输出高电平,使 led8 熄灭acall delay ;调用延时子程序 ajmp start ;8 个 led 流了一遍后返回到标号 start 处再循环delay: ;延时子程序mov r0,#255;延时一段时间d1: mov r1,#255djnz r1,$djnz r0,d1ret ;子程序返回end ;程序结束4.2 用循环移位法的设计在上个程序中我们是逐个控制 p1 端口的每个位来实现的,因此程序显得有点复杂,下面我们利用循环移位指令,采用循环程序结构进
38、行编程。我们在程序一开始就给 p1 口送一个数,这个数本身就让 p1.0 先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至 p1 口,这样就实现“流水”效果啦。由于 8051 系列单片机的指令中只有对累加器 acc 中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到 acc 中,让其移动,然后将 acc 移动后的数据再转送到 p1 口,这样同样可以实现“流水”效果。具体编程如下所示,程序结构确实简单了很多。org 0000h ;单片机上电后从 0000h 地址执行ajmp start ;跳转到主程序存放地址处org 0030h ;设置主程序开始地址star
39、t:mov sp,#60h ;设置堆栈起始地址为 60h mov a,#0feh ;acc 中先装入 led1 亮的数据(二进制的11111110)mov p1,a ;将 acc 的数据送 p1 口mov r0,#7 ;将数据再移动 7 次就完成一个 8 位流水过程loop: rl a ;将 acc 中的数据左移一位mov p1,a ;把 acc 移动过的数据送 p1 口显示acall delay ;调用延时子程序djnz r0,loop ;没有移动够 7 次继续移动 ajmp start ;移动完 7 次后跳到开始重来,以达到循环流动效果delay: ;延时子程序mov r0,#255 ;延
40、时一段时间d1: mov r1,#255djnz r1,$djnz r0,d1ret ;子程序返回end ;程序结束4.3 用查表法的设计上面的两个程序都是比较简单的流水灯程序,“流水”花样只能实现单一的“从左到右”流方式。运用查表法所编写的流水灯程序,能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水灯效果。我们首先把要显示流水花样的数据建在一个以 tab 为标号的数据表中,然后通过查表指令“movca,a+dptr”把数据取到累加器 a 中,然后再送到 p1 口进行显示。具体源程序如下,tab 标号处的数据表可以根据
41、实现效果的要求任意修改。org 0000h ;单片机上电后从 0000h 地址执行ajmp start ;跳转到主程序存放地址处org 0030h ;设置主程序开始地址start:mov sp,#60h ;设置堆栈起始地址为 60hmov dptr,# tab ;流水花样表首地址送 dptrloop: clr a ;累加器清零movc a,a+dptr ;取数据表中的值cjne a,#0ffh,show ;检查流水结束标志ajmp start ;所有花样流完,则从头开始重复流show: mov p1,a ;将数据送到 p1 口acall delay ;调用延时子程序inc dptr ;取数据表
42、指针指向下一数据ajmp loop ;继续查表取数据delay: ;延时子程序mov r0,#255 ;延时一段时间d1: mov r1,#255djnz r1,$djnz r0,d1ret ;子程序返回tab: ;下面是流水花样数据表,用户可据要求任意编写db 11111110b ;二进制表示的流水花样数据,从低到高左移db 11111101bdb 11111011bdb 11110111bdb 11101111bdb 11011111bdb 10111111bdb 01111111bdb 01111111b ;二进制表示的流水花样数据,从高到低右移db 10111111bdb 110111
43、11bdb 11101111bdb 11110111bdb 11111011bdb 11111101bdb 11111110bdb 0feh,0fdh,0fbh,0f7h ;十六进制表示的流水花样数据db 0efh,0dfh,0bfh,7fhdb 7fh,0bfh,0dfh,0efhdb 0f7h,0fbh,0fdh,0fehdb 0ffh ;流水花样结束标志 0ffhend ;程序结束当上述程序之一编写好以后,我们需要使用编译软件对其编译,得到单片机所能识别的二进制代码,然后再用编程器将二进制代码烧写到 at89c51 单片机中,最后连接好电路通电,我们就看到 led1led8 的“流水”效
44、果了。390+5v8.2krstvcc+5v+5v+5v40 31 89c511 8 9 181920ea10f6mhz20p流水灯电路原理图如图 4-2 所示。用 p1 口的 8 位分别驱动一个发光二极管,从图上可见,某位口上输出 0(低电平)对应的发光二极管就亮,反之某位口上输出 1(高电平)对应的发光二极管就熄灭。我们可以根据自己的思路设计灯亮灭次序从而形成不同的样式的流水灯。图 4-2 流水灯电路原理图5 调整测试工作状态5. .1 程序分析5.1.15.1.1 程序一程序一 下面的流水灯程序,就是用汇编助记符编写的。一般我们叫他为汇编语言程序。这里的程序用一步步逐个控制单片机各管脚来
45、实现流水灯功能。 流水灯程序如下:loop: clr p1.0 ;清除 p1.0,使其=0,led1 点亮 acall delay ;调用 0.1 秒延时子程序,等待 0.1 秒 setb p1.0 ;置高 p1.0,使其=1,led1 熄灭 clr p1.1 ;点亮 led2 acall delay setb p1.1 ;熄灭 led2 clr p1.2 ;点亮 led3 acall delay setb p1.2 ;熄灭 led3 clr p1.3 ;点亮 led4 acall delay setb p1.3 ;熄灭 led4 clr p1.4 ;点亮 led5 acall delay s
46、etb p1.4 ;熄灭 led5 clr p1.5 ;点亮 led6 acall delay setb p1.5 ;熄灭 led6 clr p1.6 ;点亮 led7 acall delay setb p1.6 ;熄灭 led7 clr p1.7 ;点亮 led8 acall delay setb p1.7 ;熄灭 led8 acall delay ljmp loop ;8 个 led 流了一遍后返回到标号 loop 处再循环;延时子程序delay: mov r0,#255 ; dlo1: mov r1,#195 djnz r1,$ djnz r0,dlo1 ret end 程序的第 1 到
47、 26 行流水灯的主程序,为使流水效果不停,主程序做成了一个闭合循环。delay 是延时子程序,改变赋给 r0 和 r1 的值,将改变延时时间,从而改变流水灯的流动速度。最后的 end 是告诉汇编器:程序到此结束。 在这个流水灯程序中,实现流水的方法是比较笨的。既然单片机有处理数据的能力,先给单片机一些初始数据,让单片机来依给定的数据参数去自行处理流水过程。5.1.25.1.2 程序二程序二 ;左移 star: mov r3,#8 ;设置流水位数 mov p1,#11111110b ;从 p1.0 开始 loop: acall d01s mov a,p1 ;读取 p1 当前数据到 acc rl
48、 a ;左移一位 mov p1,a ;将左移的数据再送到 p1 djnz r3,loop ;没有完成 8 位继续 ;* mov p1,#0ffh ;熄灭所有灯 ;* ;右移 mov r3,#8 ;设置流水位数 mov p1,#01111111b ;从 p1.7 开始 loop1: acall d01s mov a,p1 ;读取 p1 当前数据到 acc rr a ;右移一位 mov p1,a ;将右移的数据再送到 p1 djnz r3,loop1 ;没有完成 8 位继续 ljmp star ;完成后返回到开始再来 ;延时子程序 d01s: mov r0,#255 d01l1: mov r1,#
49、198 djnz r1,$ djnz r0,d01l1 ret end 程序中,第一句先在 r3 中设定位流水为 8 次;第二行,将 p1 高端的 7 位设成高电平(led 不亮) ,最后 1 位设成低电平 0(p1.0 驱动的 led1 亮) 。点亮 led1 后延时一会。之后,将当前 p1 的状态(也就是数据)读到 a 累加器中进行左移一位,再将移动后的数据从 a 累加器传送到 p1,从而实现 led 的流水效果。 第 7 行是当移动一位后,检查够不够 8 次,若不够则返回到 loop 继续;若够 8 次,就继续执行下面一句指令。 程序中的右移与左移结构完全一样,只是 p1 的初始数据改为
50、高 1 位=0,低7 位=1;从 p1 读到 a 累加器的数据使用 rr a 的右移指令。 第 16 行指令是为循环左、右移而设。也许你会问:为何不直接将 p1 中的数据左移或右移呢?这是因为 p1 没有左右移的功能,在 111 条指令中没有 rl p1 和 rr p1 的指令,要想实现左右移,就只有将需移动的数据中转到累加器 a 中处理,处理后的数据再返回使用。在 51 单片机中,累加器 a 的处理能力最强,所以关于累加器的操作指令也最多。今后我们在开发单片机过程中经常会遇到这样类似的问题,没什么奇怪的,单片机就这样。5.1.35.1.3 软件调试软件调试软件调试采用脱机调试的方法,即完全用
51、仿真器软件在 pc 机上对目标电路原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘和鼠标设定,运行状态、各寄存器状态、端口状态等都可以在 crt 指定的窗口区域显示出来,以确定程序运行有无错误。调试可按下列步骤进行:一 目标程序纠错该阶段工作通常在目标程序编辑时就完成。一般来说,仿真器软件能给用户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢出等错误。二 子程序功能调试程序设计通常采用模块程序设计,调试时可对一个个子程序分别进行调试,设置好入口条件,然后采用单步运行或断点运行方式,检查系统 cpu 现场、ram 和 i/o 口状态,看程序执行结果是否符合设计
52、要求。三 整体程序综合调试即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能显示。在这阶段若发生故障,可以考虑各子程序在运行时是否破坏现场,数据缓冲单元是否发生冲突,标志位的建立和清除在设计上是否失误,堆栈是否溢出,输入输出状态是否正常等。用软件模拟器调试不需任何在线仿真器,也不需要用户样机,直接就可以在 pc 机上开发和调试。调试和修改完毕后,对于实时性要求不高的应用系统可以直接使用编程器将软件固化在目标系统 rom 中,然后独立投入运行。 6 6 工作性能分析工作性能分析6.1 运行分析在系统不能工作或运行结果和设计的不一致时,应区别不同情况做相应的软件硬件检查。如程序能运行
53、,但结果不一致,一般先查软件,通过模拟仿真的方法确定程序是否正确,然后再查硬件电路。如系统不能工作,则首先应检查最小系统是否正确。最小系统检查方法如下:单片机安装到插座上并锁紧(注意:缺口应和插座方向一致) ,打开电源开关,用万用表(数字表)测有关点的电压。40、31 脚 5v,9 脚 0v,18、19 脚在 1.82.8v 之间,各点电压正确,说明最小硬件电路焊接无误,如果不是的,检查相应的电路。流水灯电路检查。取下单片机,开通电源。用一根导线,将导线的一端接地,另一端分别接到集成块的 18 脚,相应引脚的小灯应亮,否则,检查对应的电路。软件和硬件的检查都可以通过互换的方法检查,方法是将自己
54、的单片机和运行正常的单片机互换,就可确定是硬件故障还是程序错误。电路中 t1、c7、c8 组成单片机的时钟;l1l8 和 r1、r2 以及 r6r11连接到单片机 p1 口,当 p1 口某脚变低时,相应的 led 发光。只要我们让程序按要求依次从 p1.0p1.7 逐个变低等待少许时刻再变高,这样就实现了流水灯效果。6.2 性能分析 通过调试组装后一般即可正常工作。led 灯可以按预计的方式点亮,它是用延时增加视觉效果。但视觉上和扫描上大致相同,这里是要足够长时间延时,扫描点亮是需要足够高的扫描频率。从理论上说,这种方式可以满足如此简单的变换显示,但这样长时间的延时,会不利于单片机附加其他功能,比如对 a/d 转换的控制时的高频率数据采集。但对于不做更高要求的流水灯,这样的设计可以满足要求。图 6-1 流水灯程序电路结结 论论经过多次的修改个整理我完成了这个篇流水灯电路设计,因为水平有限,此电路中也存在一定的问题,譬如说电路过于简单不能体现单片机的功能,但多余的 i/o 口适合加上其他的功能。这需要对单片机进行更深入的研究。如果有好的意见,希望老师给以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年应急救生系统项目资金需求报告代可行性研究报告
- 2023-2024学年广东省深圳市福田区八年级(下)期末英语试卷
- 2023-2024学年广东省深圳市福田区七年级(上)期中英语试卷
- 二年级数学计算题专项练习
- 健康吃药的安全
- 二年级语文下册教案
- 山东省青岛市李沧区片区2024-2025学年六年级上学期期中语文试卷
- 陕西省西安市蓝田县2024-2025学年上学期九年级物理期中质量检测试卷(含答案)
- 高中物理复习4-2第2讲抛体运动课件
- 医用按摩凝胶产业规划专项研究报告
- 2024年威士忌酒相关公司行业营销方案
- 《中外历史纲要(上)》期末专题复习提纲
- 2024年安徽省交通科学研究院招聘笔试参考题库附带答案详解
- 仪表安装施工方案
- 网络游戏危害课件
- 工业污水处理厂项目经济效益和社会效益分析报告
- 2024供电营业规则学习课件
- 铁路给水排水设计规范(TB 10010-2016)
- 中医养生的吃生姜养生法
- GINA2023-哮喘防治指南解读-课件
- 燃气管网运行工施工环境保护详细措施培训
评论
0/150
提交评论