热门标签最近更新文档搜索存到桌面欢迎您访问好范文,请记住我们的网址 www.hfanwen.com

当前位置:首页 > 工作报告 > 内容页

课设报告—基于单片机的十字路口交通灯

分类:工作报告发表于 2023-04-16 13:40阅读数:0

想写好工作报告类型的文章,不妨来参考一下本文。好范文为大家带来了《课设报告—基于单片机的十字路口交通灯》,希望对你的范文写作有所帮助。

基于单片机的十字路口交通灯设计

摘 要

交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

本系统采用单片机STC89C52为中心器件来设计交通灯控制器,以模拟十字路口交通灯的各种状态显示以及倒计时时间。系统由单片机I/O口扩展电路、交通灯状态LED灯显示电路、数码管显示电路、复位及晶振电路等几大部分组成。系统除基本的交通灯倒计时功能外,还有倒计时时间设置、紧急情况模拟等功能,较好的模拟实现了十字路口可能出现的状况。

关键词: STC单片机;STC89C52;交通灯;数码管

ABSTRACT

Transportation plays an important role in peoples daily life.With the increasing frequency of peoples social activities, this is reflected incisively and vividly.The emergence of traffic lights makes the traffic control effective, which has obvious effect on guiding traffic flow, improving road capacity and reducing traffic accidents.In recent years, with the rapid development of science and technology, the application of single-chip microcomputer is in-depth, at the same time driving the traditional control and detection technology to update.In the application system of single-chip microcomputer for real-time detection and automatic control, single-chip microcomputer is often used as a core component.The knowledge of single-chip microcomputer is not enough, and it should be improved according to the combination of software and hardware of specific hardware structure.This system uses single chip computer STC89C52 as the central device to design the traffic light controller to simulate the various states of the traffic lights at the intersection and the countdown time.The system consists of I / O port expansion circuit, LED light display circuit of traffic light status, nixie tube display circuit, reset and crystal oscillator circuit.In addition to the basic traffic light countdown function, the system also has countdown time setting, emergency simulation and other functions.The better simulation realizes the possible situation of the intersection.Key words: STC51 Single Chip Microcomputer;STC89C52;Traffic Light;LED Digital Tube

目 录

摘 要 I

ABSTRACT II

目 录 III

1 绪论 1

1.1 设计背景与意义 1

1.2设计目的 1

1.3设计要求及内容 1

1.4本文结构安排 2

2 总体设计方案 3

2.1 系统需求及方案设计 3

2.2 硬件器件介绍 3

2.2.1 STC89C52单片机 3

2.2.2数码管 4

2.2.3 LED灯 5

2.3 所用软件介绍 6

2.3.1 Altium Designer电路设计软件 6

2.3.2 Keil软件及C语言设计 6

2.3.3 proteus仿真设计软件 6

2.4 本章小结 6

3 硬件设计 7

3.1 硬件电路组成 7

3.2 单片机最小系统电路 7

3.3 数码管倒计时及红绿灯电路 8

3.4按键及电源电路 9

3.5本章小结 10

4 软件设计 11

4.1 软件设计需求及设计思路 11

4.2 主函数设计 12

4.3按键程序流程图 12

4.4 本章小结 13

5 仿真演示 14

5.1 仿真实现 14

5.1.1 仿真电路图 14

5.1.2 仿真结果 15

5.2 测试情况分析 17

5.3 本章小结 18

结论 19

参考文献 20

附录一 硬件原理图 21

附录二 仿真原理图 22

附录三 程序 23

1 绪论

1.1 设计背景与意义

交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

本系统采用MSC-51系列单片机STC89C52为中心器件来设计交通灯控制器,实现了能根据实际车流量设置红绿灯倒计时时间,红绿灯循环点亮,倒计时剩3秒时黄灯闪烁警示,倒计时时间通过数码管实时显示,并设置了左转绿灯功能和紧急情况模拟功能。本系统较好的模拟实现了十字路口可能出现的状况,实用性强、操作简单、扩展功能强。

1.2设计目的(1)巩固和加深对单片机原理和接口技术知识的理解;

(2)培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;

(3)学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;

(4)掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;

(5)能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图、仿真图和流程图。

1.3 设计要求及内容

(1)红灯和绿灯相互转换经过黄灯,并且黄灯闪烁三次;

(2)主干道方向通行30秒,辅干道通行20秒,单独左转信号15秒,先直行信号,后左转信号;

(3)设置自动、手动、特殊情况三种方式。

(4)自动模式下自动显示各种状态的倒计时,红绿灯自动切换;

(5)手动模式下可以根据道路车流量情况手动调节红灯绿灯相应时间;

(6)紧急情况下所有路口红灯亮,黄灯闪烁,以便120、110等及时通行。

1.4 本文结构安排

本文围绕着基于51单片机的十字路口交通灯展开设计,以交通灯需求为出发点,首先明确了研究背景与意义,介绍了设计目的,并论述了设计要求及设计内容,接下来的几章将具体展开相关设计与研究:

第二章介绍系统总体方案及相关理论知识,重点阐述了系统功能需求和系统方案论证,接着简要介绍了系统硬件及软件基本知识。

第三章重点展开硬件系统设计,首先明确硬件电路设计的思路及框架。接着依次介绍了:单片机最小系统、按键电路、数码管显示电路、LED红绿灯电路、电源电路等。通过对以上重点电路的介绍,强化了硬件电路设计的细节和重点。

第四章展开软件系统设计,通过对软件设计进行需求分析,明确软件设计的目的与需求,进一步通过程序流程图展示设计思路及框架。接着依次介绍了主函数流程、倒计时显示程序流程、红绿灯切换程序流程、按键程序流程。

第五章介绍仿真实现步骤,特别是仿真电路实现的流程和仿真测试,完美实现了设计需求及目标。

第六章总结全文,总结本文所做的工作及贡献,并根据存在的问题展望此课题今后的研究方向。

2 总体设计方案

2.1 系统需求及方案设计

为了实现基于51单片机的十字路口交通灯设计,本文将实现以下设计需求:

(1)精确、实时的进行数码管自动倒计时、LED红绿灯自动切换,较好的模拟交通灯的运行情况;

(2)直接、清晰明了的显示测得的倒计时的数值;

(3)手动调整倒计时的时间,提升交通灯可控性;

(4)能够实现交通灯紧急情况处理,完善交通灯的功能;

(5)操作简单、功能完善、精确度高。

基于以上列出的几点,本设计利用STC89C52单片机控制数码管模块、LED灯模块、按键模块等外部电路实现相关功能,具体的设计框图如图2.1所示。

图2.1 总体设计框图

2.2 硬件器件介绍

2.2.1 STC89C52单片机

如图2.2所示的STC89C52单片机是在单片机设计中最常用的单片机芯片之一,其功能完善,易于设计。STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统的51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。主要具备以下外设功能:

8k字节Flash;

512字节RAM;

32 位I/O口;

4KB EEPROM;

MAX810复位电路;

3个16 位定时器/计数器;

4个外部中断;

全双工串行接口。

图2.2 STC89C52单片机引脚图

2.2.2数码管

led数码管(LED Segment Displays)是由多个发光二极管封装在一起,“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段,有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位,1,2,3,4,5,6,8,10位等,led数码管根据LED的接法不同分为共阴和共阳两类,被广泛用于仪表,时钟,车站,家电等场合。其引脚具体如图2.3所示。

图2.3 两位LED数码管

2.2.3 LED灯

LED(Light Emitting Diode),发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。

LED可以直接发出红、黄、蓝、绿、青、橙、紫、白色的光。

图2.4 发光二极管实物图

2.3 所用软件介绍

2.3.1 Altium Designer电路设计软件

