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

下载本文档

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

文档简介

1、标题:模拟路灯控制系统(标题 I)摘要:本系统采用单片机STC89C52RC作为模拟路灯控制系统的核心。它由光耦传感器电路、光敏反馈电路、键盘输入及数码管显示电路、LED灯电路、蜂鸣器发声及LED指示灯电路、直流稳压电路组成。时钟系统由单片机组成。它利用光敏电阻感应外部环境明暗变化来检测LED灯的状态,利用反射式光电传感器检测道路信息。可靠的硬件设计和优化的软件算法,结合独立的键盘和七段数码管,使路灯控制系统的操作简单直观,系统配备故障报警功能,使设计更加人性化。关键词: STC89C52RC单片机LED指示灯 故障报警方案演示与比较1.1 抽样方法的选择亮度检测方案:方案一:光电二极管用于感

2、应外界光线的变化。无光时,有小饱和反向漏电流,二极管截止;当光照时,反向电流增大,形成光电流。方案二:用光敏电阻感应光源改变自身阻值,提取电压比较器之间的电压。考虑到电阻变化的敏感性,将两个光敏电阻串联,通过改变阻值来改变与光敏电阻串联的电位器的值。光敏电阻的感光范围可以调整。考虑到声光控制技术在现实中的应用,证明光敏电阻完全可以满足要求,而且价格便宜,电路简单。考虑到上述方案,使用了光敏电阻。物体检测方案:选项 1. 使用摄像头或探测器收集道路信息。采用这种方法,对路面信息进行准确处理,但成本太高,数据处理量大,对软硬件要求很高,短时间内难以实现。方案二:使用反射型红外二极管和接收管组成发射

3、-接收器。由于红外光的波长比可见光长,所以受可见光的影响较小。同时,红外对管还具有重量轻、灵敏度高、线性好、接口电路简单、安装方便等优点,足以在本系统中进行物体检测。要求。由于上述原因,选择了成本较低的第二种方案。1.2 处理器的选择单片机STC89C52RC作为模拟路灯控制系统的核心。 STC89C52RC具有诸多优点:RAM、ROM空间大、指令周期短、运算速度快、功耗低、电压低、可编程音频处理、编程调试方便。本题要求支路控制器有声光报警功能,看来单片机STC89C52RC更胜一筹。2 系统设计2.1 整体设计系统整体框图如下:2.2 单元电路设计2.2.1光耦检测电路光耦感应电路在整个项目

4、中起着至关重要的作用。当74ALS373向三极管致信号时,三极管处于饱和状态,光耦感应电路形成通路。当有车辆通过道路时,它可以感应到物体并将其传输到单片机,然后单片机控制LED灯显示。2.2.2 光敏反馈电路光敏反馈电路通过光敏电阻的变化来调整输出。由于上图中只有光敏电阻是可变的,所以可以通过比较器调整输出来控制电路。当运放的反馈电阻从比较器中去掉时,或者当反馈电阻趋于无穷大(即开环状态)时,理论上认为运放的开环放大倍数也是无穷大的(实际上它很大,例如LM324运放)。开环放大率为100dB,即100,000倍)。此时,运算放大器形成一个电压比较器,其输出为高电平 (V+) 或低电平(V- 或

5、接地)。当正输入端电压高于负输入端电压时,运放输出低电平。光敏电阻受光照射时,其阻值约为5K,在黑暗中,其阻值约为50K,其变化使比较器的输入端电压发生变化,由比较器反映,然后输出端为连接到微控制器控制端。输出高电平为4V左右,低电平为0V。2.2.3键盘输入及数码管显示电路2.2.4 LED灯电路组成LED的特性决定了它是替代传统光源最理想的光源,用途广泛。体积小,LED基本上是一个封装在环氧树脂中的小芯片,所以非常小,非常轻。低功耗,LED的功耗很低,一般来说LED的工作电压为2-3.6V。工作电流为0.02-0.03A。也就是说:它消耗不超过0.1W。灯体也没有松动的部件。这些特性使LE

