基于51单片机的流水灯设计报告内容摘要:

相邻的引脚上。 这样,不仅降低了穿过整个芯片的 电流,另外还在印制电路板上容易布置去耦电容,从而降低系统的噪声。 现在为了适应各种应用的需要,很多单片机的输出能力都有了很大提高, Motorola 公司的单片机 I/O 口的灌拉电流可达 8mA 以上,而 Microchip 公司的单片机可达 25mA。 其它公司: AMD, Fujitsu,NEC , Infineon, Hitachi, Ateml, Tosbiba 等基本上可达 8~ 20mA 的水平。 这些电流较大的驱动电路集成到芯片内部在工作时带来了各种噪声,为了减少这种影响,现在单片机采用多个小管子并联等效一个大管子的方法,并在每个小 管子的输出端串上不同等效阻值的电阻,以降低 di/dt,这也就是所谓 跳变沿软化技术 ,从而消除大电流瞬变时产生的噪声。 采用低频时钟 高频外时钟是噪声源之一,不仅能对单片机应用系统产生干扰,还会对外界电路产生干扰,令电磁兼容性不能满足要求。 对于要求可靠性较高的系统,低频外时钟有利于降低系统的噪声。 在一些单片机中采用内部琐相环技术,则在外部时钟较低时,也能产生较高的内部总线速度,从而保证了速度又降低了噪声。 Motorola 公司的 MC68HC08 系列及其 1 6/32 位单片机就采用了这种技术以提高可靠性。 结 束语 单片机在目前的发展形势下,表现出几大趋势: 可靠性及应用越来越水平高和互联网连接已是一种明显的走向。 所集成的部件越来越多; NS(美国国家半导体)公司的单片机已把语音、图象部件也集成到单片机中,也就是说,单片机的意义只是在于单片集成电路, 9 而不在于其功能了;如果从功能上讲它可以讲是万用机。 原因是其内部已集成上各种应用电路。 功耗越来越低和模拟电路结合越来越多。 随着半导体工艺技术的发展及系统设计水平的提高,单片机还会不断产生新的变化和进步,最终人们可能发现:单片机与微机系统之间的距离越来越 小,甚至难以辨认。 4 基于单片机的 流水灯 设计功能描述及设计背景 功能描述 要实现流水灯功能,我们只要将发光二极管 LED1~ LED8 依次点亮、熄灭, 8只 LED 灯便会一亮一暗的做流水灯了。 在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。 要实现的目标: 流水灯实现依次明灭 要求实现指令控制的快速性 小灯明灭具有一段时间延迟 设计背景 随着现代社会的发展,人们越来越追求审美和新颖,而流水灯就是其中一种,以前简单的照明工具变得越来越多样化,流水灯的千姿百态恰能给人一种视觉冲击,现在不管大街小巷我们都可以随处可见这种变幻万千的流水灯,而这种流水灯我们可以产用电子电路去设计,我们主要可以用装套控制器和状态译码器来实现灯光的流水效果,但是现在我们可以用单片机 AT89C51 来实现,因为其相对于电子电路有明显的优越性,控制硬件电路比较简单,软件方面程序也不复杂,因此制作的远离简单,但功能作用并不低于电子电路设计的,由于它的小巧方便、通俗易懂,所以我们往往采用单片机来做流水 流水灯。 10 5 基于单片机的 流水 灯设计系统总体( 方案)设计 设计思路 根据设计功能描述,如果要让接在 口的 LED1 亮起来,那么只要把 口的电平变为低电平就可以了;相反,如果要接在 口的 LED1 熄灭,就要把 口的电平变为高电平;同理,接在 ~ 口的其他 7 个 LED 的点亮和熄灭的方法同 LED1。 因此,要实现流水灯功能,我们只要将发光二极管 LED1~LED8 依次点亮、熄灭, 8 只 LED 灯便会一亮一暗的做流水灯了。 在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时 间,否则我们就看不到“流水”效果了。 程序总体框图 WEI 图 51 设计总体框图 6 基于单片机的 流水灯 设计基本原理分析及设计说明 系统硬件电路图的绘制 打开 Proteus 软件的 ISIS 界面,点击左方的“ P”按钮,在关键字框内输入要查找的元件名,选择需要的型号,然后在右下角点击确定即可添加元件,如下所示: STC89C51 晶振电路 复位电路 流水流水灯电路 11 图 61 查找并添加元件 图 62 添加元件 12 图 63 系统硬件电路原理图(带电源) 上图中的电路图是自带电源的,实际应用中我们可以用 USB 接口直接供电,这样电路 原理图就会比较简单,如下图所示: 图 64 系统硬件电路原理图 硬件详细设计: 复位电路部分 如右图所示,复位电路由两个个电容和一个按钮组成,并且连接到单片机的 13 第 9 脚,当要对晶片重置时,只要按此开关就能完成 LED 和开关的重置。 图 65 复位电路 晶振部分 晶振电路由两个 30PF 的普通电容和一个晶振组成,晶振两端分别连接第 119 脚,它的作用是产生时钟信号 图 66 晶振电路 LED 显示部分 如下图所示, LED 显示部分由 8 个 LED 分别串联之后接到单片机的 1~ 9 脚,限流电阻为 1K 欧姆, 经过 LED 的电流大概为 10mA。 14 图 67 LED 显示电路 程序流程图: 图 68 程序流程图 开始 按下电源开关 灯光闪烁,且顺序不同 结束 断开电源 15 7 软硬件调试、运行结果及分析 软件编程 单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。 软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。 下面我们以最简单的流水灯控制功能即 实现 8 个 LED 灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。 位控法 这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制 P1 口的每一个位输出高低电平,从而来控制相应 LED 灯的亮灭。 程序如下: ORG 0000H ;单片机上电后从 0000H 地址执行 AJMP START ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开始地址 START:MOV SP, 60H ;设置堆栈起始地址为 60H CLR ; 输出低电平,使 LED1 点亮 ACALL DELAY ;调用延时子程序 SETB ; 输出高电平,使 LED1 熄灭 CLR ; 输出低电平,使 LED2 点亮 ACALL DELAY ;调用延时子程序 SETB ; 输出高电平,使 LED2 熄灭 CLR ; 输出低电平,使 LED3 点亮 ACALL DELAY ;调用延时子程序 SETB ; 输出高电平,使 LED3 熄灭 CLR ; 输出低电平,使 LED4 点亮 ACALL DELAY ;调用延时子程序 SETB ; 输出高电平,使 LED4 熄灭 CLR ; 输出低电平,使 LED5 点亮 ACALL DELAY ;调用延时子程序 SETB ; 输出高电平,使 LED5 熄灭 CLR ; 输出低电平,使 LED6 点亮 ACALL DELAY ;调用延时子程序 SETB ; 输出高电平,使 LED6 熄灭 CLR ; 输出低电平,使 LED7 点亮 16 ACALL DELAY ;调用延时子程序 SETB ; 输出高电平,使 LED7 熄灭 CLR ; 输出低电平,使 LED8 点亮 ACALL DELAY ;调用延时子程序 SETB ; 输出高电平,使 LED8 熄灭 ACALL DELAY ;调用延时子程序 AJMP START ; 8 个 LED 流了一遍后返回到标号 START 处再循环 DELAY: ;延时子程序 MOV R0, 255 ;延时一段时间 D1:MOV R1, 255 DJNZ R1, $ DJNZ R0, D1 RET ;子程序返回END ;程序结束 循环移位法 在上个程序中我们是逐个控制 P1 端口的每个位 来实现的,因此程序显得有点复杂,下面我们利用循环移位指令,采用循环程序结构进行编程。 我们在程序一开始就给 P1 口送一个数,这个数本身就让 先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至 P1 口,这样就实现“流水”效果啦。 由于 8051 系列单片机的指令中只有对累加器 ACC 中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到 ACC 中,让其移动,然后将ACC 移动后的数据再转送到 P1 口,这样同样可以实现“流水”效果。 具体编程如下所示,程序结构确实简单了很多。 ORG 0000H ;单片机上电后从 0000H 地址执行 AJMP START ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开始地址 START:MOV SP, 60H ;设置堆栈起始地址为 60H MOV A, 0FEH ; ACC 中先装入 LED1 亮的数据(二进制的11111110) MOV P1, A ;将 ACC 的数据送 P1 口 MOV R0, 7 ;将数据再移动 7 次就完成一个 8 位流水过程 LOOP: RL A ;将 ACC 中的数据左移一位 17 MOV P1, A。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。