花样流水灯课程设计报告.doc
. .课程论文把戏流水灯的设计课 程单片机技术及系统设计学生XX学 号所在学院所在班级任课教师提交时间2021年5月 25日至2021年5月30日. .word. .目录一前言1.1 设计概述. .(2)1.2设计主要功能(2)二 设计过程2.1原理图中所使用的元器件功能(3)2.2程序在功能实现过程中的作用(5)三体会3.1课程设计体会.(5)四. 文献4.1参考文献 .(6)五. 附录5.1流水灯电路图.(7)5.2流水灯程序(7)摘要:当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、本钱低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。关键词: 单片机 控制系统 流水灯一 前言1.1 设计概述整个系统工作由软件程序控制运行,根据需要,可以上电后系统经过初始化,进入用户设定模式状态。于AT89C51单片机的彩灯控制方案,实现对LED灯的控制。本方案以AT89C52单片机作为主控核心,与驱动等模块组成核心主控制模块。在主控模块上设有晶振电路和8个LED灯,根据需要编写假设干种亮灯模式,根据各种亮灯时间的不同需要,在不同时刻输出灯亮或灯灭的控制信号1.2设计主要功能通过发光二极管显示不同的把戏,并且可以通过按键来控制流水灯的速度通过学习单片机工作原理和各种工作方式及各管脚的功能,想通过P3 口的俩管脚P3.2和P3.3第二功能,即外部中断来使CPU响应,到达控制流水灯的目的二 设计过程2.1原理图中所使用的元器件功能2.1.1时钟电路 单片机内部具有一个高增益反相放大器,用于构成振荡器。通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,构造图2 中X1、C1、C2。可以根据情况选择6MHz、12MHz或24MHz等频率的石英晶体,补偿电容通常选择30nF左右的瓷片电容2.1.2 复位电路 单片机小系统常采用上电自动复位和手动按键复位两种方式实现系统的复位操作。上电复位要求接通电源后,自动实现复位操作。手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。其构造如下列图。上电自动复位通过电容C3充电来实现。手动按键复位是通过按键将电阻R9与VCC接通来实现。2.1.3外部中断0和外部中断1电路 通过外部的输入信号来实现流水灯的速度的加速和减速。2.1.4 8个 LED灯的构造2.2程序在功能实现过程中的作用2.2.1系统软件的组成 1键盘扫描程序:检测是否有按键按下,有按键按下那么记录按下键的键值,并跳转至功能转移程序;无按键按下,那么返回键盘扫描程序继续检测。 2功能转移程序:对检测到的按键值进展判断,是功能键那么跳转至相应的功能程序,我们设计的功能程序有两种,即加速功能和减速的功能。2.2.2通过外部中断程序实现速度的调整,由复位口实现电路的原来的速度。三 体会3.1课程设计体会通过这次课程设计我学到了很多东西,我更加体会到理论知识与动手能力相结合的重要性,而且设计过程中使我懂得在设计程序之前,务必要对所用单片机的内部构造有一个系统的了解,知道该单片机内有哪些资源:懂得设计的关键是要有一个清晰的思路和一个完整的软件流程图。在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改良是程序设计的必经之路。要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你思路,这样也为资料的保存和交流提供了方便。整个设计的过程中,还是碰到了一些问题。比方,对于键盘的延时防抖问题不能较好的解决;设计中我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识 当今社会,由单片机芯片控制各种硬件工作的技术日益成熟,并普及在交通、化工、机械等各个领域。而流水灯这项技术在生活中应用更为广泛,较为贴近生活。以前在路上夜景中经常见到各种流水灯,感觉很漂亮,通过此次编程以后才知道了原理,让我有一种学以致用的成就感!很开心!流水灯控制的设计所需要的知识不仅吻合了我们本学期对于单片机这门课程的学习,而且对于我们以前所学习的如数码管显示、LEG灯等知识也是一次很好地运用,所以设计流水灯控制的这个课题让我们对知识的学习和稳固都有了进一步的加深。 总的来说,这次设计获益良多。四. 文献4.1参考文献【1】周美娟 肖来胜 单片机技术及系统设计编著 清华大学 出版【2】单片机实验指导书 XX海洋大学五. 附录5.1流水灯电路图5.2流水灯程序#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar j,k;void delay(int ms)uchar i;while(ms-)for(i=0;i<123;i+);uchar code tab=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00, 0xff,0xe7,0xc3,0x81,0x00,0x7e,0x3c,0x18, 0x00,;void EXINTinit() EA=1;EX0=1;EX1=1;IT0=1;IT1=1;void main() EXINTinit();P0=0xfe; while(1) switch(k) case 0: for(j=0;j<16;j+) if(k!=0)break; P0=tabj; delay(300);for(j=0;j<16;j+) if(k!=0) break; P0=tabj+16; delay(300); for(j=0;j<9;j+) if(k!=0) break; P0=tabj+32; delay(300); for(j=0;j<16;j+) if(k!=0) break; P0=0x00; delay(300); for(j=8;j>0;j-)if(k!=0)break;P0=0x55;delay(300);P0=0xaa;delay(300); break; case 1: for(j=0;j<16;j+) if(k!=1) break; P0=tabj; delay(100);for(j=0;j<16;j+) if(k!=1) break; P0=tabj+16; delay(100); for(j=0;j<9;j+) if(k!=1) break; P0=tabj+32; delay(100); for(j=0;j<16;j+) if(k!=1) break; P0=0x00; delay(100); for(j=8;j>0;j-)if(k!=1)break;P0=0x55;delay(300);P0=0xaa;delay(100); ;break; case 2: for(j=0;j<16;j+) if(k!=2) break; P0=tabj; delay(600);for(j=0;j<16;j+) if(k!=2) break; P0=tabj+16; delay(600); for(j=0;j<9;j+) if(k!=2) break; P0=tabj+32; delay(600); for(j=0;j<16;j+) if(k!=2) break; P0=0x00; delay(600); for(j=8;j>0;j-)if(k!=2)break;P0=0x55;delay(600);P0=0xaa;delay(600); ;break; default: break; void EX0INT() interrupt 0 k=1;void EX1INT() interrupt 2k=2; . .word.