还剩45页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
单片机的智能交通灯控制系统的设计与实现摘要本设计设计了一种基于单片机的带车流量检测的智能交通灯控制系统比较具体的描述了系统的控制方案、硬件选择以及单片机程序的设计等该系统由两片STC98C52单片机作为控制芯片电路由晶振电路、复位电路、按键电路、车辆检测电路、主和从控制器、数码管倒计时显示电路、车道红黄绿灯电路、人行道红绿灯电路等组成系统可以根据检测到的车流量的大小来自动设定绿灯的时间长短并且本系统设计了紧急模式和夜间模式当启动紧急模式,所有路口都变为红灯当启动夜间模式,所有路口都变为黄灯闪烁关键词光电传感器;车流量检测;STC89C82单片机;交通灯Abstract本设计设计了一种基于单片机的带车流量检测的智能交通灯控制系统比较具体的描述了系统的控制方案、硬件选择以及单片机程序的设计等该系统由两片STC98C52单片机作为控制芯片电路由晶振电路、复位电路、按键电路、车辆检测电路、主和从控制器、数码管倒计时显示电路、车道红黄绿灯电路、人行道红绿灯电路等组成系统可以根据检测到的车流量的大小来自动设定绿灯的时间长短并且本系统设计了紧急模式和夜间模式当启动紧急模式,所有路口都变为红灯当启动夜间模式,所有路口都变为黄灯闪烁Thedesignofacontrolsystemwithvehicleflowdetectionofintelligenttrafficlightsbasedonsinglechipmicrocomputer.MorespecificdescriptionoftheselectionofcontrolschemethesystemshardwareandtheMCUprogramdesign.ThesystemconsistsoftwoSTC98C52singlechipmicrocomputerascontrolchip.ThecircuitconsistsofacrystaloscillatorcircuitresetcircuitkeycircuitthevehicledetectioncircuitmasterandslavecontrollerdigitalcountdowndisplaycircuitCheDaohongyellowlightcircuitthesidewalktrafficlightcircuitetc..Automaticallysetthelengthoftimethegreenlighttrafficsystemcanaccordingtothesizeofthedetected.Andthesystemdesignofemergencymodeandnightmode.Whenstarttheemergencymodealljunctionsareturnedred.Whenstartingthenightmodealljunctionsareflashingyellowlightisvariable.关键词光电传感器;车流量检测;STC89C82单片机;交通灯Keywords:photoelectricsensor;vehicleflowdetection;STC89C82MCU;trafficlights1绪论在当代,红绿灯基本都已安装在各个路口上,已成为指挥、疏导交通的最常见并且是最有效的手段了但是这一技术早在19世纪就已经出现了1858年,英国伦敦的主要街头就安装了以燃气为光源的红、蓝两色机械扳手式的信号灯,用来指挥过往马车的通行这就是世界上最早的交通灯了到1868年英国的工程师纳伊特在伦敦的威斯敏斯特区的议会大厦前广场上,安装了世界上最早的煤气式红绿信号灯信号灯由红绿两块以旋转方式的方形玻璃的提灯组成,红色的表示“停止”信号,绿色的表示“注意”信号在1869年1月2日,该煤气灯突然爆炸,致使警察受伤,才被取消1914年,以电气启动的红绿灯在美国出现这种红绿信号灯由红色、绿色、黄色三种圆形的投光器组成,被安装在纽约市的5号大街的一座塔上红灯亮代表“停止”,绿灯亮代表“通行”1918年,出现的带控制功能的红绿灯和红外线式红绿灯带控制功能的红绿灯,一种是将压力探测器安装在地底下,当有车辆接近时红就便变为绿灯;另一种是使用扩音器启动红绿灯,当司机遇到红灯时只需要按一下喇叭,就能使红灯变换为绿灯红外线式的红绿灯是当行人踏上对压力敏感的路面上时,它就能检测到有人要过马路红外光束能把信号灯的红灯延长一小段时间,使汽车放行延时,避免发生交通事故交通信号灯的出现,改善了交通混乱的现象,对于疏导交通以及提高道路的通行能力和减少交通事故有了明显的效果1968年,联合国的《道路交通和道路标志信号协定》对各种交通信号灯的含义作出了规定绿灯是代表通行信号,只有面对绿灯的车辆菜可以直行、左转弯和右转弯,除非有另一种标志禁止了某一种转向左右转弯的车辆都必须先让合法的正在路口内行驶的车辆以及过人行横道的行人优先通行红灯是代表禁行信号,车辆面对红灯时必须在交叉路口的停车线之后停车黄灯代表警告信号,车辆面对黄灯时不能越过停车线,但时车辆已经十分接近停车线而又不能安全停车的可以进入交叉的路口伴随着经济的快速发展,道路交通运输出现了一些以往的方法难以解决的问题道路拥挤的现象日益严重,所造成的经济损失也越来越大,并且一直保持着大比例的增长现在一般的交通系统已经不能满足高速的经济发展的需求由于人们生活水平的大幅提高,人们对交通的安全性以及可靠性都提出了更高的要求在交通管理中引入单片机控制交通灯来代替交管人员在交叉路口的指挥,有助于提高交通运输的安全可靠性还能在一定程度上减小工作人员的劳动强度此交通信号灯控制系统的主要技术在于利用51单片机的特性每片单片机有四个基本的I/O口,此交通信号灯控制系统采用红、黄、绿三种颜色灯工作,设计了每个路口带有直行和左转单独控制红灯亮代表该方向禁行,绿灯亮代表放行,而黄灯亮则采用闪烁的工作方式起到由绿灯向红灯变化过程中的提示作用用两片STC89C52作为控制芯片本设计的目的在于提高车辆在十字路口疏散能力尽量减少交通事故的发生其应用范围包括一般的大、中型十字路口其实际意义在于代替交管人员在交叉路口的服务减少劳动成本实验证明该系统能够简单并且有效地疏导交通,大大提高了交叉路口的通行能力并在一定程度上尽可能的降低由道路拥挤所造成的经济损失,减小了工作人员的劳动强度,创造一个更加美好、和谐的社会2交通信号灯管理方案论证
2.1设计任务东西、南北两干道交于一个十字路口,主干道各有一组直行红、黄、绿灯和左转红、黄、绿六个指示灯,人行道有红、绿两个指示灯,指挥车辆以及行人安全通行红灯亮禁止车辆或者行人通行,绿灯亮允许车辆或者行人通行车道的直行和左转绿灯的默认设计时间都为30秒,黄灯为3秒闪烁交通信号灯控制系统在正常运行状态下由八个状态组成,可以通过单片机用程序编程设计实现因为本设计需要用到较多I/O使用一片单片机显然是不够用的,因此,可以用扩展芯片或者用多片单片机通信的方式来实现扩展下面就2个方案做了比较择优选取本设计中,因为南和北、东和西的信号灯是一致的因此需要设计的I/O有以下这些南北倒计时的两位数码管需要9个I/O;东西倒计时的两位数码管需要9个I/O;设置时间按键需要4个I/O;南北人行道的红绿灯需要2个I/O;东西人行道的红绿灯需要2个I/O;紧急模式与夜间模式按键需要2个I/O;南北直行和左转红、绿、黄信号灯需要6个I/O;东西直行和左转红、绿、黄信号灯需要6个I/O;车流量检测分为东、南、西、北以及左转共需要8个I/O;以上必须用到的I/O数量一共为48个因此需要扩展I/O一片STC89C52单片机共有I/O32个所以需要再扩展16个I/O口,才能保障系统有足够的I/O使用
2.2方案的分析以及比较选择
1.方案一采用74LS595扩展的方法,每一片74LS595最多只能扩展8个I/O口,本设计中的扩展16个I/O口至少需要3片74LS595芯片因为扩展74LS595芯片需要占用几个的单片机的I/O,因此扩展两片74LS595是不够用的采用此种扩展方法不但需要读单片机进行比较复杂的编程另外,三片74LS595的价格和再用一片STC89C52单片机的价格也差不多了
2.方案二采用两片同样的STC89C52单片机作为控制芯片,价格不高并且编程容易两片单片机之间通过UART通信接口连接,利用串口通信中断,可以实时的进行双向通信,为系统的稳定运行打下了坚实的基础本设计选择STC89C52单片机作为主控芯片的原因也是显而易见的,此款单片机完全兼容51单片机的内核是台湾的宏晶科技生产的一款芯片,此芯片的一大优点就是支持USB烧写程序,不需要专用的编程器,极大地方便了程序的后期调试选用51内核的单片机是因为现在51单片机的发展已经成熟,而且去网上搜集资料很方便,这就为本设计能最终得以实现提供了有利条件而且本单片机现在的市场售价也很低廉从各个角度的综合考虑才选择的此种用两片STC89C52单片机作为控制芯片的方案3系统硬件电路设计本系统硬件原理图如图3-1所示系统共用两片STC89C52单片机,一片作为主机,另一片作为从机主机与从机之间通过单片机的UART通信模块通信每个单片机都设计了单独的复位系统本设计包括电源电路,单片机最小系统,数码管倒计时显示电路,按键电路,车道指示灯电路,人行道指示灯电路,车流量检测电路等七个部分以下将介绍这些部分电路的工作原理图3-1智能交通灯控制系统硬件原理图单片机各管脚功能定义如表3-1和表3-2所示表3-1主单片机管脚功能表3-2从单片机管脚功能
3.1电源部分电源部分电路如图3-2所示图中J1为电源接口,C3,C4为滤波电容;R13为D1的限流电阻D1为电源LED指示灯工作时,当有电源接入后,经C
3、C4滤去纹波后点亮D1因为LED的工作电流一般不超过20mA,R13起到限制电流在20mA以下3-2电源电路
3.2单片机最小系统单片机最小系统电路如图3-3所示图纸中U1为STC89C52RC单片机,U1为主机,这里只介绍主机,从机和主机的原理是一样的RP1为单片机的P0口的上拉电阻根据查阅单片机的数据手册,我们知道此单片机的P0口是准双向I/O口,需要接上拉电阻C1S1,R1构成了单片机的复位系统,当单片机正常工作时单片机的RST引脚电压被R1电阻拉低;当S1按下时单片机的RST引脚接到VCC被拉高,此时单片机复位,直到松开S1单片机的RST引脚又被R1拉低单片机才继续工作电容C1起到的作用是按键S1动作时防止电压抖动的,也是滤波电容图3-3单片机最小系统电流图
3.3数码管倒计时显示电路数码管倒计时显示电路如图3-4所示本设计选用的是共阳极两位数码管,Q1AQ2A为南北倒计时数码管的驱动管;Q3A,Q4A为东西倒计时数码管的驱动管三极管Q1A,Q2AQ3AQ4A选用的是常用的8550三极管图中右侧的R
9.R10R11R12为三极管的基极电阻,其余的最右侧的连接P0口和P1口的电阻都为数码管的限流电阻图3-4数码管倒计时显示电路以Q1A控制的数码管为例,此部分的工作原理是当Q1A为高电平那么数码管共阳极为高电平,此时当A1为低电平那么数码管a段被点亮,当A1为高电平,a段熄灭;当Q1A为低电平时,无论A1是高或者低电平,数码管a段都熄灭其余的B1C1,D1E1F1G1亮灭原理都是如此,用单片机动态执行起来就可以看到数码管的数据变化了
3.4按键电路按键电路如图3-5所示图中R3R4R5R6都为上拉电阻,S3S4S5S6分别为菜单键,增加键,减小键,确定键以R3和S3部分举例说明当菜单键S3按下后单片机的P20引脚被拉成低电平,当S3放开后单片机的P20引脚被拉成高电平,单片机程序通过检测这些引脚的电平状态来判断是否有按键按下,以及是哪个按键按下系统设计的紧急模式按键与夜间模式按键硬件工作原理和此同样图3-5按键电路原理图
3.5车道指示灯电路图3-6车道指示灯电路车道指示灯电路如图3-6所示D
51、D52分别为南北左转红灯,D
53、D54分别为南北左转黄灯,D
55、D56分别为南北左转绿灯,D
57、D58分别为南北直行红灯,D
62、D63分别为南北直行黄灯,D
67、D68分别为南北直行绿灯;D
59、D60分别为东西左转红灯,D
64、D65分别为东西左转黄灯,D
69、D70分别为东西左转绿灯,D
61、D80分别为东西直行红灯,D
66、D81分别为东西直行黄灯,D
71、D82分别为东西直行绿灯以D51电路部分为例,当P200为高电平时,D51熄灭,当P200为低电平时,D51点亮R22为限流电阻其余电路和此同样
3.6人行道指示灯电路人行道红绿灯部分的电路如图3-7所示图中D2D3为南北人行道红灯,D4D5为南北人行道绿灯,D6D7为东西人行道红灯,D8,D9为东西人行道绿灯R14,R15R16R17R18R19R20R21为限流电阻,D2-D9为图3-7人行道红绿灯电路图
3.7车流量检测电路车流量检测电路如图3-8所示图中D72-D79为发光器件,电阻R119-R126为限流电阻,RP13-RP20为光敏电阻,R143-R150为分压电阻正常工作时发光器件发光,对应的受光部分光敏电阻当没有车经过时光敏电阻受光内阻减小,经过分压电阻分压,对应的单片机引脚检测到高电平;当有车经过时,发光器件发出的光被车辆遮挡,对应的光敏电阻不受光内阻变大,对应的单片机引脚检测到低电平这样单片机就知道是否有车经过了图3-8车流量检测电路4系统软件设计系统程序包括两部分,主单片机程序和从单片机程序,主单片机与从单片机通过单片机的UART模块实现相互通信
4.1系统流程图
4.
1.1系统主程序流程图系统主程序流程图,如图4-1所示图4-1系统主程序流程图系统上电后首先初始化,其次判断紧急按键是否按下,如果按下则进入紧急模式,系统工作在紧急模式下实时判断是否再次有紧急按键按下如果紧急按键再次按下则退出紧急模式,若紧急按键未再次按下,则继续判断;如果在主程序中紧急按键未按下,则判断夜间模式按键是否按下若夜间模式按键按下则进入夜间模式,在夜间模式下,循环判断夜间模式按键是否再次被按下,如果夜间模式按键未再次按下则系统一直判断夜间模式按键是否再次被按下,若夜间模式按键再次被按下则退出夜间模式主程序检测设置菜单键是否按下,如果菜单键未按下则工作在正常模式如果菜单键按下则系统进入设置模式进入设置模式后,通过数码管我们首先看到的是南北直行绿灯的时间,通过增加键或者减小键来调节南北直行绿灯的时间,调整好后按下确定键保存南北直行的绿灯时间接下来看到的是南北左转绿灯的时间,通过增加键或者减小键来调节南北左转绿灯的时间,调整好后按下确定键保存南北左转的绿灯时间这时看到的是东西直行绿灯的时间,通过增加键或者减小键来调节东西直行绿灯的时间,调整好后按下确定键保存东西直行的绿灯时间最后看到的是东西左转绿灯的时间,通过增加键或者减小键来调节东西左转绿灯的时间,调整好后按下确定键保存东西左转的绿灯时间这时就退出了设置模式设置模式流程图如图4-2所示图4-2设置模式流程图系统工作在正常模式时,首先是南北直行绿灯30秒,其余车道均为红灯,南北直行绿灯30秒过后是南北直行黄灯闪烁3秒,再之后是南北左转绿灯30秒,再是南北左转黄灯3秒;在以上的四种工作模式下东西人行道都是绿灯,南北人行道是红灯;其次是东西直行绿灯30秒,其余车道均为红灯,东西直行绿灯30秒过后是东西直行黄灯闪烁3秒,再之后是东西左转绿灯30秒,再是东西左转黄灯3秒;在以上的四种工作模式下东西人行道都是红灯,南北人行道是绿灯再之后是工作到系统第一种模式如此循环往复当系统工作在正常模式时,有紧急模式或者夜间模式请求,则系统进入紧急模式或者夜间模式系统工作在正常模式时的流程图如图4-3所示图4-3正常模式时流程图系统进入紧急模式后,所有路口的红灯亮起,其余灯都熄灭,此时禁止通行当系统进入夜间模式后,所有路口的黄灯开始闪烁,此时各个路口进入提示模式
4.
1.2系统车检测流程图系统车检测流程图如图4-4所示当系统工作在正常模式时,南北直行绿灯时,检测南北直行车流量,当检测到的车流量数大于默认的30秒数据时,则自动设置下次南北直行的绿灯时间为此次的车流量数据,当小于或者等于30时则下次南北直行的绿灯时间不变依然为默认的30秒比如当检测到的车流量为45,那么设置下次的南北直行绿灯时间为45秒,假如检测到的车流量为29,那么设置下次的南北直行绿灯时间为30秒南北左转,东西直行,东西左转的车辆检测都是如此图4-4系统车检测流程图
4.2程序部分
4.
2.1主单片机程序主单片机程序部分包括主程序,初始化程序,显示程序,通信中断程序,定时中断程序,设置程序等部分
1.主程序部分程序如下voidmain//主函数{init;//初始化程序set_time;//设置时间while1{key_read;//按键读取函数key_set;//按键设置程序key_read1;//按键读取函数key_set1;//按键设置程序whilestatus=7//紧急、夜间模式下不调用{key_read;//按键读取函数key_set;//按键设置程序key_read1;//按键读取函数key_set1;//按键设置程序ifTrg1==1//菜单键按下{menu=1;//进入菜单设置set_bit=1;//设置标志data_b1S_CAR_SL_G_time_set;//首先设置位置南,车直行绿灯时间TR0=0;//}whilemenu==1//菜单设置下{key_read1;//按键读取函数key_set1;//按键设置程序display1;}//data_b;display;}E1=1;//关闭数码管E2=1;//关闭数码管S1=1;//关闭数码管S2=1;//关闭数码管}}
2.初始化程序部分如下voidinit//初始化程序{PCON=0x00;EA=1;//开全局中断ET0=1;//开定时中断0ES=1;//开串口中断PS=1;//串口中断高TMOD=0x21;//TH0=0x3c;//T0高8位TL0=0xb0;//T0低8位//T1为接收波特率发生器//T1为发送波特率发生器TH1=0x00;//T1高8位TL1=0xfd;//T1低8位SCON=0x50;//串口模式TI=0;RI=0;TR0=1;//启动定时器0TR1=1;//初始化完成......S1=S2=1;Sg=Sr=1;E1=E2=1;Eg=Er=1;}
3.显示程序如下voiddisplay//数码管显示函数{ifurgent_bit==0night_bit==0//正常模式时,打开数码管显示{P1=DS_CODE[E_shi];E1=0;E2=1;delay5;P1=DS_CODE[E_ge];E1=1;E2=0;delay5;P0=DS_CODE[S_shi];S1=0;S2=1;delay5;P0=DS_CODE[S_ge];S1=1;S2=0;delay5;}else//紧急或者夜间模式时,关闭数码管显示{E1=1;E2=1;S1=1;S2=1;}}
4.通信中断程序如下voidSerial_INTinterrupt4//串口接收程序{ifRI{switchSBUF{caseS://南北直行ifstatus==0//{S_SL_CAR_check_time=S_SL_CAR_check_time+1;}break;caseW://东西直行ifstatus==4{E_SL_CAR_check_time=E_SL_CAR_check_time+1;}break;caseT://南北左转直行ifstatus==2{S_L_CAR_check_time=S_L_CAR_check_time+1;}break;caseY://东西左转直行ifstatus==6{E_L_CAR_check_time=E_L_CAR_check_time+1;}}RI=0;}}
5.定时中断程序如下voidintertimer0interrupt1//using**//T0定时中断处理{TH0=0x3c;//T0高8位TL0=0xb0;//T0低8位second_timing++;ifsecond_timing20//记时一秒{switchstatus{case0:ifS_CAR_SL_G_time==S_CAR_SL_G_time_set{putc_to_SerialPortA;}E_CAR_SL_R_time=S_CAR_SL_G_time+6+S_CAR_L_G_time;//东西方向,红灯时间data_bS_CAR_SL_G_timeE_CAR_SL_R_time;S_CAR_SL_G_time--;Sg=Er=1;//灭灯Sr=Eg=0;//南红,东绿ifS_CAR_SL_G_time=0{S_CAR_SL_G_time=S_CAR_SL_G_time_set;status=1;}//E_footway_time--;//ifE_footway_time=0//{//E_footway_time=S_CAR_L_G_time+S_CAR_SL_G_time+2*Y_time;//}urgent_bit=0;//紧急标志位night_bit=0;//夜间标志位break;//南绿灯亮case1:ifY_time==3{putc_to_SerialPortB;ifS_SL_CAR_check_time30{S_CAR_SL_G_time=S_SL_CAR_check_time;S_CAR_SL_G_time_set=S_SL_CAR_check_time;S_SL_CAR_check_time=0;}else{S_CAR_SL_G_time=30;S_CAR_SL_G_time_set=30;}}E_CAR_SL_R_time=Y_time+S_CAR_L_G_time+3;//东西方向,红灯时间data_bY_timeE_CAR_SL_R_time;Y_time--;Sg=Er=1;//灭灯Sr=Eg=0;//南红,东绿ifY_time=0{Y_time=3;status=2;}//E_footway_time--;//ifE_footway_time=0//{//E_footway_time=S_CAR_L_G_time+S_CAR_SL_G_time+2*Y_time;//}urgent_bit=0;night_bit=0;break;//南黄灯亮case2:ifS_CAR_L_G_time==S_CAR_L_G_time_set{putc_to_SerialPortC;}E_CAR_SL_R_time=S_CAR_L_G_time+3;//东西方向,红灯时间data_bS_CAR_L_G_timeE_CAR_SL_R_time;S_CAR_L_G_time--;Sg=Er=1;//灭灯Sr=Eg=0;//南红,东绿ifS_CAR_L_G_time=0{S_CAR_L_G_time=S_CAR_L_G_time_set;status=3;}//E_footway_time--;//ifE_footway_time=0//{//E_footway_time=S_CAR_L_G_time+S_CAR_SL_G_time+2*Y_time;//}urgent_bit=0;night_bit=0;break;//南红灯亮,南左转绿灯亮case3:ifY_time==3{putc_to_SerialPortD;ifS_L_CAR_check_time30{S_CAR_L_G_time=S_L_CAR_check_time;S_CAR_L_G_time_set=S_L_CAR_check_time;S_L_CAR_check_time=0;}else{S_CAR_L_G_time=30;S_CAR_L_G_time_set=30;}}E_CAR_SL_R_time=Y_time;//东西方向,红灯时间data_bY_timeE_CAR_SL_R_time;Y_time--;Sg=Er=1;//灭灯Sr=Eg=0;//南红,东绿ifY_time=0{Y_time=3;status=4;}//E_footway_time--;//ifE_footway_time=0//{//E_footway_time=S_CAR_L_G_time+S_CAR_SL_G_time+2*Y_time;//}urgent_bit=0;night_bit=0;break;//南左转黄灯亮case4:ifE_CAR_SL_G_time==E_CAR_SL_G_time_set{putc_to_SerialPortE;}S_CAR_SL_R_time=E_CAR_L_G_time+E_CAR_SL_G_time+6;//南北方向,红灯时间data_bS_CAR_SL_R_timeE_CAR_SL_G_time;E_CAR_SL_G_time--;Sg=Er=0;//南绿,东红Sr=Eg=1;//灭灯ifE_CAR_SL_G_time=0{E_CAR_SL_G_time=E_CAR_SL_G_time_set;status=5;}//S_footway_time--;//ifS_footway_time=0//{//S_footway_time=E_CAR_L_G_time+E_CAR_SL_G_time+2*Y_time;//}urgent_bit=0;night_bit=0;break;//南左转红灯亮,东绿灯亮case5:ifY_time==3{putc_to_SerialPortF;ifE_SL_CAR_check_time30{E_CAR_SL_G_time=E_SL_CAR_check_time;E_CAR_SL_G_time_set=E_SL_CAR_check_time;E_SL_CAR_check_time=0;}else{E_CAR_SL_G_time=30;E_CAR_SL_G_time_set=30;}}S_CAR_SL_R_time=E_CAR_L_G_time+3+Y_time;//南北方向,红灯时间data_bS_CAR_SL_R_timeY_time;Y_time--;Sg=Er=0;//南绿,东红Sr=Eg=1;//灭灯ifY_time=0{Y_time=3;status=6;}//S_footway_time--;//ifS_footway_time=0//{//S_footway_time=E_CAR_L_G_time+E_CAR_SL_G_time+2*Y_time;//}urgent_bit=0;night_bit=0;break;//东黄灯亮case6:ifE_CAR_L_G_time==E_CAR_L_G_time_set{putc_to_SerialPortG;}S_CAR_SL_R_time=E_CAR_L_G_time+3;//南北方向,红灯时间data_bS_CAR_SL_R_timeE_CAR_L_G_time;E_CAR_L_G_time--;Sg=Er=0;//南绿,东红Sr=Eg=1;//灭灯ifE_CAR_L_G_time=0{E_CAR_L_G_time=E_CAR_L_G_time_set;status=7;}//S_footway_time--;//ifS_footway_time=0//{//S_footway_time=E_CAR_L_G_time+E_CAR_SL_G_time+2*Y_time;//}urgent_bit=0;night_bit=0;break;//东红灯亮,东左转绿灯亮case7:ifY_time==3{putc_to_SerialPortH;ifE_L_CAR_check_time30{E_CAR_L_G_time=E_L_CAR_check_time;E_CAR_L_G_time_set=E_L_CAR_check_time;E_L_CAR_check_time=0;}else{E_CAR_L_G_time=30;E_CAR_L_G_time_set=30;}}S_CAR_SL_R_time=Y_time;//南北方向,红灯时间data_bS_CAR_SL_R_timeY_time;Y_time--;Sg=Er=0;//南绿,东红Sr=Eg=1;//灭灯ifY_time=0{Y_time=3;status=0;}//S_footway_time--;//ifS_footway_time=0//{//S_footway_time=E_CAR_L_G_time+E_CAR_SL_G_time+2*Y_time;//}urgent_bit=0;night_bit=0;break;//东左转黄灯亮case8:ifurgent_bit==0{//发送一次标志putc_to_SerialPortI;//紧急urgent_bit=1;//}Sg=Er=1;//灭灯Sr=Eg=1;//灭灯break;case9:ifnight_bit==0{putc_to_SerialPortJ;//夜间night_bit=1;}Sg=Er=1;//灭灯Sr=Eg=1;//灭灯}second_timing=0;}}
6.设置程序部分如下voidkey_set1{ifTrg1==2//增加键{ifset_bit==1//设置位置南,车直行绿灯时间{S_CAR_SL_G_time_set++;data_b1S_CAR_SL_G_time_set;//首先设置位置南,车直行绿灯时间}elseifset_bit==2//设置位置南,车左转绿灯时间{S_CAR_L_G_time_set++;data_b1S_CAR_L_G_time_set;//设置位置南,车左转绿灯时间}elseifset_bit==3//设置位置东,车直行绿灯时间{E_CAR_SL_G_time_set++;data_b1E_CAR_SL_G_time_set;//设置位置东,车直行绿灯时间}elseifset_bit==4//设置位置东,车左转绿灯时间{E_CAR_L_G_time_set++;data_b1E_CAR_L_G_time_set;//设置位置东,车左转绿灯时间}}ifTrg1==4//减小键{ifset_bit==1//设置位置南,车直行绿灯时间{S_CAR_SL_G_time_set--;data_b1S_CAR_SL_G_time_set;//首先设置位置南,车直行绿灯时间}elseifset_bit==2//设置位置南,车左转绿灯时间{S_CAR_L_G_time_set--;data_b1S_CAR_L_G_time_set;//设置位置南,车左转绿灯时间}elseifset_bit==3//设置位置东,车直行绿灯时间{E_CAR_SL_G_time_set--;data_b1E_CAR_SL_G_time_set;//设置位置东,车直行绿灯时间}elseifset_bit==4//设置位置东,车左转绿灯时间{E_CAR_L_G_time_set--;data_b1E_CAR_L_G_time_set;//设置位置东,车左转绿灯时间}}ifTrg1==8//确定键{set_bit++;ifset_bit==1{data_b1S_CAR_SL_G_time_set;//首先设置位置南,车直行绿灯时间}elseifset_bit==2{data_b1S_CAR_L_G_time_set;//设置位置南,车左转绿灯时间}elseifset_bit==3{data_b1E_CAR_SL_G_time_set;//设置位置东,车直行绿灯时间}elseifset_bit==4{data_b1E_CAR_L_G_time_set;//设置位置东,车左转绿灯时间}elseifset_bit=5{menu=0;set_bit=0;set_time;//设置时间status=0;//TR0=1;//开启定时器0}}}
4.
2.2从单片机程序从单片机程序包括主程序,初始化程序,车辆检测程序,通信中断程序
1.从单片机主程序如下voidmain{Init_P;//整机初始化函数......while1{key_read;//按键读取函数key_set;//按键设置程序}}
2.从单片机初始化程序如下voidInit_P{PCON=0x00;EA=1;//开全局中断ET0=1;//开定时中断0ES=1;//开串口中断PS=1;//串口中断高TMOD=0x21;//TH0=0x3c;//T0高8位TL0=0xb0;//T0低8位//T1为接收波特率发生器//T1为发送波特率发生器TH1=0x00;//T1高8位TL1=0xfd;//T1低8位SCON=0x50;//串口模式TI=0;RI=0;TR0=1;//启动定时器0TR1=1;//初始化完成......}
3.车辆检测程序如下//----------车流量检测子程序----------voidkey_set{ifTrg==1||Trg==2{putc_to_SerialPortS;//南}ifTrg==4||Trg==8{putc_to_SerialPortW;//西}ifTrg==16||Trg==32{putc_to_SerialPortT;//南左转}ifTrg==64||Trg==128{putc_to_SerialPortY;//西左转}}
4.通信中断程序如下voidintersinterrupt4//using**//串行口中断处理{ifRI{RI=0;switchSBUF{caseA://SN_car_count=0;//南北车流量计数清零yellow_bit1=0;yellow_bit2=0;yellow_bit3=0;yellow_bit4=0;yellow_bit5=0;S_SL_G=0;//位置南,直行,绿灯S_SL_Y=1;//位置南,直行,黄灯S_SL_R=1;//位置南,直行,红灯S_L_G=1;//位置南,左转,绿灯S_L_Y=1;//位置南,左转,黄灯S_L_R=0;//位置南,左转,红灯E_SL_G=1;//位置东,直行,绿灯E_SL_Y=1;//位置东,直行,黄灯E_SL_R=0;//位置东,直行,红灯E_L_G=1;//位置东,左转,绿灯E_L_Y=1;//位置东,左转,黄灯E_L_R=0;//位置东,左转,红灯break;caseB://SN_car_count=0;//南北车流量计数清零yellow_bit1=1;yellow_bit2=0;yellow_bit3=0;yellow_bit4=0;yellow_bit5=0;S_SL_G=1;//位置南,直行,绿灯S_SL_Y=0;//位置南,直行,黄灯S_SL_R=1;//位置南,直行,红灯S_L_G=1;//位置南,左转,绿灯S_L_Y=1;//位置南,左转,黄灯S_L_R=0;//位置南,左转,红灯E_SL_G=1;//位置东,直行,绿灯E_SL_Y=1;//位置东,直行,黄灯E_SL_R=0;//位置东,直行,红灯E_L_G=1;//位置东,左转,绿灯E_L_Y=1;//位置东,左转,黄灯E_L_R=0;//位置东,左转,红灯break;caseC://SN_car_count=0;//南北车流量计数清零yellow_bit1=0;yellow_bit2=0;yellow_bit3=0;yellow_bit4=0;yellow_bit5=0;S_SL_G=1;//位置南,直行,绿灯S_SL_Y=1;//位置南,直行,黄灯S_SL_R=0;//位置南,直行,红灯S_L_G=0;//位置南,左转,绿灯S_L_Y=1;//位置南,左转,黄灯S_L_R=1;//位置南,左转,红灯E_SL_G=1;//位置东,直行,绿灯E_SL_Y=1;//位置东,直行,黄灯E_SL_R=0;//位置东,直行,红灯E_L_G=1;//位置东,左转,绿灯E_L_Y=1;//位置东,左转,黄灯E_L_R=0;//位置东,左转,红灯break;caseD://SN_car_count=0;//南北车流量计数清零yellow_bit1=0;yellow_bit2=1;yellow_bit3=0;yellow_bit4=0;yellow_bit5=0;S_SL_G=1;//位置南,直行,绿灯S_SL_Y=1;//位置南,直行,黄灯S_SL_R=0;//位置南,直行,红灯S_L_G=1;//位置南,左转,绿灯S_L_Y=0;//位置南,左转,黄灯S_L_R=1;//位置南,左转,红灯E_SL_G=1;//位置东,直行,绿灯E_SL_Y=1;//位置东,直行,黄灯E_SL_R=0;//位置东,直行,红灯E_L_G=1;//位置东,左转,绿灯E_L_Y=1;//位置东,左转,黄灯E_L_R=0;//位置东,左转,红灯break;caseE://EW_car_count=0;//东西车流量计数清零yellow_bit1=0;yellow_bit2=0;yellow_bit3=0;yellow_bit4=0;yellow_bit5=0;S_SL_G=1;//位置南,直行,绿灯S_SL_Y=1;//位置南,直行,黄灯S_SL_R=0;//位置南,直行,红灯S_L_G=1;//位置南,左转,绿灯S_L_Y=1;//位置南,左转,黄灯S_L_R=0;//位置南,左转,红灯E_SL_G=0;//位置东,直行,绿灯E_SL_Y=1;//位置东,直行,黄灯E_SL_R=1;//位置东,直行,红灯E_L_G=1;//位置东,左转,绿灯E_L_Y=1;//位置东,左转,黄灯E_L_R=0;//位置东,左转,红灯break;caseF://EW_car_count=0;//东西车流量计数清零yellow_bit1=0;yellow_bit2=0;yellow_bit3=1;yellow_bit4=0;yellow_bit5=0;S_SL_G=1;//位置南,直行,绿灯S_SL_Y=1;//位置南,直行,黄灯S_SL_R=0;//位置南,直行,红灯S_L_G=1;//位置南,左转,绿灯S_L_Y=1;//位置南,左转,黄灯S_L_R=0;//位置南,左转,红灯E_SL_G=1;//位置东,直行,绿灯E_SL_Y=0;//位置东,直行,黄灯E_SL_R=1;//位置东,直行,红灯E_L_G=1;//位置东,左转,绿灯E_L_Y=1;//位置东,左转,黄灯E_L_R=0;//位置东,左转,红灯break;caseG://EW_car_count=0;//东西车流量计数清零yellow_bit1=0;yellow_bit2=0;yellow_bit3=0;yellow_bit4=0;yellow_bit5=0;S_SL_G=1;//位置南,直行,绿灯S_SL_Y=1;//位置南,直行,黄灯S_SL_R=0;//位置南,直行,红灯S_L_G=1;//位置南,左转,绿灯S_L_Y=1;//位置南,左转,黄灯S_L_R=0;//位置南,左转,红灯E_SL_G=1;//位置东,直行,绿灯E_SL_Y=1;//位置东,直行,黄灯E_SL_R=0;//位置东,直行,红灯E_L_G=0;//位置东,左转,绿灯E_L_Y=1;//位置东,左转,黄灯E_L_R=1;//位置东,左转,红灯break;caseH://EW_car_count=0;//东西车流量计数清零yellow_bit1=0;yellow_bit2=0;yellow_bit3=0;yellow_bit4=1;yellow_bit5=0;S_SL_G=1;//位置南,直行,绿灯S_SL_Y=1;//位置南,直行,黄灯S_SL_R=0;//位置南,直行,红灯S_L_G=1;//位置南,左转,绿灯S_L_Y=1;//位置南,左转,黄灯S_L_R=0;//位置南,左转,红灯E_SL_G=1;//位置东,直行,绿灯E_SL_Y=1;//位置东,直行,黄灯E_SL_R=0;//位置东,直行,红灯E_L_G=1;//位置东,左转,绿灯E_L_Y=0;//位置东,左转,黄灯E_L_R=1;//位置东,左转,红灯break;caseI://SN_car_count=0;//南北车流量计数清零//EW_car_count=0;//东西车流量计数清零yellow_bit1=0;yellow_bit2=0;yellow_bit3=0;yellow_bit4=0;yellow_bit5=0;S_SL_G=1;//位置南,直行,绿灯S_SL_Y=1;//位置南,直行,黄灯S_SL_R=0;//位置南,直行,红灯S_L_G=1;//位置南,左转,绿灯S_L_Y=1;//位置南,左转,黄灯S_L_R=0;//位置南,左转,红灯E_SL_G=1;//位置东,直行,绿灯E_SL_Y=1;//位置东,直行,黄灯E_SL_R=0;//位置东,直行,红灯E_L_G=1;//位置东,左转,绿灯E_L_Y=1;//位置东,左转,黄灯E_L_R=0;//位置东,左转,红灯break;caseJ://SN_car_count=0;//南北车流量计数清零//EW_car_count=0;//东西车流量计数清零yellow_bit1=0;yellow_bit2=0;yellow_bit3=0;yellow_bit4=0;yellow_bit5=1;S_SL_G=1;//位置南,直行,绿灯S_SL_Y=0;//位置南,直行,黄灯S_SL_R=1;//位置南,直行,红灯S_L_G=1;//位置南,左转,绿灯S_L_Y=0;//位置南,左转,黄灯S_L_R=1;//位置南,左转,红灯E_SL_G=1;//位置东,直行,绿灯E_SL_Y=0;//位置东,直行,黄灯E_SL_R=1;//位置东,直行,红灯E_L_G=1;//位置东,左转,绿灯E_L_Y=0;//位置东,左转,黄灯E_L_R=1;//位置东,左转,红灯}}}5总结通过这几个月的课设,让我受益匪浅本次次毕设可以让我把书本上学到的知识得以在实际中运用,不仅锻炼了我实践能力还提升了我全面思考问题的能力改变了以往那种眼高手低的状况我想这对于我以后的学习或者工作都会有很大的帮助通过这次毕设,让我更加认识了单片机的各项功能和使用时需要注意的问题,大大加深了对单片机的了解当然,在设计制作中也遇到了很多困难,通过去图书馆和网上查阅相关资料以及和老师同学的帮助,使我最终战胜了这些困难其中的一些问题需要我们认真思考,一些编程技巧需要多加练习才能掌握对于编程应该多多注意细节,多与同学交流,分析问题,解决问题大家相互学习,共同提高最后,谢谢我的老师这段时间来对我的关心指导参考文献
[1]彭为等.单片机典型系统设计实例精讲[M].北京:电子工业出版社2006
[2]张毅刚等.单片机原理与应用设计[M].北京:电子工业出版社2008
[3]王义军.单片机原理及应用习题与实验指导书[M].北京:中国电力出版社2006
[4]刘乐善.微型计算机接口技术及应用[M].武汉:华中科技大学出版社2000
[5]陈明荧.8051单片机课程设计实训教材[M].北京:清华大学出版社2004
[6]杨莉.基于单片机控制的步进电机转速控制系统[J].南昌工程学院学报2005主单片机单片机管脚功能P
0.0南北数码管GP
0.1南北数码管FP
0.2南北数码管EP
0.3南北数码管DP
0.4南北数码管CP
0.5南北数码管BP
0.6南北数码管AP
0.7南北数码管2P
1.0东西数码管GP
1.1东西数码管FP
1.2东西数码管EP
1.3东西数码管DP
1.4东西数码管CP
1.5东西数码管BP
1.6东西数码管AP
1.7东西数码管2P
2.0菜单键P
2.1增加键P
2.2减小键P
2.3确定键P
2.4P
2.5南北人行红灯P
2.6南北人行绿灯P
2.7南北数码管1P
3.0通信P
3.1通信P
3.2东西数码管1P
3.3东西人行绿灯P
3.4东西人行红灯P
3.5紧急按键,全部红灯亮P
3.6夜间模式按键,全部黄灯P
3.7从单片机单片机管脚功能P
0.0南北左转红灯P
0.1南北左转黄灯P
0.2南北左转绿灯P
0.3南北红灯P
0.4南北黄灯P
0.5南北绿灯P
0.6P
0.7P
1.0车流量检测南P
1.1车流量检测北P
1.2车流量检测东P
1.3车流量检测西P
1.4车流量检测南左转P
1.5车流量检测北左转P
1.6车流量检测东左转P
1.7车流量检测西左转P
2.0P
2.1P
2.2东西绿灯P
2.3东西黄灯P
2.4东西红灯P
2.5东西左转绿灯P
2.6东西左转黄灯P
2.7东西左转红灯P
3.0通信P
3.1通信P
3.2P
3.3P
3.4P
3.5P
3.6P
3.7。