基于51单片机智能交通灯课程设计

来源:计算机等级 发布时间:2020-09-15 点击:

 目录 摘 要............................................... 错误! ! 未定义书签。

 1 系统硬件设计误错ﻩ 错误! ! 未定义书签。

 1、1 80C51 单片机引脚图及引脚功能介绍........... 错误! ! 未定义书签。

 1、2

 74LS245 引脚图及功能误错ﻩ 错误! ! 未定义书签。

 1、3

 八段LED 数码管.......................... 错误! ! 未定义书签。

 1、4 硬件系统总控制电路 ......................... 错误! ! 未定义书签。

 1、5 各模块控制电路误错ﻩ 错误! ! 未定义书签。

 1、5、1 交通灯控制电路...................... 错误! ! 未定义书签。

 1、5、2 倒计时显示电路....................... 错误! ! 未定义书签。

 1、5、3 紧急通行电路误错ﻩ 错误! ! 未定义书签。

 1、5、4 声音警示装置........................................ 10 2

 系统程序设计..................................... 错误! ! 未定义书签。

 2、1

 主程序流程图误错ﻩ 错误! ! 未定义书签。

 2、2 显示子程序流程图 .......................... 错误! ! 未定义书签。

 3

 心得体会误错ﻩ 错误! ! 未定义书签。

 参考文献误错ﻩ 错误! ! 未定义书签。

 附录 源程序......................................... 错误! ! 未定义书签。

 摘 要

 近年来随着科技得飞速发展,一个以微电子技术、计算机技术与通信技术为先导得信息革命正在蓬勃发展。计算机技术作为三者之一,怎样与实际应用更有效得结合并发挥其作用。单片机作为计算机技术得一个分支,正在不断得应用到实际生活中,同时带动传统控制检测得更新。在实时检测与自动控制得应用系统中,单片机往往就是作为一个核心部件使用,针对具体应用对象得特点,配以其它器件来加以完善。

 十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊.那么靠什么来实现交通得井然秩序呢?靠得就是交通信号灯得自动指挥系统,来实现交通得井然有序。交通信号灯控制方式很多。本系统采用美国ATMEL 公司生产得单片机AT80S51,以及其它芯片来设计交通灯控制。实现了通过 AT89S51芯片得P1口设置红、绿灯点亮得功能,输出设置显示时间。交通灯得点亮采用发光二极管实现,时间得显示采用七段数码管实现。单片机系统采用得直流供电。

  关键词:

 AT89S51单片机;智能交通灯控制系统; 基于 51 单片机智能交通灯设计 1 系统硬件设计

 1、1 80C51单片机引脚图及引脚功能介绍

  80C51系列中,用CHMOS工艺制造得单片机都采用双列直插式(DIP)40脚封装,引脚信号完全相同.图1-1为引脚图

  图1-1 80C51引脚图

 这40根引脚大致可分为:电源(V CC 、V SS 、V P P 、V PD )、时钟(XTAL1、XTAL2)、I/O口(P0~P3)、地址总线(P0口、P2口)与控制总线(ALE、RST、 、 、 )等几部分.它们得功能简述如下:

  1.电源

 Vcc(引脚号40),芯片电源,接+5V;Vss(引脚号20),电源接地端。

  2.时钟

 XTAL1(引脚号18)内部振荡电路反相放大器得输入端,就是外接晶振得一个引脚.当采用外部振荡器时,此引脚接地。

  XTAL2(引脚号19)内部振荡器得反相放大器输出端,就是外接晶振得另一端。当采用外部振荡器时,此引脚接外部振荡源.

  3、 控制总线

  (1)ALE/ (引脚号30): 正常操作时为ALE功能(允许地址锁存),用来把地址得低字节锁存到外部锁存器。ALE 引脚以不变得频率(振荡器频率得1/

 6)周

  期性地发出正脉冲信号.因此,它可用作对外输出得时钟信号或用于定时.但要注意,每当访问外部数据存储器时,将跳过一个 ALE 脉冲.ALE 端可以驱动(吸收或输出电

  流)8个LSTTL电路.在8751单片机 EPROM 编程期间,此引脚接编程脉冲( 功能)。

  (2)

 (引脚号29):外部程序存储器读选通信号。在从外部程序存储器取指令(或数据)期间, 在每个机器周期内两次有效。

 可以

  驱动8个 LSTTL 电路.

  (3)RST/VPD(引脚号9):复位信号输入端.振荡器工作时,该引脚上持续2个机器周期得高电平可实现复位操作。此引脚还可接上备用电源.在Vcc掉电期间,

  由 向内部 RAM 提供电源,以保持内部 RAM中得数据。

  (4) /Vpp(引脚号31):

 为内部程序存储器与外部程序存储器得选择端。当 为高电平时,访问内部程序存储器(PC 值小于4K);当 为低

  电平时,访问外部程序存储器。对于87C51单片机,在 EPROM编程期间,此端为21V 编程电源输入端。

  4、 I/O 线

 (1)P0口(引脚号32~39):单片机得双向数据总线与低8位地址总线。在访问外部存储器时实现分时操作,先用作地址总线,在 ALE信号得下降沿,地址被锁存;

  然后用作为数据总线。它也可以用作双向输入/输出口。P0口能驱动8个LSTTL 负载.

  (2)P1口(引脚号1~8):准双向输入/输出口,它能驱动4个 LSTTL 负载。

  (3)P2口(引脚号21~28):准双向输入/输出口.在访问外部存储器时,用作高8位地址总线。P2口能驱动4个 LSTTL 负载.

  (4)P3口(引脚号10~17):准双向输入/输出口,它能驱动4个LSTTL负载.P3口得每一引脚还有另外一种功能:

  P3、0——RXD:串行口输入端

 P3、1——TXD:串行口输出端

  P3、2—— :外部中断0中断请求输入端

  P3、3—— :外部中断1中断请求输入端

  P3、4——T0:定时器/计数器0外部输入端

  P3、5——T1:定时器/计数器1外部输入端

  P3、6—— :外部数据存储器写选通信号

  P3、7—— :外部数据存储器读选通信号

  1、2

 74LS245引脚图及功能

  74LS245就是我们常用得芯片,用来驱动led或者其她得设备,它就是8路同相三态双向总线收发器,可双向传输数据。它得功能引脚图如图1-2所示。

 图1—2

 74LS245引脚图

  74LS245还具有双向三态功能,既可以输出,也可以输入数据。

  当8051单片机得P0口总线负载达到或超过 P0最大负载能力时,必须接入74LS245等总线驱动器.

  当片选端/CE 低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)

  DIR=“1",信号由 A 向 B 传输;(发送)当 CE 为高电平时,A、B均为高阻态。

  由于 P2口始终输出地址得高8位,接口时74LS245得三态控制端1G 与2G接地,P2口与驱动器输入线对应相连。P0口与74LS245输入端相连,E 端接地,保证数据线畅通。8051得/RD 与/PSEN相与后接 DIR,使得 RD 且 PSEN有效时,74LS245输入(P0、1←D1),其它时间处于输出(P0、1→D1)。

 1、3

 八段 LED 数码管

 LED 显示屏作为大型显示设备得一种,具有亮度高、价格低、寿命长、维护简便等优点。LED数码管得结构简单,分为七段与八段两种形式,也有共阳与共阴之分。以八段共阳管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示 dP,即点),每个发光二极管得阳极连在一起,如图1-3所示。这样,一个 LED 数码管就有 I 根位选线与 8 根段选线,要想显示一个数值,就要分别对它们得高低电平来加以控制。为方便起见,本文主要讨论共阳八段LED 数码显示管,其她类形得显示管与其类似。

 图 1-3 八段共阳管示意图

  LED 灯得显示原理:通过同名管脚上所加电平得高低来控制发光二极管就是否点亮而显示不同得字形,如 dp,g,f,e,d,c,b,a 全亮显示为8,采用共阳极连接驱动代码,代码表如表1所示。

  表 1 驱动代码表 显示数值 dp,g,f,e,d,c,b,a 驱动代码 0

 C0H 1

 F9H 2

 A4H 3

 B0H 4

 99H 5

 92H 6

 82H 7

 F8H 8

 80H 9

 90H

  相应在程序软件上,可以通过调用程序给定得秒值经过特定计算算出需要显示得个位与十位,然后有 DPTR 调取 LEDMAP 得代码.

 LED8段数码管得设置为每个方位上得一对2为显示器.四个方位上总共用4个 LED 接在单片机得 IO 口上。虽然路口不一样,但就是显示得时间在数字上就是一样得,所以两边连接得 IO口就是对称得。

  1、4 硬件系统总控制电路

 本系统以单片机为核心,系统硬件电路由状态灯,LED显示,按键,组成。其具体得硬件电路总原理图如图 1-4 所示。

  其中P0 用于送显四片 LED 数码管,P2 用于控制红绿黄发光二极管,P1、0,P1、1,与P1、1 与 P1、2 对数码管进行片选,P3口为紧急情况处理按键,既根据车流量控制红绿黄发光二极管通断时间。

  系统上电或手动复位之后,系统先显示状态灯及LED数码管,将状态码值送显P2 口,将要显示得时间值得个位与十位分别送显 P0 口,在此同时用软件方法计时1 秒,到达1s 就要将时间值减 1,刷新 LED数码管。

  时间到达一个状态所要全部时间,则要进行下一状态判断及衔接,并装入次状态得相应状态码值以及时间值,

  当然,还要开启三个外部中断,其一为全部路口紧急情况处理中断,一旦信号有效,即按键为低电平时进入中断服务子程序,东西南北路口得状态禁止通行。其二为东西方向或南北方向禁止通行,一旦信号有效将进入相应中断服务子程序,某一方向状态禁止通行。其三为通行时间调整中断,若按键有效,进入相应得中断子程序,对时间进行调整,可延长或减少某一路段得通行时间,此后再按确定键则中断结束返回。

  图1-4 控制系统总原理图 1、5 各模块控制电路

  1、5、1 交通灯控制电路 这里我们采用发光二极管作为交通灯来使用,单片机得 I/O接口直接与交通灯(发光二极管)连接。在十字路口得四组红、黄、绿三色交通灯中,东西方向道路上得两组同色灯连接在一起,南北方向道路上得两组同色得灯也彼此连接在,控制受单片机 P2、1~P2、6 控制。单片机得 I/O 接口与交通灯电路得具体连接方式为:P2、1~P2、3 分别接东西方向得红、黄、绿共 6 个放光二极管,P2、4~P2、6 分别接南北方向得红、黄、绿共 6 个发光二极管。12个发光二极管采用了共阴极得连接方式,因此 I/O 口输出高电平时,与之相连得发光二极管会亮,I/O 口输出低电平就是,相应得发光二极管会灭. 初始东西绿灯亮,南北红灯亮,东西路口车通行,时隔 20s,黄灯闪烁5次。之后,南北绿灯亮,东西红灯亮,方向开始通车,时隔 20s,南北黄灯闪烁 5 次,然后又切换成东西方向通车,如此重复。

 当某一方向发生交通意外或者需要停止方向通行就是,这一方向亮红灯。处理完之后,按下确定键,重新按上述方式工作。

 当发生交通意外(中断产生)时,全部亮红灯,进行交通事故得处理。当事故处理完毕,按下确定键,重新按上述方式工作。

 当南北路口得流量大时,可以增加南北路口亮绿灯得时间,当东西路口得流量大时,可以增加东西路口亮绿灯得时间,结束后调回正常状态.交通灯电路如图1-5所示.

 图 1-5 交通灯电路

 1、5、2 倒计时显示电路

 倒计时显示可以提醒驾驶员在信号灯灯色发生改变得时间、在“停止”与“通过”两者间作出合适得选择。驾驶员与行人普遍都愿意选择有倒计时显示得信号控制方式,并且认为有倒计时显示得路口更安全。倒计时显示就是用来减少驾驶员在信号灯色改变得关键时刻做出复杂判断得 1 种方法,它可以提醒驾驶员灯色发生改变得时间,帮助驾驶员在“停止”与“通过”两者间作出合适得选择 。四个路口得计时显示都就是由P0 口控制,又P1 口得 P1、0~P1、2 片选这些显示管,而东西两个方向得显示时间一样,南北方向时间也一样,片选信号能控制东西也南北显示不同得时间.当某一方向为绿灯时,在绿灯倒计时结束后会再显示一个5S 得倒计时,以供黄灯显示使用。显示管连接图如图1—5所示。在单片机与显示器之间加了一个 8*4、7k得排阻与一个 74LS245 芯片,排阻得作用就是上拉电阻,防止电流过高烧掉显示管,起到保护显示管得作用,其连接图如图 1—6 所示。74LS245 得作用就是驱动显示管点亮。其连接图如图 1—7所示.

 图 1-5 显示管连接图

  图 1—6 排阻连接图

 图 1-7 74LS245 驱动芯片连接图 1、5、3 紧急通行电路

 该电路为紧急情况与根据车流量调节红绿灯时间长度控制电路。通过单片机得 P3、1~P3、7 口得七个接口来控制。在紧急情况下,需要停止所有方向上得车得行驶,按下 P3、1接口上得开关,接低电平,使其发生作用,发出令所有路口得红灯点亮得脉冲,禁止所有车辆通行。当需要禁止东西方向或者南北方向通行时,按下 P3、2 或者P3、3 可以使其方向上得红灯亮起,禁止该方向车辆通行,而另一方向上则绿灯常量,车辆通行.例如,按下 P3、2上得开关,此时南北方向上得红灯常亮,而东西方向上绿灯常亮,这就起到了南北禁止东西通行得效果,按下 P3、3上得开关则与之相反。有时候某个方向上得车流量比较大,另一个方向上得车流量比较少,这就需要调整通行时间,P3、5 就是加时间端口,P3、6为减时间端口,按下一次开关则会增加或者减少 1S,P3、7 接得就是切换方向开关,按下开关可以切换方向时间得调整,例如现在切换开关就是东西方向,而东西方向车流量比较少,南北方向车流量比较大,这就需要增加南北方向通行时间,减少东西方向通行时间。首先通过 P3、6 口减少东西方向通行时间,然后按下切换方向键,这就切换到了南北方向时间调整状态,这就是按下 P3、5,可以增加通行时间。P3、4 为确定键,也可以称之为复位键,要解除禁止时,按下确认键就可回到正常工作状态,当时间调整结束后,也可以通过确认键回到工作状态.控制电路图如图 1—8 所示。

 图 1—6 按键电路控制电路图 1、5、4 声音警示装置 当发生紧急情况需要全面停止通行时,需要声音警示装置来提醒车辆,这个警示装置由 P3、0 口控制,其电路图如图1-7 所示。

  图 1-7 声音警示控制电路 2

 系统程序设计

  2、1

 主程序流程图

 图 2—1主程序路程图 2、2 显示子程序流程图

 图 2—2 显示子程序流程图

  3

 心得体会

  这次课程设计,我们小组做得智能交通等控制系统。如往常每一次实训,我获开始 东西亮绿灯,南北亮红灯 东西准行,南北禁行 显示子程序 系统初始化 扫描键盘 键按下有 调用键盘子程序 东西亮绿灯,南北亮红灯同时黄灯进行闪烁 调用键盘子程序 扫描键盘 显示子程序 东西准行,南北禁行 东西,南北方向换向 有键按下 Y N Y 开始 取倒计时数值 从 P1、0 到 P1、3 取各个方向控制十位个位从 P0 口获取数码显示值 返回

 得了很大得收获。

  首先,我要说说我学到得团队精神,这次课设需要多人协作完成,我有幸找到三位认真负责且乐于交流讨论得队友。

  这次选交通灯为题目来做课设一就是经验不足,二就是信心不足。通过这次课设,我既积累了经验,也获取了信心,今后会找寻机会再做一些与拖动相关得电子设计,因为我们自动化专业与电机就是息息相关得,很大程度研究得就是电机得拖动问题.

  通过这两周得单片机课程设计,我们运用所学得知识,利用单片机控制原理设计了一个交通灯控制系统,我们对单片机有了更深得体会。我们了解与掌握了一些简单得编程思想与对 I/O 口得使用。这次课设通过单片机得I/O 口来控制交通灯。实现一些具体得功能与对特殊情况得处理。

  通过这次得实践,我们对单片机得 I/O 口得使用得条件有更深得理解,对单片机得各个管脚功能得理解也加深了,以及在常用编程设计思路技巧,特别就是汇编语言得掌握方面都能向前迈了一大步。这次得课程设计让我们把单片机得理论知识用在实践中,实现了理论与实践相结合,从中更懂得理论就是实践得基础,实践有着能检验理论得正确性,让我们受益非浅,对我们以后参加工作或者继续学习将会产生巨大得帮助与影响.

  在课设过程中遇到得硬件与软件问题都通过询问老师、同学与去图书馆、上网得到了解决。

  参考文献

 [1]陈大钦 电子技术基础实验 [M]、北京:高等教育出版社 2004

  [2]陈梓城 电子技术实训 [M]、北京:机械工业出版社 2003

  [3]吴黎明 单片机原理及应用技术[M]、北京:科学出版社 2003

  [4]李学海 标准 80C51 单片机基础教程[M]、北京:

 北京航空航天大学出版社 2006

  [5]刘乐善 微型计算机接口技术及应用[M]、北京: 华中科技大学出版社 2004

  [6] 陈炳权 曾庆六

 EDA 技术实用教程[M]、北京:

  湘潭大学出版社

 2010

  [7] 先锋工作室、 单片机程序实例[M]、北京:清华大学出版社,2002、

  [8] 李伯成、基于MCS-51单片机得嵌入式系统得设计[M]、北京:电子工业出版社,2004、

  [9] 吴洪潭,肖艳萍,赵伟国、单片机原理及应用系统设计[M]、北京:国防工业出版社,2005、

  [10] 吴黎明, 王桂棠, 洪添胜, 等、 单片机原理及应用技术[ M ] 、 北京:

 科学出版社,2005、

  附录 源程序 #include <reg51、h〉 #define uchar unsigned char #define uint

 unsigned int uchar data buf[4]; uchar data sec_dx=20;//东西数默认 uchar data sec_nb=30;//南北默认值 uchar data set_timedx=20; uchar data set_timenb=30; int n; uchar data countt0;//定时器 0 中断次数 //定义 5 组开关 sbit

 k4=P3^7;

 //切换方向 sbit

 k1=P3^5;// 加间时ﻩﻩsbit

 k2=P3^6; // 减间时ﻩsbit

 k3=P3^4;// 认确ﻩﻩsbit

 k5=P3^1;// 止禁ﻩﻩ//

  P3^2// 0 断中,行通向方西东许允只ﻩﻩ//

  P3^3

 //只允许南北方向通行,中断 1 sbit Yellow_nb=P2^5;// 志标灯黄北南ﻩ

 sbit Yellow_dx=P2^2;// 志标灯黄西东ﻩsbit Green_nb=P2^4; sbit Green_dx=P2^1; sbit Buzz=P3^0;

 ﻩﻩbit Buzzer_Indicate; bit time=0;

 ﻩ // 志标环循态状灯ﻩbit

  set=1;

 ﻩ //调时方向切换键标志 uchar code table[11]={ //共阴极字型码 0 0--//

 ,f3xﻩ 0x06,

 //-—1 0 2--//

 ,b5xﻩ 0x4f,

 //--3 0 4-—//

 ,66xﻩ0 5-—//

 ,d6xﻩ0 6-—//

 ,d7xﻩ0 7--//

 ,70xﻩ0 8——//

 ,f7xﻩ 0x6f,

 //-—9 0 LLUN--//

  00xﻩ}; //函数得声明部分 void delay(int ms);

 ﻩ //延时子程序 void key();

 ﻩ

 // 序程子描扫键按ﻩvoid key_to1();

  ﻩ //键处理子程序 void key_to2(); void key_to3(); void display();//序程子示显ﻩﻩvoid logo();

  //OGOL 机开ﻩﻩvoid Buzzer();

 //主程序 void main() {

 TMOD=0X11; ﻩ ﻩ

  ﻩ //定时器设置 ﻩ

 ;C3X0=0HTﻩ

  //定时器 0 置初值 0、05S

 ;0BX0=0LTﻩ EA=1;

 ﻩ

 // 断中总开ﻩﻩ ET0=1;

 // 启开断中 0 器时定ﻩﻩ TR0=1; ﻩ

 //ﻩ0 时定动启ﻩ

 ;1=0XEﻩ

  ﻩ // 0断中部外开ﻩ EX1=1; // 1 断中部外开ﻩﻩ

 logo();

 P2=0Xc3;

  //ﻩ

  灯黄北南,灯绿西东,态状认默始开ﻩ

 sec_nb=sec_dx+5;

  ﻩ //默认南北通行时间比东西多 5 秒

 )1(elihwﻩ

  {ﻩ

 ;)(yekﻩﻩﻩ ﻩ

 //调用按键扫描程序

 ;)(yalpsidﻩ

 ﻩ

 //调用显示程序

  ;)(rezzuBﻩ

 }ﻩ} //函数得定义部分 void key()// 序程子描扫键按ﻩ{

 ﻩ if(k1!=1)

 ﻩ

 // 时下按加间时ﻩ {ﻩ

 ;)01(yaledﻩ ﻩﻩ //延时消抖

  if(k1!=1)

 ﻩﻩﻩ {ﻩﻩ

  /)1=!1k(elihwﻩﻩ/ 行执直一,时起弹未键按当ﻩﻩ

 {ﻩ

 ﻩ ;)(1ot_yekﻩ //调用按键 1 功能

  /)++n;04<n;0=n(rofﻩ/ 时延于用,示显次04 用调ﻩ

  {

 };)(yalpsidﻩ

 ﻩ

 }

 }ﻩﻩ }

  )1=!2k(fiﻩ //ﻩ时下按键按 2K当ﻩ {

 ﻩ/ ;)01(yaledﻩﻩ/

 抖消时延ﻩﻩ )1=!2k(fiﻩﻩ

 { ﻩ

  while(k2!=1)

 //按键按下未弹起时一直执行

  {ﻩ

 ﻩ

  key_to2();// 能功 2yek 用调ﻩﻩ

 ﻩ

  for(n=0;n〈40;n++)

 //调用 40 次显示,用于延时

 {

  ﻩ};)(yalpsidﻩ

  }

 ﻩ }

 }ﻩ )1=!3k(fiﻩﻩ ﻩ

 ﻩ

 //当 K3(确认)键按下时

 {

  ﻩ

  ;1=0RTﻩ

 ﻩ // 器时定动启ﻩﻩ ﻩ Buzzer_Indicate=0;

  sec_nb=set_timenb;//ﻩ值数得过置设示显仍,复回断中从ﻩ ﻩ sec_dx=set_timedx;

  ﻩ //显示设置过得时间

 ﻩ

 )1==tes(fiﻩ

 ﻩ // 时 0 到时倒间时ﻩ ﻩ {

  ﻩ // P2=0X99;//ﻩﻩﻩ灯绿北南,灯红西东ﻩﻩﻩ

  ;5+xd_ces=bn_cesﻩ //回到初值

 ﻩ }

 ﻩ else

  {ﻩ

 // ;3Cx0=2Pﻩ ﻩﻩﻩ //东西绿灯,南北红灯

 ;5+bn_ces=xd_cesﻩﻩ }ﻩﻩ

 ﻩ}ﻩ )1=!4k(fiﻩ ﻩ

  // 下按键)换切(4K 当ﻩﻩ

 {

 ﻩ delay(5);//ﻩﻩ抖消时延ﻩﻩ

 if(k4!=1)

  {ﻩ ﻩ

 ;)1=!4k(elihwﻩ

 / ;tes!=tesﻩ/ﻩ

 向方节调换切以,位志标 tes反取ﻩﻩ

 }ﻩ

 }

  )1=!5k(fiﻩﻩ ﻩﻩ // 时下按键)止禁(5K 当ﻩ {ﻩ

 delay(5); ﻩﻩﻩ // 抖消时延ﻩﻩ

 )1=!5k(fiﻩ {

  ﻩ

  ﻩ )1=!5k(elihwﻩ

  ﻩ

 ;)(3ot_yekﻩ

 ﻩﻩ }

  ﻩ }ﻩ} void display() //显示子程序

 {

  ;01/xd_ces=]1[fubﻩ //第1位 东西秒十位

  buf[2]=sec_dx%10; // 位个秒西东 位 2 第ﻩﻩ

 buf[3]=sec_nb/10; //

 位十秒北南 位 3 第ﻩ

 buf[0]=sec_nb%10;

 //

 位个秒北南 位4第ﻩ

 P1=0xff;

  //

 得灭为灯始初ﻩ

 P0=0x00;

  P1=0xfe;

  //

 1DEL 选片ﻩ

 P0=table[buf[1]]; // 码编管码数得位十间时西东送ﻩ ;)1(yaledﻩﻩ ﻩ // 时延ﻩ

  ;ffx0=1Pﻩﻩ ﻩ //关显示

  P0=0x00; ﻩ ﻩ

 P1=0xfd;

 //片选 LED2

  P0=table[buf[2]];

  delay(1);

 P1=0xff;

  P0=0x00;

  /;bfX0=1Pﻩ/ﻩﻩ

 3DEL 选片ﻩ ﻩ P0=table[buf[3]];

  ;)1(yaledﻩ

 P1=0xff;

  P0=0x00;

  ;7fX0=1Pﻩ /;]]0[fub[elbat=0Pﻩ/ ﻩ 4DEL 选片ﻩ ﻩ

  delay(1); } void time0(void)

 interrupt 1 using 1

  //定时中断子程序 {

 TH0=0X3C;

 ﻩ

  // 值初赋重ﻩﻩ

  ;0BX0=0LTﻩ ;1=0RTﻩ

 ﻩ ﻩﻩ

  //重新启动定时器

 ;++0ttnuocﻩ ﻩﻩ ﻩﻩ //软件计数加 1

 if(countt0==20)

  // 定时器中断次数=20 时(即 1 秒时) ﻩ{

 ;0=0ttnuocﻩ //器数计零清ﻩﻩ / ;--xd_cesﻩ/ 1 减间时西东ﻩﻩ ﻩ sec_nb-—;

 ﻩ ﻩﻩ //南北时间减 1

  if(sec_nb<=5&&time==0)

  //ﻩ

 闪灯黄西东ﻩ

 {

  ;0=xd_neerGﻩﻩ

 ;xd_wolleY!=xd_wolleYﻩﻩ

 }

 ﻩﻩ

 )1==emit&&5=〈xd_ces(fiﻩ //南北黄灯闪

  {

 ﻩ

 ;0=bn_neerGﻩ ﻩ

 Yellow_nb=!Yellow_nb;

  } ﻩﻩﻩﻩ ﻩ

 ﻩ ﻩ if(sec_dx==0&&sec_nb==5)

 // ,秒 5 置重,时0到时计倒西东当ﻩ用于黄灯闪烁时间

 ;5=xd_cesﻩ/)5==xd_ces&&0==bn_ces(fiﻩﻩ/于用,秒 5 置重,时 0 到时计倒北南当ﻩﻩ黄灯闪烁时间 ﻩ;5=bn_cesﻩ

 if(time==0&&sec_nb==0)

 ﻩ //当黄灯闪烁时间倒计时到0 时,

  {

 ﻩ P2=0x99;

 ﻩ // 灯绿红得向方背南西东置重ﻩﻩ ﻩ

 time=!time;

  sec_nb=set_timenb;

  //重赋南北方向得起始值

 ;5+bnemit_tes=xd_cesﻩﻩ //重赋东西方向得起始值

 ﻩ }

 ﻩ

 if(time==1&&sec_dx==0)//ﻩ到间时烁闪灯黄当ﻩ

 {ﻩ /;3cX0=2Pﻩﻩ/ﻩﻩﻩ

 态状灯绿红得北南西东置重ﻩ

  ;emit!=emitﻩ

 /;xdemit_tes=xd_cesﻩ/

 值始起得向方西东赋重ﻩﻩ ﻩ

 sec_nb=set_timedx+5;}// 值始起得向方北南赋重ﻩﻩ ﻩ } ﻩ} void key_to1()

 //

 +之序程子理处盘键ﻩﻩ{ /;0=0RTﻩ/ﻩ ﻩ

  器时定关ﻩ )0==tes(fiﻩ /

  ;++bnemit_tesﻩ/ S1 加北南ﻩ else

 /

 ;++xdemit_tesﻩ/ S1 加西东ﻩ if(set_timenb==100)

 ﻩ set_timenb=1;

 )001==xdemit_tes (fiﻩ ﻩ set_timedx=1;

  // 1 置 001 到加ﻩ sec_nb=set_timenb ; // 北南西东给赋值数得置设ﻩ sec_dx=set_timedx; // ﻩ} void key_to2()//ﻩ

 ﻩ

  —之序程子理处盘键ﻩ{

 ;0=0RTﻩ

 //关定时器

  )0==tes(fiﻩ

 /

 ;-—bnemit_tesﻩﻩ/ S1 减北南ﻩﻩ else

 ;--xdemit_tesﻩ //东西减 1S

 )0==bnemit_tes(fiﻩ

  ;99=bnemit_tesﻩ ) 0==xdemit_tesﻩ(fiﻩ

 99 置重1到减//

  ;99=xdemit_tesﻩ sec_nb=set_timenb ;//

 北南西东给赋值数得置设ﻩﻩ ;xdemit_tes=xd_cesﻩ} void key_to3()

  // 行通车急紧之理处盘键ﻩ{

  TR0=0;// 器时定关ﻩﻩ

 P2=0Xc9; // 灯红置部全ﻩ

 /;00=xd_cesﻩ/ 00 为都间时得向方个四ﻩ

  sec_nb=00;

 ;1=etacidnI_rezzuBﻩ} //外部中断 0 void int0(void) interrupt 0 using 1

 //只允许东西通行 {

 TR0=0;// ﻩﻩﻩ ﻩ器时定关ﻩ ;3cX0=2Pﻩ ﻩ

 //ﻩ灯绿置向方西东ﻩ ;0=etacidnI_rezzuBﻩ sec_dx=00; ﻩ ﻩ

  // 00 为都间时得向方个四ﻩﻩ ;00=bn_cesﻩ} //外部中断 1 void int1(void)

 interrupt 2 using 1

  ﻩ

 //只允许南北通行

 {

 ;0=0RTﻩ

 ﻩ

 //关定时器

  ;99X0=2Pﻩ

  ﻩﻩﻩ //置南北方向为绿灯

 Buzzer_Indicate=0;

  ;00=bn_cesﻩ

  ﻩﻩ // 00 为都间时得向方个四ﻩ sec_dx=00; } void logo()//开机得 Logo

 "- - — -" {

  )++n;05〈n;0=n(rofﻩ

 {ﻩ

  ;04x0=0Pﻩ

  ;efx0=1Pﻩ

 ;)1(yaledﻩ

  ;dfx0=1Pﻩ ;)1(yaledﻩﻩ

 ;bfX0=1Pﻩ

 ;)1(yaledﻩ

 ;7fX0=1Pﻩ ;)1(yaledﻩﻩ

  ;ffx0 = 1Pﻩ }ﻩ} void Buzzer() {

 if(Buzzer_Indicate==1)

 Buzz=!Buzz;

 else Buzz=0; }

 void delay(int ms)//

 序程子时延ﻩ{

 uint j,k;

 for(j=0;j<ms;j++)

 // sm 时延ﻩ

 for(k=0;k<124;k++);// 时延得秒毫 1 约大ﻩﻩ}

推荐访问:交通灯 单片机 课程设计
上一篇:专科教师工作心得体会经验分享
下一篇:XX乡村振兴怎样做好规划和管控

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有