单片机交通灯实训报告
单片机的交通灯实训报告

一、引言随着我国经济的快速发展,城市交通问题日益突出,交通拥堵、事故频发等问题严重影响了市民的生活质量。
为了解决这些问题,智能交通系统应运而生。
单片机作为一种高效、低成本的微控制器,在智能交通系统中扮演着重要角色。
本实训报告以单片机为控制核心,设计并实现了一套交通灯控制系统,旨在提高交通效率,保障交通安全。
二、实训目标1. 熟悉单片机的基本原理和编程方法。
2. 掌握交通灯控制系统的设计方法。
3. 学会使用单片机进行交通灯控制。
4. 提高动手实践能力和团队协作能力。
三、实训内容1. 系统组成本系统采用AT89C52单片机作为核心控制单元,通过外围电路实现交通灯的控制。
系统主要由以下模块组成:(1)单片机模块:负责整个系统的控制和数据处理。
(2)信号灯模块:包括红、黄、绿三个信号灯,用于指示交通灯状态。
(3)按键模块:用于手动控制交通灯状态。
(4)数码管模块:用于显示交通灯倒计时时间。
(5)电源模块:为整个系统提供稳定的电源。
2. 系统工作原理系统启动后,单片机首先进行初始化设置,包括设定交通灯状态、倒计时时间等。
然后进入主循环,不断检测按键状态,并根据交通灯状态和倒计时时间进行控制。
(1)正常状态:系统按照预设的交通灯状态和时间进行控制,绿灯亮30秒,黄灯亮5秒,红灯亮25秒。
(2)紧急状态:当检测到紧急车辆时,系统立即切换到紧急状态,所有交通灯亮红灯,直到紧急车辆通过。
(3)手动控制:用户可以通过按键手动控制交通灯状态,实现交通灯的切换。
3. 程序设计程序采用C语言编写,主要包括以下部分:(1)初始化函数:设置单片机的工作模式、IO口状态、定时器等。
(2)主循环函数:检测按键状态,控制交通灯状态和倒计时时间。
(3)中断服务程序:处理按键中断和定时器中断。
四、实训过程1. 硬件设计根据系统组成,设计并焊接电路板,包括单片机模块、信号灯模块、按键模块、数码管模块和电源模块。
2. 软件设计使用Keil uVision软件编写程序,并进行编译、下载和调试。
单片机交通灯实训小结

单片机交通灯实训小结
随着城市化的不断发展,交通流量不断增加,交通安全问题也日益突出。
为了保障交通安全,交通管理部门普遍采用交通信号灯进行交通指挥。
而单片机交通灯控制系统则是一种新型的交通信号灯控制方式,在实际应用中具有更加灵活、安全、可靠的优点。
本次实训项目是利用单片机控制交通灯的流程,实现红、黄、绿三种颜色的循环交替。
在实际操作中,我们首先需要准备好硬件设备,包括单片机、LED灯、电容器、晶振等。
然后,根据实验指导书的要求进行电路连接,将各个元件按照电路图进行连接,确保无误后进行程序编写。
程序编写的过程中,我们需要学习C语言的基本语法和单片机的编程方法。
首先,我们需要定义各个引脚的功能,例如将P1.0口定义为红灯、P1.1口定义为黄灯、P1.2口定义为绿灯。
然后,我们需要利用if语句和循环语句,控制各个灯的亮灭时间,实现交替循环。
在实际操作中,我们还需要注意一些细节问题。
例如,在编写程序时,需要注意程序语句的顺序,避免出现死循环等问题。
另外,我们还需要学会利用调试工具,对程序进行调试和修改,确保程序的正常运行。
通过本次实训项目,我们不仅学习了单片机控制交通灯的基本原理
和方法,还掌握了C语言编程的基本技能。
同时,我们也深刻认识到交通安全问题的重要性,意识到我们作为工程技术人员应该积极参与到交通安全事业中,为社会的发展和进步做出更大的贡献。
总的来说,本次实训项目不仅提高了我们的实践能力和工程素养,还增强了我们的团队合作意识和责任感。
相信在今后的学习和工作中,我们将更加努力地学习和实践,为自己的未来和社会的发展做出更加积极的贡献。
单片机交通灯实验报告