6、D不易损坏。2.2.5蜂鸣器产生和LED指示灯电路蜂鸣器是一种一体化结构的电子发声器。它采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、机器、定时器等电子产品中作为发声装置。 ;蜂鸣器主要分为压电蜂鸣器和电磁蜂鸣器两种。而我们使用的是压电蜂鸣器,如上图所示,当我们的pnp三极管工作在饱和状态时,三极管输出低电平,反之,三极管输出高电平,使蜂鸣器发声。2.2.6 故障检测电路2.2.7 直流稳压电路三端集成稳压电路,是一种集成电路的稳压电路,其作用是稳定直流输出电压。这种集成电路只有三个引脚,使用非常方便,在很多场合都有广泛的应用。稳压电路的作用是在电网电压或

7、负载电流变化时保持输出直流电压稳定。它由电源变压器、整流电路、滤波电路和稳压电路四部分组成。变压器的作用是将交流市电转换成所需的交流电压;整流电路的作用是将交流电转换成单向脉动直流电;滤波电路的作用是去除脉动电压中的脉动成分,输出比较平滑的直流电压;稳压电路的作用是在电网电压或负载电流变化时保持输出直流电压稳定。3 软件设计主控芯片为STC89C52RC,测量周期由Atmega16实现。由于处理器速度更快,用C语言编程方便简单。软件流程图如下:系统测试4.1 总功率测量(室温下)输入信号频率振幅测量时域的总功率 (w)测量频域中的总功率 (w)理论值估计误差正弦波100赫兹1 Vpp0.127

8、0.1290.1251.2%1KH1 Vpp0.1260.1290.1251.3%音频信号20Hz-10KHz20mVpp-5Vpp0.7830.761X“5%1.8031.777X“5%结果分析:由于实验室提供的唯一能模拟音频信号且容易测量的信号是正弦信号,我们使用比较差的信号发生器产生信号,然后测量,发现误差不超过 +-5。 经过。我们用音频信号进行测量。由于无法测量其实际值,我们只能根据时域和频域来估计其误差,两者均小于5%。4.2 单频分量的测量(室温下)输入信号频率振幅最大电源频率最大工频点功率次高工频次高工频点功率正弦波500赫兹100mVpp500赫兹1.20兆瓦520赫兹0.0

9、4mW正弦波5KHz1Vpp5KHz120兆瓦5.02KHz3.56兆瓦音频信号20Hz-10KX880赫兹23兆瓦600赫兹4.3兆瓦结果分析:我们首先以理论单一频率的正弦波作为输入信号。在理想条件下,它的频谱只在正弦波的频率上有值,而由于干扰,它在其他频率上的功率也很小。因为音频信号有多个频点,没有一定的规律性。由于音频信号波动很大,没有一定的规律,实验室也没有专门的测量仪器,所以我们只好用正弦波和三角波作为信号进行定量分析测量,才能定性分析测量音频信号。我们发现数值和计算机模拟结果非常吻合。5 结论本设计以单片机STC89C52RC系统为核心部件,采用光电检测技术,通过软件时分复用控制算

10、法对系统进行优化,并进行模块划分,达到竞赛要求。在系统设计过程中,我们充分利用单片机的强大功能,力求以方便灵活的软件编程,将复杂难调的硬件电路简化,满足系统设计要求。秉承“人性化”的理念,在具体设计中,采用键盘输入和七段数码管显示,形成更加友好的人机交互界面。整机操作简单,使用方便,很好地满足了比赛的各项要求。这种设计的主要特点:采用全集成混合信号在线系统单片机STC89C52RC主控系统,提高系统运行速度,简化硬件设计;优化的软件算法,智能自动控制;传感器检测系统,采用光敏电阻和光耦传感器;信号通过光电耦合器传输,实现控制电路与电源驱动电路的隔离;声光报警指示电路;在这个设计过程中,我们三人

