1、目 录1 前言12 交通等系统总体设计思路23 硬件设计33.1 硬件设计概述33.2 主要芯片简介43.2.1 核心芯片AT89C51单片机的说明43.2.2 锁存器74LS373的简介53.2.3 8255A的简介63.2.4 七段数码管的简介64 交通灯的软件设计94.1 主程序的设计94.2 显示程序的设定94.3 延时程序的设计114.4 中断服务程序的设计115 调试与仿真145.1 Keil C51软件与PROTEUS软件的简介145.1.1 Keil C51软件的简介145.1.2 PROTEUS软件的简介145.2 调试与仿真的过程155.2.1 程序调试过程155.2.2
2、程序仿真过程及结果176 总结22参考文献23附录24智能交通灯控制系统1 前言于我们所生活的此年代交通便利尤其重要,随着生活水平提高及社会的发展,道路越修越宽、越建越多,车的数量也急剧增加,道路堵塞也伴随而来。因此,一个好的交通灯控制系统,可以使道路拥挤、违章控制、突发事件、故障处理等方面的问题给予技术革新。随着大规模集成电路及计算机技术的迅速发展,以及人工智能在控制技术方面的广泛运用,计算机智能控制设备有了很大的发展,而且在生活各个方面的运用越来越广泛,且运用技术及手法越来越成熟。本文介绍了一个智能交通灯系统的设计。该智能交通灯控制系统可以实现的功能有:能控制东西南北四个路口的红黄绿灯正常
3、工作,并且在正常模式下可以在各种状态之间自动转换。东西和南北方向分时准行和禁行;两垂直方向的准行时间均为60s或120s,可以进行控制转换;准行方向亮绿灯与禁行方向亮绿灯55s后,四个路口同时加亮一黄灯进行闪烁,以警告车辆及行人,准行方向与禁行方向即将改变;四个道口均用数码管显示准行或禁行的剩余时间;在交通情况特殊情况下可以通过K1、K2、K3按键对交通灯进行控制。当有紧急情况发生时按下K1四个路口同时加亮黄灯进行闪灯(闪灯时间为5s)且倒计时显示关闭。黄灯闪烁完毕后四路口全变红灯禁行,处理紧急情况。有某方向上车辆过多 ,可以使用K2、K3键控制东西或南北方向通行,另一方向禁行。按下控制键后先
4、在四个路口加5s的黄灯闪烁。在本次设计中,运用所学的单片机知识自发设计一个交通灯控制器,同时通过Keil C51软件编辑和调试,通过PROTEUS软件进行仿真。整个过程中,不仅进一步巩固了所学的单片机知识,而且掌握了Keil C51软件以及PROTEUS软件的用法。并且掌握了初步设一个器件的基本流程。2 交通灯系统总体设计思路根据设计要求,该系统具有交通灯按要求正常显示功能、应对紧急情况功能及60.秒及120秒的转换功能。在设计中用AT89C51和其他功能芯片实现了简单的最小系统。实现了既定的基本功能。该系统由四大部分组成,显示模块和中断模块、时钟模块以及复位模块。在显示模块中,进行红黄绿灯的
5、三个状态的转换及数码管倒计时显示。在中断模块中,能进行紧急情况的处理,当处理完毕后能够进行复位。显示模块中分为数码显示和红黄绿三个灯的显示。由12个数码管和12个灯组成,通过8255A对数码管进行控制,通过P1口进行灯的控制。中断模块中有四个按键,分别通过外部中断0和1及定时器0和1进行控制。其中外部中断0控制着紧急情况的处理,定时器0和1控制着当车辆过多时的紧急情况,通过外部中断1进行定时时间120秒和60秒两个状态之间转换。时钟模块由2个电容及1个晶振构成了内部时钟方式的电路。复位模块通过1个电容、2个电阻和1个按钮构成了复位电路,把它接到89C51的复位端上,当按下按钮后电路回到初始状态
6、运行。在设计中,以AT89C51为中心控制的功能部件,以8255A作为扩展端口功能的芯片,扩展了三个并行口。以数码管和发光二级管为外部输出设备,其中数码管显示为静态显示 。通过译码器74LS373作为译码选择Q7作为8255A的片选段端。Q1,Q2作为8255A端口的选择端。并且只用P0口就进行数据和地址的传送。3 硬件设计3.1 硬件设计概述在进行硬件设计时,用到的主要器件有AT89C51、74LS373、8255A、数码管等。其中由于数码管太多,而设计中用静态显示,所以需要进行I/O口的扩展,8255A便是应用于此功能。在硬件电路中,8255A的D0-D7端与P0口直接相连。因P0口能进行
7、地址与数据的分时复用,因此当它用作地址输出口时,需要一个地址锁存器。8255A的A1和A0接到锁存器的Q0和Q1上,而它的片选端接到锁存器的Q7上,这样就确定了8255A的地址。而8255A的PA口接到低位数码管的a-g端,PB口接到中间位数码管的a-g端,PC口接到最高位数码管的a-g端。因数码管是同时亮、灭的,因此将它们的位选端并联接到P1.4上,通过P1.4输出高低电平对数码管的亮灭进行控制。P1口的另外几个引脚,用来控制两个路口的灯。因两个路口各有两组灯且这两组灯的状态应该相同,为了节省端口,将东西方向的红灯并联,接到P1.7上,东西方向的绿灯并联接到P1.6上,南北方向的红灯并联接到
8、P1.3上,南北方向的绿灯并联接到P1.2上,由于两个路口的黄灯是同时闪烁的,因此将这四个黄灯并联接到P1.5上。应用P3口的第二功能和四个按键,实现紧急情况的处理及倒计时时间转换。将P3.2、P3.3、P3.4、P3.5分别接到四个按键上。复位电路接到AT89C51的复位端。时钟电路接到AT89C51的XTAL1和XTAL2端。应用PROTEUS软件画出的电路图如图3-1所示。图3-1 交通灯的硬件电路图3.2 主要芯片简介3.2.1 核心芯片AT89C51单片机的说明 AT89C51是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 AT89C51单片机包含中央处理
9、器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明。中央处理器:央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(RAM):AT89C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运
10、算的中间结果或用户定义的字型表。 程序存储器(ROM):AT89C51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。定时/计数器:AT89C51有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。并行输入输出(I/O)口:AT89C51共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。全双工串行口:AT89C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统:AT89C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同
11、的控制要求,并具有2级的优先级别选择。时钟电路:AT89C51内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但AT89C51单片机需外置振荡电容。3.2.2 锁存器74LS373的简介74LS373是常用的地址锁存器芯片,它实质是一个是带三态缓冲输出的8D触发器,在单片机系统中为了扩展外部存储器,通常需要一块74LS373芯片,其引脚图如下图3-2所示。图3-2 74LS373的引脚图当74LS373用作地址锁存器时,应使数据输出允许端为低电平,此时锁存使能端 LE为高电平时,输出Q0Q7 状态与输入端D1D7状态相同;当LE发生负的跳变时,输入端D0D7 数据锁入Q0
12、Q7。51单片机的ALE信号可以直接与74LS373的LE连接。在MCS-51单片机系统中,常采用74LS373作为地址锁存器使用。其中输入端D0D7接至单片机的P0口,输出端提供的是低8位地址,LE端接至单片机的地址锁存允许信号ALE。输出允许端接地,表示输出三态门一直打开。锁存端LE 由高变低时,输出端8 位信息被锁存,直到LE 端再次有效。 当三态门使能信号为低电平时,三态门导通,允许Q0Q7输出,当三态门为高电平时,输出悬空。3.2.3 8255A的简介8255A可编程并行接口芯片的简介:8255A可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7-PA0,PB
13、7-PB0,PC7-PC0。其内部还有一个控制寄存器,即控制口。其中C口可作为两个独立的四位接口。外设数据口和单片机进行数据的通信,各个数据口的通信方式和传送方向是通过用户对控制口写控制字控制的。各口地址有A1和A0决定。当A1A0分别为00、01、10、11时,对应选择A口、B口、C口和控制口。8255A外部引脚图如图3-3所示。 图3-3 8255A的外部引脚图3.2.4 七段数码管的简介显示器是最常用的输出设备。特别是发光二极管(LED)和液晶显示器(LCD)由于结构简单、价格便宜、接口容易,得到广泛的应用,尤其在单片机系统中大量使用。现在简单介绍七段数码管的工作原理。图3-4为七段数码
14、管的内部电路图。图3-4 七段数码管的内部电路7段LED数码管,则在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。 LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。上图是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。当然,LED
15、的电流通常较小,一般均需在回路中接上限流电阻。假如我们将“b”和“c”段接上正电源,其它端接地或悬空,那么“b”和“c”段发光,此时,数码管显示将显示数字“1”。而将“a”、“b”、“d”、“e”和“g”段都接上正电源,其它引脚悬空,此时数码管将显示“2”。其它数字以此类推。本设计中,所用到的数码管因为显示的内容为三位数,总有四个数码管显示同一个数,所以,将显示相同数数码管的段选段连一起;而将表示一个三位数的三个数码管的位选端连一起。这样整个数码显示系统只有3根位选接线。节省了接口,也方便了位选和片选。12个数码管连接图如3-5图3-5 12个数码管的连线图4 交通灯的软件设计4.1 主程序的
16、设计本实验的主控程序分成了两个状态,分别是60s显示程序和120s显示程序,由20h.0作为标志位进行判断,当20h.0为高电平时,定时时间为120s的倒计时显示,当20h.0为低电平时为60s的倒计时显示。图4-1为交通灯主控程序设计的流程图。开始初始化程序20h.0是否为1?60s显示程序120s显示程序结束NY图4-1 交通灯设计的流程图4.2 显示程序的设定在显示程序中通过对8255A的三个口送不同的段码,使数码管实现静态显示。分成了四个状态,分别是东西红灯南北绿灯,黄灯闪烁,东西绿灯南北红灯,黄灯闪烁,接下来就是重复以上状态。下面以60s的显示程序为例进行说明,图4-2为60s显示程
17、序的流程图。由流程图可以看出,初态为东西道口红灯亮,南北道口绿灯亮,计数初值为60s,并判断标志位20h.0是否为1,如果不为1,则进行减一倒计时,如果为1,则使东西道口绿灯亮,南北道口红灯亮,计数初值为60s,在倒计时过程中,不断判断是否减到5s,如果减到5s时,则执行黄灯闪烁的程序,在黄灯闪烁程序中,判断是否减为1s,当减为1s时,转换为下一个状态,即东西道口绿灯亮,南北道口红灯亮,在执行这段程序时同样判断是否减为5s,减为5s时,黄灯闪烁,减为1s时,转换为东西道口红灯亮,南北道口绿灯亮的状态,如此循环下去。显示程序开始东西道口红灯亮,南北道口绿灯亮倒计时初值为60s最高位清020h.0
18、是否为1?减1倒计时倒计时是否到5s?黄灯闪烁5s倒计时是否到1s?显示程序结束东西道口红灯亮,南北道口绿灯亮倒计时初值为120sYNNYNY图4-2 60s或120s显示程序流程图4.3 延时程序的设计在程序设计中用了1s的延时程序。延时程序中,运用DJNE指令及三个循环实现了1s的软件延时。延时程序的流程图如图4-3所示。r4初值为10延时子程序开始r5初值为200r6初值为126r6减1是否为0?r5减1是否为0?r4减1是否为0?延时子程序返回YYYNNN图4-3 延时子程序的流程图4.4 中断服务程序的设计该设计中共使用了四个中断,即外部中断0、1和利用定时器的计数方式扩展的中断。在
19、主程序中首先开中断,定时器设置在计数方式,工作在方式1下,在主程序中要进行初值的设定,在中断服务程序中要进行初值的重装(因为是方式1所以为自动重装),然后进行中断服务程序的处理。外部中断0实现紧急情况的处理,当触发一次外部中断0时,便进入中断0的服务程序中,在中断服务程序中首先将数码管的位选端置1,然后通过延时程序和标志位控制黄灯闪烁5s,然后给控制东西路口红灯的引脚和控制南北路口的绿灯的引脚送高电平使它们都点亮,这样就实现了南北方向车多时南北方向为绿灯东西方向为红灯的功能。外部中断0的流程图如图4-4所示。外部中断0程序开始数码管位选端置1调用黄灯闪烁子程序南北道口绿灯亮,东西道口红灯亮动态
20、停止/等待复位图4-4 外部中断0的流程图外部中断1实现倒计时时间为120s和60s之间的转换,在主程序中设置一个标志位,在中断服务程序中对标志位取反,从而实现了倒计时时间的转换。图4-5为外部中断1的流程图。外部中断1程序开始对20h.0取反外部中断1返回图4-5 外部中断1的流程图两个定时器中断是对外部中断的扩展,实现另外两种紧急情况的处理,其中定时器T1实现当南北方向车少而东西方向车多时,显示黄灯闪烁5s然后使南北方向红灯亮,东西方向绿灯亮的功能,通过复位返回到初始状态。而定时器T0实现的是,当有故障发生时,先使黄灯闪5s,然后两个路口的红灯点亮,以处理故障,当故障处理完毕后,通过复位键
21、回到初始状态。定时器T0中断和定时器T1的流程图分别如图4-6和图4-7所示。定时器0中断开始数码管位选端置1调用黄灯闪烁子程序南北道口、东西道口均是红灯亮动态停止/等待复位图4-6 定时器0中断的流程图定时器1中断开始数码管位选端置1调用黄灯闪烁子程序南北道口红灯亮,东西道口绿灯亮动态停止/等待复位图4-7 定时器1中断的流程图5 调试与仿真5.1 Keil C51软件与PROTEUS软件的简介5.1.1 Keil C51软件的简介目前流行的51系列单片机开发软件是德国Keil C51公司推出的Keil C51 C51软件,它是一个基于32位Windows环境的应用程序,支持C语言和汇编语言
22、编程,其6.0以上的版本将编译和仿真软件统一为Vision(通常称为2)。应用Keil C51进行软件仿真开发的主要步骤为:编写源程序并保存建立工程并添加源文件设置工程编译/汇编、连接,产生目标文件程序调试。Keil C51使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。5.1.2 PROTEUS软件的简介PROTEUS软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,
23、还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。PROTEUS软件具有其它EDA工具软件(例:multisim)的功能。这些功能是:原理布图、PCB自动或人工布线 、SPICE电路仿真 以及互动的电路仿真和仿真处理器及其外围电路。PROTEUS提供了丰富的资源,主要有以下几个方面。1.PROTEUS可提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。 2.PROTEUS可提供的仿真仪表资源 :示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用
24、。3.除了现实存在的仪器外,PROTEUS还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。4.PROTEUS可提供的调试手段 PROTEUS提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。 在PROTEUS中绘制好原理图后,调入已编译好的目标代码文件*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。 5.2 调试与仿真的过程5.2.1 程序调试过程1.打开Keil C51软
25、件,首先选择菜单File-New,在源程序编辑器中输入汇编语言或C语言源程序(或选择File-Open,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜单Project-New Project,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group Source G
26、roup1”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。此时Keil C51的运行界面如图5-1所示。图5-1 Keil C51的运行界面2. 然后进行编译/汇编、连接,产生目标文件后的运行界面如图5-2所示。图5-2 生成目标文件的界面3.编译、连接没有错误后,对工程进行设置,选择工程管理窗口的Target1,再选择Project-Option for TargetTarget1(或点右键弹出快捷菜
27、单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“Creat Hex Fi”;其它选项卡内容一般可取默认值。然后在进行编译,其运行界面如图5-3所示。图5-3 生成扩展名为.HEX文件的界面5.2.2 程序仿真过程及结果首先在PROTEUS中将电路图画好,然后将生成的扩展名为.HEX的文件添加到AT89C51中。在按运行键,便开始进行仿真。1.首先测试初态,即东西路口红灯亮,南北路口绿灯亮,数码管从60s开始倒计时。运行界面图如图5-4所示。图5-4 初
28、始状态的运行界面2.当数码管倒计时到5s时黄灯进行闪烁,其运行界面如图5-5所示。图5-5 倒计时5s时黄灯闪烁时的运行界面3.当触发外部中断0时,黄灯先闪5s,然后东西路口红灯亮,南北路口绿灯亮。其运行界面如图5-6所示。图5-6 外部中断0触发后的运行界面4.当触发定时器0的中断时,黄灯闪5s,然后两个路口的红灯点亮。其运行界面如图5-7所示。图5-7 定时器0的中断触发后的运行界面6.当触发定时器1的中断时,黄灯闪5s,然后东西路口绿灯亮,南北路口红灯亮。其运行界面如图5-8所示。图5-8 触发定时器1的中断后得运行界面7.当触发外部中断1时,可以进行倒计时时间60s和120s之间的转换
29、。其运行界面如图5-9所示。图5-9 60s与120s之间的转换界面6 总结本次课设是基于单片机的智能交通灯系统的设计。在课设过程中,首先我们根据课设要求选择好使用的芯片,以及电路的布局等。然后利用PROTEUS软件,画出电路图。再根据电路图进行软件的设计即编程。编好程序后,再在Keil C51软件中进行编译、连接,和一些设置,最终生成,扩展名为.HEX的文件。下一步便是进行仿真,在PROTEUS中将文件下载到AT89C51中,便可进行实时仿真。仿真过程中要检测各个功能是否能够实现。如果仿真的结果不符合要求,根据所出现的现象,检查是否是连线的问题,如果连线没有问题,在检查程序是否有错误。如此反
30、复的调试与仿真,直到得到正确的结果。例如,我在调试显示模块时,当电路上电时,灯显示正常,但数码管不能进行正确的倒计时,检查硬件电路,并没有发现错误,于是我又重新检查了一遍程序,原来程序中有错,修改之后再进行仿真,倒计时显示正常,显示模块调试完毕。我设计的交通灯能够进行符合课设的要求,但也存在着一些缺陷。比如,在中断中,按下键后进入中断,但中断不能再通过按此键返回,必须通过复位键才能返回。此缺陷可以通过修改中断服务程序的内容得以改善。在设计智能交通灯的过程中,我们总是在不断的发现问题解决问题。因此,此次课设培养了我们独立思考,拓宽思路,积极探索的精神。由于PROTEUS软件提供了实验室无法相比的
31、大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了为我们提供了提高自己的实践精神、创造精神的平台。同时使用PROTEUS 软件进行单片机系统仿真设计, 是虚拟仿真技术和计算机多媒体技术相结合的综合运用,也有利于培养我们电路设计能力及仿真软件的操作能力。由于我们是初次使用PROTEUS软件,设计过程中遇到问题是在所难免的,实践出真知,只有不断的解决实际设计中的问题,才能不断丰富我们的单片机设计的经验,才能巩固我们的知识。参 考 文 献1 范凤强,兰婵丽.单片机语言应用实战集锦M.电子工业出版社,2005.2 林立,张俊亮.单片机原理及应用
32、.电子工业出版社,2007.3 于殿红,王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007.4 张刚毅,彭喜媛.单片机原理与应用设计.电子工业出版社,2005.5 曹旭东,刘得军.单片机语言应用设计.电子工业出版社,2007.28附 录 org 0000hljmp mainorg 0003h;外部中断0ljmp intp0org 000bh;定时器0ljmp pnt0org 0013h;外部中断1ljmp intp1org 001bh;定时器1ljmp pnt1main:mov p1,#00hmov th0,#0ffh;T0装初值mov tl0,#0ffhmov th1,#
33、0ffh;T1装初值mov tl1,#0ffhmov tmod,#66hsetb ea;中断允许setb et0;定时器中断初始化setb et1setb tr0setb tr1mov sp,#60hmov a,#80hmov dptr,#0ff7fhmovx dptr,aclr 20h.0clr 21h.2setb easetb ex0;外部中断初始化setb it0setb ex1setb it1jnb 20h.0,guljmp l120gu: mov 40h,#00h ;高位mov dptr,#tabmov a,40hmovc a,a+dptrmov dptr,#0ff7ehmovx d
34、ptr,aclr 20h.1 ;20h.1为两个灯转换的标志位clr 20h.2 ;黄灯标志位state1:mov r0,#61hjb 20h.1,state3setb 20h.1clr p1.6 ;东西绿灯clr p1.5 ;黄灯clr p1.3 ;东西红灯setb p1.7 ;南北红灯setb p1.2 ;南北绿灯ljmp loopstate3:mov r0,#61h;东西绿南北红clr 20h.1clr p1.7setb p1.6clr p1.5setb p1.3clr p1.2ljmp loopstate2:clr p1.7;黄灯闪烁clr p1.2clr p1.6clr p1.3jb
35、 20h.2,l1setb p1.5setb 20h.2ljmp loopl1:clr p1.5clr 20h.2loop:clr cmov a,#9ahsubb a,#01hadd a,r0da a mov r0,amov 43h,aanl a,#0fhmov 42h,a ;最低位mov a,43hswap aanl a,#0fhmov 41h,a ;中间位mov dptr,#tabmov a,41hmovc a,a+dptrmov dptr,#0ff7dh ;中间位B口输出movx dptr,amov dptr,#tabmov a,42hmovc a,a+dptrmov dptr,#0ff
36、7ch ;最低位A口输出movx dptr,alcall delayjnb 20h.0,yy1 ;120秒和60秒的转换判断ljmp l120yy1:clr cmov a,r0subb a,#07hjnc loopcjne r0,#01h,state2ljmp state1delay:mov r4,#10 ;延时de1:mov r5,#200de2:mov r6,#126de3:djnz r6,de3djnz r5,de2djnz r4,de1retl120:mov 40h,#01h ;高位mov dptr,#tabmov a,40hmovc a,a+dptrmov dptr,#0ff7ehm
37、ovx dptr,aclr 21h.1 ;20h.1为两个灯转换的标志位clr 21h.2state11:mov r0,#21hjb 21h.1,state33setb 21h.1 ;东西红南北绿clr p1.6clr p1.5clr p1.3setb p1.7setb p1.2ljmp loop2state33:mov 40h,#01h ;高位mov dptr,#tabmov a,40hmovc a,a+dptrmov dptr,#0ff7ehmovx dptr,a ;高位为1mov r0,#21hclr 21h.1 ;东西绿南北红clr p1.7setb p1.6clr p1.5setb
38、p1.3clr p1.2ljmp loop2state22:clr p1.7clr p1.2clr p1.6clr p1.3clr 20h.2 ;黄灯闪烁标志位jb 21h.2,l11setb p1.5setb 21h.2ljmp loop2l11:clr p1.5clr 21h.2loop2:clr cmov a,#9ahsubb a,#01hadd a,r0da amov r0,amov 43h,aanl a,#0fhmov 42h,a ;最低位mov a,43hswap aanl a,#0fhmov 41h,a ;中间位mov dptr,#tabmov a,41hmovc a,a+dpt
39、rmov dptr,#0ff7dh ;通过B口输出movx dptr,amov dptr,#tabmov a,42hmovc a,a+dptrmov dptr,#0ff7chmovx dptr,alcall delayjb 20h.0,yy0ljmp guyy0:mov a,40hcjne a,#01h,l124cjne r0,#00h,loop2mov 40h,#00h ;高位mov dptr,#tabmov a,40hmovc a,a+dptrmov dptr,#0ff7ehmovx dptr,a ;高位输出0mov r0,#00hljmp loop2l124:clr cmov a,r0s
40、ubb a,#07hjnc loop2cjne r0,#01h,state22ljmp state11pnt1:mov r1,#05h ;定时器1中断l5:setb p1.4;k2setb p1.1acall state4 ;黄灯闪烁clr p1.7 ;东西绿南北红setb p1.6clr p1.5setb p1.3clr p1.2sjmp $retipnt0:mov r1,#05h ;定时器0中断setb p1.4;k1setb p1.1acall state4 ;黄灯闪烁setb p1.7 ;东南西北红setb p1.3clr p1.6clr p1.5clr p1.2sjmp $retii
41、ntp0:mov r1,#05h ;外部中断0setb p1.4;k3setb p1.1acall state4 ;黄灯闪烁setb p1.7 ;东西红南北绿 clr p1.6clr p1.5clr p1.3setb p1.2sjmp $retiintp1:cpl 20h.0 ;外部中断1retistate4:push accclr p1.7clr p1.2clr p1.6clr p1.3clr 20h.4 ;黄灯闪烁标志位l8:jb 20h.4,l3setb p1.5setb 20h.4ljmp loop1l3:clr p1.5clr 20h.4loop1:lcall delaydjnz r1,l8pop accrettab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhend