毕业设计-基于单片机STC89C52RC的模拟路灯控制系统设计.doc_第1页
毕业设计-基于单片机STC89C52RC的模拟路灯控制系统设计.doc_第2页
毕业设计-基于单片机STC89C52RC的模拟路灯控制系统设计.doc_第3页
毕业设计-基于单片机STC89C52RC的模拟路灯控制系统设计.doc_第4页
毕业设计-基于单片机STC89C52RC的模拟路灯控制系统设计.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

题目名称:模拟路灯控制系统(I题)西京学院 参赛队员:刘洋洋 郭听宇 马强 摘要: 本系统采用单片机STC89C52RC作为模拟路灯控制系统的核心。由光耦传感器电路、光敏反馈电路、键盘输入及数码管显示电路、LED灯电路构成、蜂鸣器发声及LED指示灯电路、直流稳压电路。时钟系统由单片机构成,采用光敏电阻感应外部环境亮暗的变化以及检测LED灯的状态,利用反射式光电传感器检测路上信息。可靠的硬件设计和优化的软件算法,以及独立键盘与七段数码管使得路灯控制系统的操作简单、直观,系统设置了故障报警功能,令本设计更加人性化。 关键词:STC89C52RC单片机 LED指示灯 故障报警 Abstract:The system USES the monolithic STC89C52RC as the core of the system simulation street lamp control. Infrared sensor by electric circuit, photosensitive feedback circuit, keyboard input and digital pipe display circuit, LED lamp circuit structure, voice and LED indicator light buzzer circuit, constant current source circuit. The clock by single-chip microcomputer system structure, using photoconductive resistance induction external environment light and dark change and detection of LED lights, using state reflecting photoelectric sensor test the way information. Reliable hardware design and optimization software algorithm, and independent keyboard and seven period of digital tube makes street lamp of the control system of the operation is simple, intuitive, system has set up fault alarm function, make this a design more humane. Keyword: STC89C52RC Singlechip LED Indicator Fault alarm1 方案论证与比较1.1 采样方法选择光亮检测方案:方案一:采用光敏二极管感受外届光照变化,无光照时,有很小的饱和反向漏电流,二极管截止;光照时反向电流增大,形成光电流。方案二:采用光敏电阻对光源的感应改变自身电阻,由电压比较器提取之间电压,考虑到电阻变化的灵敏度,采用两个光敏电阻串联的方式,通过改变与光敏电阻串联的电位器的值可以调节光敏电阻的感光范围。考虑到现实中声光控制技术的运用已经证明了光敏电阻完全可以达到要求,且价格便宜,电路简单。综合考虑以上方案采用光敏电阻。 物体检测方案: 方案一、采用摄像头或探测头收集路面上信息。用这种方法,对路面信息处理准确,但是成本过高,数据处理量大,对硬、软件的要求都非常高,短时间内难以实现。 方案二:使用反射式红外二极管和接收管组成发射-接收器。由于红外光波长比可见光长,因此受可见光的影响比较小,同时,红外对管还具有以下优点:质量轻,灵敏度高,线性好,接口电路比较简单,安装方便,足够满足对本系统中物体检测的要求。基于以上原因,选用了成本较低的方案二。1.2 处理器的选择 单片机STC89C52RC作为模拟路灯控制系统的核心。STC89C52RC 具有许多优点:RAM,ROM空间大、指令周期短、运算速度快、低功耗、低电压、可编程音频处理,易于编程和调试。本题要求支路控制器有声光报警功能,由此看来单片机STC89C52RC更具有优越性。2 系统设计2.1 总体设计系统总框图如下:2.2 单元电路设计2.2.1 光耦传感电路光耦传感电路再整个项目中起着至关重要的作用,当74ALS373给三极管信号时,三极管处于饱和状态,此时光耦传感电路形成通路。当有车辆通过马路时此时它可感知物体,从而传给单片机,再由单片机来控制LED灯显示。2.2.2 光敏反馈电路光敏反馈电路是通过光敏电阻的变化来调节输出,由于上图中只有光敏电阻是可变的,所以可以通过比较器来调节输出,从而来控制电路。比较器 当去掉运放的反馈电阻时,或者说反馈电阻趋于无穷大时(即开环状态),理论上认为运放的开环放大倍数也为无穷大(实际上是很大,如LM324运放开环放大倍数为100dB,既10万倍)。此时运放便形成一个电压比较器,其输出如不是高电平(V+),就是低电平(V-或接地)。当正输入端电压高于负输入端电压时,运放输出低电平。当光敏电阻有光照射时,它的电阻大概在5K左右,在黑暗情况下时,它的电阻大概在50K左右,它的变化使得比较器的输入端口电压变化,通过比较器体现出来,然后输出端连接到单片机控制端。输出高电平大概在4V左右,低电平是0V。2.2.3 键盘输入及数码管显示电路2.2.4 LED灯电路构成 LED的内在特征决定了它是最理想的光源去代替传统的光源,它有着广泛的用途。体积小 ,LED基本上是一块很小的晶片被封装在环氧树脂里面,所以它非常的小,非常的轻。耗电量低,LED耗电非常低,一般来说LED的工作电压是2-3.6V。工作电流是0.02-0.03A。这就是说:它消耗的电不超过0.1W。灯体内也没有松动的部分,这些特点使得LED可以说是不易损坏的。 2.2.5 蜂鸣器发生及LED指示灯电路 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 ;蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。而我们用的是压电式蜂鸣器,图如上所示,当我们是pnp三极管工作在饱和状态时,三极管输出低电平,反之三级管输出高电平,使得蜂鸣器发出声音。2.2.6 故障检测电路2.2.7 直流稳压电路 三端集成稳压电路,这是一种集成电路的稳压电路,其功能是稳定直流输出电压。这种集成电路只有三根引脚,使用很方便,在许多场合都有着广泛应用。稳压电路的作用是使得输出的直流电压在电网电压或负载电流发生变化时保持稳定。它由电源变压器、整流电路、滤波电路、稳压电路等4部分组成的。变压器的作用是将交流市电变换成所需要的交流电压;整流电路的作用是将交流电变换成单向脉动直流电;滤波电路的作用是将脉动电压中的脉动成分去掉,输出比较平滑的直流电压;稳压电路的作用是使得输出的直流电压在电网电压或负载电流发生变化时保持稳定。3 软件设计主控制芯片为STC89C52RC,测量周期为Atmega16实现,由于处理器速度较快,所以采用c语言编程方便简单.软件流程图如下: 4 系统测试4.1 总功率测量(室温条件下) 输入信号 频率 幅度 测量时域总功率(w)测量频域总功率(w) 理论值估算误差 正弦波 100Hz 1 Vpp0.127 0.129 0.125 1.2% 1KH 1 Vpp 0.1260.129 0.125 1.3%音频信号 20Hz-10KHz20mVpp-5Vpp 0.783 0.761 X 5% 1.803 1.777 X 5% 结果分析: 由于实验室提供的能够模仿音频信号的且能方便测量的信号只有正弦信号,所以我们用一款比较差点的信号发生器产生信号,然后进行测量,发现误差不达,在+-5%以内。我们以音频信号进行测量,由于其实际值无法测量,所以我们只能根据时域和频域以及估计其误差,都在5%以内。4.2 单个频率分量测量(室温条件下) 输入信号频率幅度最大功率频点最大功率频点功率次大功率频点次大功率频点功率正弦波500Hz100mVpp 500Hz1.20mw 520Hz0.04mW正弦波5KHz1Vpp 5KHz 120mw 5.02KHz3.56mw音频信号20Hz-10K X 880Hz 23mw 600Hz 4.3mw结果分析:我们首先以理论上单一频率的正弦波为输入信号,在理想状况下,其频谱只在正弦波频率上有值,而由于有干扰,所以在其他频点也有很小的功率。音频信号由于有多个频点,所以没有一定的规律性。由于音频信号波动较大,没有一定的规律,且实验室没有专门配置测量仪器,所以我们只好以正弦波和三角波作为信号进行定量分析测量,以及对音频信号进行定性的分析和测量。我们发现其数字和用电脑模拟的结果符合得很近。5 结论本设计以单片机STC89C52RC系统为核心部件,采用光电检测技术,通过软件分时复用控制算法对系统进行优化,分模块实现赛题要求。在系统设计过程中,充分利用单片机的强大功能,力求以方便灵活的软件编程简化复杂难调的硬件电路,满足系统设计要求。坚持“人性化”理念,在具体设计中,使用键盘输入、七段数码管显示形成较为友好的人机交互界面。整机操作简单,使用方便,并很好的完成竞赛的全部要求。本设计主要特色:l 采用全集成混合信号在线系统单片机STC89C52RC主控系统,提高系统运行速度、简化硬件设计;l 优化的软件算法,智能化的自动控制;l 传感器检测系统,采用光敏电阻与光耦传感器;l 信号通过光电耦合器传递,实现控制电路与供电驱动电路隔离;l 声光告警指示电路;在本次设计过程中,我们三人通力合作,排除万难,终于按时完成了赛题设计任务。在这短短的四天三夜比赛过程中我们不仅提高了自己解决问题的能力,而且深深体会到团队协作精神的重要性。参考文献:信号与系统,ALAN V.OPPENHEIM著,西安:西安交通大学出版社,1997年;数字图像处理学,元秋奇著,北京:电子工业出版社,2000年;模拟电子线路基础,吴运昌著,广州:华南理工大学出版社,2004年;数字电子技术基础,阎石著,北京:高等教育出版社,1997年;数据结构与算法,张晓丽等著,北京:机械工业出版社,2002年;ARM&Linux嵌入式系统教程,马忠梅等著,北京:北京航空航天大学出版社,2004年;单片机原理及应用,李建忠著,西安:西安电子科技大学,2002年;附录:附1:元器件明细表:1、 D8255AC2、 STC89C523、 DAC08324、 ADC08095、 74LS2456、 液晶320*240附2:仪器设备清单1、 数字示波器2、 数字万用表 3、 信号发生器4、 稳压电源附3:电路图图纸附4:程序清单 /* * 模拟路灯程序*/#include #include #include #define uchar unsigned char#define uint unsigned int #define ulong unsigned long#define com8255 XBYTE0xff7f/8255端口定义#define pa8255 XBYTE0xff7c#define pb8255 XBYTE0xff7d#define pc8255 XBYTE0xff7e bit counta, countb; uchar bdata currentp1; /p1实时信号sbit sunshine=currentp10;sbit sensor1=currentp11;sbit sensor2=currentp12;sbit sensor3=currentp13;sbit trouble1=currentp14;sbit trouble2=currentp15;uchar bdata sensorvalue; /信号标志位sbit sensor1value=sensorvalue0;sbit sensor2value=sensorvalue1;sbit sensor3value=sensorvalue2; sbit led1en= sensorvalue3;/ 到达显示时间sbit led2en=sensorvalue4; /到达显示时间sbit alarmen=sensorvalue5; /关闭报警uchar bdata outnum;/输出信号sbit sensorswitch=outnum1; /传感器总开关sbit ledswitch=outnum2;sbit led1switch=outnum3;sbit led2switch=outnum4;sbit alarmled1=outnum6;sbit alarmled2=outnum7;sbit alarmspeaker=outnum5;sbit lock=P31;sbit dir2=P30;sbit dir1=P20; /是否全局变量待定uchar ms/*毫秒*/,msd,ms500, second,minute,hour,/时钟a1hour,a1minute,a1second,/a灯开灯时间a2hour,a2minute,a2second, /a灯关闭时间a3hour,a3minute,a3second, /a灯灯亮时长aihour,aiminute,aisecond, /a灯定时时间b1hour,b1minute,b1second, /b灯开灯时间b2hour,b2minute,b2second, /b灯关灯时间b3hour,b3minute,b3second, /b灯灯亮时长bihour,biminute,bisecond, /b灯定时时间k2num,/ 调时开关k3num,/切换显示开关k6num;/高峰期开关uint year; /年月日uchar date,month;uchar code table=/数码管编码0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e;/*/void init() /初始化 a1hour=16, /默认值16点开a灯a2hour=7, /默认值7点关b灯a3second=30, /默认a灯亮三十秒b1hour=16, /默认16点开b灯b2hour=7, /默认7点关b灯b3second=30, /默认b灯亮三十秒 com8255=0x80; pc8255 =0xff; com8255=0x89;/8255 ab出c入 ms=0; second=0; minute=0; hour=0; date=27; month=7; year=2011; P1=0xff; dir1=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TMOD=0x11; EA=1; ET0=1; TR0=1; TH1=(65536-50000)/256; TL1=(65536-50000)%256; ET1=1;/*/void delayms(uint z)/延时一毫秒 uint x=0; uchar y=0; for( x=z;x0;x-) for( y=120;y0;y- ); /*显示函数*/ void display(uchar h,uchar m,uchar s)/显示 uchar n,j,temp =0x80/*选管最高位*/; ulong num=s+m*1000+h*1000000; for( j=0;j8;j+) pb8255 = temp; temp = _cror_(temp,1); n=num%10 ; if(j=2|j=5) pa8255=0x90; else pa8255 = tablen; num=num/10; delayms(5); pa8255=0x00; void disdead(uchar h,uchar m,uchar s) /熄灭显示 uchar n,j,temp=0x80; ulong num=s+m*1000+h*1000000; for( j=0;j8;j+) pb8255 = temp; n=num%10 ; if(j=2|j=5) pa8255=0x00; else pa8255 = tablen; num=num/10; delayms(5); pa8255 = 0x00; temp = _cror_(temp,1); void disdead1(uchar h,uchar m,uchar s,uchar wei1,uchar wei2) /调时熄灭显示 uchar n,j,temp=0x80; ulong num=s+m*1000+h*1000000; for( j=0;j8;j+) pb8255 = temp; n=num%10 ; if(j=wei1|j=wei2) /试验 pa8255=0x00; else if(j=2|j=5) pa8255=0x90; else pa8255 = tablen; num=num/10; delayms(5); pa8255 = 0x00; temp = _cror_(temp,1); void dispdate(ulong y, uchar m, uchar d)/显示年月日 uchar n,j,temp =0x80/*选管最高位*/; ulong num=d+m*100+y*10000; for( j=0;j8;j+) pb8255 = temp; temp = _cror_(temp,1); n=num%10 ; pa8255 = tablen; num=num/10; delayms(5); pa8255 = 0x00; /*/uchar keyscan () /键盘扫描 uchar temp,temp1; temp=pc8255; temp=temp&0xfe; if(0xfe!=temp ) delayms(10); temp=pc8255; temp=temp&0xfe; if (temp!=0xfe) temp1=pc8255; temp1=temp1&0xfe; while(temp1!=0xfe) if(temp1=0x7e) /状 dispdate(year,month,date); else if (k3num=0) display(hour,minute,second);/可改变else if(k3num=1) display(a1hour,a1minute,a1second);else if(k3num=2) display(a2hour,a2minute,a2second);else if(k3num=3) display(a3hour,a3minute,a3second);else if (k3num=4) display(b1hour,b1minute,b1second);else if (k3num=5) display(b2hour,b2minute,b2second);else if (k3num=6) display(b3hour,b3minute,b3second); / 态 / 机 /display(num1); / second+;/ display (second+minute*100+hour*1000); temp1=pc8255; temp1=temp1&0xfe; return temp; void decrease(uchar *h,uchar *m,uchar *s) /减少数值 switch (k2num) case 1: (*s)-; if (*s=-1) *s=59;break; case 2: (*m)-; if (*m=-1) *m=59; break; case 3: (*h)-; if(*h=-1) *h=23; break; void increase (uchar *h,uchar *m,uchar *s) /数值增加 switch (k2num) case 1: (*s)+; if (*s=60) *s=0;break; case 2: (*m)+; if (*m=60) *m=0; break; case 3: (*h)+; if(*h=24) *h=0; break; uchar keydeal()/键值处理 uchar temp, circle; temp=keyscan(); if (temp!=0xfe) switch(temp) case 0xfc: / decreasekey1 switch(k3num) case 0:decrease(&second,&minute,&hour); break; case 1: decrease(&a1hour,&a1minute,&a1second);break;case 2:decrease(&a2hour,&a2minute,&a2second); break; case 3:decrease(&a3hour,&a3minute,&a3second);break;case 4:decrease(&b1hour,&b1minute,&b1second); break; case 5:decrease(&b2hour,&b2minute,&b2second);break;case 6: decrease(&b3hour,&b3minute,&b3second); break; break; case 0xfa: /set-time key2 k2num+; if(k3num=0) ms=0;if(TR0!=0)TR0=0; if (k2num=4) k2num=0; if (k3num=0) TR0=1; break; case 0xf6:/ 显示切换 key3 k3num+; if(k3num=7) k3num=0; break; case 0xee: / increase key4 switch(k3num) case 0:increase(&second,&minute,&hour); break; case 1: increase(&a1hour,&a1minute,&a1second);break;case 2:increase(&a2hour,&a2minute,&a2second); break; case 3: increase(&a3hour,&a3minute,&a3second);break;case 4:increase(&b1hour,&b1minute,&b1second); break; case 5:increase(&b2hour,&b2minute,&b2second);break;case 6: increase(&b3hour,&b3minute,&b3second); break; break; case 0xde: /alarm关闭 key5if(alarmen=0) alarmen=1; else alarmen=0; break;case 0xbe: / 高峰期两灯全开 k6 if(k6num=0)k6num=1; /开灯ledswitch=0; led1switch=0; led2switch=0; elsek6num=0; /关 ledswitch=1; led1switch=1; led2switch=1; signal_act (); break; case 0x7e:/DISPLAY-DATE k7 for( circle=0;circle=50;circle+) dispdate(year,month,date); break; default: break; return temp; tkdisplay( uchar h,uchar m,uchar s,uchar wei1,uchar wei2) /闪烁显示设置位 uchar temp,circle; for(circle=0;circle20;circle+)display(h,m,s);temp = keydeal();if(temp!=0xfe) if( !( temp= 0xfc| temp=0xee|temp=0xfa) k2num=0; TR0=1; goto out1; for(circle=0;circle20;circle+)disdead1(h,m,s,wei1,wei2);temp = keydeal(); if(temp!=0xfe) if( !( temp= 0xfc| temp=0xee|temp=0xfa) k2num=0; TR0=1; goto out1; out1: ; void timer0 () interrupt 1 /时钟中断TH0=(65536-50000)/256; TL0=(65536-50000)%256; ms+; if (ms=10) ms500=1; if( ms=20 ) ms500=0;ms=0; second+; if(second=60) second=0;minute +;if(minute=60) minute=0;hour+;if(hour=24)hour=0;date+; void ledtime ()interrupt 3 TH1=(65536-50000)/256; TL1=(65536-50000)%256; msd+; if( msd=20 ) msd=0; if(counta=1) aisecond+; if(aisecond=60) aisecond=0;aiminute +;if(aiminute=60) aiminute=0;aihour+;if(aihour=24)aihour=0; if(a3second=aisecond&a3minute=aiminute&a3hour=aihour)led1switch=1; aisecond=0; aiminute=0; aihour=0; if(countb=1) bisecond+; if(bisecond=60) bisecond=0;biminute +;if(biminute=60) biminute=0;bihour+;if(bihour=24)bihour=0; if(b3second=bisecond&b3minute=biminute&b3hour=bihour)led2switch=1; bisecond=0; biminute=0; bihour=0; void dispswitch(uchar h,uchar m,uchar s) /显示切换 if(k2num=0) if(k3num=0) if(ms500=0) display(hour,minute,second); else disdead(hour,minute,second); else display( h, m, s); keydeal();else if(k2num=1) tkdisplay( h, m, s,0,1) ; else if(k2num=2) tkdisplay( h, m, s,3,4);else if(k2num=3) tkdisplay( h, m, s,6,7); void signal_act () /路灯控制 dir1=1; /使245输入; 在2。0口 currentp1=P1;if(currentp1!=0xfe)/0xfe是光信号 if(!trouble1)&counta=1)/若有故障信号且在规定时间内 if(alarmen=0)alarmled1=0; alarmspeaker=0; if(!trouble2)&countb=1) if(alarmen=0)alarmled2=0;alarmspeaker=0; if(k6num=1) if(!sensor1) switch (sensorvalue&0x07) case 0: sensor1value=1; counta=1; /开计时1 if(led1en=1) led1switch=0;/led1亮 break; case 2: sensor1value=0;counta=0; /关

温馨提示

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

评论

0/150

提交评论