流水灯.doc_第1页
流水灯.doc_第2页
流水灯.doc_第3页
流水灯.doc_第4页
流水灯.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

作品技术报告摘要众所周知,当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强 、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。 基于STC89C52单片机,本作品实现了对16个LED灯的控制。在完成流水灯基础部分的同时,我们设置两个按键来增添其功能,首先通过按键一的切换使流水灯可以变换多种花样,其次能过按键二的切换使流水灯可以按多种频率闪烁。本作品整体部局清晰美观,焊工精致。总之,该流水灯功能完备,创新性强。关键词:流水灯 花样 闪烁频率 定时器一、 作品介绍本作品电板上焊有16个发光二极管;单片机P1接口控制8个红色二极管 ; 单片机P2接口控制8个绿色二极管 ;为此,单片机工作时可以显示出花样繁多的红绿相间图案,极大的丰富了视觉效果。另外,该流水灯通过单片机定时器让16个LED灯以不同频率由慢到快闪烁。二、 工作原理 单片机控制二极管的亮与灭是能过切换电平的高与低来实现的,例如要控制接在P1.0口的LED灯熄灭,就需要通过程序把P1.0口的电平变为高电平,而如果要点亮此灯,就需要把高电平切换为低电平。52单片机含有四个8位并行I/O口,既可用作输入口,也可用作输出口。这样便可以利用一个循环结构实现对16个二极管电平高低的控制,从而控制其亮与灭,达到流水灯的效果。此外二极光正常发光的电流在3mA左右,当电源为5V 的VCC电压时,为了使二极管正常发光且保护其安全我们必须串联一个300欧左右的电阻。(这是我们与大赛所给电路图不同的地方,我们为每个LED串联了300欧的电阻,并且我们的LED正端是连接的5v电源,而非地线,这样的做的好处是让LED足够的亮且安全)优化设计:1 设计过程中,为了实现闪烁频率切换这一功能,事先我们小组准备了两种实现方案:方案1,用while语句来控制闪烁的时间;方案2,用定时器来控制时间。编程过程中我们发现若用方案1来控制一个发光二极管相当简单,不过对16个发光二极管的程序操作就显得相当繁琐,而方案2却恰恰弥补了方案1的缺陷。2 设计过程中,我们还曾尝试外设一功能按键从而来控制发光二极管的亮度,考虑到二极管功率过小,明暗变化不明显这一问题,为了遵循技术设计中“人机和谐”这一原则,最终还是做了适当的取舍。3 在线路布局及各电子器件方面。我们同样也做出了多种选择,争取达到给人耳目一新的效果。流水灯设计优化电路布局优化流水灯功能优化程序实现优化三、 作品功能、特色(一) 作品功能:频率切换按钮(每按一次,LED全闪一次,共可按3次,3个档)花样图案切换按钮(每按一次,变换一种花样,共可按8次,8个档)按键1:复位按钮功能:实现流水灯状态的初始化。当流水灯处于工作状态时,按下此键可将各发光二极管调为最初的状态。 按键2:花样图案切换按钮 功能:按此键一次,可更换一种流水灯花样。共有8种花样图案可供选择,而且8种花样可随机显示。按键3:频率切换按钮 功能:按此键一次,流水灯闪烁频率改变一次。所设计流水灯由慢到快有多种闪烁频率可供选择。接通电源,用户便可以根据视觉需要按下对应的功能键,或选择8种花样图案的循环切换,或选择发光二极管不同频率闪烁的切换。(二)作品特色 1、在要求的基础上增设了8个发光二极管,丰富了显示图案的种类,花样图案达到8种,且红绿颜色分明,使显示的图案更加清晰可见。 2、电子元件布局模块化,给人一种充实紧凑的感觉。线路排布部分采用锡焊,导线环绕精致,从而避免了导线连接杂乱的现象,同时也消除了虚焊的可能性,这对电路串接问题的排查很有帮助。3、对流水灯增添了众多图案切换、不同频率闪烁的功能,这类同于城市霓虹灯的闪烁,原理上更符合日常生活的需要,同时也显得新颖别致。四、 作品结构(一) 硬件部分花样切换按键频率切换按键数据 下载电源电路时钟电路流水灯显示效果控制器STC89C52(系统结构图)本作品使用STC 89C52单片机作为控制器,以控制外围电路来实现16个LED发光二极管的熄灭与点亮。同时结合时钟电路来实现对发光与熄灭时间的控制。电脑和单片机是通过max232芯片,利用rs232总线通信。(二) 软件部分l主程序流程: 是否显示当前花样开启中断开始是否花样模式以当前频率闪烁设定中断优先级软件实现如下:/*/* 函数名:main */* 功能: 主函数 */* 参数: 无 */* 返回值: 无 */* 说明: 主函数的主要功能为设定并开启一些中断;选择一个显示花*/* 样并反复执行。当花样函数因遇到切换标志而提前结束时,*/* 该循环将清除切换标志,并根据闪烁标志决定进入闪烁还 */* 是开始下个花样。 */*/void main() PX0 = 1;/外部中断高优先级PX1 = 1;PT1 = 0;/定时器中断低优先级EA = 1;/开总中断EX0 = 1;/开启外部中断EX1 = 1; modenow = RANDOM(nMode); /随机初始化当前花样while (1)changing = 0;/模式切换到此结束if (shining)/闪烁shin(MSEC(1000)/frenow);else/花样Modemodenow();其中Mode、nMode为全局变量,在源文件main.c中定义:/*全局变量*/extern const VFUN code Mode = inbcir, inbs, inabs, randheight, xrct, bcir, rccir, redgc, orect;/花样函数指针数组extern const unsigned int code nMode = sizeof(Mode) / sizeof(VFUN);/花样函数个数用于保存花样函数指针及其个数。VFUN是花样函数指针类型,在头文件mygra8.h中定义:typedef void (*VFUN)(void) reentrant;/花样函数指针(空参数空返回值可重入函数)shin为闪烁函数,用于以一定机器周期间隔闪烁所有16个发光二极管。shinging为闪烁标志,frenow是当前闪烁频率,在main.c中定义如下:unsigned int frenow = 5;/当前闪烁频率bit shining = 0;/闪烁标志其中frenow的取值为5、15、25.195。l 延时函数流程本程序采用51系列单片机的定时器1中断来进行精确延时,最小单位为1机器周期。当晶振频率为12MHz时,延时精度可达10-6s数量级。主体流程如下图。在软件设计中用延时函数delay实现,主要功能为开启定时器并在函数主体内不断循环等待,当检测到模式改变或达到指定延时量时关闭定时器1并退出。结束是否是否开始开启中断是否到达时间剩余时间是否小于65535设定初值是否改变模式否是软件实现如下:/*/* 函数名:delay */* 功能: 设定定时器1/等待诺干单位机器周期 */* 参数: MACP t 延时机器周期数(无符号长整形) */* 返回值: 无 */* 说明: 开启定时器1相关中断,设定定时器1为16位定时器,并循环 */* 等待计时器到达设定值或模式改变后退出。期间占用单片 */* 机100%CPU时间,并保持之前的状态直到延时结束恢复。 */*/void delay(MACP t)reentrant/延时t单位机器周期unsigned char flag = 0;EA = 1;/开总中断ET1 = 1;/开定时器1中断TMOD = 0x10;/设置T1为16位定时器ccount = 0;/重置总计时器1TH1 = 0;/重置初值TL1 = 0;TR1 = 1;/开启T1计时器while (!changing & ccount t)/等待模式切换或总计时器1到达指定值if (!flag & (t-ccount) 65535)/当剩余时间不足一次中断时设置非0初值flag = 1;/确保只设置一次初值TH1 = (65535 - t + ccount)/256;TL1 = (65535 - t + ccount)%256;TR1 = 0;/关闭T0计时器其中MACP在头文件mygra8.h中定义:typedef unsigned long MACP;/机器周期数(无符号长整形)全局变量changing、ccount在源文件main.c中定义:bit changing = 0;/模式切换标志MACP ccount = 0;/时钟计数器定时器1设定为16位定时器模式,中断函数如下void timer3(void) interrupt 3 /定时器1中断函数TH1 = 0;TL1 = 0;ccount += 65535;/把经过时间加入到总计数器中其中断优先级在主函数中已被设为0,可被外部中断0、外部中断1打断。l 中断函数两个按钮相应中断函数如下:/*/* 函数名:changemode0 */* 功能: 改变花样模式(外部中断0) */* 参数: 无 */* 返回值: 无 */* 说明: 当按键1被按下时启动,随机切换一个与之前不同的花样模 */* 式序号,去除闪烁标志并置位切换标志后退出。直接表现效*/* 果为立即停止当前动作并改变显示花样。 */*/void changemode0(void) interrupt 0/外部中断0MACP t = 0;/10ms 去抖while (t+ MSEC(10)/30)/查看汇编得每个循环约30机器周期if (!IE0) return;/如低电平在期间消失则退出中断while (IE0);/等待按键放开srand(ccount+rand();modenow = (modenow + RANDOM(nMode-1) + 1) % nMode;/随机切换一个不同的模式shining = 0;/停止闪烁changing = 1;/置位模式切换标志/*/* 函数名:shining2 */* 功能: 改变闪烁频率/开启闪烁(外部中断1) */* 参数: 无 */* 返回值: 无 */* 说明: 当按键2被按下时启动,改变闪烁频率并置位闪烁标志与切 */* 换标志后退出。直接表现效果为立即停止当前动作并以一*/* 个新频率闪烁所有发光二极管。 */*/void shining2(void) interrupt 2/外部中断1MACP t = 0;/10ms 去抖while (t+ MSEC(10)/30)/查看汇编得每个循环约30机器周期if (!IE0) return;/如低电平在期间消失则退出中断while (IE0);/等待按键放开frenow = (frenow + 10) % 200;/闪烁频率1525.195(Hz)shining = 1;/开始闪烁changing = 1;/置位模式切换标志宏RANDOM、MSEC在头文件mygra8.h中定义:/*随机整数发生器*/#define RAND_MAX 32767#define RANDOM(N) (int)(double)rand() / (double)RAND_MAX + 1) * (N)/产生一个0N-1的随机整数/*时钟周期-实际时间转换*/#define FRE12/晶振频率(兆赫兹)#define MAC_PERIOD(double)12 / (double)FRE * 1e-3)/机器周期(毫秒)#define MSEC(T) (MACP)(double)(T) / MAC_PERIOD) /将时间(毫秒)转化为机器周期数五、 对本次大赛的感想 在大二初学校组织了这样一次电子制作大赛我们觉得十分有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论