在本科单片机设计中,设计电路使用的软件一般是Altium Designer或proteus,由于Altium Designer功能强大,可以设计硬件电路的原理图、PCB图,且界面简单,易操作,上手快。Altium Designer19是一款专业的整的端到端电子印刷电路板设计环境,用于电子印刷电路板设计。它结合了原理图设计、PCB设计、多种管理及仿真技术,能够很好的满足本次毕设的需求。

2.3.2 Keil软件及C语言设计

作为本科期间学习的第一门编程语言,C语言是我们最熟悉的编程语言之一。当然,由于其功能强大,C语言是当前世界上使用最广泛、最受欢迎的编程语言。在单片机设计中,C语言已经逐步完全取代汇编语言,因为相比于汇编语言,C语言编译与运行、调试十分方便,且可移植性高,可读性好,便于烧录与写入硬件系统,因此C语言被广泛应用在单片机设计中。keil软件由于其兼容单片机的设计,能够实现快速调试,并生成烧录文件,被广泛应用于C语言的编写和单片机的设计。

2.3.3 proteus仿真设计软件

Protues也是在单片机仿真设计中常用的设计软件之一,通过设计出硬件电路图,及写入驱动程序,就能在不实现硬件的情况进行电路调试。另外,protues还能实现PCB的设计,在仿真中也可以与KEIL实现联调,便于程序的调试,且支持多种平台,使用简单便捷。

2.4 本章小结

本章首先明确了本文整体的系统需求,并根据需求设计了系统总体框图,并以此为设计思路。接着,简要介绍了本文将用到的硬件器件,特别是每一个器件的原理图和引脚图,为下一章进行进一步的硬件电路设计奠定基础。最后,对本设计需要使用到的软件系统和编程语言进行了大概的介绍,以便进行接下来的软硬件设计。

3 硬件设计

3.1 硬件电路组成如图3.1是本系统的硬件设计方案,具体地,硬件电路由以下模块构成:

(1)单片机最小系统。用于驱动和控制其他模块,以实现整体功能,其以STC89C52单片机为核心芯片,并辅以复位电路和晶振电路。

(2)数码管倒计时显示模块。由四个两位数码管组成,负责实时显示交通灯倒计时:主干道直行30秒,辅干道直行20秒,左转15秒。

(3)LED红绿灯模块。由16个LED灯组成,分别模拟红灯、黄灯、直行绿灯、左转绿灯。

(4)电源模块。用于整个系统的供电。

图3.1 硬件设计框图

3.2 单片机最小系统电路

单片机最小系统是单片机扩展开发应用中最基础和最主要的部分,一般由以下的电路构成,是整个设计的核心其保证了基于单片机的其他功能的扩展与实现。如图3.2所示。

复位电路: 复位电路是单片机应用中的最基本和最重要的电路,用于处理单片机工作失灵等紧急问题。当单片机复位端口为高电平时,单片机中的代码将不会被执行。一开始上电时,电容还未充满电,复位端口为高电平,避免了直接上电就运行程序导致的程序错误等问题。当电容充满电后,复位端口变为低电平,程序开始运行。

晶振电路:晶振电路也是的单片机设计中必备的电路,为系统提供工作时序。本毕设晶振电路提供11.0592MHZ时钟频率,以此构成整个稳定的振荡电路,为单片机的正常工作提供保障。

图3.2 单片机最小系统

3.3 数码管倒计时及红绿灯电路

数码管倒计时电路由四个两位数码管构成,其中南北向(主干道)的数码管显示相同的倒计时,同接在单片机相同的IO口上;东西向(辅干道)的数码管显示相同的倒计时,同接在单片机相同的IO口上;由于只是两位数码管,因此最多只能倒计时99秒。红绿灯电路由16个LED发光二极管构成,分别模拟红灯、黄灯、直行绿灯、左转绿灯。其中南北向(主干道)的LED灯显示相同的情况,同接在单片机相同的IO口上;其中东西向(辅干道)的LED灯显示相同

的情况,同接在单片机相同的IO口上。具体如图3.3所示。

图3.3 数码管倒计时及红绿灯电路

