单片机交通灯课程设计报告(含电路图,源程序)

摘   要... 1

1.    引言... 2

2.    总体设计方案... 2

2.1.    设计思路. 2

2.1.1.设计目的. 2

2.1.2.设计任务和内容. 3

2.1.3.方案比较、设计与论证. 3

2.1.4.芯片简介. 5

2.2.    设计方框图. 8

3.    设计原理分析... 8

3.1.    交通灯显示时序的理论分析与计算. 8

3.2.    交通灯显示时间的理论分析与计算. 10

3.3.    电路模块. 11

3.3.1.LED数码管显示模块. 11

3.3.2.LED红绿灯显示模块. 13

3.3.3.复位电路. 15

3.3.4.晶振电路. 16

4.    结束语... 16

5.    参考文献... 16

6.    附录... 17

6.1.        附录1:程序清单... 17

6.2.        附录2:电路设计总图... 22

6.3        附录3:实物图... 23


摘   要

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

本系统采用单片机AT89S52为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。本设计就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间。

本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、复位电路等几大部分组成。系统除基本的交通灯功能外,还具有倒计时等功能,较好的模拟实现了十字路口可能出现的状况。

软件上采用C51编程,主要编写了主程序,LED数码管显示程序,中断程序延时程序等。经过整机调试,实现了对十字路口交通灯的模拟。

关键字:电子线路 AT89S52  LED 交通灯

1.  引言

当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。

1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。

电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。

1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。

信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。

2.  总体设计方案

2.1.    设计思路

2.1.1.     设计目的

(1)加强对单片机和汇编语言的认识,充分掌握和理解设计各部分的工作原理、设计过程、选择芯片器件、模块化编程等多项知识。

(2)用单片机模拟实现具体应用,使个人设计能够真正使用。

(3)把理论知识与实践相结合,充分发挥个人能力,并在实践中锻炼。

(4)提高利用已学知识分析和解决问题的能力。

(5)提高实践动手能力。

2.1.2.     设计任务和内容

2.1.2.1. 设计任务

单片机采用用AT89S52芯片,使用发光二极管(红,黄,绿)代表各个路口的交通灯,用8段数码管对转换时间进行倒时(东西路口15秒,南北路口25秒,黄灯时间5秒)。

2.1.2.2. 设计内容

(1)设计并绘制硬件电路图

(2)制作PCB并焊接好元器件

(3)编写程序并将调试好的程序固化到单片机中

2.1.3.     方案比较、设计与论证

2.1.3.1. 电源提供方案

    为使模块稳定工作,须有可靠电源,采用单片机控制模块提供电源。此方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。

2.1.3.2. 复位方案

复位方式有两种:按键复位与软件复位。由考虑到程序的简洁,避免冗长,本设计采用按键复位,在芯片的复位端口外接复位电路,通过按键对单片机输入一个高电平脉冲,达到复位的目的。

2.1.3.3. 输入方案

方案一:

采用89S52扩展I/O 口及键盘,显示等。该方案的优点是:
使用灵活可编程,并且有RAM,及计数器。若用该方案,可提供较多I/O             口,但操作起来稍显复杂。

方案二:

直接在IO口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用2个按键,分别是K1、K2。
由于该系统对于交通灯及数码管的控制,只用单片机本身的I/O 口就可实现,且本身的计数器及RAM已经够用,故选择方案二

2.1.3.4. 显示界面方案

    该系统要求完成倒计时、状态灯等功能。基于上述原因,我们考虑了三种方案:

方案一:

完全采用数码管显示。这种方案只显示有限的符号和数码字符,无法胜任题目要求。

方案二:

完全采用点阵式LED 显示。这种方案实现复杂,且须完成大量的软件工作;但功能强大,可方便的显示各种英文字符,汉字,图形等。

方案三:

采用数码管与点阵LED (点阵式和8段式LED)相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息。这种方案既满足系统功能要求,又减少了系统实现的复杂度。权衡利弊,第三种方案可互补一二方案的优缺,我们决定采用方案三以实现系统的显示功能。

设计方框图

整个设计以AT89S52单片机为核心,由数码管显示,LED数码管显示,复位电路组成。

硬件模块入图2-1。

组织结构图

2.1.3.5. 交通管理的方案论证

东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。指示灯燃亮的方案如表2。

表2说明:       

