《基于单片机的霓虹灯控制器设计-设计报告(共27页).doc》由会员分享,可在线阅读,更多相关《基于单片机的霓虹灯控制器设计-设计报告(共27页).doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 题 目:基于单片机的霓虹灯控制器设计摘 要霓虹灯在现代社会中有广泛的应用,但传统的霓虹灯控制器利用移位寄存器的移位方式,只能实现几种有限的花式,因此市场迫切需要一种低成本高性能的霓虹灯控制器。本设计基于单片机实现多种花式的霓虹灯控制器。以AT89C52单片机为控制核心,使用独立式按键实现对霓虹灯的控制。该系统主要由单片机的主控部分、键盘输入部分和LED显示部分组成,运用I/O口输出的信号驱动发光二极管和数码管,使其产生有规律的闪烁和移动。该控制器电路实现简单,成本低,具有较高的性价比。关键字:霓虹灯;AT89C52;发光二极管;数码管目 录专心-专注-专业1.设计任
2、务1.1 设计目的和意义随着时代的进步,霓虹灯渐渐进入了人们的生活,如大型电子广告牌、汽车车灯、指示牌和工业控制的控制面板等都有霓虹灯的应用。但目前市场上的霓虹灯控制器能够实现的花式有限,且价格较贵。因此,设计一种性价比高,易于操作的霓虹灯控制器尤为重要。通过对霓虹灯控制器的设计,训练对单片机、电子技术等内容的综合应用能力。主要培养学生运用所学的知识来分析与解决问题的能力,并巩固和深化课堂知识。了解霓虹灯的硬件电路,掌握单片机编程的基本设计和分析方法。1.2 设计任务与要求设计任务:基于单片机设计一种霓虹灯控制器。基本要求:利用单片机控制霓虹灯的点亮;通过键盘的控制,实现霓虹灯的全亮、不同颜色
3、灯的点亮、霓虹灯的轮流点亮闪烁、全亮闪烁等;其中闪烁的频率可调。扩展要求:实现霓虹灯其他花式的点亮,使用数码管显示闪烁的时间、显示哪个发光二极管点亮。 2.硬件系统设计2.1总体设计方案2.1.1设计思路题目要求设计一个霓虹灯控制器,使发光二极管以不同的样式点亮。控制部分由单片机完成,通过独立式按键,选择不同的点亮方式,然后单片机将控制信号传输给发光二极管和数码管,从而完成不同的显示要求。在本次设计中,硬件部分由单片机系统、LED发光二极管、独立式按键和数码管组成3。原理图如图1所示。 P0 AT89C52 P2P1 P3 模式开关时钟电路复位电路复位电路键盘控制发光二极管电路数码管电路电源电
4、路图1 霓虹灯控制器原理图2.1.2方案论证与比较(1)主控芯片方案选择选择AT89C52单片机,这种型号比较常用,使用通用的51单片机语言,且价格便宜。该单片机有四组I/O口P0、P1、P2和P3,用来连接LED、数码管和键盘等,I/O口的数量符合本设计的要求。内部还有8K的RAM足以满足本设计的程序容量,无需扩展外部存储器。(2)发光二极管电路设计方案论证与选择方案一、采用矩阵式分布。利用单片机的P1口做行选信号,P2和P0口做列选信号,128个LED发光二极管构成8行,16列的矩阵。此方案能单独控制每一个发光二极管,也可单独控制每行或每列的发光二极管,从而形成丰富的图案或花样。但所需要的
5、发光二极管数量很多,硬件成本提高。方案二、利用单片机的P1口来接8个发光二极管,用几个发光二极管也可实现多种花式。考虑单片机I/O口的驱动能力,故发光二极管采用共阳极方式连接,只要输出低电平,即可点亮发光二极管,易于实现。综上所述,选择方案二。(3)键盘控制电路设计方案论证与选择方案一、采用按键式开关,设计一个44的矩阵键盘,节省了单片机的I/O口,但需要的按键过多,会造成硬件上的浪费。本设计中单片机的I/O口足以实现所有功能,使用键盘数量较少的独立式按键即可。方案二、采用8个独立式按键,检测按下后的低电平,即可实现控制信号的检测,需要的按键少,且程序实现简单,故采用方案二。(4)数码管电路设
6、计方案论证与选择方案一:采用LCD来显示发光二极管的闪烁时间和相应二极管点亮的数字,清晰明了,但LCD价格较贵,不宜采用。方案二:采用共阳极数码管,只要I/O口输出共阳极字型码,即可点亮数码管,不需要驱动电路,设计简单,降低成本。初步采用四段的共阳极数码管,显示出闪烁时间与数字,经实验最终使用一段数码管。综上所述,采用方案二。2.2 具体电路设计2.2.1单片机AT89C52简介AT89C52单片机内部含有8KB可重复编程的Flash存储器,可进行1000次擦写操作。全静态工作为033MHz,有3级程序存储器加密锁定,内含有128256字节的RAM、32条可编程的I/O端口、23个16位定时器
7、/计数器,68级中断,此外有通用串行接口、低电压空闲模式及掉电模式1。AT89C52在内部采用40条引脚的双列直插式封装,引脚排列如图2所示。图2 AT89C52芯片引脚2.2.2外部时钟方式电路本设计中AT89C52使用11.0592MHz晶振,一个机器周期为1us。XTAL1(19脚)和XTAL2(18脚):外接晶体引脚,XTAL1和XTAL2分别接外部晶振一端。在晶振的两侧再分别连接两个为30PF 的微调电容,构成稳定的自激振荡器2。具体电路如图3。.图3 外部时钟电路图2.2.3手动复位电路复位电路分为上电自动复位和按键手动复位,RST引脚是复位信号的输入端,复位信号是高电平有效。上电
8、自动复位通过电容C4和电阻R1来实现,按键手动复位的实际电路如图4所示(使用Protues仿真在数值选择上有一些区别) 。图4 手动复位电路2.2.4 发光二极管电路LED发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。其实际的结构图如图5所示。LED是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。半导体晶片由三部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子,中间通常是1至5个周期的量子阱。当电流通过导线作用于这个晶片的时候,电子和空穴就会被推向量子阱,在量子阱内电子跟空穴复合
9、,然后就会以光子的形式发出能量,这就是LED发光的原理。而光的波长也就是光的颜色,是由形成P-N结的材料决定的。它是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。由于具有容易控制、低压直流驱动、组合后色彩表现丰富、使用寿命长等优点,广泛应用于城市各工程中、大屏幕显示系统。LED可以作为显示屏,在计算机控制下,显示色彩变化万千的视频和图片。 图5 发光二极管的结构图在设计中,P0、P1、P2、P3是单片机的I/O口,用来连接LED、数码管和键盘等。考虑到单片机I/O端口的带负载能力,LED发光二极管采用共阳极的接法连接在P1口,
10、并用820的电阻分压。只要单片机P1口输出为低电平,对应的发光二极管被点亮。电路图如图6所示。图6 发光二极管电路图2.2.5数码管电路LED数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段,有的另加一个小数点。LED数码管根据LED的接法不同分为共阴和共阳两类,发光原理相同,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图7是共阴和共阳极数码管的引脚图。图7 引脚定义图在仿真设计时,采用四段共阳极数码管(用万能板搭建实际电路时,只有四段
11、数码管,为了保持仿真与实际电路的一致,故采用四段数码管。实际上,只用到一位显示,所以在画PCB板时,为节省硬件费用,采用一段的共阳极数码管)。数码管连接在P3口,并给数码管的第四段接上Vcc,当P3口输出共阳极字型码,即可显示出相应的数字。具体的电路如图8所示图8 数码管电路图2.2.6 键盘控制电路控制部分主要是由独立式按键完成。采用1个选择模式的自锁开关接在P0.0上,8个按键开关分别接至P2口,用来选择不同的花式。当自锁开关打开时,为模式一:按下按键开关1,使发光二极管全亮;按下按键开关2,使发光二极管以800ms的速度轮流点亮,再按一下闪烁频率增加,闪烁时间为500ms,再按一下,闪烁
12、频率最快,闪烁时间为200ms,并保持该最大频率,不再增加;按下按键开关3,频率减少,闪烁时间变为500ms,最终变为800ms;按下按键开关4,使发光二极管全闪烁,开始闪烁时间为800ms,再按一下频率增加,与按键2相同。按下按键开关5,发光二极管全闪烁的时间减少,功能与按键3类似。按下按键开关6,发光二极管以奇偶两组的形式闪烁。按下按键开关7,发光二极管从中间向两边依次点亮。按下按键开关8,发光二极管依次点亮相同颜色的管子,形成闪烁。按键6、7、8控制下的闪烁时间都为500ms。当自锁开关闭合时,为模式二:依次按下开关18,分别点亮发光二极管18,且同时数码管显示对应的数字。具体电路如图9
13、示。图9 开关控制电路图2.3 整体硬件电路将各模块电路连接起来,形成完整的硬件电路图。霓虹灯控制器包括2个部分,即AT89C52主控模块和LED发光二极管。前者是主控模块,具有按键、复位功能。后者是受控模块,上面接有8个LED发光二极管4。P0口接阻值为1K的排阻,提高其驱动能力,然后在P0.0上接一自锁开关,通过自锁开关的闭合使P0.0口出现高低电平,从而实现两种模式的切换。P1口接8个共阳极发光二极管,且串联820的限流电阻。P2口接8个独立式按键,通过不同键的按下使P2口出现低电平,依次来实现不同花式的选择。P3口接共阳极数码管,只要输出共阳极字型码,数码管便可静态显示相应的数字。具体
14、的整体电路如图10所示。 图10 整体硬件电路2.4系统所用元器件本系统硬件设计较为简单,主要由AT89C52单片机、按键式开关9个,自锁开关1个,发光二极管8个,共阳极数码管1个。所用的元器件较少,具体的元器件清单如表1所示。表1 元器件清单CommentDescriptionDesignatorFootprintLibRefQuantity瓷片电容CapacitorC1, C2HDR1X230pF2电解电容C3电解电容0.5mm47uF1LED发光二极管Typical RED GaAs LEDD1, D2, D3, D4, D5, D6, D7, D8, D9LED-1LED19共阳极数码
15、管14.2 mm General Purpose Blue 7-Segment Display: CA, RH DP, Gray SurfaceDS1HDpy Blue-CA1自锁开关K0, K-O开关开关2点触式开关K1, K2, K3, K4, K5, K6, K7, K8, K10点触式开关点触式开关9排阻Header, 9-PinP1HDR1X9Header 91排针Header, 2-PinP2HDR1X2Header 21电阻ResistorR0, R1, R2, R3, R4, R5, R6, R7, R8, R10, R11, R12, R13, R14, R15, R16,
16、R17, R18AXIAL-0.4Res218P89C52X2BN80C51 8-Bit Flash Microcontroller Family, 8 kB FlashU1SOT129-1AT89C521XTALCrystal OscillatorY1R3811.0592MHz13.软件系统设计3.1软件系统总体设计方案霓虹灯控制器最大特点在于所有亮灯模式均由软件控制完成。系统中软件可以分为主程序和子程序。主程序的大部份时间是在处理按键的查询,1个自锁式开关实现模式切换和8个按键式开关实现样式的选择。1个功能复位按键。主程序除了调用各种子模式子程序,调用延时子程序之外,还一直保持查询是否有功
17、能切键按下以及是否有模式改变按键按下,一旦有功能切换键和模式改变键按下,就会进入相应的按键处理。3.2程序流程图开 始Key1 灯1亮 数码管显示1Key0是否按下YKey2 灯2亮 数码管显示2Key3 灯3亮 数码管显示3Key4 灯4亮 数码管显示4Key5 灯5亮 数码管显示5Key6 灯6亮 数码管显示6Key8 灯8亮 数码管显示8Key7 灯7亮 数码管显示7Key1 灯全亮Key2 轮流亮 频率增加NKey3 轮流亮 频率减少Key4 全闪烁 频率增加Key5 全闪烁 频率减少Key6 奇偶两组交替点亮Key7 中间向两边依次点亮Key8 相同颜色依次点亮图11 软件流程图3.
18、2.1模式一子程序(1)原理与分析软件部分,由自锁开关实现两种模式的切换。模式一,自锁开关打开,通过if语句判断P0.0是否为低电平。当P0.0为低电平时,通过读取独立式键盘18的信号进行判断,检测到哪个键按下,便实现不同样式的选择,且由软件设置延迟时间,从而实现闪烁时间的不同。开 始(2)模式一流程图,如图12所示。开 始按键检测按键检测Key0是否按下YNKey0是否按下YN模 式 二模 式 一结 束结 束图12 模式一流程图 图13 模式二流程图3.2.2模式二子程序(1)原理与分析模式二,通过读取独立键盘18的信号,实现对应发光二极管的点亮,同时,数码管也显示对应的数字。(2)模式二流
19、程图,如图13所示。4.调试及仿真在Protues上进行仿真实验。首先使用Keil uVsion 4将编写完成的程序编译生成HEX文件,将HEX文件烧录到单片机中,进行仿真实验,结果如图14所示,可以看到,LED已经选择性的闪烁。测试结果:当P00口为高电平时,选择模式的开关打开,选择模式一:P2.0为低电平,发光二极管全亮;P2.1为低电平,发光二极管以800ms的速度轮流点亮,再按一下闪烁频率增加,闪烁时间为500ms,再按一下,闪烁频率最快,闪烁时间为200ms,并保持该最大频率,不再增加;P2.2为低电平,发光二极管轮流点亮,频率减少,闪烁时间变为500ms,最终变为800ms;P2.
20、3为低电平,发光二极管全闪烁,开始闪烁时间为800ms,再按一下频率增加,与P2.1口相同;P2.4为低电平,二极管全闪烁的时间减少,功能与P2.2口类似;P2.5为低电平,发光二极管以奇偶两组的形式闪烁;P2.6为低电平,发光二极管从中间向两边依次点亮;P2.7为低电平,发光二极管依次点亮相同颜色的管子,形成闪烁。当P00口为低电平时,选择模式的开关关闭,选择模式二:P2.0- P2.7为低电平,则分别点亮相应的发光二极管,且同时数码管显示对应的数字。总的来说,本文所设计的霓虹灯控制器达到了所有设计要求,且扩展了数码管功能,用来显示闪烁时间和哪个发光二极管亮。仿真结果如图14所示。图14 仿
21、真结果5.总结5.1本系统存在的问题及改进措施本设计的设计思想,原理和软件设计较简单。遇到的问题:比如当闪烁时间为800ms时,只能显示8来替代。在设计时,考虑使用数码管的动态扫描,来显示3位的闪烁时间800,但发现数码管会与发光二极管保持相同的频率,一起闪烁,不能达到预想的结果。经分析,数码管在本质上与发光二极管是相同的,在一个单片机系统中,不能实现预想的效果。可以通过双核解决这一问题,但花费的代价过大,故舍弃。设计的不足:受单片机I/O口的限制,能控制的发光二极管数量有限,在大型的设计中可以采用扩展I/O口和矩阵式相结合的方式,来解决这一问题。5.2心得体会 设计主要是结合单片机技术,把理
22、论知识运用到实际的设计中,霓虹灯控制器通过简单的I/O接口,在软件编程的基础下,实现由开关控制8个LED灯的亮灭变化以及闪烁频率变化。因为知识存在欠缺和不足,在刚开始设计时遇到了一些困难。最后通过查阅资料解决了各种困难,完成了设计的要求。在软件设计中,相比汇编语言的可读性和可移植性很差,因此我选择了C语言。由于C语言长久没使用,在编写程序时也有一些难度。但都在我的努力之下,逐一解决。编程时,首先是在编写主函数,首先构想了大致的框架,使用P0.0口的0和1两个状态来进入两种模式。但是出现了当程序进入模式一时,选择其中一种花式后,程序跳不出来。经检查,我使用了while(1)来实现轮流点亮,进入死
23、循环,程序不再往下执行。后来通过修改,设置一个状态变量解决了这一问题。在搭电路时,要查阅芯片的管脚图,确认连线,否则很容易出错。最后,在自己的认真对待下,不仅完成了设计的仿真,也做出了实物。从中有了很大的收获,我进一步熟悉并运用C语言来编程,且对单片机系统有了更深的掌握。参考文献1 郭文川主编. 单片机原理与接口技术. 北京:中国农业出版社,2007.2 张婧武,周灵彬.单片机系统的PROTEUS设计与仿真.北京: 电工出版社,2007.43 周佩玲,彭虎.微机原理与接口技术.北京: 电子工业出版社,2005.44 郭天祥.51单片机C语言教程.北京: 电子工业出版社,2009.1附录1 霓虹
24、灯实物图附录2霓虹灯PCB板图附录3 程序清单#include#include#define uchar unsigned char#define uint unsigned intuint m=0,n=0,num=0,shuzi=0,delay_time=0;uint key2_flag=0,key3_flag=0;uchar a=0xfe;sbit key0=P00; /模式选择开关sbit key1=P20;sbit key2=P21;sbit key3=P22;sbit key4=P23;sbit key5=P24;sbit key6=P25;sbit key7=P26;sbit ke
25、y8=P27;/-延迟子函数-/void delayms(uint xms) uint i,j; for(i=xms;i0;i-) for(j=110;j0;j-); /-模式一,开关0打开-/void mo_shi_yi_scan()if(key0=1) if(key1=0) /按键1,全部点亮 delayms(10);if(key1=0)P1=0x00; while(!key1); if(key2=0) /按键2,轮流点亮,频率增加 delayms(10);if(key2=0) num+;if(num=4)num=3;key2_flag=1;switch(num) case 1:delay
26、_time=800; P3=0x80;break;case 2: delay_time=500;P3=0x92;break;case 3: delay_time=200;P3=0xa4;break;default: break; while(!key2); if(key3=0) /按键3,轮流点亮,频率减少 delayms(10); if(key3=0) if(num1) num-; else num=1; key2_flag=1; switch(num) case 1:delay_time=800;P3=0x80; break; case 2: delay_time=500;P3=0x92;
27、break; default: break; while(!key3); if(key4=0) /按键4,全部闪烁,频率增加 delayms(10); if(key4=0) shuzi+; if(shuzi=4)shuzi=3;key3_flag=1;switch(shuzi) case 1:delay_time=800;P3=0x80; break; case 2: delay_time=500;P3=0x92;break;case 3: delay_time=200;P3=0xa4;break;default: break; while(!key4); if(key5=0) /按键5,全部
28、闪烁,频率减少 delayms(5); if(key5=0) if(shuzi1) shuzi-; else shuzi=1; key3_flag=1; switch(shuzi) case 1: delay_time=800; P3=0x80; break; case 2: delay_time=500; P3=0x92; break; default: break; while(!key5); if(key6=0) /按键6,两组间隔点亮,闪烁时间为500ms delayms(10); if(key6=0) while(1) P1=0xaa; delayms(500); P1=0x55;
29、delayms(500); while(!key6); if(key7=0) /按键7,中间向两边点亮,闪烁时间为500ms delayms(10); if(key7=0) while(1) P1=0xe7; delayms(500); P1=0xdb; delayms(500); P1=0xbd; delayms(500); P1=0x7e; delayms(500); while(!key7); if(key8=0) /按键8,相同颜色的灯点亮,闪烁时间为500ms delayms(10); if(key8=0) while(1) P1=0x6d; delayms(500); P1=0xb
30、6; delayms(500); P1=0xdb; delayms(500); while(!key8); void panduan() /判断,改变闪烁频率 if (key2_flag=1) P1=a;delayms(delay_time);a=_crol_(a, 1); if (key3_flag=1) P1=0x00;delayms(delay_time);P1=0xff;delayms(delay_time);/*-模式二,开关0闭合:按键1-8,依次点亮各灯-*/void mo_shi_er_scan() if(key0=0) if(key1=0) delayms(10); if(k
31、ey1=0) P1=0xfe; P3=0xf9; while(!key1); if(key2=0) delayms(10); if(key2=0) P1=0xfd; P3=0xa4; while(!key2); if(key3=0) delayms(10); if(key3=0) P1=0xfb; P3=0xb0; while(!key3); if(key4=0) delayms(10); if(key4=0) P1=0xf7; P3=0x99; while(!key4); if(key5=0) delayms(10); if(key5=0) P1=0xef; P3=0x92; while(!key5); if(key6=0) delayms(10); if(key6=0) P1=0xdf; P3=0x82; while(!key6); if(key7=0) delayms(10); if(key7=0) P1=0xbf; P3=0xf8; while(!key7); if(key8=0) delayms(10); if(key8=0) P1=0x7f; P3=0x80; while(!key8); /-主函数-/void main() while(1) mo_shi_yi_scan(); panduan(); mo_shi_er_scan();