单片机交通灯实验报告简介本实验通过使用单片机设计并实现一个交通灯控制系统,模拟城市道路上的交通信号灯。
实验过程中,我们通过编程控制不同灯的亮灭状态,实现交通灯的循环变换,以此来模拟车辆和行人的行进。
实验材料•单片机•LED灯•电阻•连线•电源实验过程及结果1. 电路连接首先,我们根据实验需要将单片机和LED灯等材料进行连接。
具体连接方式如下:- 将电阻连接到单片机的IO口上,起到限流的作用。
- 将LED灯连接到电阻的另一端。
- 将单片机通过连线与电源进行连接。
2. 程序设计接下来,我们需要编写程序来实现交通灯的循环变换。
使用C语言编程,通过控制IO口的高低电平来控制LED灯的亮灭状态。
以下是程序的主要逻辑:#include <reg52.h>sbit redLed = P1^0; // 红灯sbit yellowLed = P1^1; // 黄灯sbit greenLed = P1^2; // 绿灯void delay(unsigned int t){while(t--);}void main(){while(1){// 红灯亮,其他灯灭redLed = 0;yellowLed = 1;greenLed = 1;delay(50000);// 红灯亮黄灯亮,绿灯灭redLed = 0;yellowLed = 0;greenLed = 1;delay(20000);// 绿灯亮,其他灯灭redLed = 1;yellowLed = 1;greenLed = 0;delay(50000);// 黄灯亮,其他灯灭redLed = 1;yellowLed = 0;greenLed = 1;delay(20000);}}3. 实验结果与分析通过实验,我们观察到LED灯按照我们设计的程序循环地变换亮灭状态,从而实现了交通灯的模拟效果。
红灯、黄灯、绿灯在规定的时间间隔内依次亮起,并在该时间间隔结束后熄灭。
单片机交通灯实验报告

单片机交通灯实验报告一、实验目的二、实验原理三、实验器材四、实验步骤五、实验结果六、实验分析与讨论七、实验总结一、实验目的:本次单片机交通灯实验的主要目的是通过使用单片机控制LED灯的亮灭,模拟交通信号灯的运行状态,并能够正确地掌握单片机编程技巧和硬件连接技术。
二、实验原理:本次交通灯实验采用了单片机作为中央处理器,通过编写程序控制LED灯的亮灭来模拟交通信号灯。
在程序中,我们需要使用到延时函数和条件判断语句。
具体来说,在红绿黄三个LED灯之间切换时,需要设定一个时间段,并在该时间段内循环执行红绿黄三个LED灯亮度变化的循环语句。
三、实验器材:1. 单片机开发板一块;2. LED 灯若干;3. 杜邦线若干。
四、实验步骤:1. 将红色 LED 灯连接至 P0 口;2. 将黄色 LED 灯连接至 P1 口;3. 将绿色 LED 灯连接至 P2 口;4. 将单片机开发板与电脑连接,打开 Keil 软件;5. 编写程序,将红色 LED 灯亮起来;6. 编写程序,将黄色 LED 灯亮起来;7. 编写程序,将绿色 LED 灯亮起来;8. 编写程序,模拟交通信号灯的运行状态。
五、实验结果:在完成了上述步骤后,我们成功地模拟出了交通信号灯的运行状态。
具体来说,在程序中我们设定了一个时间段为10s,在这个时间段内,红灯亮 5s,黄灯亮 2s,绿灯亮 3s。
在这个时间段结束后,循环执行该过程。
六、实验分析与讨论:通过本次交通灯实验,我们学习到了如何使用单片机控制LED灯的亮灭,并能够正确地编写程序模拟交通信号灯的运行状态。
在编写过程中需要注意以下几点:1. 在使用延时函数时要注意时间单位和精度;2. 在编写条件判断语句时要注意逻辑结构和语法规范;3. 在硬件连接时要注意杜邦线的颜色对应关系和插口位置。
七、实验总结:本次单片机交通灯实验是一次非常有意义的实践活动。
通过此次实验,我们掌握了单片机编程技巧和硬件连接技术,并能够正确地模拟交通信号灯的运行状态。
单片机交通灯实验报告(一)

