闪烁LED小灯的设计
- 格式:doc
- 大小:42.00 KB
- 文档页数:11
百度文库 - 让每个人平等地提升自我
- 1 - 闪烁LED小灯的设计
一、设计要求
利用单片机作为控制核心,完成功能:本设计的闪烁小灯控制器,
具体要求如下:可使小灯轮流点亮,可使小灯轮流点亮、逐点点亮、间隔点亮。通过按键来进行切换。
基本部分
(1)主程序
(2) 中断程序
(3) 扫描子程序
(4)延时程序
二、实验方案与原理分析
实验总体电路构造方案比较简单,主要包括键盘控制电路(用脉冲按键开关对电路进行控制),程序控制电路和显示电路(单片机控制发光二极管的显示)。
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有~的电压工作范围和0~12MHz工作频率,使用ST89C52单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
方案一 百度文库 - 让每个人平等地提升自我
- 2 - 利用STC89C52A芯片做为CPU。
只有工作电压的STC89C52单片机,使得产品更小,更轻,功耗更低降低成本,提升性能,原有程序直接使用,硬件无需改动。如果相关新增功能没有用到,则不需看相应部分。用STC提供的工具将您原有的代码下载进STC相关的单片机即可,或用通用编程器编程。
另外TXD和RXD是用于异步串行通信的。其实STC系列单片机的ISP下载线就是一个max232芯片连接STC和计算机的串行通信口。计算机把程序从九针串口送到MAX232芯片,电平转换后送进单片机的串行口,也就是TXD和RXD。然后单片机的串行模块把数据送到程序区。
方案一系统方框图如下:
«Skip Record If...»
图 1 系统方框图
方案一的电路原理图:
«Skip Record If...»
图 2 方案一的电路原理图
百度文库 - 让每个人平等地提升自我
- 3 -
、方案二
利用MSP430芯片做为CPU。
MSP430各端口具有丰富的控制寄存器供用户实现相应的操作。其中P1,P2具有7个寄存器,P3~P6具有4个寄存器。通过设置寄存器我们可以实现:(1)每个I/O位独立编程;(2)任意组合输入,输出和中断;(3)P1,P2所有8个位全部可以用作外部中断处理;(4)可以使用所以指令对寄存器操作;(5)可以按字节输入、输出,也可按位进行操作;
方案二的框图如下:
«Skip Record If...»
图 3 方案二系统框图
、方案三
框图略。利用芯片PIC16FA做为主要芯片。此芯片具有高性能RISC CPU.仅有35条单字指令,除程序分支指令为两个周期外,其余均为单周期指令,有14个中断源,8个深度的硬件堆栈,也是支持直接,间接和相对寻址方式。 百度文库 - 让每个人平等地提升自我
- 4 -
三、方案对比
利用STC89C52A芯片做为CPU时在掉电时典型功耗为, 还可由外部中断唤醒,中断返回后,继续执行原程序。空闲模式,典型功耗为2mA。正常工作模式,典型功耗为4mA - 7mA。超强抗干扰STC89C51RC / RD+系列单片机。 I/O口输入/输出口经过特殊百度文库 - 让每个人平等地提升自我
- 5 - 处理,很多干扰是从I/O进去的,每个I/O均有对VCC/对GND二级管箝位保护。电源单片机内部的电源供电系统经过特殊处理,很多干扰是从电源进去的。时钟,单片机内部的时钟电路经过特殊处理,很多干扰是从时钟部分进去的。看门狗,单片机内部的看门狗电路经过特殊处理,打开后无法关闭,可放心省去外部看门狗。复位电路,单片机内部的复位电路经过特殊处理,很多干扰是从复位电路部分进去的,STC89C51RC/RD+系列单片机为高电平复位。推荐外置复位电路为MAX810/STC 。
而在用MSP430芯片做为CPU时,MSP430系统中没有专门的输入/输出指令,输入/输出操作通过传送指令来实现。当任一事件引起的中断进行处理时,~不会自动复位,必须由软件来判断是对哪一个事件,并将相应的标志复位并且外部中断事件的时间必须保持不低于倍的MCLK时间,以保证中断请求被接受,且使相应中断标志同时端口P3、P4、P5、P6没有中断能力,端口COM和S,他们实现必需要与液晶片的直接接口相连。对于方案三中,在当中断发生时,中断标志位置1,不管它的相应使能位或全体使能位的状态,用户软件在使能一个中断之前保证合适的中断标志位清零。且价格比ST89C52要贵得多。
尤其重要的是STC89C52A芯片便宜,且对于我们所需功能不是很多,且对于这个要求不是很高的LED灯点亮的情况下,都能满足条件。因此我是毫不犹豫的选择了STC89C52A芯片做为我的主芯片;
四、LED灯的介绍
该灯使用5V电源供电,220V交流电经C1降压电容降压后经全桥整流再通过C2滤波后经限流电阻R3给串联的38颗LED提供恒流电源.LED的额定电流为20mA,但是我们在制作节能灯的时候要考虑很多方面的因素对LED的影响,包括光衰和发热的问题,我们在百度文库 - 让每个人平等地提升自我
- 6 - 做这种灯的时候因为LED的安装密度比较高,热量不容易散出,LED的温度对光衰和寿命影响很大,如果散热不好很容易产生光衰,因为LED的特性是温度升高电流就会增大,所以一般在做大功率照明时散热的问题是最重要的,将影响到LED的稳定性,小功率一般都采取自散热方式,所以在电路设计时电流不宜过大.所以一定要有个保护电阻,电容C1还得有一个卸放电阻,限流电阻防止电压升高和温度升高LED的电流增大,C2是滤波电容,实际在LED电路中可以不用滤波电路,C2是用来防止开灯时的冲击电流对LED的损害,开灯的瞬间因为C1的存在会有一个很大的充电电流,该电流流过LED将会对LED产生损伤,有了C2的介入,开灯的充电电流完全被C2吸收起到了开灯防冲击保护.该电路是小功率灯杯最实用的电路,占用体积小可以方便的装在空间较小的灯杯里,现在被灯杯产品广泛的采用.优点:恒流源,电源功耗小,体积小,经济实用.但是在设计时降压电容要采用耐压在400V以上的涤纶电容或CBB电容,滤波电容要用耐压250v以上.此电路适合驱动20-40只20mA的LED.
五、程序说明
程序中我们是可以逐个控制P1端口的每个位来实现的,但是程序显得会有点复杂,而我利用循环移位指令及查表,采用循环程序结构进行编程。我们在程序一开始就给P1口送一个数,这个数本身就让先低,其他位为高,然后延时一段时间,再让这个数据向百度文库 - 让每个人平等地提升自我
- 7 - 高位移动,然后再输出至P1口,这样就实现“流水”效果啦。由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。具体编程如下所示,程序结构确实简单了很多。
运用查表法所编写的流水灯程序,能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水灯效果。我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVC A,@A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示
、初始化程序
通过扫描口,判断是否有按键按下,然后再20H内存单元的低3位的对应位置1标志,确定应执行的闪烁功能。当为1时,发光管轮流点亮;当为1时,发光管逐点点亮;当为1时,发光管间隔点亮。在主程序对20H的低3位进行位值判定后,转入相应的闪烁控制程序。上电初始化时,对20H的最低置1,系统进入轮流点亮方式.
如果按键较多, 常用软件方法去抖, 即检测出键闭合后执行一个延时程序, 产生5ms~10ms的延时, 让前沿抖动消失后再一次检测键的状态, 如果仍保持闭合状态电平,
则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。以下是本次设计的软件消抖子程序块:
DELAY:MOV R3,#20 ; 延时秒 ,改变R3的值可以改变延时间的长短
D1: MOV R4,#20
D2: MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET
;延时时间为513us
DL512:MOV R2,#0FFH
LOOP1:DJNZ R2,LOOP1
RET
;10ms延时子程序(调用20次延时子程序)