心形流水灯课程设计范文_第1页
心形流水灯课程设计范文_第2页
心形流水灯课程设计范文_第3页
心形流水灯课程设计范文_第4页
心形流水灯课程设计范文_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

年4月19日心形流水灯课程设计文档仅供参考心形流水灯设计摘要本课题是利用STC89C52设计了一个心形流水灯电路,该电路能够实现32个LED灯循环闪亮、依次熄灭、对角闪亮、对角熄灭、间隔闪亮、间隔熄灭等多种功能。该电路主要由单片机芯片STC89C52、电源电路、时钟电路、复位电路和显示电路组成。利用Keil软件编写C语言程序,并生成目标代码Hex文件。使用Proteus软件设计仿真电路,并调入已编译好的目标代码,即可在仿真图中看到模拟实物的运行状态和过程。使用AltiumDesigner软件对电路进行原理图设计和PCB设计,并对该电路行安装和调试,调试结果能够实现流水灯的多种亮灭循环的功能。关键词:AT89C52,复位电路,时钟电路,发光二极管

目录1绪论 11.1课题描述 11.2基本工作原理及框图 12相关芯片及硬件电路设计 22.1AT89C52芯片 22.1.1AT89C52的功能特性 22.1.2AT89C52的主要性能参数 22.2时钟电路 32.3复位电路 42.4显示电路 42.6总原理图设计 53系统软件设计 63.1程序主要流程 63.2程序设计 73.4电路功能仿真 20总结 21致谢 22参考文献 231绪论1.1课题描述