3.4按键及电源电路

按键及电源电路如图3.4所示。三个按键分别接在单片机P3.5,P3.6,P3.7口,另一端接地。三个按键分别用于实现:紧急情况、自动模式倒计时增加、自动模式倒计时减少。

图3.4 按键及电源电路

3.5本章小结

本章以硬件电路设计为核心,首先介绍了硬件电路的设计框图及组成模块。接着依次介绍了单片机最小系统、数码管倒计时及红绿灯电路、按键及电源电路等各个硬件的模块,以实现整体硬件电路的设计。

4 软件设计

4.1 软件设计需求及设计思路

根据本文设计需求,在第三章硬件电路设计的基础上,需要通过软件编程实现的具体功能:

(1)驱动各个模块工作,实现数码管的显示及LED灯的点亮;

(2)按键设置功能。实现紧急情况下所有路口红灯亮、自动模式倒计时增加、自动模式倒计时减少等功能;

(3)倒计时功能实现。实现主干道方向通行30秒,辅干道通行20秒,单独左转信号15秒,先直行信号,后左转信号;

(4)LED红绿灯的切换。实现红灯和绿灯相互转换经过黄灯,并且黄灯闪烁三次。

具体设计流程如图4.1所示。

图4.1 设程序设计流程

4.2 主函数设计

主函数的主要功能是初始化数码管显示和定时系统、驱动各个模块工作、通过调用函数调用各个模块开始执行相应功能。主函数程序截图如图4.2所示:

图4.2 主程序截图

4.3按键程序流程图

按键程序需要实现紧急情况下所有路口红灯亮、自动模式倒计时增加、自动模式倒计时减少等功能,具体流程图如图4.3所示。

图4.3 按键程序流程图

4.4 本章小结

本章以软件设计为核心,首先重点论述了软件设计框架及设计思路,介绍了主函数的设计思路及按键程序的设计流程,最终实现软件的整体设计。

5 仿真演示

5.1 仿真实现

5.1.1 仿真电路图

本系统用protues8.7设计的仿真原理图如图5.1所示。

图5.1 仿真原理图

根据第四章软件设计的思路,结合仿真需求,我们将仿真设计的C代码利用KEIL5编写好,并进行详细地注释。接着,我们点击“create HEX file”,并再次编译程序,这样就会生成HEX烧录文件,具体如图5.2所示。

图5.2 调试及HEX文件生成截图

接着,我们打开仿真原理图,并将生产的“HEX”文件烧录到单片机芯片中,点击开始仿真,就可以实现相关仿真了,我们将在下一节中具体展示仿真的结果。

5.1.2 仿真结果

(1)主干道交通灯倒计时

如图5.3所示是开始仿真后主干道(南北向)倒计时情况,主干道从30秒开始倒计时,同时主干道的直行绿灯亮,表示直行可通行;辅干道的倒计时时间停留在20秒不动,同时红灯亮,表示不准通行。

图5.3 主干道交通灯倒计时

(2)辅干道倒计时

图5.4所示是辅干道(东西向)倒计时情况,辅干道从20秒开始倒计时,同时辅干道的直行绿灯亮,表示直行可通行;主干道的倒计时时间停留在30秒不动,同时红灯亮,表示不准通行。

图5.4 辅干道倒计时

(3)左转倒计时

无论是主干道还是辅干道,当直行倒计时结束后,开始进入左转倒计时,如图5.5是主干道左转倒计时,从15秒开始倒计时,同时主干道的左转绿灯亮,表示主干道车辆可进行左转。另外,辅干道红灯,表示不可通行。

图5.5 左转倒计时

(4)紧急情况

当紧急按键按下后,系统进入紧急模式,数码管不显示,所有红灯亮、黄灯闪烁,表示普通车辆不可通行,仅供110、120车辆通行。具体如图5.6所示。

图5.6 紧急情况

(5)手动调整倒计时