单片机交通灯实验报告(一)引言概述:交通灯是城市交通管理的重要组成部分,通过控制红绿灯的变化,实现车辆和行人的有序通行。
本文将详细介绍单片机交通灯实验的设计与实现,包括硬件设计、程序编写和实验结果分析。
正文:一、硬件设计1. 确定电路所需元件:单片机、LED灯、电阻等。
2. 组装硬件电路:按照电路图进行元件的连接,确保电路的正确连接。
3. 设计适当的电源:为单片机和LED灯提供稳定的电源。
二、程序编写1. 定义程序所需的IO口:确定控制LED灯的IO口。
2. 初始化单片机:设置单片机的工作频率和中断。
3. 设计交通灯的流程控制:根据实际的交通灯变化规律,设计程序的流程控制。
4. 编写交通灯控制的函数:使用if-else语句或switch-case语句编写函数控制交通灯的变化。
5. 调试程序:通过单片机调试工具或仿真软件,检查程序运行的正确与否。
三、实验结果分析1. 观察实验现象:通过实验现场观察交通灯的变化,记录每一种灯亮的时间和顺序。
2. 分析实验结果:根据实验记录,分析交通灯的工作原理和实现的准确性。
3. 比较与设计要求的符合度:将实验结果与设计要求进行比较,评估实验的完成度。
4. 探讨存在问题与改进方向:分析实验中可能存在的问题,并提出改进措施。
四、小结本文介绍了单片机交通灯实验的设计与实现。
通过硬件设计和程序编写,实现了交通灯的变化控制。
通过实验结果分析,我们可以得出实验的有效性和可行性。
当然,实验中也存在一些问题,需要进一步改进。
在后续的实验中,我们将进一步完善交通灯的控制,提高其实际应用的稳定性和可靠性。
总结:本文详细介绍了单片机交通灯实验的设计与实现,包括硬件设计、程序编写和实验结果分析。
通过该实验,我们对交通灯的工作原理和控制方法有了更为深入的了解,并对实验的经验和教训进行了总结。
相信在今后的学习和实践中,我们能够更好地应用单片机技术,为实现交通管理的智能化和高效化作出贡献。
单片机实训报告交通灯