随着现代科学技术的持续进步和发展以及人们生活水平的不断提高,以大规模、超大规模集成电路为首的电子工艺技术的使用也越来越广泛,结合单片机技术设计的电子电路也层出不穷。LED彩灯由于其丰富的灯光色彩、低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。利用控制电路可使彩灯按一定的规律不断的改变状态,不但能够获得良好的观赏效果,而且能够省电。彩灯的运用已经遍布于人们的生活中,从歌舞厅到卡拉OK包房,从节日的祝贺到日常生活中的点缀,这些不但说明了我们对生活的要求有了质的飞跃,也说明科技在现实生活中的运用有了较大的发展。在这一设计中我们将运用单片机技术,与单片机芯片STC89C52的功能,对心形流水灯系统进行设计,来实现流水灯的多种亮与灭的循环,给人带来美感[1]。1.2基本工作原理及框图本课程设计的XX系统原理如图1所示。电源电路AT89C52电源电路AT89C52显示电路 显示电路时钟电路时钟电路 复位电路复位电路图1基本工作原理框图2相关芯片及硬件电路设计2.1AT89C52芯片。图2AT89C52引脚图2.1.1AT89C52的功能特性STC89C52是STC公司生产的一种低功耗、高性能的微控制器,具有8K的系统可编程Flash存储器,其具有传统51单片机不具备的功能,在经典的MCS-51内核上做了很多的改进,使得STC89C52在处理嵌入式控制应用系统时更加高效、灵活。STC89C52具有以下标准功能:4个外部中断、全双工串行口、一个7向量4级中断结构、3个16位定时器/计数器、8K字节Flash、512字节RAM(随机存储器)、看门狗定时器,其12周期和6周期能够任意选择,其工作电压在3V~5.5V之间,工作频率在0~40MHZ,实际工作频率可达48MHZ[2]。其管脚的封装图如图2所示。2.1.2AT89C52的主要性能参数AT89C52主要性能参数如下:与MC-51产品指令系统完全兼容VCC(38脚):芯片电源,接+5VGND(16脚):接地端XTAL1(15脚):片内振荡器反相放大器和时钟发生器电路的输入端。当使用片内振荡器时,该引脚连接外部石英晶体和微调电容;当采用外接时钟源时,该引脚接外部时钟振荡器的信号XTAL2(14脚):片内振荡器反相放大器的输出端。当使用片内振荡器时,该引脚连接外部石英晶体和微调电容;当采用外部时钟源时,该引脚悬空ALE(27脚):用来锁存P0口送出的低8位地址PSEN(26脚:外部ROM读选通信号RST(4脚):复位信号输入端EA/Vpp(29脚):内外ROM选择/片内EPROM编程电源P0口:8位,漏极开路的双向I/O口P1口:8位,准双向I/O口,具有内部上拉电阻P2口:8位,准双向I/O口,具有内部上拉电阻P3口:8位,准双向I/O口,具有内部上拉电阻2.2时钟电路单片机内有一个由反相放大器所构成的振荡电路,XTAL1和XTAL2分别为振荡电路的输入端和输出端。在XTAL1和XTAL2引脚上外接石英晶体和微调电容构成并联振荡回路。晶振频率设置为11.0592MHZ,作用是产生时钟信号。单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。电容值为30pF,能够起到频率微调作用[3]。时钟电路如图3所示。图3时钟电路图2.3复位电路单片机RST接口为复位信号输入端,高电平有效。在该引脚上加上持续时间大于两个机器周期的高电平,就能够使单片机复位。在单片机正常工作时,此引脚应为小于或等于0.5V的低电平。复位电路接单片机RST端口,在RST输入端出现高电平时实现复位和初始化[4]。复位电路如4所示。图4复位电路2.4显示电路单片机的P0口为8位的漏极开路的双向I/O口,当P0口作为普通的I/O口使用时,需要上拉电阻,这时为准双向口。P1、P2、P3都为8位的准双向口,具有内部上拉电阻。图5为显示电路,单片机I/O口一对一直接控制LED灯,显示电路中的32个电阻既为上拉电阻,也起到电路分压作用,防止烧坏元器件[5]。显示电路如图5所示图5显示电路图2.6总原理图设计总结时钟电路、复位电路、以及显示电路,把其放入一个电路。得到总体的电路。总体电路如图6所示。图6电路原理图3系统软件设计3.1程序主要流程单片机的应用系统由硬件和软件组成,在硬件原理图搭建完成上电之后,暂时还不能看到流水灯循环点亮的现象,还需要编写程序控制单片机管脚电平的高低变化,来实现LED灯的各种亮灭功能。先将P0、P1、P2、P3全部置1,即通入高电平,用16进制表示为0XFFH,则32个LED灯全部处于熄灭状态。然后给P0口赋值0X7FH,即只有P0.0处于低电平时,LED1灯点亮。使用延时函数delay,并设置延时时间为2秒,延时时间一到P0口的值就变为0X3FH,即P0.0和P0.1都为高电平,LED2也开始点亮,如此循环P0口控制的8个LED灯全部点亮,当高电平变为低电平时,LED灯熄灭。P1、P2、P3口控制的LED灯闪亮和熄灭原理同P0口一样,因此就能够看到LED灯的流水效果了[6]。程序流程图如图7所示,开始开始读取I/O口状态读取I/O口状态判断I/O口状态判断I/O口状态低电平高电平LED灯点亮LED灯熄灭LED灯点亮LED灯熄灭延时延时灯流动运行灯流动运行结束结束图7程序设计流程图3.2程序设计#include<reg52.h>#include<intrins.h>#define uintunsignedint#define ucharunsignedcharucharcodetable[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//逐个点亮0~7ucharcodetable1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//逐个点亮7~0ucharcodetable2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//逐个灭0~7ucharcodetable3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//逐个灭7~0voiddelay(uintt); //延时voidzg(uintt,uchara);//两边逐个亮voidqs(uintt,uchara);//全部闪烁voidzgxh(uintt,uchara);//逆时针逐个点亮//voidzgxh1(uintt,uchara);//顺时针逐个点亮voiddjs(uintt,uchara);//对角闪voidlbzgm(uintt,uchara);//两边逐个灭//voidsszgm(uintt,uchara);//顺时针逐个灭voidnszgm(uintt,uchara);//逆时针逐个灭voidsztl(uintt,uchara);//顺时逐个同步亮voidnztl(uintt,uchara);//逆时逐个同步亮voidsztm(uintt,uchara);//顺时逐个同步灭voidnztm(uintt,uchara);//逆时逐个同步灭voidhwzjl(uintt,uchara);//横往中间亮voidhwzjm(uintt,uchara);//横往中间灭//voidswzjl(uintt,uchara);//竖往中间亮//voidswzjm(uintt,uchara);//竖往中间灭voidnzdl(uintt,uchara);//逆时逐段亮voidnzdgl(uintt,uchara);//逆时逐段一个点亮voidjgs(uintt,uchara);//间隔闪voidzg(uintt,uchara)//两边逐个亮{ uchari,j;for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; P0=0x7f;delay(t); for(i=0;i<7;i++) { P0=table1[i+1]; P2=table1[i]; delay(t); } P2=0x00;P1=0xfe; delay(t);for(i=0;i<7;i++) { P1=table[i+1]; P3=table1[i]; delay(t); } P3=0x00;delay(t); }}voidqs(uintt,uchara) //全部闪烁{ ucharj; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; delay(t); P0=P1=P2=P3=0x00; delay(t); } }voidzgxh(uintt,uchara)//逆时针逐个点亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; delay(t); } for(i=0;i<8;i++) { P1=table[i]; delay(t); } for(i=0;i<8;i++) { P3=table[i]; delay(t); } for(i=0;i<8;i++) { P2=table[i]; delay(t); } }}voidnszgm(uintt,uchara)//逆时针逐个灭{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=table3[i];delay(t); } for(i=0;i<8;i++) { P1=table2[i];delay(t); } for(i=0;i<8;i++) { P3=table2[i];delay(t); } for(i=0;i<8;i++) { P2=table2[i];delay(t); } }}voidzgxh1(uintt,uchara)//顺时针逐个点亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P2=table1[i]; delay(t); } for(i=0;i<8;i++) {P3=table1[i]; delay(t); } for(i=0;i<8;i++) { P1=table1[i]; delay(t); } for(i=0;i<8;i++) { P0=table[i]; delay(t); } }}voidsszgm(uintt,uchara)//顺时针逐个灭{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P2=table3[i];delay(t); } for(i=0;i<8;i++) { P3=table3[i];delay(t); } for(i=0;i<8;i++) { P1=table3[i];delay(t); } for(i=0;i<8;i++) { P0=table2[i];delay(t); } }}voiddjs(uintt,uchara)//对角闪{ ucharj; for(j=0;j<a;j++) {P0=P1=P2=P3=0xff; P0=P3=0x00; delay(t); P0=P1=P2=P3=0xff; P1=P2=0x00; delay(t); } }voidlbzgm(uintt,uchara)//两边逐个灭{ uchari,j; for(j=0;j<a;j++) { P0=P2=0x00; P3=0x01;delay(t); for(i=7;i>1;i--) { P1=table[i-1];P3=table1[i-2]; delay(t); } P1=0xfe;P3=0xff;delay(t); P1=0xff;P2=0x01;delay(t); for(i=7;i>1;i--) { P0=table1[i-1]; P2=table1[i-2]; delay(t); } P0=0x7f;P2=0xff;delay(t); P0=0xff;delay(t); }}voidsztl(uintt,uchara)//顺时逐个同步亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table[i];P1=P2=P3=table1[i];delay(t); } }}voidnztl(uintt,uchara)//逆时逐个同步亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; P1=P2=P3=table[i]; delay(t); } }}voidsztm(uintt,uchara)//顺时逐个同步灭{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=table2[i]; P1=P2=P3=table3[i]; delay(t); } }}voidnztm(uintt,uchara)//逆时逐个同步灭{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table3[i];P1=P2=P3=table2[i];delay(t); } }}voidhwzjl(uintt,uchara)//横往中间亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=P2=P1=table1[i]; P3=table[i];delay(t); } }}voidhwzjm(uintt,uchara)//横往中间灭{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=P2=P1=table3[i]; P3=table2[i];delay(t); } }}voidswzjl(uintt,uchara)//竖往中间亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=P2=P1=table[i]; P3=table1[i];delay(t); } }}voidswzjm(uintt,uchara)//竖往中间灭{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=P2=P1=table2[i]; P3=table3[i];delay(t); } }}voidnzdl(uintt,uchara)//逆时逐段亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; delay(t); } P0=0xff; for(i=0;i<8;i++) { P1=table[i]; delay(t); } P1=0xff; for(i=0;i<8;i++) { P3=table[i]; delay(t); } P3=0xff; for(i=0;i<8;i++) { P2=table[i]; delay(t); } P2=0xff; }}voidnzdgl(uintt,uchara)//逆时逐段一个点亮{ uchari,j,k,l; for(j=0;j<a;j++) { k=table1[0]; P0=k;l=table[0]; P1=P2=P3=l;delay(t); for(i=0;i<8;i++) { k=_crol_(k,-1); P0=k; l=_crol_(l,1); P1=P2=P3=l; delay(t); } }}voidjgs(uintt,uchara)//间隔闪{ ucharj; for(j=0;j<a;j++) { P0=0x55;P1=P2=P3=0xaa; delay(t); P0=0xaa;P1=P2=P3=0x55; delay(t); }}voidmain(){ uchari; while(1) { zg(100,1); //两边逐个亮 lbzgm(100,1); //两边逐个灭 jgs(300,10); djs(100,20);//对角闪 P1=P2=P3=0xff; for(i=0;i<3;i++) { P0=0x00;delay(800); P0=0xff;delay(800); } P0=0x00; for(i=0;i<3;i++) { P1=0x00;delay(800); P1=0xff;delay(800); } P1=0x00; for(i=0;i<3;i++) { P3=0x00;delay(800); P3=0xff;delay(800); } P3=0x00; for(i=0;i<3;i++) { P2=0x00;delay(800); P2=0xff;delay(800); } qs(500,3); for(i=0;i<6;i++) { zgxh(50,1); nszgm(50,1); } djs(100,20);//对角闪 for(i=0;i<3;i++) { zg(100,1); //两边逐个亮 lbzgm(100,1); //两边逐个灭 } qs(200,10);djs(100,50); for(i=0;i<5;i++) { sztl(200,1);//顺时逐个同步亮 nztm(200,1); nztl(200,1); sztm(200,1);//顺时逐个同步灭 } djs(300,10);//对角闪 nzdgl(300,10);//逆时逐段一个点亮 jgs(300,10);//间隔闪 for(i=0;i<3;i++) { zgxh(100,1); nszgm(100,1); } for(i=0;i<5;i++) { zgxh1(100,1); sszgm(100,1); }nzdl(200,3);//逆时逐段亮jgs(50,100);//间隔闪 P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; delay(200); } for(i=0;i<8;i++) { P1=table[i]; delay(200); } for(i=0;i<3;i++) { P0=P1=0x00;delay(200); P0=P1=0xff;delay(200); } for(i=0;i<8;i++) { P2=table1[i]; delay(200); } for(i=0;i<8;i++) { P3=table1[i]; delay(200); } for(i=0;i<3;i++) { P2=P3=0x00;delay(200); P2=P3=0xff;delay(200); } nzdgl(50,40);//逆时逐段一个点亮 for(i=0;i<4;i++) { zg(100,1);qs(100,10); lbzgm(100,1); } djs(50,100);//对角闪 for(i=0;i<3;i++) { zgxh(100,1); nszgm(100,1); }djs(1000,10); for(i=0;i<10;i++) { hwzjl(200,1);//横往中间亮 hwzjm(200,1);//横往中间灭 } djs(300,10);//对角闪for(i=0;i<10;i++) { swzjl(200,1);//竖往中间亮 swzjm(200,1);//竖往中间灭 } for(i=0;i<5;i++) { zgxh(100,1); nszgm(100,1); } djs(100,20);//对角闪 zg(300,1); lbzgm(300,1); for(i=0;i<5;i++) { zgxh1(100,1); sszgm(100,1); } for(i=0;i<5;i++) { sztl(200,1);//顺时逐个同步亮 nztm(200,1); nztl(200,1); sztm(200,1);//顺时逐个同步灭 } djs(500,20);//对角闪 djs(100,30);//对角闪 djs(50,50);//对角闪// djs(10,100);//对角闪 delay(1000); } }voiddelay(uintt) { uintx,y; for(x=t;x>0;x--) { for(y=120;y>0;y--); }}3.4电路功能仿真在各部分电路设计的基础上,按照总体电路图在Proteus上一一进行器件选择,并连接。将电路连接好后,为各个器件选择合适的参数,然后调入已编译好的目标代码Hex文件,启动仿真。根据LED灯是否发亮,判断所设计的电路是否能够实现32个LED灯依次点亮、依次熄灭、对角闪亮、对角熄灭、间隔闪亮、间隔熄灭等多种功能。刚开始时,LED灯不亮,仔细检查原来是将LED灯接反了,改正之后LED灯便能够正常发光了。电路仿真的结果为32个LED灯依次发亮、依次熄灭,并能够实现多种亮灭功能。根据仿真结果可知电路原理及程序无误,能够进行PCB设计[7]。如图8所示。图8电路仿真图

总结在设计电路图的过程中,经过了多次分析和仿真验证,并结合所给的器件清单最后确定了需要哪些器件来实现电路的功能,而且保证了所需要的元器件在给出的清单范围内。经过Proteus软件多次仿真和修改后,在仿真电路图实现设计要求的前提下确定了最终的原理图。然后在AltiumDesigner中画出来所对应的原理图

温馨提示

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

评论

0/150

提交评论