《基于单片机的LED设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的LED设计.doc(20页珍藏版)》请在三一办公上搜索。
1、课程设计任务书学院信息科学与技术专业自动化学生姓名张兆雄学号0903010413设计题目基于单片机的LED灯光控制器的设计内容及要求:根据单片机原理应用相关器件搭建电路实现LED灯光控制功能。进度安排:第1天:1. 布置课程设计题目及任务。2. 查找文献、资料,确立设计方案。第23天:1. 根据实际情况确定所需硬件电路的设计方案。第45天:1. 根据硬件电路设计的要求查找相关型号的单片机、芯片等器件的接线方法及实际参数的设置方法。2. 在此基础上用PROTEUS软件搭建仿真电路并进行相关仿真,验证元器件是否符合设计要求。第67天:1. 根据所搭建的硬件电路编制程序(C语言),并将其KEIL与P
2、ROTEUS两个软件进行联机调试仿真。2. 课程设计结果验收,针对课程设计题目进行答辩。3. 完成课程设计报告。指导教师(签字): 年 月 日分院院长(签字):年 月 日摘 要单片微型计算机简称单片机,又称为微控制器(MCU),它的出现是计算机发展史上的一个重要里程碑,它以体积小、功能全、性价比高等诸多优点而独具特色。随着社会的发展、科技的进步,各种方便于生活的自动控制系统开始进入了人们的生活,以单片机为核心的控制系统就是其中之一。本论文着重阐述了LED灯光控制器的设计方法,以AT89C52单片机作为主控核心,按键、数码管等较少的辅助硬件电路相结合,采用模块设计,利用软件实现对LED灯进行控制
3、。本系统具有体积小、硬件少、电路结构简单、软件功能完善,控制系统可靠,性价比较高等优点。论文主要论述了基于单片机的LED灯光控制器的设计过程。主要工作如下:重点论证了系统方案的选择及其实现方法;全文详细论述了系统的软、硬件电路,其中硬件部分重点介绍了单片机的基本结构和各引脚以及晶振电路、复位电路的工作原理,软件部分重点叙述主程序和子程序的C语言实现;硬件、软件电路调试过程;所有源程序均采用C语言编译,并在Keil uVision2软件里编译、调试;在Proteus环境下实现软、硬件电路仿真。实验结果证明了设计方案的正确性与可行性,以此为理论基础,对我们设计LED灯电路具有很强的使用和参考价值。
4、关键词:LED灯;AT89C52单片机;灯光控制器;模块设计 目录1.概述11.1课程设计的目的11.2课程设计的要求11.3基本原理12 系统设计22.1 系统功能22.2仿真软件Proteus的使用22.3仿真图设计43 程序设计53.1 Keil C51编程软件的使用及调试方法53.2 本次设计调试实现的功能73.2程序流程图83.2.1主函数程序流程图83.2.2 程序1流程图93.2.3 程序2流程图103.3 C语言源程序114 系统调试174.1 Proteus和Keil软件的联调174.2 仿真效果图175 课程总结体会186 参考文献191. 概述1.1课程设计的目的单片计算
5、机即单片微型计算机。(Single-Chip Microcomputer ),是 集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而52单片机是各单片机中最为典型和最有代表性的一种。通过本课程设计,能独立地完成一个典型单片机应用系统的设计和调试任务,深刻地领会和掌握单片机原理及应用课程中讲述的基本理论和基本技能,在单片机原理及应用课程的基础上,进一步培养学生的综合分析与设计能力和动手能力,为后续课程学习和今后从事电子信息系统及相关领域的实际工作打下坚实的基础。1.2 课程设计的要求主要内容包括理论设计、软件调试及
6、报告等几大部分。软件设计利用Keil C51 软件开发平台,采用C或汇编语言进行软件程序编写,并在Keil上运行检测正确与否。在Protues软件上画图,检查无误后与Keil写好的程序进行联调,仿真,运行无误后,写设计报告。1.3 基本原理本课题用到的是89C52单片机,LED数码管,LED灯,键盘,光敏电阻,蜂鸣器等。89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Fl
7、ash存储单元,功能强大的89C52单片机可提供许多较复杂系统控制应用场合。89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线, 89C52可以按照常规方法进行编程,但不可以在线编程。通过键盘S3,S1是否按下可以判断P1.5和P3.0的电平的高低,从而启动不同的程序。在程序一中,通过键盘S3,S4是否按下可以判断P1.5,P1.6的高低电平,从而启动和复位程序一。LED数码管是动态的。码选通过P3口的高四位,低电平选通,P0口送字段码。LED灯为共阳极接法,其阴极分别接P2口的八个输出。P2口各
8、位送低电平,对应各口的LED灯亮。蜂鸣器有P1.7口控制,低电平时响,高电平时不响。光敏电阻的特性是无光照射时电阻阻值较大,有光时较小,其与可调电阻R23共同作用可调节P1.1的高低电平,从而控制程序二中LED灯的亮灭和蜂鸣器的声音。有光时光敏电阻阻值较小。P1.1为低电平,程序使LED灯和蜂鸣器不工作。无光或暗光时P1.1为高电平,程序使LED灯和蜂鸣器工作。2 系统设计2.1 系统功能根据所学的单片微型计算机与接口技术以及数字电路、模拟电路的相关知识设计一个基于单片机的电子屏最小系统,要求能显示汉字,能够循环显示不同的汉字,并尽量实现其动态显示功能,根据具体情况可以适当改进创新。2.2仿真
9、软件Proteus的使用Proteus是一款专门的单片机系统仿真软件,其所提供的单片机型号多,可便于用户进行各种单片机系统的设计与仿真。另外,Proteus提供了很多设计中常用的各种芯片如各种数字门电路、触发器、移位寄存器和其他可编程逻辑芯片,方便用户进行各种设计电路的仿真。值得一提的是Proteus提供的示波器、信号发生器、测量探针等虚拟仪器为用户分析测试设计电路提供了理论依据,方便了用户设计。双击桌面快捷方式打开Proteus原理图设计软件,界面如下所示:图2.1 Proteus的ISIS原理图编辑界面单击界面中的YES可以查看Proteus软件自带的原理图仿真实例,选择NO可以进行电路原
10、理图的设计。然后点击软件界面右面的 P可以放置所需要的元器件,界面如下图所示:图2.2 元器件放置界面找到设计电路所需要的元器件然后双击所需的元器件,这时就会在软件右侧的元器件列表中看到所选择的元器件了。在此单击鼠标左键后就可将元件放到原理图编辑界面中。按住鼠标左键可以拖动元器件,放好元器件后用导线将元器件连接起来。2.3仿真图设计按照以上介绍的软件使用方法绘制本课程设计的仿真原理图,放置好AT89C52、74SL373、数码管、蜂鸣器、开关,发光二级管(LED)等件后,连接好后其效果图如下图所示:图2.3 仿真连接图3 程序设计3.1 Keil C51编程软件的使用及调试方法本设计的软件设计
11、采用Keil C51来编写,该软件的使用方法介绍如下。双击桌面上的Keil软件的快捷启动方式 打开软件,打开后的软件界面如下图所示:图3.1 Keil 软件界面然后点击ProjectNew Project选择新建工程,并保存到合适的位置,然后在芯片列表中选择相应的芯片,界面如下图所示,然后点击完成即可。图3.2芯片选择界面完成后点击FileNew新建一个程序编辑文件,然后保存即可在其中编辑所需要的程序了,然后点击软件上方的调试按钮进行纠错调试直至没有错误。3.2 本次设计调试实现的功能本作品为可光控和手控LED显示,可分为两个功能即光控制LED的显示和手动控制LED的显示。单片机上电后无动作,
12、按下S1键后,进入光控程序。在暗光或无光时LED灯循环显示同时蜂鸣器发声。如有亮光照射是LED灯熄灭同时蜂鸣器停止工作。单片机上电后,按下S3键后,进入手控程序,同时LED灯进行四种不同的循环显示,并伴随蜂鸣器所发出的四种不同的声音。当四种循环结束一遍后LED数码管数字加一。数码管数字满16后进一位。在这过程中如果按下S4键后,则程序复位,LED灯熄灭,蜂鸣器停止工作,数码管显示0。如果S1再次按下后,则在次启动LED灯、蜂鸣器和数码管。3.2程序流程图3.2.1主函数程序流程图程序1手控判断是那个键按下程序2光控P30P15开始是否有键按下?否是图3.3 主函数程序流程图3.2.2 程序1流
13、程图进入LED循环函数,调用显示函数开始调用中断,实现数码管显示LED循环,调用蜂鸣器程序P16是否按下?是否LED数码管复位,灯灭,蜂鸣器停止,判断P15是否按下蜂鸣器发声,进入下一LED循环是否是否循环四次?否是结束图3.4 程序1流程图3.2.3 程序2流程图开始判断有无光照射?无有调用判光程序LE循环,调用蜂鸣器声音程序,判有无光照射?无有结束图3.5 程序2流程图3.3 C语言源程序#include#defineuchar unsigned charvoid display();void circle(void);void light(void) reentrant;uchar ch
14、oose(void);void reset(void);void InitTimer();sbit p11=P11;sbit p15=P15; /启动led灯及数码管循环显示程序sbit p16=P16; /复位led灯及数码管循环显示程序sbit p17=P17;sbit p30=P30; /启动光控程序int a;uchar e;/共阳极数码管位码/unsigned char code Po4=0xe0,0xd0,0xb0,0x70;/共阳极数码管段码/unsigned char code value18=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0
15、x80, 0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e, 0x00,0xff;/延时void delay(int i) int j; for(j=0;ji;j+) /蜂鸣器声音函数void speak1() reset(); p17=0;delay(200);p17=1;void speak2() reset();p17=0;delay(2000);p17=1; void speak3() reset();delay(10000);p17=0;delay(20000);p17=1;void speak4() reset();p17=1;delay(1000);p17=
16、0;delay(10000); /主函数void main(void) uchar i; while(1) if(p15=0) delay(20); /选择程序1 if(p15=0) i=1; break; /选择程序2 if(p30=0) delay(20); if(p30=0) i=2;break; switch(i) case 1:circle();break; case 2:light();break; /LED灯循环函数void circle(void) char i,j,m,n,k,l; while(1) display(); P2=0xff;for(i=0;i8;i+)/led循
17、环1 speak1(); P2=P21;delay(6666); P2=0XFF; /led循环2for(j=0;j1; delay(6666); m=0xf0;n=0x0f; for(k=0;k4;k+) /led循环3 speak3(); delay(6666); m=m1; P2=m|n; m=0xf0;n=0x0f; for(l=0;l4;l+) /led循环4 speak4(); delay(6666); m=m1; P2=(m|n); delay(6666);delay(6666); a+ ; void light(void) reentrant /光控显示函数 uchar i,j
18、,b,temp,temp1;int k; e=0; e=choose(); switch(e) case 2: for(k=0;k65535;k+) b=0xff; for(i=0;i8;i+) temp=0xff; temp=temp; temp=tempi; P2=b&temp; for(j=0;j(8-i);j+) if(p11=0) light();delay(30000);delay(30000); /判断有无光照射 speak2(); P2=P21;delay(30000); delay(50000);temp1=0xff;for(a=0;a8;a+) if(p11=0) ligh
19、t();delay(30000);delay(30000); speak2();P2=temp1(7-a);delay(30000); if(k=65535) k=0; ;break; case1: P2=0XFF;p17=1;light();delay(30000);delay(30000);break; uchar choose(void) /选择有无光照射 while(1) if(p11=0) e=1;delay(30000);delay(30000);break; else e=2;break;return e; void display()InitTimer();void InitT
20、imer() /T1中断 TMOD = 0x10; TH1 = 0xDC;TL1 = 0x00; EA = 1; ET1 = 1; TR1 = 1;void Timer1() interrupt 3 /数码管显示static unsigned char b=0;TH1 = 0xDC;switch(b)case 0:P0=value17;P3=Po3;P0=valuea/4096;break;case 1:P0=value17;P3=Po2;P0=value(a%4096)/256;break;case 2:P0=value17;P3=Po1;P0=value(a%256)/16;break;c
21、ase 3:P0=value17;P3=Po0;P0=valuea%16;break;b+;if(b=4) b=0;void reset(void) if(p16=0) delay(20); /是否按下复位键 if(p16=0) p17=1;while(1) P0=0xc0;P2=0xff;P3=0xef;a=0;if(p15=0) delay(20); /是否按下重启键 if(p15=0) circle(); 4 系统调试4.1 Proteus和Keil软件的联调在Keil中调试程序,在确保程序没有错误的情况下在工程属性中的输入输出选择生成.HEX文件,然后打开之前画好的设计仿真图并双击AT
22、89C52芯片将之前生成的.HEX文件加载到单片机中,然后点击软件界面左下方的运行按钮进行相应的仿真调试。如果发现错误则检查是程序编写错误还是仿真电路图的错误并进行纠正,直至没有错误为止。4.2 仿真效果图图4.1 仿真效果图(手控模式)图4.2 仿真效果图(光控模式)5 课程总结体会单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为自己的东西。课堂教学考虑到大多数同学的需求,主要强调“基本”基本知识、基本理论、基本方法、基本技能。而这次设计正是为我们提供了一个深入学习、探索的机会,成为课堂教学的有益补充。6 参考文献1 谢维成,杨加国主编,单片机原理与应用及C51程序设计(第2版),清华大学出版社,2009-07;2 李群芳,张士军,黄建编著单片微型计算机(第3版),电子工业出版社,2010-05;