收藏 分销(赏)

单片机控制的交通灯控制系统设计.doc

上传人:a199****6536 文档编号:3890657 上传时间:2024-07-23 格式:DOC 页数:51 大小:85KB
下载 相关 举报
单片机控制的交通灯控制系统设计.doc_第1页
第1页 / 共51页
单片机控制的交通灯控制系统设计.doc_第2页
第2页 / 共51页
单片机控制的交通灯控制系统设计.doc_第3页
第3页 / 共51页
单片机控制的交通灯控制系统设计.doc_第4页
第4页 / 共51页
单片机控制的交通灯控制系统设计.doc_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、单片机控制的交通灯控制系统设计512020年4月19日文档仅供参考摘要本设计是单片机控制的交通灯控制系统设计。由单片机系统、LED显示、交通灯演示系统、键盘电路及其控制电路组成。该系统除基本交通灯功能外,还具有倒计时、紧急情况处理、调整通行时间以及根据具体情况手动控制等功能。十字路口的交通灯在工作时应具有如下特点:红灯表示该条道路禁止通性;黄灯表示该条道路上未过停车线的车辆禁止通行,已过停车线的车辆继续通性;绿灯亮表示该条道路允许通行。该系统使用12MHZ晶振与单片机AT89S52相连接,经过软件编程的方法实现十字路口的交通灯控制,输入装置是键盘开关,用于控制交通灯的运行模式以及设置通行时间,

2、显示装置是两位的LED七段数码管。该系统是由AT89S52单片机控制的,能够实现以下功能:1.南北方向(主干道)车道和东西方向(支干道)两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行间为20秒,时间可设置修改。2.在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。3.黄灯亮时,要求每秒闪亮一次。4.东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。5.一道有车而另一道无车(实验时用开关K0和K1控制),交通灯控制系统能立即让有车道放行。6.有紧急车辆要求经过时,系统要能禁止普通车辆通行,A、B道均为红灯。关

3、键字:AT89S52单片机,交通灯,LED显示,键盘开关电路。目录1概述-3-1.1设计背景-3-1.2设计目的-3-1.3设计要求-3-2系统总体方案及硬件设计-4-2.1设计原理-4-2.2各功能模块设计-4-2.2.1单片机AT89S52介绍-4-2.2.2总体方案-5-2.2.3时钟电路模块-6-2.2.4复位电路模块-6-2.2.5交通灯演示模块-7-2.2.6LED显示模块-7-2.2.7键盘开关模块-8-3软件设计-10-3.1程序流程图 -10-3.2系统软件设计-11-3.2.1LED的编程-11-3.2.2交通灯模块的编程设计-12-3.2.3定时器程序-12-3.2.4键

4、盘程序-13-3.2.4.1通行时间设置程序-13-3.2.4.2紧急情况处理程序-14-3.2.4.3状态调整程序-14-4Proreus仿真-15-4.1正常工作状态-15-4.2时间调整-17-4.3紧急状况-19-4.4状态调整-20-5课程设计体会-22-参考文献-23-附1:源程序代码-24-附2:系统原理图-32-1概述1.1设计背景人们越来越关注城市交通问题,而交通灯在安全行车过程中起十分重要的作用,现在交通灯一般设在十字路口,在醒目位置用红、绿、黄三种颜色的指示灯,加上一个倒计时的显示计时器来控制行车,对于一般情况下的安全行车、车辆分流发挥着作用,但根据实际行车过程中出现的情

5、况,主要有如下几个缺点:1、车道让车轮流放行时间相同且固定,在十字路口,经常出现有些车道车辆较多,放行时间应该长些;而有些车道车辆较少,放行时间应短些。2、没有考虑紧急车经过时,两车道应采取的措施,譬如,有消防车经过执行紧急任务时,两车道的车都应停止,让紧急车辆经过。根据行车过程中出现的实际情况,如何合理高效地利用交通灯指示交通情况,这是一个迫切需要解决的问题。1.2设计目的1.进一步熟悉和掌握单片机的结构及工作原理。2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。3.经过课程设计,掌握以单片机核心的电路设计的基本方法和技术。4.经过实际程序设计和调试,逐步掌握模块化程序设计方法和调

