单片机项目结题报告之流水灯3单片机项目结题报告项目名称:花样流水灯项目组员:张曌、张丹丹、张浩、章江班级:通信1502指导教师:张天飞填表日期:2017/5/5目录第1章概述 (4)1.1 项目简介 (4)1.2 项目方案 (5)第2章硬件电路设计 (7)第3章软件程序设计 (10)第4章仿真结果 (11)第5章小结 (14)附录A 程序 (15)附录B 电路图 (26)附录C 焊接实物图 (27)第1章概述1.1 项目简介本项目要求在单片机的P0端口的P0.0~P0.7引脚外接8个LED发光二极管D1~D8,在P2端口的P2.0~P2.7引脚外接8个LED 发光二极管D9~D16实现各种灯亮的效果,具体要求为:(1)D1~D16发光二级管自上而下依次轮流点亮;(2)D1~D16发光二级管自下而上依次轮流点亮;(3)D1~D16发光二级管自上而下每间隔一个依次点亮;(4)上下交替点亮(5)全亮(6)全灭(7)重复循环以上6个过程1.2 项目方案(项目整体方案描述及方案框图)1.2.1若要实现流水灯不同功能的展现,则要根据实际的条件设计相应的硬件电路和软件程序的设计。
本课题使用AT89C51单片机进行流水灯的功能演示,本流水灯实际上就是一个带有16个发光二极管的单片机最小的应用系统,由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
如果要让接在P1.0口的LED1灯亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED灯熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED灯点亮和熄灭的方法同LED1;同理P2.0~P2.7也如此。
因此,要实现流水灯功能,我们只要将发光二极管的依次点亮,熄灭,LED灯便会一亮一暗的做流水灯。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”的效果了。
基本功能:利用AT89C51作为主控制器组成一个LED流水灯系统,实现16个LED灯的演示。
基本器件:AT89C51单片机、16个LED灯和电阻1.2.2系统原理组成框图:复第2章硬件电路设计类似第1章,分小节介绍硬件电路设计(分模块介绍各子电路的功能及原理)2.1各电路模块2. 1. 1 子系统模块一AT89C51复位模块图2.1.1 复位模块通过人工按键复位实现单片机的复位。
按键复位通过对RST端经过两个电阻对电源Vcc接通分压产生的高电平来实现。
2. 1. 2 子系统模块二AT89C51晶振模块(内部时钟方式)图2.1.2AT89C51单片机内部有一个用于构成振荡器的高增益反相放大器,输入端为芯片引脚XTAL1,输出端为引脚XTAL2,这两个引脚外部跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器。
2. 1. 3 子系统模块三功能播放模块播放模块由16个发光二极管和16个上拉电阻构成,通过对软件程序的调用,让16个发光二极管在不同时刻产生不同的效果,使其实现基本的流水灯功能,能够近一步的实现从理论到实际的转变。
图2.1.3 功能播放模块P0.0~P0.7引脚外接8个LED发光二极管D1~D8并且分别连接8个上拉电阻且共阳极,同在P2端口的P2.0~P2.7引脚外接8个LED 发光二极管D9~D16也接8个上拉电阻且共阳极,实现各种灯亮的效果。
第3章软件程序设计3.1软件流程3.1.1 总流程图↓↓第4章仿真结果4.1 D1~D16发光二级管自上而下依次轮流点亮4.2 D1~D16发光二级管自下而上依次轮流点亮4.3 D1~D16发光二级管自上而下每间隔一个依次点亮4.4 D1~D16发光二级管上下交替点亮4.5 D1~D16发光二级管全亮4.6 D1~D16发光二级管全灭第5章小结总结描述项目设计过程中遇到的问题及解决方法、团队队员的感悟与收获等通过这次单片机课程设计,我们小组收获很多。
在这次设计过程中,硬件的设计跟焊接都要我们自己动手,软件的编程也要我们不断的调试,最终才能够完成自己所要完成的目标,获得相关的知识。
在实习之前,我们要对所用单片机的内部结构有一个比较系统的了解;要从哪些途径获得单片机理论知识的储备;要有一个清晰的思路和一个完整的软件流程图。
在设计程序时,不能想着一步就将整个程序设计好,只有不断修改才是程序设计完美的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让所有人能明白你的思路,这样也为资料的保存与交流提供了方便;在实习过程中遇到问题是很正常的,但我们应该讲每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
但是从中学到的知识会让我们受益终身。
发现、提出、分析、解决问题和实践能力提高都会受益于我在今后的学习、工作和生活中。
在设计过程中和完成后,我们小组认真总结,有以下体会:1.此次课程设计是在本学期《单片机原理与技术》的基础上进行的,整个实验设计过程相对比较熟悉,是把以前学习的零碎的内容系统的整合学习。
2.程序调试时,应该讲各模块单独调试。
3.本实验要充分了解AT89C51的程序,按照要求编译相关程序。
4.在设计过程中,通过大量的查阅资料,认真的研究教材,并向指导老师请教很多问题,我们对单片机有了更为深刻的理解。
我们认真演技原理,画出程序流程图,通过源程序,做出电路图,在仿真中发现很多问题,通过仔细研究,不但解决了问题,还学到了在平时的学习中学不到的东西。
5.在设计过程中,进一步的掌握Proteus、Word、Wave、Keil等软件的应用,也了解了单片机开发的基本环节。
附录A 程序#include <reg52.h>void Delay10ms(unsigned int c);unsigned char LED,LCD,l;void main(){unsigned char i;while (1){//--LED往左闪烁--// LED = 0x01;for (i = 0 ;i < 8 ; i++) {P0 = ~LED;Delay10ms(50);LED = LED << 1;if( LED ==0x80){LED == 0x00;}P0 = ~LED;///////////////////////////////// LED = 0x01;for (i = 0 ;i < 7 ; i++){P2 = ~LED;Delay10ms(50);LED = LED << 1;if( LED == 0x80){LED == 0x00;}P2 = ~LED;}///////////////////////////////////// LED = 0x80;for (i = 0 ;i < 8 ; i++){P2 = ~LED;Delay10ms(50);LED = LED >> 1;if( LED == 0x01){LED == 0x00;P2 = ~LED;}///////////////////////////////// LED = 0x80;for (i = 0 ;i < 8 ; i++){P0 = ~LED;Delay10ms(50);LED = LED >> 1;if( LED == 0x01)LED == 0x00;}P0 = ~LED;}/////////////////////////////// LED = 0x01;for (i = 0 ;i < 4 ; i++){P0 = ~LED;Delay10ms(50);LED = LED << 2 ;if( LED == 0x40){LED == 0x00;}P0 = ~LED;}////////////////////////////// LED = 0x01;for (i = 0 ;i < 4 ; i++){P2 = ~LED;Delay10ms(50);LED = LED << 2;if( LED == 0x40){LED == 0x00;}P2 = ~LED;}////////////////////////LED = 0x01;LCD = 0x80;l = 0xff;for (i = 0 ;i < 8 ; i++){P0 = ~LED;Delay10ms(50);P0 = l;LED = LED << 1;P2 = ~LCD;Delay10ms(50);P2 = l;LCD = LCD >> 1 ;}LED = 0x00;LCD = 0xff;P2 = LED;P0 = LED;Delay10ms(50);P0 = LCD;P2 = LCD;}}void Delay10ms(unsigned int c) //延时函数误差 0us {unsigned char a, b;//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//for (;c>0;c--){for (b=38;b>0;b--){for (a=130;a>0;a--);}}}附录B 电路图附录C 焊接实物图-。