11、通力合作,克服一切困难,最终按时完成了设计比赛的任务。在这短短的四天三夜比赛中,我们不仅提高了解决问题的能力,也深刻体会到了团队合作精神的重要性。参考:信号与系统,ALAN V.OPPENHEIM,交通大学,1997;数字图像处理,袁秋琪着,:电子工业,2000;模拟电子电路基础,吴云昌,华南理工大学,2004;数字电子技术基础,严石,高等教育,1997;数据结构与算法,小李等:机械工业,2002;ARM&Linux嵌入式系统教程,马忠梅等:航空航天大学,2004;单片机原理与应用,钟健,电子科技大学,2002;附录:附件一:组件清单:D8255ACSTC89C52DAC0832ADC0809

12、74LS245液晶屏 320*240附件二:仪器设备清单数字示波器数字万用表信号发生器电源附录3:电路图附录四:节目清单/* *模拟路灯程序*/#include #include #include #define uchar 无符号字符#define uint 无符号整数#define ulong unsigned long#define com8255 XBYTE0 xff7f /8255端口定义#define pa8255 XBYTE0 xff7c#define pb8255 XBYTE0 xff7d#define pc8255 XBYTE0 xff7e位counta,countb;uch

13、ar bdata 当前p1; /p1实时信号sbit 阳光=currentp10;sbit sensor1=currentp11;sbit sensor2=currentp12;sbit sensor3=currentp13;sbit麻烦1=当前p14;sbit麻烦2=当前p15;uchar bdata 传感器值; /信号标志位sbit sensor1value=sensorvalue0;sbit sensor2value=sensorvalue1;sbit sensor3value=sensorvalue2;sbit led1en=传感器值3; /到达显示时间sbit led2en=传感器值

14、4; /到达显示时间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 锁定=P31;位 dir2=P30;位 dir1=P20; /全局变量是否挂起uchar ms/*毫秒

15、*/,msd,ms500,秒,分,小时,/时钟a1hour,a1minute,a1second,/点亮时间a2hour,a2minute,a2second, /熄灯时间a3hour,a3minute,a3second, /灯亮的持续时间aihour, aiminute, aisecond, /轻计时时间b1hour,b1minute,b1second, /b 亮灯时间b2hour,b2minute,b2second, /b 熄灯时间b3hour,b3minute,b3second, /b 光照持续时间bihour, biminute, bisecond, /b灯计时时间k2num,/时间开关k

16、3num,/切换显示开关k6num;/高峰时段切换单位年份; /年月日uchar 日期,月份;uchar code table= /数码管代码0 xfc,0 x60,0 xda,0 xf2,0 x66,0 xb6,0 xbe,0 xe0,0 xfe,0 xf6,0 xee,0 x3e,0 x9c,0 x7a,0 x9e,0 x8e;/*/void init() /初始化 a1hour=16, /默认16点开a灯a2hour=7, /默认值为7点关闭b灯a3second=30, /默认a灯亮三十秒b1hour=16, /默认16点开启b灯b2hour=7, /默认7点关闭b灯b3second=3

17、0, /默认b灯亮三十秒com8255=0 x80;pc8255 = 0 xff;com8255=0 x89;/8255 ab out c in毫秒=0;秒=0;分钟=0;小时=0;日期=27;月=7;年=2011;P1=0 xff;目录1=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TMOD=0 x11;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(

18、x=z;x0;x-)for( y=120;y0;y- );/* 显示函数 */void display(uchar h,uchar m,uchar s) /显示 uchar n,j,temp =0 x80/*选择管子的最高位*/;乌龙数=s+m*1000+h*1000000;对于(j=0;j8;j+) pb8255 = 温度;temp = _cror_(temp,1);n=num%10 ;如果(j=2|j=5)pa8255=0 x90;别的pa8255 = 表n;数=数/10;延误(5);pa8255=0 x00; void disdead(uchar h,uchar m,uchar s) /