6、试技术。5.了解开发单片机应用系统的全过程,为今后从事相关事业打下基础。1.3设计要求1.设计一个十字路口的交通灯控制电路,要求南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行时间为20秒,时间可设置修改。2.在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;3.黄灯亮时,要求每秒闪亮一次。4.东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。5.一道有车而另一道无车(实验时用开关K0和K1控制),交通灯控制系统能立即让有车道放行。6.有紧急车辆要求经过时,系统要

7、能禁止普通车辆通行,A、B道均为红灯。2系统总体方案及硬件设计2.1设计原理本设计使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且能够随时更新系统,根据道路情况适时调整交通灯的状态,全面有效地利用交通灯指示交通情况。该设计是以单片机AT89S52为核心完成的,在硬件电路中采用P1口点亮交通指示灯,采用P0口和P2口作为2位LED数码管的驱动接口,可显示各个方向的交通灯的持续时间,单片机外围接有按键开关电路,能够响应外部中断及键盘程序,实现紧急情况处理、调整交通灯的点亮时间等功能。芯片选用AT89C51单片机,电路由下列部分组成:时钟电路、复位电路、键盘电路、交通灯

8、演示电路、LED显示电路。2.2各功能模块设计2.2.1单片机AT89S52介绍AT89S52是一个低电压,高性能CMOS型8位单片机,片内含8KB的可重复擦写的Flash只读程序存储器(ROM)和256B的随机存取数据存储器(RAM)。AT89S52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89S52能够按照常规方法进行编程,也能够在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可重复擦写的Flash存储器可有效地降低开发成本。引脚使用说明:I/O端口的编程实际上就

9、是根据应用电路的具体功能和要求对I/O寄存器进行编程。具体步骤如下:l.根据实际电路的要求,选择要使用哪些I/O端口。2.初始化端口的数据输出寄存器,应避免端口作为输出时的开始阶段出现不确定状态,影响外围电路正常工作。3.根据外围电路功能,确定PO端口的方向,初始化端口的数据方向寄存器。对于用作输入的端口能够不考虑方向初始化,因为PO的复位缺省值为输入。4.用作输入的PO管脚,需上拉电阻。5.最后对I/O端口进行输出(写数据输出寄存器)和输入(读端口)编程,完成对外围电路的相应功能。几个特殊管脚:XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。RST

10、:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平。2.2.2总体方案此交通灯系统位于一个十字路口,此路口为东南西北走向。南北方向为主干道,东西方向为支干道。各干道有一组红、绿、黄三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行,黄灯亮提示人们注意红、绿灯的状态即将切换。此交通灯系统工作过程分为4个状态。状态0南北方向绿灯亮,东西方向红灯亮。过25秒后转为状态1,南北方向绿灯灭,黄灯每秒闪亮一次,东西方向还是红灯亮。历时5秒钟再转为状态2,南北方向红灯亮,东西方向绿灯亮。过15秒后转为状态3,南北方向还是红灯亮,东西方向绿灯灭,黄灯每秒闪亮一次。历时5秒钟又

11、循环至状态0。交通灯的状态表如下:状态(时间)主干道SN支干道WE红R绿G黄Y红R绿G黄Y00101001001/010021000103100001/0表01交通灯的状态表注:1:SN:南北方向。WE:东西方向。2:状态:0:熄。1:亮。1/0:闪。2.2.3时钟电路模块时钟电路模块给单片机提供特定的时钟周期,以备单片机工作使用。单片机的机器周期有6MHz和12MHz的两种。这里采用的是12MHZ的晶振,以给单片机提供12MHz的机器周期。另外有两个30P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。其电路图如图02所示:图02时钟电路模块2.2.4复位电路模块单片机系统