(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行。时间为25秒。

(2)黄灯5秒,警示车辆和行人红、绿灯的状态即将切换。      

(3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。时间为25秒。

(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。

2.1.4.     芯片简介

1.AT89S52单片机简介

其引DIP封装的脚图如下:

  主要性能

  与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、 全静态操作:0Hz~33Hz 、 三级加密程序存储器 、 32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。

  功能特性描述

  At89s52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8K 字节在系统可编程 Flash AT89S52

  P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻

  辑电平。对P0端口写“1”时,引脚用作高阻抗输入。

  当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,

  P0具有内部上拉电阻。

  在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验

  时,需要外部上拉电阻。

  P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个

  TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入

  口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

  此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2

  的触发输入(P1.1/T2EX),具体如下表所示。

  在flash编程和校验时,P1口接收低8位地址字节。

  引脚号第二功能

  P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出

  P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)

  P1.5 MOSI(在系统编程用)

  P1.6 MISO(在系统编程用)

  P1.7 SCK(在系统编程用)

  P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个

  TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入

  口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

  在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)

  时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用

  8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。

  在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

  P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个

  TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入

  口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

  P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。

  在flash编程和校验时,P3口也接收一些控制信号。

  端口引脚 第二功能

  P3.0 RXD(串行输入口)

  P3.1 TXD(串行输出口)

  P3.2 INTO(外中断0)

  P3.3 INT1(外中断1)

  P3.4 TO(定时/计数器0)

  P3.5 T1(定时/计数器1)

  P3.6 WR(外部数据存储器写选通)

  P3.7 RD(外部数据存储器读选通)

  此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。

  RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。

  ALE/PROG——当访问外部程存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。

  对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

  如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

  PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

  EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。

  如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。

  FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

2.2.    十字形: 复位八边形: 晶振源设计方框图

 

3.  设计原理分析

3.1.    交通灯显示时序的理论分析与计算

对于一个交通路口来说,能在最短的时间内达到最大的车流量,就算是达到了最佳的性能,我们称在单位时间内多能达到的最大车流为车流量,用公式:车流量= 车流 / 时间 来表示。

先设定一些标号如图2-1 所示。

点此在新窗口浏览图片

说明:

此图为直方图,上边为北路口灯,右边为东路口灯,下边为南路口灯,左边为西路口灯。
    图2-2 所示为一种红绿灯规则的状态图,分别设定为S1、S2、S3、S4,交通灯以这四的状态为一个周期,循环执行(见图2-3)。

点此在新窗口浏览图片图2-1

请注意图2-1b和图2-1d,它们在一个时间段中四个方向都可以通车,这种状态能在一定的时间内达到较大的车流量,效率特别高。
依据上述的车辆行驶的状态图,可以列出各个路口灯的逻辑表,由于相向的灯的状态图是一样的,所以只需写出相邻路口的灯的逻辑表;根据图2-3 可以看出,相邻路口的灯它们的状态在相位上相差180°。因此最终只需写出一组S1、S2、S3、S4的逻辑状态表。

如表2-1 所示。

点此在新窗口浏览图片

表2-1

点此在新窗口浏览图片表中的“×”代表是红灯亮(也代表逻辑上的0),“√”是代表绿灯亮(也代表逻辑上的1),依上表,就可以向相应的端口送逻辑值。

3.2.    交通灯显示时间的理论分析与计算

东西和南北方向的放行时间的长短是依据路口的各个方向平时的车流量来设定,并且S1、S2、S3、S4各个状态保持的时间之有严格的对应关系,其公式如下示。
T-S1+T-S2=T-S3
T-S2=T-S4
T-S1=T-S3
我们可以依据上述的标准来改变车辆的放行时间。按照一般的规则,一个十字路口可分为主干道和次干道,主干道的放行时间大于次干道的放行时间,我们设定值时也应以此为参考

3.3.    电路模块

3.3.1.     LED数码管显示模块

(1)   静态显示方式:静态显示方式是指当显示器显示某一字符时,发光二极管的位选始终被选中。在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制。由于单片机本身提供的I/O口有限,实际使用中,通常通过扩展I/O口的形式解决输出口数量不足的问题。
静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。随着显示器位数的增加,需要的I/O口线也将增加。
(2)动态显示方式:动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,可以既保证亮度,又保证显示。若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)。

 

数码管显示子程序:

DISP: MOV    A,R2                   

      MOV    B,#10

      DIV    AB

      MOV    60H,A

      MOV    61H,B

      MOV    A,R3

      MOV    B,#10

      DIV    AB

      MOV    62H,A

      MOV    63H,B

      MOV    40H,#04H

      MOV    R5,#0FEH

      MOV    R0,#60H

