当前位置:文档之家› 基于单片机的彩灯设计

基于单片机的彩灯设计

题目基于单片机的彩灯设计任务与要求1.用三个按键开关K1,K2,K3组成一个独立式键盘,其中K1控制八个彩灯从左向右依次循环点亮,K2控制八个彩灯从右向左依次循环点亮,K3控制八个彩灯按一定的时间间隔闪烁点亮。

2.给出硬件实现电路及软件程序3.论文要求思路清晰,结构合理,语言流畅,书写格式符合要求。

开始日期 2011.12.19 完成日期 2011.12.302011年 12 月 18 日一:课程设计任务基于单片机设计一个彩灯二:课程设计的要求:利用89C51单片机设计彩灯,用三个按键开关K1,K2,K3组成一个独立式键盘,其中K1控制八个彩灯从左向右依次循环点亮,K2控制八个彩灯从右向左依次循环点亮,K3控制八个彩灯按一定的时间间隔闪烁点亮。

三:设计过程:1.设计原理:此次课程设计题目是基于单片机的彩灯设计,由课程设计的要求和任务,我采用的C语言编程,系统由AT89C51、LED 发光二极管、按键,可以实现彩灯的不同类型显示切换。

其硬件电路主要有主控制器,LED显示电路,复位电路,晶振电路。

系统程序的设计包括主程序的设计,中断服务程序等等。

此程序直接在Keil软件编译程序,利用Proteus进行仿真调试,方便修改程序。

2.芯片介绍:AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2.1主要特性:·与MCS-51 兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24Hz·三级程序存储器锁定·128*8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路2.2管脚说明图1 AT89C51引脚图AT89C51引脚路VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P2口:P2口为一个内部上拉电阻的8位双向I/O口,P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。

P3口也可作为AT89C51的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。

PSEN:外部程序存储器的选通信号。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

3.具体设计3.1整体设计实验总体电路构造方案比较简单,主要包括键盘控制电路(用脉冲按键开关对电路进行控制)和显示电路(单片机控制发光二极管的显示)。

图2 实验方案图按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。

AT89C52单片机是美国ATMEL 公司生产的低电压、高性能CMOS 8 位单片机,具有丰富的内部资源:4kB 闪存、128BRAM、32 根I/O 口线、2 个16 位定时/计数器、5 个向量两级中断结构、2 个全双工的串行口,具有4.25~5.50V 的电压工作范围和0~24MHz工作频率,使用AT89C52单片机时无须外扩存储器。

因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。

3.2 硬件电路设计实验电路可划分为两个组成部分,一者为显示电路部分,主要是由8个相同的发光二极管组成,用来显示流水灯的不同显示形态,另一部分即控制电路部分,主要由脉冲按键开关组成,用以控制流水灯的不同显示状态。

其整个硬件电路图如下:图3原理电路图3.3软件流程图及程序:.C 语言源程序代码#include<reg52.h>#define uint unsigned int #define uchar unsigned charuint m_led; uint a;关闭中断 再次读入按键状态保护现场读入按键状态保存 延时10ms 去抖 两次按键状态相K1按K2按K3按右向循环点左向循环点间隔闪烁点恢复现场开中断返回主程序YNYYYNNNuint i;uint led;void delay(uint z){uint x,y;for(x=100;x>0;x--)for(y=z;y>0;y--); }void init(){TMOD = 0x01;ET0 = 1;EA = 1;TR0 = 1;m_led = 0;a = 0;i = 0;led = 0;}void main(){init();P2 = 0xff;while(1){switch(P2){case 0xfe:m_led = 1;led = 1;break;case 0xfd:m_led = 2;led = 128;break;case 0xfb:m_led = 3;led = 0;break;}}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;a++;if(a == 20){EA = 0;switch(m_led){case 1:P0 = ~led;led *= 2;if(led > 0x80)led = 1;break;case 2:P0 = ~led;led /= 2;if(led < 1)led = 128;break;case 3:led = ~led;P0 = led;break;default:led = 0;P0 = ~led;}a = 0;EA = 1;}}3.4,仿真结果(1)K1控制八个彩灯从左向右依次循环点亮(2)K2控制八个彩灯从右向左依次循环点亮(3)K3控制八个彩灯按一定的时间间隔闪烁点亮。

我们所选用的数码管是共阴极的,置1时导通,所以将单片机的P0.0~P0.7连接8个发光二级管,P2.0~P2.2分别连接K1、K2、K3三个按键开关。

从上图中可以看出,如果要让接在P0.0口的LED1亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED1熄灭,就要把P0.0口的电平变为高电平;同理,接在P0.1~P0.7口的其他7个LED的点亮和熄灭的方法同LED1。

因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。

在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

四:心得体会通过本次设计实验,使我对这学期学所学51系列的单片机从理论知识到实践硬件的应用以及C语言知识的回顾,更加熟悉了89C51单片机的每一个拐角的输出和各项功能,而且对硬件电路的布线以及焊接能力有了很大的进步。

本次的课程设计,使关于51系列单片机的,正是我们刚刚学到的51单片机,在平时课程的学习中,我们仅限于理论知识的讲解,即使知识是很扎实的,实际应用并不是这样的。

开始时我也觉得自己的理论知识已经够了,但当我拿到课题时,在脑海里想的是非常好的,但真正编成和控制时,理论和实际结合不到一起,甚至于51芯片的使用我都感觉很迷茫,还是经过搜集大量资料才将理论与实际结合到一起了。

本次课程设计我主要负责编程,这次不仅锻炼了我C语言的知识,更加我们正在学习的51的定时与中断结合在一起,进行了实际的操作,让我的知识掌握得更加牢固。

本次的实际经验之后,让我对单片机定时赋初值有了更新的认识,对程序的循环顺序、结构类型都有了非常深刻的认识,对真正硬件的连接也有了认识,不再将自己的知识局限于自己狭隘的空间中。

这次课程设计终于圆满的完成了,我从理论和硬件以及实践上懂得了很多,也明白了一个团队的合作精神可以让我们战胜所有的困难。

忽略此处..11。

相关主题