开关/键盘控制流水灯设计摘要目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的流水灯,主要介绍了利用89C51制作一简易流水灯的软硬件设计过程,可实现花样流水灯的效果,重点给出了其软件编程的思想方法。
关键词:89C51单片机,霓虹灯,开关/按键目录1绪论 (1)2硬件设计 (1)2.1芯片介绍 (1)2.2电源 (2)2.3时钟 (2)2.4控制线:控制线共有4根 (2)2.5 I/O线 (3)2.6晶振电路 (3)2.7 LED灯电路 (6)3程序设计 (7)3.1 程序流程图 (7)3.2程序设计 (7)总结 (13)参考文献 (14)1绪论目前,国内外对于单片机流水灯的研究,大多是利用89c51单片机,软硬件相结合,构造成最简单的流水灯.城市夜景中,变幻多姿的霓虹灯历来是一道亮丽的风景。
利用单片机的自动控制功能,设计出相应不同的电路,可以实现彩灯不同模式的流水效果。
本设计通过对器件选择和线路连接进行分析讨论,结合相应的软件设计,达到相应的设计要求. 2硬件设计2.1芯片介绍按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机.从图1中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
图1 A T89C51单片机硬件组成图2.2电源VCC - 芯片电源,接+5V。
VSS - 接地端。
用万用表测试单片机引脚电流一般为0v 或者5v,这是标准的TTL电平,但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这之是万用表反映没这么快而已,在某一个瞬间单片机引脚电流还是保持在0v或者5v的。
2.3时钟XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
2.4控制线:控制线共有4根ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址。
PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
PSEN:外ROM读选通信号。
RST/VPD:复位/备用电源。
RST(Reset)功能:复位信号输入端。
VPD功能:在Vcc掉电情况下,接备用电源。
EA/Vpp:内外ROM选择/片内EPROM编程电源。
EA功能:内外ROM选择端。
Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
2.5 I/O线80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总)。
2.6晶振电路对于一个高可靠性的系统设计,晶体的选择非常重要,尤其设计带有睡眠唤醒(往往用低电压以求低功耗)的系统。
这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。
这一现象在上电复位时并不特别明显,原因时上电时电路有足够的扰动,很容易建立振荡。
在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易。
在振荡回路中,晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。
晶体的选择至少必须考虑:谐振频点,负载电容,激励功率,温度特性,长期稳定性。
89C51单片机的时钟信号通常用凉种电路形式得到:内部振荡和外部振荡方式。
基于晶振的振荡器通常提供非常高的初始精度和较低的温度系数。
相对RC振荡器能快速启动,但提供的初始精度和温度系数会较差。
图2所示的电路能产生可靠的时钟信号,但其性能受环境条件和电路元件选择以及振荡器布局的影响。
使用时,元件必须根据特定的逻辑系列进行优化。
引脚XTAL1与XTAL2外接晶体振荡器或陶瓷谐振起,构成内部振荡方。
单片机内部有一个高增益的反相放大器,XTAL1为内部反相放大器的输入端,XTAL2为内部反相放大器的输出端,在其两端接上晶振后,就构成了自激振荡电路,并产生振荡脉冲,振荡电路输出的脉冲信号的频率就是晶振的固有频率。
内部振荡方式第外部电路如图2所示。
在实际应用中通常还需要在晶振的两端和地之间各并上一个小电容图1中,C1,C2起振荡频率、快速起振的作用。
起值在5-30PF。
晶振频率的典型值是12MHZ,内部振荡方式所得时钟信号比较稳定,实用电路中使用较多。
外部振荡方式是吧外部已有的时钟信号引入单片机内着适用单片机的时钟与外部信号同步。
89C51XTAL1XTAL2C1C2图2 内部震荡方式的外部电路图复位电路复位是单片机的初始化操作。
单片机启运运行时,都需要先复位,其作用是使CPU 和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。
因而,复位是一个很重要的操作方式。
但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。
设计上电延时复位电路需考虑电源电压VDD的上升时间和振荡器的起振时间。
电源电压VDD的上升时间,与供电电源、电源所负担的整个单片机应用系统内各部分电路有关;振荡器的起振时间与振荡器频率有关,例如振荡频率为10mhz时,、起振时间约为1ms,振荡频率为1mhz时,起振时间约为10ms。
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。
上电复位要求接通电源后,自动实现复位操作。
常用的上电复位电路如下图3中所示。
电容在上接高电平,电阻在下接地,中间为RST。
图中电容C1和电阻R1对电源十5V来说构成微分电路。
上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用。
图3 上电复位电路单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
常用的上电或开关复位电路如上图4所示。
上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。
图4上电或开关复位电路根据实际操作的经验,下面给出这两种复位电路的电容、电阻参考值。
上图3中:Cl=10-30uF,R1=1K。
上图4中:C:=1uF,Rl=lk,R2=10k。
实用上电或开关复位如图5所示,主要功能是要保证可靠复位,不要让干扰信号进入RET端,要能够和外围芯片的复位信号共用。
图5 上电或开关电路2.7 LED灯电路LED(Light-Emitting-Diode中文意思为发光二极管)是一种能够将电能转化为可见光的半导体,它改变了白炽灯钨丝发光与节能灯三基色粉发光的原理,而采用电场发光。
据分析,LED的特点非常明显,寿命长、光效高、无辐射与低功耗。
LED的光谱几乎全部集中于可见光频段,其发光效率可达80~90%。
将LED与普通白炽灯、螺旋节能灯及T5三基色荧光灯进行对比,结果显示:普通白炽灯的光效为12lm/W,寿命小于2000小时,螺旋节能灯的光效为60lm/W,寿命小于8000小时,T5荧光灯则为96lm /W,寿命大约为10000小时,而直径为5毫米的白光LED为20~28lm/W,寿命可大于100000小时。
有人还预测,未来的LED寿命上限将无穷大。
发光二极管串联一个510欧姆的电阻后接在5V的电压上。
LED灯电路接在单片机P1口上。
LED灯阳极接电源,阴极接单片机的I/O口,低电平驱动,只要在单片机相应引脚给出低电平,LED就会发亮。
3程序设计3.1 程序流程图3.2程序设计单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。
软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。
下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。
/////LYG 流水灯///////#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit KS=P3^0;sbit K0=P3^1;sbit K1=P3^2;sbit K2=P3^3;sbit K3=P3^4;sbit K4=P3^5;sbit ZP=P3^6;sbit JP=P3^7;bit a=0;int K;bit aa;uchar shijian=400;uchar code tab0[]={0xff,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};//1灯亮uchar code tab1[]={0x00,0x01,0x05,0x15,0x55,0xff,0x00};//1灯间隔uchar code tab2[]={0x00,0x03,0x06,0x0c,0x18,0x30,0x60,0xc0,0x00};//两个亮交叉uchar code tab3[]={0x00,0x03,0x0c,0x30,0xc0,0xff,0x00};//两个亮独立uchar code tab4[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00,0x80,0x40,0x20,0x10,0 x08,0x04,0x02,0x01,0x00}; //正反uchar code tab5[]={500,2000};void DelayMS(uint x){uchar t;while(x--){for(t=120;t>0;t--);}}key1(){if(KS==0){DelayMS(10);if(KS==0){aa=~aa;}return aa;};}///////////////////key2(){if(K0==0){DelayMS(10);if(K0==0){K=0;}return K;}if(K1==0){DelayMS(10);if(K1==0){K=1;}return K;}if(K2==0){DelayMS(10);if(K2==0){K=2;}return K;}if(K3==0){DelayMS(10);if(K3==0){K=3;}return K;}if(K4==0){DelayMS(10);if(K4==0){K=4;}return K;}}/////////////////////////////key3(){uchar SJ;if(ZP==0){DelayMS(10);if(ZP==0){SJ++;shijian=tab5[SJ];}return shijian,SJ;}////////////////////////////if(JP==0){DelayMS(10);if(JP==0){SJ--;shijian=tab5[SJ];}return shijian,SJ;}}///////////////////////////////void main(){key1();while(aa==1){ key1();if(aa==0)break;key2();key3();if(K==0){uchar I;for(i=0;i<12;i++){P1=~tab0[i];DelayMS(shijian);if(i==12)i=0;}}/////////////////////////////////if(K==1){uchar I;for(i=0;i<7;i++){P1=~tab1[i];DelayMS(400);}}///////////////////if(K==2){uchar I;for(i=0;i<9;i++){P1=~tab2[i];DelayMS(shijian);}}//////////////////////////////////if(K==3){uchar I;for(i=0;i<7;i++){P1=~tab3[i];DelayMS(shijian);}}//////////////////////if(K==4){uchar I;for(i=0;i<20;i++){P1=~tab4[i];DelayMS(shijian);}}}// else// {P1=0xff;}}总结通过在设计期间有许多心得与体会,首先,在专业知识方面,专业课知识学习都是孤立的,没有系统的联系起来,不知道该如何有机地利用。