LLP:  MOV    A,@R0

      MOV    DPTR,#TABLE

      MOVC   A,@A+DPTR

      MOV    P0,A

      MOV    A,R5

      MOV    P2,A

      LCALL  DELAY1

      MOV    P2, #0FFH              ;令显示器熄灭,以免产生残影

      RL     A

      MOV    R5,A

      INC    R0

      DJNZ   40H,LLP

      RET

DELAY1:                              ;延时子程序

      MOV    R4,#12

DL2:  MOV    R7,#12

      DJNZ   R7,$

      DJNZ   R4,DL2

      RET

TABLE:DB     3FH,24H,5dH,75H,66H

      DB     73H,7bH,25H,7fH,77H

      END

3.3.2.     LED红绿灯显示模块

本实验有四种状态:

状态1, 东西绿灯亮,南北红灯亮,此时P1.0口—P1.7口的高低电平为#0BBH。

子程序:

ST1:  MOV    P1,#0EBH                 ;第一个状态,主干道亮绿灯、支干道亮红灯;

      CJNE   R1,#0FFH,TZ1

      MOV    R1,#00H

      DEC    20H

      DEC    23H

TZ1:  MOV    R2,20H

      MOV    R3,23H

      LCALL  DISP                    ;调用显示子程序。

      MOV    A,20H

      CJNE   A,#00H,ST1

      MOV    20H,#25

状态2, 东西黄灯亮,南北红灯亮,此时P1.0口—P1.7口的高低电平为#0BDH。

子程序:

ST2:  MOV    P1,#0EDH                ;第二个状态,主干道亮黄灯、支干道亮红灯;

      CJNE   R1,#0FFH,TZ2

      MOV    R1,#00H

      DEC    21H

      DEC    23H

TZ2:  MOV    R2,21H

      MOV    R3,23H

      LCALL  DISP                    ;调用显示子程序。

      MOV    A,21H

      CJNE   A,#00H,ST2

      MOV    21H,#05

状态3, 东西红灯亮,南北绿灯亮,此时P1.0口—P1.7口的高低电平为#0DEH。

子程序:

ST3:  MOV    P1,#0BEH                ;第三个状态,主干道亮红灯、支干道亮绿灯;

      CJNE   R1,#0FFH,TZ3

      MOV    R1,#00H

      DEC    24H

      DEC    22H

TZ3:  MOV    R2,24H

      MOV    R3,22H

      LCALL  DISP                    ;调用显示子程序。

      MOV    A,22H

      CJNE   A,#00H,ST3

      MOV    22H,#15

状态4, 东西红灯亮,南北黄灯亮,此时P1.0口—P1.7口的高低电平为#0EEH。再采用显示子程序与延时子程序可使LED显示灯按照要求点亮。

子程序:

ST4:  MOV    P1,#0DEH                ;第四个状态,主干道 亮红灯、支干道亮黄灯;

      CJNE   R1,#0FFH,TZ4

      MOV    R1,#00H

      DEC    24H

      DEC    21H

TZ4:  MOV    R2,24H

      MOV    R3,21H

      LCALL  DISP                    ;调用显示子程序。

      MOV    A,21H

      CJNE   A,#00H,ST4

      MOV    21H,#05

      MOV    24H,#20

      LJMP   ST1

3.3.3.     复位电路

复位方式有多种,本设计采用按键复位。接线图如图程序3.1复位电路,

框图

 


在设定的定时时间内,89S52必须在RST引脚产生一个由高到低的电平变化,以清内部定时器.

3.3.4.     晶振电路

  晶振电路原理图如3-2:

             3-2 晶振模块原理图

 选取原则:传统做法,但能够实现所需,即最简单也最是实用。电容选取30pF,晶振为30MHz。

4.  结束语

通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。本次课程设计的过程是艰辛的,不过收获却是很大的。

在设计过程中,会出现了一些问题,但都是常见的小问题,如:代码中双引号的使用并不是在英语书写状态下,输入字母出错等,在调试时出现异常,不过这些都是经常性错误,经过调试修改都一一解决,程序顺利完成,并实现了其功能。

综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流。

由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则不效率还不是很高等等,这需要在实践中进一步完善。

当然,通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我。

5.  参考文献

[1].李朝青.单片机原理及接口技术(第3版).20##年10月