一、实训背景与目的随着城市化进程的加快,交通流量日益增大,传统的交通灯控制系统已经无法满足日益复杂的交通需求。
为了提高交通效率,减少交通拥堵,本实训项目旨在设计并实现一套基于单片机的智能交通灯控制系统。
通过本实训,学生可以深入了解单片机原理,掌握单片机编程与调试技巧,同时锻炼动手实践能力和团队协作精神。
二、系统设计1. 系统组成本系统主要由以下模块组成:单片机模块:采用AT89C52单片机作为核心控制单元,负责接收传感器信号、处理数据、控制交通灯状态等。
传感器模块:包括红外传感器、地磁传感器等,用于检测车辆和行人,实时获取交通信息。
执行模块:包括LED灯、继电器等,用于驱动交通灯和信号灯。
显示模块:采用LCD显示屏,用于显示交通灯状态、倒计时等信息。
电源模块:为系统提供稳定电源。
2. 工作原理系统工作原理如下:(1)单片机初始化,设置各模块参数。
(2)单片机通过传感器模块检测交通情况,如车辆和行人数量。
(3)单片机根据检测到的交通情况,控制交通灯和信号灯的亮灯状态。
(4)LCD显示屏显示交通灯状态和倒计时信息。
(5)当系统检测到紧急情况时,如行人过马路,系统自动切换到紧急模式,确保行人安全。
三、硬件设计1. 单片机模块选用AT89C52单片机作为核心控制单元,具有以下特点:内置8K字节闪存,可存储程序和数据。
内置8位定时器/计数器,可进行定时或计数操作。
内置串行通信接口,可进行数据通信。
2. 传感器模块红外传感器:用于检测车辆和行人,实现自动控制。
地磁传感器:用于检测车辆行驶方向,实现左转和直行控制。
3. 执行模块LED灯:用于显示交通灯状态。
继电器:用于驱动信号灯。
4. 显示模块采用LCD显示屏,用于显示交通灯状态、倒计时等信息。
5. 电源模块采用DC 12V电源,为系统提供稳定电源。
四、软件设计1. 编程语言采用C语言进行编程,具有以下优点:语法简单,易于理解。
可移植性好,可在不同平台上运行。
交通灯的焊接实训报告

一、实训背景随着城市化进程的加快,交通管理变得日益重要。
交通灯作为城市交通管理的重要组成部分,其正常运行对于确保交通安全、提高道路通行效率具有重要意义。
本实训旨在通过单片机控制交通灯的焊接制作,使学生了解交通灯的基本工作原理,掌握单片机编程和焊接技术。
二、实训目的1. 理解交通灯的工作原理和组成。
2. 掌握单片机编程技术,实现交通灯的自动控制。
3. 熟悉焊接工艺,完成交通灯的实体制作。
4. 提高学生的动手能力和实践技能。
三、实训内容1. 交通灯电路设计交通灯电路主要由单片机、LED灯、按键、电阻、电容等元件组成。
本实训采用AT89C52单片机作为控制核心,利用其I/O口输出控制信号,驱动LED灯实现红、黄、绿三色灯光的切换。
2. 电路焊接根据电路图,将单片机、LED灯、按键、电阻、电容等元件焊接在电路板上。
焊接过程中,注意以下几点:- 焊接前,确保电路板干净、整洁。
- 使用合适的焊料和助焊剂,保证焊接质量。
- 焊接过程中,注意温度控制,避免烧坏元件。
- 焊接完成后,检查电路连接是否正确,确保电路通路。
3. 单片机编程利用C语言编写单片机程序,实现交通灯的控制。
程序主要包括以下功能:- 初始化单片机I/O口,设置端口模式。
- 设计交通灯工作状态表,定义红、黄、绿三色灯光的切换时间。
- 编写定时器中断服务程序,实现定时器功能。
- 编写按键扫描程序,实现时间参数的修改和交通灯状态的切换。
4. 程序下载与调试将编写好的程序下载到单片机中,通过调试软件观察程序运行情况。
根据实际情况,对程序进行修改和完善,确保交通灯能够按照预期工作。
四、实训过程1. 电路设计根据交通灯电路图,绘制原理图,并选用合适的元件。
本实训采用AT89C52单片机、LED灯、按键、电阻、电容等元件。
2. 电路焊接按照电路图,将元件焊接在电路板上。
焊接过程中,注意以下几点:- 焊接前,确保电路板干净、整洁。
- 使用合适的焊料和助焊剂,保证焊接质量。
单片机课程设计报告1 交通灯