19、关闭显示 uchar n,j,temp=0 x80;乌龙数=s+m*1000+h*1000000;对于(j=0;j8;j+)pb8255 = 温度;n=num%10 ;如果(j=2|j=5) pa8255=0 x00;别的pa8255 = 表n;数=数/10;延误(5);pa8255 = 0 x00;temp = _cror_(temp,1); void disdead1(uchar h,uchar m,uchar s,uchar wei1,uchar wei2) /关闭显示 uchar n,j,temp=0 x80;乌龙数=s+m*1000+h*1000000;对于(j=0;j8;j+)pb

20、8255 = 温度;n=num%10 ;if(j=wei1|j=wei2) /测试pa8255=0 x00;否则如果(j=2|j=5) pa8255=0 x90;别的pa8255 = 表n;数=数/10;延误(5);pa8255 = 0 x00;temp = _cror_(temp,1); void dispdate(ulong y, uchar m, uchar d) /显示年月日 uchar n,j,temp =0 x80/*选择管子的最高位*/;乌龙数=d+m*100+y*10000;对于(j=0;j8;j+) pb8255 = 温度;temp = _cror_(temp,1);n=nu

21、m%10 ;pa8255 = 表n;数=数/10;延误(5);pa8255 = 0 x00; /*/uchar keyscan() /键盘扫描 uchar 温度,temp1;温度=pc8255;温度=温度&0 xfe;如果(0 xfe!=临时) 延迟(10);温度=pc8255;温度=温度&0 xfe;如果(温度!= 0 xfe)温度1=pc8255;温度1=温度1&0 xfe;而(temp1!= 0 xfe) if(temp1=0 x7e) /状显示日期(年、月、日);别的 如果 (k3num=0) 显示(时、分、秒); /可改变否则如果(k3num=1) 显示(a1 小时,a1 分钟,a1

22、 秒);否则如果(k3num=2) 显示(a2 小时,a2 分钟,a2 秒);否则如果(k3num=3) 显示(a3 小时,a3 分钟,a3 秒);否则如果 (k3num=4) 显示(b1小时,b1分钟,b1秒);否则如果 (k3num=5) 显示(b2小时,b2分钟,b2秒);否则如果 (k3num=6) 显示(b3 小时,b3 分钟,b3 秒); / 状态 / 机器/显示(num1); / 第二个+;/显示 (秒+分钟*100+小时*1000);温度1=pc8255;温度1=温度1&0 xfe;返回温度;void reduction(uchar *h,uchar *m,uchar *s)

23、/减少分数 开关(k2num) 案例 1: (*s)-;如果 (*s=-1)*s=59;休息;案例2:(*m)-; 如果 (*m=-1)*米=59; 休息;案例3:(*h)-; 如果(*h=-1)*h=23; 休息;void increase (uchar *h,uchar *m,uchar *s) /分数增加开关(k2num) 案例 1: (*s)+;如果 (*s=60)*s=0;休息;案例2:(*m)+; 如果 (*m=60)*m=0; 休息;案例3:(*h)+; 如果(*h=24)*h=0; 休息;uchar keydeal() /键值处理 uchar 温度,圆;临时=键扫描();如果(

24、温度!= 0 xfe)开关(温度)case 0 xfc: / 减少key1 开关(k3num) case 0:减少(&second,&minute,&hour);休息;案例1:减少(&a1hour,&a1minute,&a1second);休息;案例2:减少(&a2hour,&a2minute,&a2second);休息;案例3:减少(&a3hour,&a3minute,&a3second);休息;案例4:减少(&b1hour,&b1minute,&b1second);休息;案例5:减少(&b2hour,&b2minute,&b2second);休息;案例6:减少(&b3hour,&b3min

25、ute,&b3second);休息;休息;case 0 xfa: /设置时间key2 k2num+; 如果(k3num=0)毫秒=0;如果(TR0!=0)TR0=0;如果 (k2num=4) k2num=0;如果 (k3num=0)TR0=1;休息;case 0 xf6:/ 显示切换key3k3num+;如果(k3num=7)k3num=0;休息;case 0 xee: /增加key4开关(k3num) case 0:增加(&second,&minute,&hour);休息;案例1:增加(&a1hour,&a1minute,&a1second);休息;案例2:增加(&a2hour,&a2min

26、ute,&a2second);休息;案例3:增加(&a3hour,&a3minute,&a3second);休息;案例4:增加(&b1hour,&b1minute,&b1second);休息;案例5:增加(&b2hour,&b2minute,&b2second);休息;案例6:增加(&b3hour,&b3minute,&b3second);休息;休息;case 0 xde: /报警关闭key5如果(警报=0)警报=1;否则警报=0;休息;case 0 xbe: / 高峰时段两盏灯都全亮k6如果(k6num=0)k6num=1; /打开灯LED开关=0;led1开关=0;LED2开关=0;别的k

27、6num=0; /关LED开关=1;LED1开关=1;LED2开关=1;信号动作();休息;case 0 x7e:/DISPLAY-DATE k7对于(圆=0;圆=50;圆+)显示日期(年、月、日);休息;默认:休息;返回温度;tkdisplay(uchar h,uchar m,uchar s,uchar wei1,uchar wei2) /隐藏显示设置位 uchar 温度,圆;对于(圆=0;圆20;圆+)显示(h,m,s);临时=关键交易();如果(温度!= 0 xfe)if( !( temp= 0 xfc| temp=0 xee|temp=0 xfa) k2num=0;TR0=1;转到ou

28、t1; 对于(圆=0;圆20;圆+)disdead1(h,m,s,wei1,wei2);临时=关键交易();如果(温度!= 0 xfe)if( !( temp= 0 xfc| temp=0 xee|temp=0 xfa) k2num=0;TR0=1;转到out1; 出1:; void timer0 () 中断 1 /时钟中断TH0=(65536-50000)/256;TL0=(65536-50000)%256;毫秒+;如果(毫秒=10)ms500=1;如果(毫秒=20) ms500=0;毫秒=0; 第二+; 如果(秒=60) 秒=0;分钟+;如果(分钟=60)分钟=0;小时+;如果(小时=24

29、)小时=0;日期+; 无效 ledtime () 中断 3 TH1=(65536-50000)/256;TL1=(65536-50000)%256;微软+;如果(msd=20) msd=0; 如果(计数=1) aisecond+; 如果(aisecond=60) aisecond=0;一分钟+;如果(aiminute=60) aiminute=0;爱小时+;如果(aihour=24)ai小时=0;if(a3second=aisecond&a3minute=aiminute&a3hour=aihour)LED1开关=1;秒=0;爱分钟=0;ai小时=0;如果(计数b=1) 两秒+; 如果(双秒=

30、60) 双秒=0;双分钟+;如果(两分钟=60)双分钟=0;比小时+;如果(双小时=24)双小时=0;if(b3second=bisecond&b3minute=biminute&b3hour=bihour)LED2开关=1;秒=0;双分钟=0;双小时=0; void dispswitch(uchar h,uchar m,uchar s) /显示切换 if(k2num=0) if(k3num=0)如果(ms500=0)显示(时、分、秒);别的 disdead(小时,分钟,秒);别的显示(小时,米,秒);关键交易();否则如果(k2num=1)tkdisplay(h, m, s,0,1) ;否则

31、如果(k2num=2) tkdisplay(h, m, s,3,4);否则如果(k2num=3) tkdisplay(h, m, s,6,7);void signal_act () /路灯控制目录1=1; /输入245;在端口 2.0当前p1=P1;if(currentp1!=0 xfe) /0 xfe 为光信号if(!trouble1)&counta=1) /如果有故障信号并且在规定时间内 如果(警报=0)警报1 = 0; 报警器=0;if(!trouble2)&countb=1) 如果(警报=0)alarmled2=0;报警器=0;如果(k6num=1)如果(!传感器1) 开关(传感器值&0 x07)案例0:传感器1值=1;计数=1; /启动定时器1 如果(led1en=1)led1开关=0; /l

温馨提示

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

评论

0/150

提交评论