在辅干道左转倒计时情况下,由于车辆过多,需要增加左转倒计时时间。如图5.7所示是调整前的倒计时时间,连续两次按下增加按键后,倒计时时间增加了两秒,如图5.8所示。

图5.7 倒计时初始时间

图5.8 调整后倒计时时间

5.2 测试情况分析

经过以上一系列的仿真测试,本文设计的“基于51单片机的十字路口交通灯”能够完成了2.1节的系统需求,具体仿真实现了以下功能:

(1)红灯和绿灯相互转换经过黄灯,并且黄灯闪烁三次;绿灯分为直行绿灯和左转绿灯;

(2)主干道方向通行30秒,辅干道通行20秒,单独左转信号15秒,先直行信号,后左转信号;

(3)设置自动、手动、特殊情况三种方式。

(4)自动模式下自动显示各种状态的倒计时,红绿灯自动切换;

(5)手动模式下可以根据道路车流量情况手动调节红灯绿灯相应时间;

(6)紧急情况下所有路口红灯亮,黄灯闪烁,以便120、110等及时通行。

5.3 本章小结

本章结合第三章的电路设计和第四章的软件设计,利用protues软件设计了本文的仿真电路图,并通过代码编写与调试,将生成的“HEX”文件写入到仿真芯片中,实现了电路的仿真。接着,我们对仿真进行了测试,证明了本系统运行稳定,能够实现所有的既定功能。最后,我们对仿真测试进行了总结,具体列出了仿真实现的功能。

结论

本文围绕着基于单片机的十字路口交通灯设计,通过广泛查阅文献和仿真设计,完成了以下工作:

(1)绘制了电路原理图和仿真原理图,编写了本系统实现的程序代码。

(2)红灯和绿灯相互转换经过黄灯,并且黄灯闪烁三次;绿灯分为直行绿灯和左转绿灯;

(3)主干道方向通行30秒,辅干道通行20秒,单独左转信号15秒,先直行信号,后左转信号;

(4)设置自动、手动、特殊情况三种方式。自动模式下自动显示各种状态的倒计时,红绿灯自动切换;

(5)手动模式下可以根据道路车流量情况手动调节红灯绿灯相应时间;

(6)紧急情况下所有路口红灯亮,黄灯闪烁,以便120、110等及时通行。综上所述,本文的设计达到了预期设计目标,具有一定的的实用价值。

本文虽然较好的实现了基于单片机的十字路口交通灯的设计,但由于本人水平有限,还存在着不少有待改进的地方,在未来的工作中,可以从以下几点展开相关设计:

(1)由于时间限制,本文的设计只做了相关仿真,在下一步工作中,将结合原理图设计出PCB图,并做出硬件;

(2)本设计只对车辆通行进行考虑,在今后的设计中,可以加入人行道的通行情况;

(3)在接下来的设计中,还可以增加语音提示等功能,使得交通灯系统更加智能化、人性化。

参考文献

[1]楼然苗, 李光飞.MCS-51系列单片机设计实例[J].单片机与嵌入式系统应用(02):84

[2]刘文涛.单片机应用开发实例[M].北京:清华大学出版社,2005,18-25

[3]徐向民.Altium Designer快速入门[M].北京:北京航空航天大学出版社,2011,20-29

[4]王艳艳, 张荣国, 罗晓锋.Proteus与Keil软件在“C语言”教学过程中的应用[J].科技视界, 000(23):191-192,311

[5] 曾燕, 贾振国.Proteus仿真技术在单片机教学中的应用[J].长春工程学院学报(社会科学版)(1):135-138

[6] 周航慈.单片机应用程序设计技术[M].北京:北京航空航天大学出版社,2002,21-25

[7]王晓萍,陈嫄嫄.单片机在十字路口交通灯控制系统中的应用[J].十堰职业技术学院学报(6):105-107.[8]郭玉秀.基于单片机的十字路口交通灯的设计及仿真[J].现代制造技术与装备, 2018(8):66-68.[9]栗洋.基于单片机的十字路口交通灯控制[J].工程技术(文摘版):00219-00219.[10] 淡海英, 杨聪.基于单片机控制的十字路口交通灯设计与分析[J].电子测试, 2017, 000(013):9,8.[11]

