单片机控制交通灯控制系统设计报告.doc
《单片机控制交通灯控制系统设计报告.doc》由会员分享,可在线阅读,更多相关《单片机控制交通灯控制系统设计报告.doc(30页珍藏版)》请在咨信网上搜索。
- - 摘要 本设计是单片机控制的交通灯控制系统设计。由单片机系统、LED显示、交通灯演示系统、键盘电路及其控制电路组成。该系统除根本交通灯功能外,还具有倒计时、紧急情况处理、调整通行时间以及根据具体情况手动控制等功能。 十字路口的交通灯在工作时应具有如下特点:红灯表示该条道路制止通性;黄灯表示该条道路上未过停车线的车辆制止通行,已过停车线的车辆继续通性;绿灯亮表示该条道路允许通行。 该系统使用12MHZ晶振与单片机AT89S52相连接,通过软件编程的方法实现十字路口的交通灯控制,输入装置是键盘开关,用于控制交通灯的运行模式以及设置通行时间,显示装置是两位的LED七段数码管。该系统是由AT89S52单片机控制的,可以实现以下功能: 1. 南北方向〔主干道〕车道和东西方向〔支干道〕两条穿插道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行间为20秒,时间可设置修改。 2. 在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。 3. 黄灯亮时,要求每秒闪亮一次。 4. 东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进展显示〔采用计时的方法〕。 5. 一道有车而另一道无车〔实验时用开关 K0 和 K1 控制〕,交通灯控制系统能立即让有车道放行。 6. 有紧急车辆要求通过时,系统要能制止普通车辆通行,A、B道均为红灯。 关键字: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.6 LED显示模块 …………………………………………………-7- 2.2.7键盘开关模块 …………………………………………………-8- 3 软件设计 …………………………………………………………………-10- 3.1程序流程图 …………………………………………………………-10- 3.2系统软件设计………………………………………………………-11- 3.2.1 LED的编程……………………………………………………-11- 3.2.2交通灯模块的编程设计………………………………………-12- 3.2.3定时器程序……………………………………………………-12- 3.2.4键盘程序………………………………………………………-13- 3.2.4.1通行时间设置程序………………………………………-13- 3.2.4.2紧急情况处理程序………………………………………-14- 3.2.4.3状态调整程序……………………………………………-14- 4 Proreus仿真 ……………………………………………………………-15- 4.1正常工作状态………………………………………………………-15- 4.2时间调整……………………………………………………………-17- 4.3紧急状况……………………………………………………………-19- 4.4状态调整……………………………………………………………-20- 5课程设计体会 ……………………………………………………………-22- 参考文献……………………………………………………………………-23- 附1:源程序代码 …………………………………………………………-24- 附2:系统原理图 …………………………………………………………-32- 1 概述 1.1 设计背景 人们越来越关注城市交通问题,而交通灯在平安行车过程中起十分重要的作用, 现在交通灯一般设在十字路口,在醒目位置用红、绿、黄三种颜色的指示灯, 加上一个倒计时的显示计时器来控制行车, 对于一般情况下的平安行车、车辆分流发挥着作用, 但根据实际行车过程中出现的情况, 主要有如下几个缺点: 1、车道让车轮流放行时间一样且固定, 在十字路口, 经常出现有些车道车辆较多, 放行时间应该长些;而有些车道车辆较少,放行时间应短些。2、 没有考虑紧急车通过时, 两车道应采取的措施, 譬如, 有消防车通过执行紧急任务时, 两车道的车都应停顿, 让紧急车辆通过。根据行车过程中出现的实际情况, 如何合理高效地利用交通灯指示交通情况,这是一个迫切需要解决的问题。 1.2 设计目的 1. 进一步熟悉和掌握单片机的构造及工作原理。 2. 掌握单片机的接口技术及相关外围芯片的外特性,控制方法。 3. 通过课程设计,掌握以单片机核心的电路设计的根本方法和技术。 4. 通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。 5. 了解开发单片机应用系统的全过程,为今后从事相关事业打下根底。 1.3 设计要求 1. 设计一个十字路口的交通灯控制电路,要求南北方向〔主干道〕车道和东西方向〔支干道〕车道两条穿插道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行时间为20秒,时间可设置修改。 2. 在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道; 3. 黄灯亮时,要求每秒闪亮一次。 4. 东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进展显示〔采用计时的方法〕。 5. 一道有车而另一道无车〔实验时用开关 K0 和 K1 控制〕,交通灯控制系统能立即让有车道放行。 6. 有紧急车辆要求通过时,系统要能制止普通车辆通行,A、B道均为红灯。 2 系统总体方案及硬件设计 2.1 设计原理 本设计使用的是单片机作为核心的控制元件,使得电路的可靠性比拟高,功能也比拟强大,而且可以随时更新系统,根据道路情况适时调整交通灯的状态,全面有效地利用交通灯指示交通情况。 该设计是以单片机AT89S52为核心完成的,在硬件电路中采用P1口点亮交通指示灯,采用P0口和P2口作为2位LED数码管的驱动接口,可显示各个方向的交通灯的持续时间,单片机外围接有按键开关电路,可以响应外部中断及键盘程序,实现紧急情况处理、调整交通灯的点亮时间等功能。 芯片选用AT89C51 单片机,电路由以下局部组成:时钟电路、复位电路、键盘电路、交通灯演示电路、LED显示电路。 2.2 各功能模块设计 2.2.1 单片机AT89S52介绍 AT89S52是一个低电压,高性能CMOS型 8位单片机,片含8KB的可反复擦写的Flash只读程序存储器〔ROM〕和256 B的随机存取数据存储器〔RAM〕。 AT89S52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出〔I/O〕端口,同时含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89S52可以按照常规方法进展编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发本钱。 引脚使用说明: I/O端口的编程实际上就是根据应用电路的具体功能和要求对I/O存放器进展编程。具体步骤如下: l. 根据实际电路的要求,选择要使用哪些I/O端口。 2. 初始化端口的数据输出存放器,应防止端口作为输出时的开场阶段出现不确定状态,影响外围电路正常工作。 3. 根据外围电路功能,确定PO端口的方向,初始化端口的数据方向存放器。对于用作输入的端口可以不考虑方向初始化,因为PO的复位缺省值为输入。 4. 用作输入的PO管脚,需上拉电阻。 5. 最后对I/O端口进展输出(写数据输出存放器)和输入(读端口)编程,完成对外围电路的相应功能。 几个特殊管脚: XTAL1:反向振荡放大器的输入及部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 RST: 复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平。 2.2.2 总体方案 此交通灯系统位于一个十字路口,此路口为东南西北走向。南北方向为主干道,东西方向为支干道。各干道有一组红、绿、黄三色的指示灯,指挥车辆和行人平安通行。红灯亮制止通行,绿灯亮允许通行,黄灯亮提示人们注意红、绿灯的状态即将切换。 此交通灯系统工作过程分为4个状态。状态0南北方向绿灯亮,东西方向红灯亮。过25秒后转为状态1,南北方向绿灯灭,黄灯每秒闪亮一次,东西方向还是红灯亮。历时5秒钟再转为状态2,南北方向红灯亮,东西方向绿灯亮。过15秒后转为状态3,南北方向还是红灯亮,东西方向绿灯灭,黄灯每秒闪亮一次。历时5秒钟又循环至状态0。 交通灯的状态表如下: 状态〔时间〕 主干道—SN 支干道—WE 红—R 绿—G 黄—Y 红—R 绿—G 黄—Y 0 0 1 0 1 0 0 1 0 0 1/0 1 0 0 2 1 0 0 0 1 0 3 1 0 0 0 0 1/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 复位电路模块 单片机系统的复位电路采用的是上电+按钮复位电路形式,其中电阻R采用10KΩ的阻值,电容采用电容值为10μF的电解电容。 其具体连接电路如图03所示: 图03 复位电路模块 2.2.5 交通灯演示模块 此交通灯演示模块由单片机的P1口作信号输出端来控制12个交通灯的亮灭,交通灯采用的是发光二极管。因为单片机的输出电流非常小,为了使发光二极管能够发光或者更亮,二极管采用共阳极接法。即阳极通过470Ω电阻接+5V直流电源,阴极接单片机P1口。同时南北方向同色灯连同上拉电阻一起并联,东西方向也是一样,以保证同一干道上的同色灯同时点亮或熄灭,并且流过二极管的电流不会因并联而减半。 其具体连接电路如图04所示: 图04交通灯演示电路 2.2.6 LED显示模块 由于同一干道上的两个方向的红灯,绿灯,黄灯点亮时间一样,所以南北方向只需一个数码管显示相应的时间即可,同理东西方向也只需一个。 本次交通灯设计采用两位一体的共阴极数码管来显示相应的时间。由单片机的P0口输出字型码,P2口的前四位P2.0~P2.3作位选端。 位选端接LED的共阴极,故低电位有效。因为单片机I/O口的驱动电流很小,一般只有几个毫安。为了增加驱动能力,每个LED上都加上一个上拉电阻,接入+5V电源,本次设计采用的是排阻。当P0口输出低电平时,LED不导通,上拉电阻电流灌进单片机,而当P0口输出高电平时,LED导通。而且上拉电阻的电流也通过LED,这自然就增加了LED的发光亮度。 其具体连接电路如图05所示: 图05 LED显示电路 2.2.7 键盘开关模块 此系统通过5个开关实现所有的要求,开关一端接地,另一端接单片机的P3口。K0接P3^7,当主干道有车而支干道无车时,按一下K0键,可以实现主干道通行。K1接P3^6,当支干道有车而主干道无车时,按一下K1键,可以实现支干道通行。K2接P3^3,利用中断1的方式对紧急情况进展处理,即使东南西北四个方向都亮红灯停车。K4接P3^2,利用中断0的方式对各个干道的通行时间进展设置。在相应中断0期间,K0,K1起调整时间的作用。每按一下K0,主干道通行时间加一,每按一下K0,主干道通行时间加一。K3接P3^5,按一下K3,可以使系统退出中断,回到主程序。 其具体连接电路如06图示: 图06 键盘开关电路 3 软件设计 3.1 系统流程图 ( 注:判断框SN=0,WE=0处的Y,N位置标反了,读者自己改正。) 3.2 系统软件设计 本次单片机课程设计软件局部利用C语言编程,采用模块化程序设计。程序局部由主程序、定时器程序、T0/T1中断效劳程序、键盘扫描程序、交通灯点亮程序、LED数码管扫描显示程序和延时程序构成。 3.2.1 LED的编程 本次交通灯设计采用两位一体的共阴极数码管来显示相应的时间。数码管为七段数码管,由8个发光二极管构成,通过不同的组合可用来显示数字0-9,字符A-F、H、L、P、R、U、Y、符号“-〞及小数点“.〞。本设计只需要显示数字0-9,来表示相应的时间。 共阴极数码管的8个发光二极管的阴极连接在一起接位选端。两个两位一体的共阴极数码管共有4个位选端,分别接在 P2^O-P2^3,低电平有效。数码管各个阳极管脚接各段的驱动电路输出端,既P0口。P0^0接a,P0^1接b,……P0^6接g,P0^7接dp,高电平有效。 本设计采用逐位扫描的方式实现相应时间的动态显示。先将P2^1置低电平,P2^0、P2^2、P2^3置高电平,来选中南北方向数码管的个位,此时P0口的数据接传送给它显示。经延时一段时间,将P2^1置低电位选中南北方向数码管的十位,此时P0口的数据接传送给它显示。再用同样的方法依次驱动东西方向数码管。通过不断改变P0口、P2口的输出,用循环扫描的方式,即可实现LED的动态显示。 LED动态显示的流程图如图08: 3.2.2交通灯模块的编写设计 本次设计的交通灯演示模块由单片机的P1口作信号输出端来控制12个交通灯的亮灭。P1^1-P1^6依次连接南北的红灯、绿灯、黄灯,东西的红灯、绿灯,黄灯。所以4种状态依次为0x6A,0x66,0x5C,0x3C。当交通灯的剩余时间为零时,改变P1口的输出,进而改变交通灯的点亮状态。交通灯依次循环上面的4个状态,就可以实现指挥交通的作用。 3.2.3 定时器程序 本次设计用定时计数器T1,TMOD是定时计算器的工作方式控制存放器,通过对该存放器的操作可以改变T1的工作方式。T1有4种工作方式,由TMOD存放器中间的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 键盘程序 为了实现设置通行时间、紧急情况处理、有车放行等功能,本次设计中有键盘电路。通行时间设置由外部中断0实现,紧急情况由外部中断1处理,有车放行是用普通的键盘程序实现的。 按键实际是一种常用的按钮,按键未按下时,键的两个触点处于断开状态,按键按下时,两个触点闭合。按键是利用机械触点来实现键的闭合和释放,由于弹性作用的影响,机械触点在闭合及断开瞬间均有抖动过程,从而使键输入也出现抖动。 抖动时间一般为5—10ms。本次设计采用软件的方法消抖。在第一次检测到有键按下时不动作,延时10ms,再次检测按键的状态,如果仍保持闭合状态,那么确定真的有键按下。当按键释放后,转入按键的处理程序 延时程序如下: /*延时t毫秒*/ void delay(uchar t) { uchar i; /*定义无符号字符常量*/ for(t;t>0;t--) /*执行t次循环*/ { for(i=2000;i>0;i--) /*由于时钟脉冲是12MHz,执行2000次循环的时间为1ms*/ { } } } 3.2.4.1 通行时间设置程序 本次设计通过外部中断0设置各个干道的通行时间。 外部中断0的请求信号由P3^2引脚输入,采用低电平有效的方式响应中断,即IT0=1。响应中断0期间,CPU制止响应其他中断,按键K0,K1起调整时间的作用。采用加1的方式,每按一下K0,主干道通行时间加1,每按一下K1,支干道通行时间加1。通行时间可以直接在数码管上显示出来。按一下K3,可以使系统退出中断,回到主程序断点处,从下一个状态开场执行新设置的通行时间。CPU再开放总中断。 由于本次设计使用两位一体的共阴极数码管显示时间,故设置各个干道的通行时间的围为0—100s。考虑道路通车的实际情况,时间太短无法通过交通路口,所以本设计行时间下限为6s〔绿灯1s,黄灯5s〕。在6—99s之间可以任意设置通行时间,更合理高效的指挥交通。 3.2.4.2 紧急情况处理程序 本次设计通过外部中断1实现对紧急情况的处理。 与外部中断0相仿。外部中断1的请求信号有P3^3引脚输入,采用低电平有效的方式相应中断,即IT0=1。响应中断1期间,CPU制止响应其他中断,东南西北四个方向均亮红灯,各个干道都制止通行。由于不确定要持续多久,不采用倒计时的方式显示时间,数码管显示00。紧急情况完毕时,按一下K3,可以使系统退出中断,回到主程序断点处,CPU再开放总中断。 3.2.4.3 状态调整程序 在实际交通系统中,很有可能会不时的出现一道有车而另一道无车的情况,为了更合理高效的指挥交通,本次设计的交通灯控制系统能立即让有车道放。由开关 K0 和 K1 控制。采用查询的方式不断扫描K0、K1,看有没有键按下。按一下K0键,可以实现主干道通行,按一下K1键,可以实现支干道通行。 此时交通状态的改变是因为另一路无车,所以不需要设置返回,直接按主程序循环指挥。也有可能较长时间出现一道有车另一道无车的情况,只需屡次按K0或K1键即可。 4 Proteus仿真 4.1 正常工作状态 本次设计的交通灯控制系统共有四个工作状态,分别是状态0、状态1、状态2和状态3。 开场时先执行状态0,南北方向绿灯亮,东西方向红灯亮。历时25秒。如图10所示: 图10 状态0 25秒后转为状态1,南北方向绿灯灭,黄灯每秒闪亮一次,东西方向还是红灯亮。历时5秒。如图11所示: 图11 状态1 5秒后再转状态2,南北方向红灯亮,东西方向绿灯亮。历时15秒。如图12所示: 图12 状态2 15秒后转状态3,南北方向还是红灯亮,东西方向绿灯灭,黄灯每秒闪亮一次。历时5秒。如图13所示: 图13 状态3 此状态完毕后再回到状态0,如此循环进展。 4.2 时间调整 按一下开关K4,系统响应外部中断0,进入通行时间调整程序。各个干道的通行时间有数码管显示。如图14所示: 图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 状态调整 为了更合理高效的指挥交通,当南北方向有车而东西方向无车时,按K0,系统会自动跳转到状态0,实现南北方向通行。如图19所示: 图19 南北方向有车而东西方向无车时,南北放行 当东西方向有车而南北方向无车时,按K1,系统会自动跳转到状态2,实现东西方向通行。如图20所示: 图20 东西方向有车而南北方向无车时,东西放行 5 课程设计体会 很荣幸有这次课程设计的时机,我可以把理论的学习与实践有机的结合起来。 在设计过程中,首先要分析课题,根据所学知识绘制出系统总体设计框图。然后按照自己的设计思路,利用所给的元器件绘制出设计图。在绘制设计图连接各个元器件的时候,要尽量使布线适宜,从而使所作设计图清晰易看。绘制完设计图后,接下来就是要根据设计所要求的功能和已完成的设计图编写程序,在编程时,首先应该绘制出主程序流程图,然后采用模块化程序设计的方式,编写实现各个功能的子程序,再将各个子程序与主程序连接起来。在设计程序时要不断对程序进展修改,同时在设计程序的过程中要养成注释程序的习惯,在对程序进展修改的时候,可以通过注释很容易的看出各句程序的功能,清晰明朗。当程序设计出来之后,就可以通过仿真软件对其进展编译,生成仿真所需要的HEX文件。 将生成的文件加载到系统图的单片机上,就可以进展系统仿真。通过仿真,检测所作设计是否能实现预期功能。 本次课程设计使我对单片机的工作原理有了更深刻的认识,掌握了许多在以前学习中混淆不清的知识点。在翻阅相关书籍和查询相关资料过程中学到了丰富的单片机知识,开阔了眼界,增广了知识面。在编辑程序中,对C语言又有了新的认识和理解。实物焊接中不仅锻炼了自己的动手能力,而且真正作到了理论联系实际的重要性,收益匪浅。 本次课程设计我参考的三本书。一本是余发山教授的?单片机原理及其应用技术?,一本是在图书馆借的王为青教师编写的?单片机Keil Cx51应用开发技术?,还有一本就是贾宗璞教师的?C语言程序设计?。在此向编者表示诚挚的意。 本次设计中,我曾屡次在课堂上向谭兴国教师请教各个模块设计的细节问题,得到了谭教师的大力帮助,在此深表感! 参考文献 [1] 余发山,王福忠.单片机原理及应用技术 :中国矿业大学,2021 [2] 贾宗璞,许合利.C语言程序设计 :中国矿业大学,2007 [3] 王为青,程国刚.单片机Keil Cx51应用开发技术 :人民邮电,2007 附1 源程序代码 #include<AT89X52.H> /*对单片机的口进展了定义********/ #define uchar unsigned char /*定义字符串类型为无符号型*/ uchar code a[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; /*段码组合,P0口,高有效*/ uchar code b[4]={0x0D,0x0E,0x07,0x0B}; /****P2口,低有效*/ uchar code c[4]={0x6A,0x66,0x5C,0x3C}; /****P1口.低有效*/ char SN=25,WE=30; /*SN表示南北方向——主干道,WE表示东西方向——支干道*/ char SN_G=25,WE_G=15,Y=5; /*SN_G表示南北方向的绿灯,WE_G表示东西方向的绿灯,Y表示黄灯*/ uchar i,k=0,count=0; /*定义无符号字符串变量*/ void delay(uchar t);/*定义函数*/ void light(); /*定义函数*/ void led(); /*定义函数*/ void ledthrough();/*定义函数*/ void leddrive(); /*定义函数*/ sbit K0=P3^7;/*开关K0接P3^7管脚*/ sbit K1=P3^6;/*开关K1接P3^6管脚*/ sbit K2=P3^3;/*开关K2接P3^3管脚*/ sbit K3=P3^5;/*开关K3接P3^5管脚*/ sbit K4=P3^2;/*开关K4接P3^2管脚*/ /*程序初始化*/ void init(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中断,即允许响应端口P3^2(K4)中断*/ EX1=1;/*允许外部中断1中断,即允许响应端口P3^3(K2)中断*/ } /*中断0处理程序*/ void int0(void) interrupt 0 { EA=0;/*CPU制止响应一切中断*/ P1=0x6C;/*东西南北方向均红灯亮*/ TR0=!TR0;/*计数器停顿工作*/ for(;;)/*无条件循环*/ { ledthrough(); /*调用通行时间显示函数*/ /*设置南北方向通行时间*/ if(K0==0) /*P3^7=0*/ { delay(10);/*延时,把抖动的时间抛掉*/ if(K0==0) { while(!K0)/*当松开K0开关时,跳出循环,执行后面的程序*/ { ledthrough(); /*调用通行时间显示函数*/ } SN_G++;/*南北方向绿灯时间+1*/ if((SN_G+Y)==100)/*南北方向通行时间(绿灯加黄灯时间)为100s*/ SN_G=1;/*由于使用的是两位数码管,当南北方向通行时间加到100后绿灯时间归1*/ } } /*设置东西方向通行时间*/ if(K1==0) /*P3^6=0*/ { delay(10);/*延时,把抖动的时间抛掉*/ if(K1==0) { while(!K1)/*当松开K1开关时,跳出循环,执行后面的程序*/ { ledthrough(); /*调用通行时间显示函数*/ } WE_G++;/*东西方向绿灯时间+1*/ if((WE_G+Y)==100)/*东西方向通行时间(绿灯加黄灯时间)为100s*/ WE_G=1;/*由于使用的是两位数码管,当东西方向通行时间加到100后绿灯时间归1*/ } } /*返回*/ if(K3==0) /*P3^5=0*/ { delay(10);/*延时,把抖动的时间抛掉*/ if(K3==0) { while(!K3)/*当松开K3开关时,跳出循环,执行后面的程序*/ { ledthrough(); /*调用通行时间显示函数*/ } TR0=!TR0;/*启动计数器*/ EA=1; /*CPU开放总中断*/ break;/*跳出*/ } } } } /*中断1处理程序*/ void int1(void) interrupt 2 { P1=0x6C,P0=a[0];/*东西南北方向均红灯亮,P0口输出0*/ EA=0;/*CPU制止响应一切中断*/ TR0=!TR0;/*计数器停顿工作*/ for(;;)/*无条件循环*/ { leddrive(); /*数码管驱动程序*/ /*返回*/ if(K3==0) /*P3^5=0*/ { delay(10);/*延时,把抖动的时间抛掉*/ if(K3==0) { while(!K3)/*当松开K3开关时,跳出循环,执行后面的程序*/ { leddrive(); /*数码管驱动程序*/ } EA=1;/*CPU开放总中断*/ TR0=!TR0;/*启动计数器*/ break;/*跳出*/ } } } } /*键盘程序*/ void key() { /*南北有车而东西无车*/ if(K0==0) /*K0=0*/ { delay(10);/*延时,把抖动的时间抛掉*/ if(K0==0) { 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(); /*调用数码管函数*/ } count=0;/*清零*/ k=2;/*南北方向不通车,东西方向通车*/ SN=WE_G+Y,WE=WE_G;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/ } } } /*定时函数*/ void time1(void) interrupt 1 { TH0=0x3c; TL0=0xb0;/*计50000个数,用时50ms*/ count++; /*自增运算*/ if(count>=20)/*当count大于或等于20时,历时1s,执行程序*/ { SN--;/*自减运算*/ WE--;/*自减运算*/ count=0;/*清零*/ if(SN==0||WE==0)/*当SN=0或者WE=0时,执行程序*/ { k++;/*自增运算*/ if(k>3)/*当k>3时,执行程序*/ k=0;/*清零*/ switch(k)/*switch 语句*/ { case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/ case 1:SN=Y,WE=Y;break; /*东西南北方向显示时间均为黄灯闪亮时间*/ case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/ case 3:SN=Y,WE=Y;break; /*东西南北方向显示时间均为黄灯闪亮时间*/ } } } } /*延时t毫秒*/ void delay(uchar t) { uchar i; /*定义无符号字符常量*/ for(t;t>0;t--) /*执行t次循环*/ { for(i=2000;i>0;i--) /*由于时钟脉冲是12MHz,执行2000次循环的时间为1ms*/ { } } } /*交通灯函数*/ void light() { P1=c[k];/*交通灯对应着k的值变化*/ if(P1==c[1]&&count==0)/*当南北方向亮黄灯且count=0时,执行程序*/ { TH1=(65536-50000)/256; TL1=(65536-50000)%256;/*延时50ms*/ P1=0x6E;/*南北方向黄灯熄灭,东西方向亮红灯*/ } else if(P1==c[3]&&count==0)/*当东西方向亮黄灯且count=0时,执行程序*/ { TH1=(65536-300000)/256; TL1=(65536-300000)%256;/*延时50ms*/ P1=0x7C;/*南北方向亮红灯,东西方向黄灯熄灭*/ } } /*数码管函数*/ void led() { P2=b[0],P0=a[SN%10];/*显示南北方向个位*/ delay(5);/*延时*/- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 控制 交通灯 控制系统 设计 报告
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文