单片机课程设计报告1 交通灯1. 引言本文档是单片机课程设计的报告,主题为交通灯。
交通灯是城市交通管理的重要组成部分,合理的交通灯设置可以提高交通效率、保障交通安全。
本文将介绍交通灯的设计方案、实现过程以及遇到的问题及解决方法。
2. 设计方案2.1 总体设计思路本次交通灯设计采用的是基于单片机的控制系统。
通过在单片机上编程设计,控制交通灯的状态和时间,实现交通灯的自动切换,并保证交通流畅。
2.2 硬件设备本次设计所需的硬件设备包括:•单片机:采用STC89C52型单片机•交通灯信号灯模块:包括红灯、黄灯、绿灯三个灯泡及控制电路板•电源模块:用于提供电力供给2.3 软件设计本次设计的软件部分主要包括:•交通灯控制程序:通过编写程序控制单片机,实现交通灯的自动切换3. 实现过程3.1 准备工作在开始设计之前,我们首先进行了一些准备工作。
包括准备好所需的硬件设备,如单片机、交通灯信号灯模块和电源模块;同时也对单片机进行了初始化配置,以及编写好了交通灯控制程序的框架。
3.2 硬件连接我们将单片机与交通灯模块进行连接。
具体的连接方式如下:1.将单片机的IO口与交通灯模块的各个灯泡的控制引脚相连,以实现对灯泡亮灭的控制。
2.将电源模块与单片机进行连接,以提供电力供给。
3.3 软件设计与编程在硬件连接完成后,我们开始着手进行软件设计和编程。
主要的步骤包括:1.定义交通灯的状态:根据交通灯的信号变化规律定义交通灯状态,如红灯亮、黄灯亮、绿灯亮等。
2.编写控制程序的逻辑:根据交通灯的状态定义,编写控制程序的逻辑,实现不同状态之间的切换和持续时间的控制。
3.编程实现:根据以上设计,在单片机上编写程序,并通过烧录将程序烧录到单片机上。
3.4 测试与调试在程序编写完成后,我们进行了测试与调试。
通过在交通灯工作状态下的观察与测试,我们可以判断出程序是否符合设计要求,并进行必要的调试。
4. 遇到的问题与解决方法在设计与实现过程中,我们遇到了一些问题,具体包括:•问题1:单片机与交通灯模块的连接出现问题,导致交通灯无法正常工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机电工程学院课程设计报告课程名称:单片机课程设计专业班级: 13电本2班学号: 2013041632学生:罗炜指导教师:王清辉、何文丰完成时间:报告成绩:交通灯设计一、设计任务与要求设计基本要求:(1)车辆通行繁忙的十字交叉路口,设计一交通灯控制器,设东西方向通行时间为30秒,当剩余3秒时黄灯亮,南北方向通行时间为20秒,当剩余3秒时黄灯亮。
(2)东西、南北方向各用三个(绿、黄、红)LED表示,并用数码管显示东西、南北方向的剩余时间。
(3)可利用按键修改时间参数,可以利用按键切换东西南北交通灯的当前状态(即立刻东西由红变绿,南北有绿变红,并按设定的时间工作)。
二、方案设计与论证表2-1:交通灯的工作状态表根据表2-1所示可将交通灯的工作状态设为以下几个步骤:1、初始状态时即为东西方向绿灯通行27秒+3秒黄灯,此时南北红灯亮。
2、随后是南北方向绿灯通行17秒+3秒黄灯,此时东西红灯亮。
3、通过按模式选择键一次来切换东西南北交通灯的当前状态。
(通过设置定时计时器T1实现交通灯的计时)4、通过按模式选择键第二次切换至南北方向红绿灯的计时设置,通过加减按键来确定南北方向红绿灯的计时数。
5、确定南北方向计数值后,通过按模式选择键第三次切换至东西方向红绿灯的计时设置,通过加减按键来确定东西方向红绿灯的计时数。
6、确定交通灯计时数后再按下模式选择键后,交通灯便进入工作状态。
时间计时的实现:采用定时中断实现秒的精确计时(详细方案入下列程序设计所示)。
按键输入的实现:通过编写按键读取函数,来实现交通灯的状态以及时间值得设定(详细方案入下列程序设计所示)。
图2-1程序设计流程框图三、硬件电路设计1、倒计时显示该系统要求完成倒计时的功能。
因只需显示数字,基于上述原因,我完全采用数码管显示,四个路口分别采用一个二位共阴极数码管即可。
2、状态灯显示该系统要求完成状态灯显示的功能。
采用红绿黄三种LED灯一个路口只需三个个状态灯,绿灯通行,红灯停止,黄灯闪烁。
3、输入方案该系统要求能手动改变东西与南北的通行时间、红绿灯状态紧急交换处理。
运用单片机中四个IO口设置三个按键,三个按键的功能分别为:增加、减少、状态切换和暂停。
4、复位电路与晶振电路复位电路:复位方式有多种,本设计采用按键复位。
接线图如图3-1所示,当按下复位按键时,RST端产生高电平,使单片机复位。
复位后,其片各寄存器状态改变,片RAM容不变。
晶振电路(如图3-2所示):结合单片机部产生单片机所需的时钟频率。
图3-1程序仿真接线图图3-2程序仿真接线图5、AT89S51的简介AT89S51是一个低功耗,高性能CMOS 8位单片机,片含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。
图3-3程序仿真接线图四、软件设计根据设计要求得完整的交通灯程序源代码包含有:1.定时2.数码管显示3.LED状态切换.4按键读取。
#include "reg51.h"#define uint unsigned int#define uchar unsigned charuchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示数组uchar T0_Count=0,East_time=0,North_time=0;//定时变量,东西倒计时变量,南北倒计时变量sbit DXD_Red=P3^0; //东西方向红灯sbit DXD_Yellow=P3^1; //东西方向黄灯sbit DXD_Green=P3^2; //东西方向绿灯sbit NBD_Red=P3^3; //南北方向红灯sbit NBD_Yellow=P3^4; //南北方向黄灯sbit NBD_Green=P3^6; //南北方向绿灯sbit DXKZ_GE=P2^4; //东西方向个位数码管公共端sbit DXKZ_SHI=P2^5; //东西方向十位数码管公共端sbit NBKZ_GE=P2^6; //南北方向个位数码管公共端sbit NBKZ_SHI=P2^7; //南北方向十位数码管公共端sbit Key_Add=P1^1; //增加按键sbit Key_Dec=P1^2; //减少按键sbit Key_OK=P1^3; //确定按键,兼具状态切换sbit LE=P1^0;void delayms(uint i) //毫秒级延时{uint x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);}void t0_init(){TMOD=0X01; //16位定时器0TH0=(65536-50000)/256;TL0=(65536-50000)%256; //定时50msET0=1; //开启中断1EA=1; //开启总中断TR0=1; //开启定时器0}void state1() //东西绿灯亮,南北红灯亮{DXD_Red=1;DXD_Yellow=1;DXD_Green=0;NBD_Red=0;NBD_Yellow=1;NBD_Green=1;}void state2() //东西黄灯闪烁{ DXD_Red=1;DXD_Yellow=0;DXD_Green=1;}void state3() //东西红灯亮,南北绿灯亮{DXD_Red=0;DXD_Yellow=1;DXD_Green=1;NBD_Red=1;NBD_Yellow=1;NBD_Green=0;}void state4() //南北黄灯闪烁{NBD_Red=1;NBD_Yellow=0;NBD_Green=1;}void Display(uchar num1,num2) // 功能:数码管扫描显示函数//参数:num1,东西方向数码管显示值;num2,南北方向数码管显示值{P0=num[num1%10];//LE=1;LE=0; //写入个位数DXKZ_GE=0;delayms(10); //开启一个数码管公共端,显示一段时间DXKZ_GE=1; //关闭公共端P0=num[num1/10];//LE=1;LE=0; //写入十位数DXKZ_SHI=0;delayms(10);DXKZ_SHI=1;P0=num[num2%10];//LE=1;LE=0; //写入个位数NBKZ_GE=0;delayms(10);NBKZ_GE=1;P0=num[num2/10];//LE=1;LE=0; //写入十位数NBKZ_SHI=0;delayms(10);NBKZ_SHI=1;}uchar key_read() //功能:按键读取参数:back,1,按下增加按键;2,减少按键;3确定键{uchar back=0;if(P1!=0xff){delayms(10); //按键延时消抖if(Key_Add==0)back=1;else if(Key_Dec==0)back=2;else if(Key_OK==0)back=3;while(P1!=0xff);}return back;}void Clear_Display() //关闭所有数码管显示P0=0x00;//LE=1;LE=0;DXKZ_GE=1;DXKZ_SHI=1;NBKZ_GE=1;NBKZ_SHI=1;}void main(){uchar Tab=1,key,East_TimeNum=30,North_TimeNum=20;t0_init();Clear_Display(); //开机初始化关闭所有数码管//设置东西方向倒计时while(key!=3) //按下确定键,退出while{key=key_read(); //按键读取函数if(key==1) //按下增加按键East_TimeNum++;else if(key==2) //按下减少按键if(East_TimeNum>3)East_TimeNum--;Display(East_TimeNum,0); //数码管同步显示东西方向设定的值}key=0;//设置南北方向倒计时while(key!=3) //按下确定键,退出while{key=key_read(); //按键读取函数if(key==1) //按下增加按键North_TimeNum++;else if(key==2) //按下减少按键if(North_TimeNum>3)North_TimeNum--;Display(0,North_TimeNum); //数码管同步显示南北方向设定的值}key=0;while(1){switch(Tab){case 1: //红绿灯状态1{East_time=East_TimeNum;//填充东西倒计时值,大小为已设置好的East_TimeNumTab=2; //切换至下一红绿灯状态state1();while((East_time!=3)&&(key!=3)) //倒计时至3秒或按下切换按键,退出while{Display(East_time,North_time);//数码管显示key=key_read(); //按键读取}if(key==3){key=0;East_time=0; //东西倒计时立刻清零Tab=3; //按下切换按键,直接跳到状态3}break;}case 2: //红绿灯状态2{state2();Tab=3; //切换至下一红绿灯状态while((East_time!=0)&&(key!=3))//倒计时至0秒或按下切换按键,退出while{Display(East_time,North_time);key=key_read();DXD_Yellow=~DXD_Yellow;}if(key==3){key=0;Tab=3; //按下切换按键,直接跳到状态3East_time=0; //东西倒计时立刻清零}break;}case 3: //红绿灯状态3{North_time=North_TimeNum;Tab=4; //切换至下一红绿灯状态state3();while((North_time!=3)&&(key!=3)){Display(East_time,North_time);key=key_read();}if(key==3){key=0;Tab=1;North_time=0;}break;}case 4: //红绿灯状态4{state4();Tab=1; //切换至下一红绿灯状态while((North_time!=0)&&(key!=3)){Display(East_time,North_time);key=key_read();NBD_Yellow=~NBD_Yellow;}if(key==3){key=0;Tab=1;North_time=0;}break;}}}}void Timer_0() interrupt 1{T0_Count++;TH0=(65536-50000)/256; //每50ms进入一次中断函数TL0=(65536-50000)%256;if(T0_Count==20) //定时20*50ms=1S{T0_Count=0; //清零重新计时if(East_time==0)East_time=0;elseEast_time--; //东西方向按秒间隔倒计时if(North_time==0)North_time=0;elseNorth_time--; //南北方向按秒间隔倒计时}}五、仿真过程与仿真结果运用ISIS 7 Professional 仿真软件进行程序仿真,按程序要求设置好程序仿真图(图3-1所示),把Keil uVision4生成交通灯程序的.hex文件捎入仿真图中,运行结果如下:图5-1 东西方向通行时间设置通加减按键来控制东西方向通行时间,时间设置好后按下确定键切换至下一个状态。