附录一 硬件原理图

附录一 硬件原理图

附录二 仿真原理图

附录二 仿真原理图附录三 程序

/***********************************************************

十字路口交通灯控制

***********************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

/*****定义控制位*******************************************/

sbit Time_Show_LED2=P2^5;//Time_Show_LED2(直行时间显示)控制位

sbit Time_Show_LED1=P2^4;//Time_Show_LED1(直行时间显示)控制位

sbit EW_LED2=P2^3;//EW_LED2控制位

sbit EW_LED1=P2^2;//EW_LED1控制位

sbit SN_LED2=P2^1;//SN_LED2控制位

sbit SN_LED1=P2^0;//SN_LED1控制位

sbit SN_Yellow=P1^6;//SN黄灯

sbit EW_Yellow=P1^2;//EW黄灯

sbit SN_RED=P1^7;//SN红灯

sbit Special_Btton=P3^5;//交通特殊按键

sbit zj=P3^6;//定义时间加按键

sbit jx=P3^7;//定义时间键按键

bit Flag_SN_Yellow;//SN黄灯标志位

bit Flag_EW_Yellow;//EW黄灯标志位

bit Flag_zhuanhuan=0;//特殊标志位

char Time_EW;//东西方向倒计时单元

char Time_SN;//南北方向倒计时单元

uchar EW=20,SN=30,EWL=15,SNL=15;//程序初始化赋值,正常模式

uchar EW1=20,SN1=30,EWL1=15,SNL1=15;//用于存放修改值的变量

uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0-9段选码

uchar code S[8]={0x28,0x48,0x18,0x48,0x82,0x84,0x81,0x84};

//交通信号灯控制代码

/**********************延时子程序**************************/

void Delay(uchar a)

{

uchar i;

i=a;

while(i--){;}

}

/*****************显示子函数******************************/

void Display(void)

{

uchar h,l;

h=Time_EW/10;

l=Time_EW%10;

P0=table[l];

EW_LED2=0;//点亮EW_LED2

Delay(2);

EW_LED2=1;//熄灭EW_LED2

P0=table[h];

EW_LED1=0;//点亮EW_LED1

Delay(2);

EW_LED1=1;

h=Time_SN/10;

l=Time_SN%10;

P0=table[l];

SN_LED2=0;//点亮SN_LED2

Delay(2);

SN_LED2=1;

P0=table[h];

SN_LED1=0;//点亮SN_LED1

Delay(2);

SN_LED1=1;

h= EW1/10;

l= EW1%10;

P0=table[l];

Time_Show_LED1=0;//点亮Time_Show_LED1

Delay(2);

Time_Show_LED1=1;

P0=table[h];

Time_Show_LED2=0;//点亮Time_Show_LED2

Delay(2);

Time_Show_LED2=1;

}

/**********************T0中断服务程序*******************/

void timer0(void)interrupt 1 using 1

{

static uchar count;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==20)

{

if(Flag_zhuanhuan==1)Time_EW--;

if(Flag_zhuanhuan==0)Time_SN--;

if(Flag_SN_Yellow==1)//测试南北黄灯标志位

{SN_Yellow=~SN_Yellow;}

if(Flag_EW_Yellow==1)//测试东西黄灯标志位

{EW_Yellow=~EW_Yellow;}

count=0;

}

}

/*********************主程序开始***********************/

void main(void)