12、的复位电路采用的是上电+按钮复位电路形式,其中电阻R采用10K的阻值,电容采用电容值为10F的电解电容。其具体连接电路如图03所示:图03复位电路模块2.2.5交通灯演示模块此交通灯演示模块由单片机的P1口作信号输出端来控制12个交通灯的亮灭,交通灯采用的是发光二极管。因为单片机的输出电流非常小,为了使发光二极管能够发光或者更亮,二极管采用共阳极接法。即阳极经过470电阻接+5V直流电源,阴极接单片机P1口。同时南北方向同色灯连同上拉电阻一起并联,东西方向也是一样,以保证同一干道上的同色灯同时点亮或熄灭,而且流过二极管的电流不会因并联而减半。其具体连接电路如图04所示:图04交通灯演示电路2.

13、2.6LED显示模块由于同一干道上的两个方向的红灯,绿灯,黄灯点亮时间相同,因此南北方向只需一个数码管显示相应的时间即可,同理东西方向也只需一个。本次交通灯设计采用两位一体的共阴极数码管来显示相应的时间。由单片机的P0口输出字型码,P2口的前四位P2.0P2.3作位选端。位选端接LED的共阴极,故低电位有效。因为单片机I/O口的驱动电流很小,一般只有几个毫安。为了增加驱动能力,每个LED上都加上一个上拉电阻,接入+5V电源,本次设计采用的是排阻。当P0口输出低电平时,LED不导通,上拉电阻电流灌进单片机,而当P0口输出高电平时,LED导通。而且上拉电阻的电流也经过LED,这自然就增加了LED的

14、发光亮度。其具体连接电路如图05所示:图05LED显示电路2.2.7键盘开关模块此系统经过5个开关实现所有的要求,开关一端接地,另一端接单片机的P3口。K0接P37,当主干道有车而支干道无车时,按一下K0键,能够实现主干道通行。K1接P36,当支干道有车而主干道无车时,按一下K1键,能够实现支干道通行。K2接P33,利用中断1的方式对紧急情况进行处理,即使东南西北四个方向都亮红灯停车。K4接P32,利用中断0的方式对各个干道的通行时间进行设置。在相应中断0期间,K0,K1起调整时间的作用。每按一下K0,主干道通行时间加一,每按一下K0,主干道通行时间加一。K3接P35,按一下K3,能够使系统退

15、出中断,回到主程序。其具体连接电路如06图示:图06键盘开关电路3软件设计3.1系统流程图 ( 注:判断框SN=0,WE=0处的Y,N位置标反了,读者自己改正。)3.2系统软件设计本次单片机课程设计软件部分利用C语言编程,采用模块化程序设计。程序部分由主程序、定时器程序、T0/T1中断服务程序、键盘扫描程序、交通灯点亮程序、LED数码管扫描显示程序和延时程序构成。3.2.1LED的编程本次交通灯设计采用两位一体的共阴极数码管来显示相应的时间。数码管为七段数码管,由8个发光二极管构成,经过不同的组合可用来显示数字0-9,字符A-F、H、L、P、R、U、Y、符号“-”及小数点“.”。本设计只需要显

16、示数字0-9,来表示相应的时间。共阴极数码管的8个发光二极管的阴极连接在一起接位选端。两个两位一体的共阴极数码管共有4个位选端,分别接在 P2O-P23,低电平有效。数码管各个阳极管脚接各段的驱动电路输出端,既P0口。P00接a,P01接b,P06接g,P07接dp,高电平有效。本设计采用逐位扫描的方式实现相应时间的动态显示。先将P21置低电平,P20、P22、P23置高电平,来选中南北方向数码管的个位,此时P0口的数据接传送给它显示。经延时一段时间,将P21置低电位选中南北方向数码管的十位,此时P0口的数据接传送给它显示。再用同样的方法依次驱动东西方向数码管。经过不断改变P0口、P2口的输出