[2].蔡朝洋.单片机控制实习与专题制作

[3].楼然苗.单片机课程设计指导

[4].赵广林.电路设计与制版

6.  附录

6.1.    附录1:程序清单

      ORG    0000H

      LJMP   MAIN

      ORG    0003H

      LJMP   INTT0

      ORG    0013H

      LJMP   INTT1

      ORG    001BH

      LJMP   TT1

      ORG    0100H

TT1:  MOV    TH1,#0D8H                ;定时器1,定时10us

      MOV    TL1,#0F0H

      DJNZ   R6,EXIT

      MOV    R6,#100                  ;定时器定时100次

      MOV    R1,#0FFH

EXIT: RETI

INTT0:MOV    P1,#0BEH                  ;外部中断0,

      JB     P3.4,$

      RETI

INTT1:MOV    P1,#0BBH                  ;外部中断1,

      JB     P3.4,$

      RETI

      ORG    1000H

MAIN: MOV    R6,#100                  ;主程序;

      MOV    R1,#00H

      MOV    TMOD,#10H                ;初始化

      MOV    TH1,#0D8H

      MOV    TL1,#0F0H

      MOV    IE,#8DH

      MOV    20H,#25

      MOV    21H,#5

      MOV    22H,#15

      MOV    23H,#30

      MOV    24H,#20

      SETB   TR1

ST1:  MOV    P1,#0EBH                 ;第一个状态,主干道亮绿灯、支干道亮红灯;

      CJNE   R1,#0FFH,TZ1

      MOV    R1,#00H

      DEC    20H

      DEC    23H

TZ1:  MOV    R2,20H

      MOV    R3,23H

      LCALL  DISP                    ;调用显示子程序。

      MOV    A,20H

      CJNE   A,#00H,ST1

      MOV    20H,#25

ST2:  MOV    P1,#0EDH                ;第二个状态,主干道亮黄灯、支干道亮红灯;

      CJNE   R1,#0FFH,TZ2

      MOV    R1,#00H

      DEC    21H

      DEC    23H

TZ2:  MOV    R2,21H

      MOV    R3,23H

      LCALL  DISP                    ;调用显示子程序。

      MOV    A,21H

      CJNE   A,#00H,ST2

      MOV    21H,#05

      MOV    23H,#30

ST3:  MOV    P1,#0BEH                ;第三个状态,主干道亮红灯、支干道亮绿灯;

      CJNE   R1,#0FFH,TZ3

      MOV    R1,#00H

      DEC    24H

      DEC    22H

TZ3:  MOV    R2,24H

      MOV    R3,22H

      LCALL  DISP                    ;调用显示子程序。

      MOV    A,22H

      CJNE   A,#00H,ST3

      MOV    22H,#15

ST4:  MOV    P1,#0DEH                ;第四个状态,主干道亮红灯、支干道亮黄灯;

      CJNE   R1,#0FFH,TZ4

      MOV    R1,#00H

      DEC    24H

      DEC    21H

TZ4:  MOV    R2,24H

      MOV    R3,21H

      LCALL  DISP                    ;调用显示子程序。

      MOV    A,21H

      CJNE   A,#00H,ST4

      MOV    21H,#05

      MOV    24H,#20

      LJMP   ST1                     ;跳转到第一个状态。

DISP: MOV    A,R2                    ;显示子程序。

      MOV    B,#10

      DIV    AB

      MOV    60H,A

      MOV    61H,B

      MOV    A,R3

      MOV    B,#10

      DIV    AB

      MOV    62H,A

      MOV    63H,B

      MOV    40H,#04H

      MOV    R5,#0FEH

      MOV    R0,#60H

LLP:  MOV    A,@R0

      MOV    DPTR,#TABLE

      MOVC   A,@A+DPTR

      MOV    P0,A

      MOV    A,R5

      MOV    P2,A

      LCALL  DELAY1

      MOV    P2, #0FFH; 注意,这里是程序修改的地方,令显示器熄灭,以免产生残影

      RL     A

      MOV    R5,A

      INC    R0

      DJNZ   40H,LLP

      RET

DELAY1:                              ;延时子程序

      MOV    R4,#12

DL2:  MOV    R7,#12

      DJNZ   R7,$

      DJNZ   R4,DL2

      RET

TABLE:DB     3FH,24H,5dH,75H,66H

      DB     73H,7bH,25H,7fH,77H

      END

6.2.    附录2:电路设计总图


 

相关推荐