{

IT0=1;//INT0负跳变触发 设置成 低电平触发方式,IT0=1为下降沿触发

TMOD=0x01;//定时器工作于方式1

TH0=(65536-50000)/256;//定时器赋初值

TL0=(65536-50000)%256;

EA=1;//CPU开中断总允许

ET0=1;//开定时中断

EX0=1;//开外部INTO中断

TR0=1;//启动定时

while(1)

{

Flag_zhuanhuan=0;

/*******S0状态**********/

Flag_EW_Yellow=0;//EW关黄灯显示信号

Time_EW=EW;

Time_SN=SN;

while(Time_SN>=5)

{

P1=S[0];//SN绿灯,EW红灯

Display();

if(zj==0)//增加按键按下

{

Delay(3);

if(zj==0)

{

while(!zj);//去除抖动,确认是否增加按键按下

Time_SN=Time_SN+1;

}

}

if(jx==0)//减少按键按下

{

Delay(3);

if(jx==0)

{

while(!jx);//去除抖动,确认是否减少按键按下

Time_SN=Time_SN-1;

}

}

if(Special_Btton==0)

{

Delay(3);

if(Special_Btton==0)

{

while(!Special_Btton)

P1=0XCC;

}

}

}

/*******S1状态**********/

P1=0x00;

while(Time_SN>=0)

{

Flag_SN_Yellow=1;//SN开黄灯信号位

P1=P1|0x08;//保持EW红灯

Display();

if(zj==0)//增加按键按下

{

Delay(3);

if(zj==0)

{

while(!zj);//去除抖动,确认是否增加按键按下

Time_SN=Time_SN+1;

}

}

if(jx==0)//减少按键按下

{

Delay(3);

if(jx==0)

{

while(!jx);//去除抖动,确认是否减少按键按下

Time_SN=Time_SN-1;

}

}

if(Special_Btton==0)

{

Delay(3);

if(Special_Btton==0)

{

while(!Special_Btton)

P1=0XCC;

}

}

}

/*******S2状态**********/

Flag_SN_Yellow=0;//SN关黄灯显示信号

Time_SN=SNL;

while(Time_SN>=5)

{

P1=S[2];//SN左拐绿灯亮,EW红灯

Display();

if(zj==0)//增加按键按下

{

Delay(3);

if(zj==0)

{

while(!zj);//去除抖动,确认是否增加按键按下

Time_SN=Time_SN+1;

}

}

if(jx==0)//减少按键按下

{

Delay(3);

if(jx==0)

{

while(!jx);//去除抖动,确认是否减少按键按下

Time_SN=Time_SN-1;

}

}

if(Special_Btton==0)

{

Delay(3);

if(Special_Btton==0)

{

while(!Special_Btton)

P1=0XCC;

}

}

}

Flag_zhuanhuan=1;

/***********赋值*********/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

/*******S3状态**********/

Flag_SN_Yellow=0;//SN关黄灯显示信号

Time_EW=EW;

Time_SN=SN;

while(Time_EW>=5)

{

P1=S[4];//EW通行,SN红灯

Display();

if(zj==0)//增加按键按下

{

Delay(3);

if(zj==0)

{

while(!zj);//去除抖动,确认是否增加按键按下

Time_EW=Time_EW+1;

}

}

if(jx==0)//减少按键按下

{

Delay(3);

if(jx==0)

{

while(!jx);//去除抖动,确认是否减少按键按下

Time_EW=Time_EW-1;

}

}

if(Special_Btton==0)

{

Delay(3);

if(Special_Btton==0)

{

while(!Special_Btton)

P1=0XCC;

}

}

}

/*******S4状态**********/

Flag_EW_Yellow=0;//EW关黄灯显示信号

Time_EW=EWL;

while(Time_EW>=5)

{

P1=S[6];//EW左拐绿灯亮,SN红灯

Display();

if(zj==0)

{

while(!zj);//去除抖动,确认是否增加按键按下

Time_EW=Time_EW+1;

}

}

if(jx==0)//减少按键按下

{

Delay(3);

if(jx==0)

{

while(!jx);//去除抖动,确认是否减少按键按下

Time_EW=Time_EW-1;

}

}

if(Special_Btton==0)

{

Delay(3);

if(Special_Btton==0)

{

while(!Special_Btton)

P1=0XCC;

}

}

}

}

标签: 调研报告