17、,用循环扫描的方式,即可实现LED的动态显示。LED动态显示的流程图如图08:3.2.2交通灯模块的编写设计本次设计的交通灯演示模块由单片机的P1口作信号输出端来控制12个交通灯的亮灭。P11-P16依次连接南北的红灯、绿灯、黄灯,东西的红灯、绿灯,黄灯。因此4种状态依次为0x6A,0x66,0x5C,0x3C。当交通灯的剩余时间为零时,改变P1口的输出,进而改变交通灯的点亮状态。交通灯依次循环上面的4个状态,就能够实现指挥交通的作用。3.2.3定时器程序本次设计用定时计数器T1,TMOD是定时计算器的工作方式控制寄存器,经过对该寄存器的操作能够改变T1的工作方式。T1有4种工作方式,由TMO

18、D寄存器中间的M1、M0这两位来决定。本次设计的定时计数器工作在工作方式1,M1、M0设定为01。定时计算器采用加1计数的方式,当接收到一个驱动事件时计数器加1。工作方式1的内部计数器宽度为16位,由TH1的8位和TL1的8位组成。当TL1溢出时将向TH1进位,当TH1溢出后会产生相应的溢出中断。驱动事件之间的时间间隔即为定时计数器的定时宽度。在定时的工作方式下,定时宽度是单片机的机械周期,也是外部时钟频率的1/12。本次设计的外部时钟频率为12MHz。可知,接收106个驱动事件的时间为1s。定是1s的流程图如图09所示:3.2.4键盘程序为了实现设置通行时间、紧急情况处理、有车放行等功能,本

19、次设计中有键盘电路。通行时间设置由外部中断0实现,紧急情况由外部中断1处理,有车放行是用普通的键盘程序实现的。按键实际是一种常见的按钮,按键未按下时,键的两个触点处于断开状态,按键按下时,两个触点闭合。按键是利用机械触点来实现键的闭合和释放,由于弹性作用的影响,机械触点在闭合及断开瞬间均有抖动过程,从而使键输入也出现抖动。抖动时间一般为510ms。本次设计采用软件的办法消抖。在第一次检测到有键按下时不动作,延时10ms,再次检测按键的状态,如果仍保持闭合状态,则确定真的有键按下。当按键释放后,转入按键的处理程序延时程序如下:/*延时t毫秒*/voiddelay(uchart)uchari;/*

20、定义无符号字符常量*/for(t;t0;t-)/*执行t次循环*/for(i= ;i0;i-)/*由于时钟脉冲是12MHz,执行 次循环的时间为1ms*/3.2.4.1通行时间设置程序本次设计经过外部中断0设置各个干道的通行时间。外部中断0的请求信号由P32引脚输入,采用低电平有效的方式响应中断,即IT0=1。响应中断0期间,CPU禁止响应其它中断,按键K0,K1起调整时间的作用。采用加1的方式,每按一下K0,主干道通行时间加1,每按一下K1,支干道通行时间加1。通行时间能够直接在数码管上显示出来。按一下K3,能够使系统退出中断,回到主程序断点处,从下一个状态开始执行新设置的通行时间。CPU再

21、开放总中断。由于本次设计使用两位一体的共阴极数码管显示时间,故设置各个干道的通行时间的范围为0100s。考虑道路通车的实际情况,时间太短无法经过交通路口,因此本设计中通行时间下限为6s(绿灯1s,黄灯5s)。在699s之间能够任意设置通行时间,更合理高效的指挥交通。3.2.4.2紧急情况处理程序本次设计经过外部中断1实现对紧急情况的处理。与外部中断0相仿。外部中断1的请求信号有P33引脚输入,采用低电平有效的方式相应中断,即IT0=1。响应中断1期间,CPU禁止响应其它中断,东南西北四个方向均亮红灯,各个干道都禁止通行。由于不确定要持续多久,不采用倒计时的方式显示时间,数码管显示00。紧急情况

22、结束时,按一下K3,能够使系统退出中断,回到主程序断点处,CPU再开放总中断。3.2.4.3状态调整程序在实际交通系统中,很有可能会不时的出现一道有车而另一道无车的情况,为了更合理高效的指挥交通,本次设计的交通灯控制系统能立即让有车道放。由开关K0和K1控制。采用查询的方式不断扫描K0、K1,看有没有键按下。按一下K0键,能够实现主干道通行,按一下K1键,能够实现支干道通行。此时交通状态的改变是因为另一路无车,因此不需要设置返回,直接按主程序循环指挥。也有可能较长时间出现一道有车另一道无车的情况,只需多次按K0或K1键即可。4Proteus仿真4.1正常工作状态本次设计的交通灯控制系统共有四个

23、工作状态,分别是状态0、状态1、状态2和状态3。开始时先执行状态0,南北方向绿灯亮,东西方向红灯亮。历时25秒。如图10所示:图10状态025秒后转为状态1,南北方向绿灯灭,黄灯每秒闪亮一次,东西方向还是红灯亮。历时5秒。如图11所示:图11状态15秒后再转状态2,南北方向红灯亮,东西方向绿灯亮。历时15秒。如图12所示:图12状态215秒后转状态3,南北方向还是红灯亮,东西方向绿灯灭,黄灯每秒闪亮一次。历时5秒。如图13所示:图13状态3此状态结束后再回到状态0,如此循环进行。4.2时间调整按一下开关K4,系统响应外部中断0,进入通行时间调整程序。各个干道的通行时间有数码管显示。如图14所示

24、:图14时间调整按键K0,K1起调整时间的作用,每按一下K0,主干道通行时间加1,每按一下K1,支干道通行时间加1。多次按键即可调整到合理的通行时间。如图15所示:图15通行时间+1按一下K3,能够使系统退出中断,回到主程序断点处,从下一个状态开始执行新设置的通行时间。如图16、17所示:图16主干道按新设置的时间执行图17支干道按新设置的时间执行4.3紧急情况当出现紧急情况时,按一下开关K2,系统响应外部中断1,各个方向均亮红灯禁止通行,数码管均显示0。按一下K3,能够使系统退出中断,回到主程序断点处。如图18所示图18紧急情况4.4状态调整为了更合理高效的指挥交通,当南北方向有车而东西方向

25、无车时,按K0,系统会自动跳转到状态0,实现南北方向通行。如图19所示:图19南北方向有车而东西方向无车时,南北放行当东西方向有车而南北方向无车时,按K1,系统会自动跳转到状态2,实现东西方向通行。如图20所示:图20东西方向有车而南北方向无车时,东西放行5课程设计体会很荣幸有这次课程设计的机会,我能够把理论的学习与实践有机的结合起来。在设计过程中,首先要分析课题,根据所学知识绘制出系统总体设计框图。然后按照自己的设计思路,利用所给的元器件绘制出设计图。在绘制设计图连接各个元器件的时候,要尽量使布线合适,从而使所作设计图清晰易看。绘制完设计图后,接下来就是要根据设计所要求的功能和已完成的设计图

26、编写程序,在编程时,首先应该绘制出主程序流程图,然后采用模块化程序设计的方式,编写实现各个功能的子程序,再将各个子程序与主程序连接起来。在设计程序时要不断对程序进行修改,同时在设计程序的过程中要养成注释程序的习惯,在对程序进行修改的时候,能够经过注释很容易的看出各句程序的功能,清晰明朗。当程序设计出来之后,就能够经过仿真软件对其进行编译,生成仿真所需要的HEX文件。将生成的文件加载到系统图的单片机上,就能够进行系统仿真。经过仿真,检测所作设计是否能实现预期功能。本次课程设计使我对单片机的工作原理有了更深刻的认识,掌握了许多在以前学习中混淆不清的知识点。在翻阅相关书籍和查询相关资料过程中学到了丰

27、富的单片机知识,开阔了眼界,增广了知识面。在编辑程序中,对C语言又有了新的认识和理解。实物焊接中不但锻炼了自己的动手能力,而且真正作到了理论联系实际的重要性,收益匪浅。本次课程设计我参考的三本书。一本是余发山教授的单片机原理及其应用技术,一本是在图书馆借的王为青老师编写的单片机KeilCx51应用开发技术,还有一本就是贾宗璞老师的C语言程序设计。在此向编者表示诚挚的谢意。本次设计中,我曾多次在课堂上向谭兴国老师请教各个模块设计的细节问题,得到了谭老师的大力帮助,在此深表感谢!参考文献1余发山,王福忠.单片机原理及应用技术徐州:中国矿业大学出版社, 2贾宗璞,许合利.C语言程序设计徐州:中国矿业

28、大学出版社, 3王为青,程国刚.单片机KeilCx51应用开发技术北京:人民邮电出版社, 附1源程序代码#include /*对单片机的口进行了定义*/#defineucharunsignedchar/*定义字符串类型为无符号型*/ucharcodea10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; /*段码组合,P0口,高有效*/ucharcodeb4=0x0D,0x0E,0x07,0x0B;/*P2口,低有效*/ucharcodec4=0x6A,0x66,0x5C,0x3C;/*P1口.低有效*/charSN=25,WE=30;/*

29、SN表示南北方向主干道,WE表示东西方向支干道*/charSN_G=25,WE_G=15,Y=5;/*SN_G表示南北方向的绿灯,WE_G表示东西方向的绿灯,Y表示黄灯*/uchari,k=0,count=0;/*定义无符号字符串变量*/voiddelay(uchart);/*定义函数*/voidlight(); /*定义函数*/voidled(); /*定义函数*/voidledthrough();/*定义函数*/voidleddrive(); /*定义函数*/sbitK0=P37;/*开关K0接P37管脚*/sbitK1=P36;/*开关K1接P36管脚*/sbitK2=P33;/*开关K

30、2接P33管脚*/sbitK3=P35;/*开关K3接P35管脚*/sbitK4=P32;/*开关K4接P32管脚*/*程序初始化*/voidinit(void)/*12MHz*/TMOD=0x01;/*计数器用模式1,为16位计数器*/TH1=(65536-50000)/256; /*0x3C*/TL1=(65536-50000)%256; /*0xB0*/*计50000个数,用时50ms*/IT0=1;/*外部中断为低电平触发方式*/ET0=1;/*允许T0中断*/TR0=1;/*启动计数器*/EA=1;/*CPU开放总中断*/EX0=1;/*允许外部中断0中断,即允许响应端口P32(K4

31、)中断*/EX1=1;/*允许外部中断1中断,即允许响应端口P33(K2)中断*/*中断0处理程序*/voidint0(void)interrupt0EA=0;/*CPU禁止响应一切中断*/ P1=0x6C;/*东西南北方向均红灯亮*/TR0=!TR0;/*计数器停止工作*/ for(;)/*无条件循环*/ledthrough();/*调用通行时间显示函数*/*设置南北方向通行时间*/if(K0=0) /*P37=0*/delay(10);/*延时,把抖动的时间抛掉*/if(K0=0)while(!K0)/*当松开K0开关时,跳出循环,执行后面的程序*/ledthrough();/*调用通行时

32、间显示函数*/SN_G+;/*南北方向绿灯时间+1*/if(SN_G+Y)=100)/*南北方向通行时间(绿灯加黄灯时间)为100s*/SN_G=1;/*由于使用的是两位数码管,当南北方向通行时间加到100后绿灯时间归1*/*设置东西方向通行时间*/if(K1=0) /*P36=0*/delay(10);/*延时,把抖动的时间抛掉*/if(K1=0)while(!K1)/*当松开K1开关时,跳出循环,执行后面的程序*/ledthrough();/*调用通行时间显示函数*/WE_G+;/*东西方向绿灯时间+1*/if(WE_G+Y)=100)/*东西方向通行时间(绿灯加黄灯时间)为100s*/W

33、E_G=1;/*由于使用的是两位数码管,当东西方向通行时间加到100后绿灯时间归1*/*返回*/if(K3=0)/*P35=0*/delay(10);/*延时,把抖动的时间抛掉*/if(K3=0)while(!K3)/*当松开K3开关时,跳出循环,执行后面的程序*/ledthrough();/*调用通行时间显示函数*/TR0=!TR0;/*启动计数器*/ EA=1;/*CPU开放总中断*/ break;/*跳出*/ /*中断1处理程序*/ voidint1(void)interrupt2P1=0x6C,P0=a0;/*东西南北方向均红灯亮,P0口输出0*/EA=0;/*CPU禁止响应一切中断*

34、/TR0=!TR0;/*计数器停止工作*/ for(;)/*无条件循环*/leddrive();/*数码管驱动程序*/*返回*/if(K3=0)/*P35=0*/delay(10);/*延时,把抖动的时间抛掉*/if(K3=0)while(!K3)/*当松开K3开关时,跳出循环,执行后面的程序*/leddrive();/*数码管驱动程序*/EA=1;/*CPU开放总中断*/ TR0=!TR0;/*启动计数器*/ break;/*跳出*/ /*键盘程序*/voidkey()/*南北有车而东西无车*/if(K0=0) /*K0=0*/delay(10);/*延时,把抖动的时间抛掉*/if(K0=0

35、) while(!K0)/*当松开K0开关时,跳出循环,执行后面的程序*/light();/*调用交通灯函数*/led();/*调用数码管函数*/count=0;/*清零*/k=0;/*南北方向通车,东西方向不通车*/SN=SN_G,WE=SN_G+Y;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/*南北无车而东西有车*/if(K1=0) /*K1=0*/delay(10);/*延时,把抖动的时间抛掉*/if(K1=0)while(!K1)/*当松开K1开关时,跳出循环,执行后面的程序*/light();/*调用交通灯函数*/led();/

36、*调用数码管函数*/count=0;/*清零*/k=2;/*南北方向不通车,东西方向通车*/SN=WE_G+Y,WE=WE_G;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/*定时函数*/voidtime1(void)interrupt1TH0=0x3c;TL0=0xb0;/*计50000个数,用时50ms*/count+; /*自增运算*/ if(count=20)/*当count大于或等于20时,历时1s,执行程序*/SN-;/*自减运算*/WE-;/*自减运算*/count=0;/*清零*/if(SN=0|WE=0)/*当SN=0或者

37、WE=0时,执行程序*/k+;/*自增运算*/if(k3)/*当k3时,执行程序*/k=0;/*清零*/switch(k)/*switch 语句*/case0:SN=SN_G,WE=SN_G+Y;break;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/case1:SN=Y,WE=Y;break;/*东西南北方向显示时间均为黄灯闪亮时间*/case2:SN=WE_G+Y,WE=WE_G;break;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/case3:SN=Y,WE=Y;break;

38、/*东西南北方向显示时间均为黄灯闪亮时间*/*延时t毫秒*/voiddelay(uchart)uchari;/*定义无符号字符常量*/for(t;t0;t-)/*执行t次循环*/for(i= ;i0;i-)/*由于时钟脉冲是12MHz,执行 次循环的时间为1ms*/*交通灯函数*/voidlight() P1=ck;/*交通灯对应着k的值变化*/if(P1=c1&count=0)/*当南北方向亮黄灯且count=0时,执行程序*/TH1=(65536-50000)/256; TL1=(65536-50000)%256;/*延时50ms*/ P1=0x6E;/*南北方向黄灯熄灭,东西方向亮红灯*/else if(P1=c3&count=0)/*当东西方向亮黄灯且count=0时,执行程序*/ TH1=(6)/256; TL1=(6)%256;/*延时50ms*/P1=0x7C;/*南北方向亮红灯,东西方向黄灯熄灭*/*数码管函数*/voidled()P2=b0,P0=aSN%10;/*显示南北方向个位*/delay(5);/*延时*/ P2=b1,P0=aSN/10;/*显示南北方向十位*/delay(5);/*延时*/ P2=b2,P0=aWE%10;/*显示东西方向个位*/delay(5);/*延时*/P2=b3,

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服