最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于51单片机的交通灯设计

来源:动视网 责编:小OO 时间:2025-09-23 19:18:10
文档

基于51单片机的交通灯设计

皖西学院课程设计报告系别:机电学院专业:学生姓名:学号:课程设计题目:基于51单片机的交通灯控制设计起止日期:06月13日—06月25日课程设计地点:指导教师:1概述31.1设计的意义31.2设计的思想31.3设计满足的基本功能42系统方案及硬件设计42.1系统方案的确定42.2显示部分电路设计42.3时钟部分电路设计52.4复位部分电路设计63软件设计73.1应用系统软件设计要求73.2主程序模块的设计73.3功能实现模块的设计83.4延时程序模块的设计84Proteus软件仿真84.1具体
推荐度:
导读皖西学院课程设计报告系别:机电学院专业:学生姓名:学号:课程设计题目:基于51单片机的交通灯控制设计起止日期:06月13日—06月25日课程设计地点:指导教师:1概述31.1设计的意义31.2设计的思想31.3设计满足的基本功能42系统方案及硬件设计42.1系统方案的确定42.2显示部分电路设计42.3时钟部分电路设计52.4复位部分电路设计63软件设计73.1应用系统软件设计要求73.2主程序模块的设计73.3功能实现模块的设计83.4延时程序模块的设计84Proteus软件仿真84.1具体
皖  西  学  院

课程设计报告

系        别:                   机电学院                    

专        业:                                         

学 生 姓 名 :           学号:                          

课程设计题目:     基于51单片机的交通灯控制设计                  

起 止 日 期 :            06月13日—06月25日                       

课程设计地点:                                                            

指 导 教 师 :                                                    

1 概述    3

1.1  设计的意义    3

1.2  设计的思想    3

1.3  设计满足的基本功能    4

2 系统方案及硬件设计    4

2.1  系统方案的确定    4

2.2  显示部分电路设计    4

2.3  时钟部分电路设计    5

2.4  复位部分电路设计    6

3 软件设计    7

3.1  应用系统软件设计要求    7

3.2  主程序模块的设计    7

3.3  功能实现模块的设计    8

3.4  延时程序模块的设计    8

4 Proteus软件仿真    8

4.1  具体仿真结果显示    8

5 课程设计体会    9

参考文献    9

附1: 源程序代码    10

附2: 系统原理图    15

摘要:本设计是关于单片机控制的交通灯模拟系统的设计。主要内容有交通灯模拟系统设计方案,主要功能,各功能模块的介绍,电路设计,硬件部分设计,软件部分设计,模拟系统的仿真调试,设计方法以及课程设计的心得体会等等。

该设计中用光二极管来模拟信号灯。要求使ATS51定时/计数器0作为定时器,要求对通行时间进行倒计时,从P0 口输出,在LED上显示并进行递减,以此来实现十字路口交通灯的指示功能。为了节省元件,使仿真图看起来一目了然,复位部分采用加电直接复位。根据交通灯系统所需要实现的功能要求,先画出程序部分的流程图和主程序流程图,然后根据流程图写出其子程序。从而通过模拟系统的仿真来实现该设计所要求的功能。

本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。最后,系统要求实现如下的交通灯的功能:

1)东西方向(主干道)车道和南北方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为80秒、支干道每次通行间为60秒,时间可设置修改。

2)在绿灯转为红灯时,要求黄灯先亮3秒钟,才能变换运行车道;

关键字 :   单片机   交通灯系统   LED显示  

1概述

1.1设计意义

交通的发达,标志着城市的发达,相对交通的管理则显得越来越重要。交通灯是城市交通中的重要指挥系统,它与人们日常生活密切相关.随着人们生活水平的提高,对交通管制也提出了更高的要求,因此提供一个可靠、安全、便捷的多功能交通灯控制系统有着现实的必要性。

对于复杂的城市交通系统,为了确保安全,保证正常的交通秩序,十字路口的信号控制必需按照一定的规律变化,以便于车辆行人能顺利地通过十字路口。

单片机自问世以来,性能不断提高和完善,其资源又能满足很多场合的应用,加之单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、性能可靠、价格低廉,其易于产品化、抗干扰能力强、可在各种恶劣环境下可靠的工作等特点。特别是它强大的面向控制能力,使它在工业控制领域,智能仪表、外设控制、家用电器、机器人、军事装置等方面得到了广泛的应用。

考虑到单片机具有物美价廉、功能强、使用方便灵活、可靠性高等特点,拟采用MCS - 51系列的单片机来实现十字路口交通信号灯的控制。 正常情况下,十字路口的红绿灯应交替变换,考虑紧急情况下,如有救护车或警车到来时,应优先让其通过。

另外,单片机课程设计是电气自动化本科学生的必修课程。通过交通灯模拟系统的设计可以进一步认识单片机在控制系统中的重要性。在完成理论学习和必要的实验后,学生掌握了单片机的基本原理和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。交通灯模拟系统的课程设计既让学生巩固了课本学到的理论,还让学生学习了单片机硬件电路设计和用户程序设计的整个过程,同时学习了查阅资料、参考资料的方法。单片机的课程设计主要是通过学生设计方案并自己动手用计算机电路设计软件,编写和调试用户程序,来加深对单片机的认识,充分发挥学生的个体创新能力。

1.2  设计的思想

该设计在熟练掌握单片机及其仿真系统的使用方法基础上,综合应用单片机原理、微机原理、微机接口技术等课程方面的知识,设计一个采用ATS51单片机控制的交通灯控制电路。

根据设计功能及要求,我们可得系统的原理框图如图所示。

上电复

位电路

根据系统的原理框图,分别分析各部分电路的元器件的功能以及选择合适的元件。具体设计思路如下:收集并整理资料,硬件设计,软件设计,Proteus仿真,设计体会与总结。

1.3  设计满足的基本功能

1)东西方向(主干道)车道和南北方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为80秒、支干道每次通行间为60秒,时间可设置修改。

2)在绿灯转为红灯时,要求黄灯先亮3秒钟,才能变换运行车道;

2 系统方案及硬件设计

2.1  系统方案的确定

交通灯在安全行车过程中起着十分重要的作用,现在交通灯一般设在十字路口,在醒目位置用红、绿、黄三种颜色的指示灯, 加上一个倒计时的显示计时器来控制行车, 对于一般情况下的安全行车、车辆分流发挥着作用, 但根据实际行车过程中出现的情况, 如何全面有效地利用交通灯指示交通情况,我们尝试用单片机来控制交通灯,在软、硬件方面采取一些改进措施,,使交通灯在控制中灵活而有效。

硬件系统是指构成单片机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。该交通灯拟系统的硬件部分主要由键盘、显示和运算部分组成。按照题目的设计要求,本课题需要使用LED数码管显示和扩展 键盘。在该交通灯系统的设计中采用ATS51单片机。

2.2  显示部分电路设计

LED显示器有两中工作方式:静态显示方式和动态显示方式。

静态显示的特点是每个数码管必须接一个8位锁存器用来锁存待显示的字型码。送入一次字型码显示自行一直保持,直到送入新字型码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。各数码管在显示过程中持续得到显示信号,与各数码管接口的I/O口是专用的。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。各数码管在显示过程中轮流得到显示信号,与各数码管接口的I/O口是共用的。

该设计采用如下所示的数码管,分别显示南北和东西灯的剩余时间。片选部分和数码段显示部分,分别接单片机管脚的P2口和P0口。其中,A到G为码段控制端口,1,2为片选端口。

2.3  时钟部分电路设计

   时钟电路用于产生MCS-51单片机工作时所必须的时钟控制信号。其内部电路在时钟信号控制下,严格地按时序执行指令进行工作。在执行指令时,CPU首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定操作。

本设计采用12MHz晶振和两个33Pf瓷片电容,他们构成一个稳定的自激振荡器。该电容的大小影响振荡器频率的高低、振荡器的稳定性和起振的快速性。为单片机提供标准时钟。其中两个瓷片电容起微调作用。 如图所示:

时钟电路

2.4  复位部分电路设计

复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。 

复位电路通常采用上电自动复位和按钮复位两种方式。

该设计采用加电直接复位,复位电容采用10uF,电阻10000欧,为了节省元件,没有采用上电加按键模式。加电瞬间,RES管脚为高电平。通过电阻回路放电,使电压逐渐降为零,从而实现了复位功能。

其连接图如下图所示:

  

                              

复位电路

3 软件设计

3.1  应用系统软件设计要求

在进行应用系统的总体设计时,软件设计与硬件设计应统一考虑,相结合进行。当系统的电路设计定型以后,软件的任务也就明确了。

一般来说,软件的功能可分为两大类。一类是执行软件,它能完成各种实质性的功能,如测量计算、显示、打印、输出控制等;另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织协调角色。

我们设计时,应从以下几个方面考虑:

1)根据软件功能的要求,将系统软件分为若干个相对的部分。设计出合理的软件总体结构,使其清晰、简捷、流程合理。

2)各功能程序实行模块化、子程序化。

3)在编写应用软件之前,应绘制出程序流程图。

 4)要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断源等。

 本设计采用了模块化设计,主要由主程序模块、功能实现模块两大部分模块组成。

3.2  主程序模块的设计

主程序流程图如下图A所示:

该交通信号灯控制系统的四中工作状态(东西方向的交通灯为例):

(1)东西方向A车道绿灯亮,南北方向B车道红灯亮。表示南北方向B车道上的车辆禁止通行,东西方向A车道允许通行。绿灯亮足规定的时间隔时,控制器发出状态信号,转到下一工作状态。

(2)东西方向A车道黄灯亮,南北方向B车道红灯亮。表示东西方向A车道上未过停车线的车辆停止通行,已过停车线的车辆继续通行,南北方向B车道禁止通行。黄灯亮足规定时间间隔时,控制器发出状态转换信号,转到下一工作状态。(3)东西方向A车道红灯亮,南北方向B车道绿灯亮。表示东西方向A车道上的车辆禁止通行,南北方向B车道允许通行,绿灯亮足规定的时间间隔时,控制器发出状态转换信号,转到下一工作状态。

(4)东西方向A车道红灯亮,南北方向B车道黄灯亮。表示东西方向A车道禁止通行,南北方向B车道上未过限停车线的车辆停止通行,已过停车线的车辆继续通行。黄灯亮足规定的时间间隔时,控制器发出状态转换信号,系统又转换到第(1)种工作状态。

控制灯程序流程图如下:

3.3  延时程序模块的设计

延迟程序块是要生成一定的是时间延时,这在数码管显示模块中会用到延迟程序,以满足足动态扫描时数码管的闪亮能产生视觉效果。

4 Proteus软件仿真

4.1  Proteus软件系统仿真

如硬件系统图所示接线,图中,在十字路口的红,黄,绿交通灯中A道的两组同色灯连在起,B上的也互联,受MCS-51的P1.0-P 1.5控制。打开keil软件调试环境,把已经编好的程序输入,保存为“.asm”格式的,然后编译,系统自动生成“.hex”文件。设置好仿真器后,编译程序无误后调试执行程序,结果显示符合要求。

具体仿真结果见Protues里仿真图形。

5 课程设计体会

这次课程设计经过一个假期的反复琢磨与修改,终于完成了。从查资料,整理资料到读程序,写程序,改程序,仿真直至通过老师的验收,一切都充满了刻苦与艰辛,其间充满了挫折可是同时又伴随着欢乐。

令我感触最深的就是同学们倾心的帮助,由于我的《单片机原理与应用技术》学的并不是很好,所以对某些知识点并不是很清楚,可是同学们总是不厌其烦的给我一遍又一遍的讲解,直到我弄清楚为止!他们的知识阅历另我打开眼界,他们的无私精神更另我感动不已!

另外,在重复修改与设计的过程中,我又重新把《单片机原理与应用技术》这本书仔细的看了一下,弄懂了一些以前一知半解的东西,进一次加强和巩固了我的理论知识。

在此次课程设计过程中,我把单片机的理论知识用于实践中,使理论与实践相结合,使我的理论知识的到了巩固,在查资料翻阅资料的过程中也丰富了我的知识跟阅历。

参考文献

 [1] 张毅刚.新编MCS-51单片机应用设计(第3版).哈尔滨工业大学出版社,2006

 [2] 马家辰.MCS-51单片机原理及接口技术(修订版)哈尔滨工业大学出版社民2001

 [3] 何立民.MCS-51系列——单片机应用系统设计. 北京:北京航空航天大学出版社1990

 [4]侯玉宝,基于protues的51系列单片机设计与仿真.  北京:电子工业出版社 2009

附1  源程序代码

         ;.........数字显示代码...........................................

       ORG 0100H

  TAB: DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH

;主程序           

       ORG 0300H

 MAIN:   MOV 26H,#80      ; 东西通行时间初始值,存到26H单元

         MOV 25H,#60       ; 南北通行时间初始值,存到25H单元

         MOV SP,#40H      ; 堆栈选址

         CLR P3.0         ; 

         MOV TMOD,#66H    ; T0、T1都计数方式,工作模式2 ,启动方式TRi确定

         MOV TL0,#255     ; 计数器0初值 低8位

         MOV TH0,#0       ; 计数器0初值高8位

         MOV TL1,#255     ; 计数器1初值 低8位

         MOV TH1,#0       ; 计数器1初值高8位

         SETB IT0         ; 外部中断一边沿触发

         SETB IT1         ; 外部中断二边沿触发

         MOV IE,#8FH      ; 开中断

         SETB TR0         ; T0开始计数

         SETB TR1         ; T1 开始计数

;......东西绿灯南北红灯 ...............................................

   DXLD: CLR P3.0         ;

         MOV R3,26H       ; 东西通行80秒 (26H)=80, (DXLD即东西绿灯)

  DXLD1: MOV P2,#33H      ; 点亮东西绿灯南北红灯

         MOV 24H,R3       ; 为东西方向显示时间做准备

         MOV A,R3         ;

         ADD A,#3         ; 黄灯的时间差

         MOV 23H,A        ; 为南北方向显示时间做准备

         LCALL DISP3      ; 时间显示 ,其中有0.5秒延时

         LCALL DISP3      ; 凑够1秒时间

         DJNZ R3,DXLD1    ; 判断80秒是否已完

;.......南北红灯东西黄灯闪.........................................

ShanHD1: MOV R2,#3        ; 转入黄灯闪亮3秒

    HD1: MOV 22H,R2       ; 为显示做准备

         MOV P2,#2BH      ; 点亮南北红灯东西黄灯

         LCALL DISP2      ; 显示时间,并延时0.5秒

         MOV P2,#3BH      ; 点亮南北红灯关闭东西黄灯

         LCALL DISP2      ; 显时,且再延时0.5秒以便凑够1秒

         DJNZ R2,HD1      ; 判断5秒是否到,若未到继续闪灭东西黄灯

         AJMP  NBLD; .......南北绿灯东西红灯................................

   NBLD: CLR P3.0         ;

         MOV R1,25H       ; 南北通行时间60秒(25h)=60,(NBLD即东西绿灯)

  NBLD1: MOV P2,#1EH      ; 点亮南北绿灯东西红灯

         MOV 20H,R1       ; 为南北方向显示时间做准备

         MOV A,R1         ;

         ADD A,#3         ;

         MOV 21H,A        ; 为东西方向显示时间做准备

         LCALL DISP1      ; 显示通行所剩时间,其中有0.5秒延时

         LCALL DISP1      ; 再次显示以便数码管不闪,且再延时0.4秒以便凑够一秒

         DJNZ R1,NBLD1    ; 判断30秒是否已完,若未完则从新显示、延时

;.......南北黄灯闪东西红灯.............................................

ShanHD: MOV R2,#3        ; 黄灯闪亮3秒

    HD:  MOV P2,#1DH      ; 点亮黄灯

         MOV 22H,R2       ; 为显示时间做准备

         LCALL DISP2      ; 黄灯闪亮剩时显示 ,其中延时0.5秒

         MOV P2,#1FH      ; 熄灭黄灯

         LCALL DISP2      ; 显时,且再延时0.5秒以便凑够1秒

         DJNZ R2,HD       ; 判断5秒是否已完,若未完则从新闪灭、延时和显示

 ; 主程序到此完 */ 

;......延时程序.......... ............................................

  DELAY:   ACALL DELAY1    ;  10ms延时

           ACALL DELAY1

           RET

 DELAY1:   MOV R6,#50      ;  5ms延时 ,(5ms=50*50*2us)

      DE6: MOV R0,#50

      DE7: DJNZ R0,DE7

           DJNZ R6,DE6

           RET

;.....南北通行的时间显示子程序..(其中有0.5秒延时)......................

  DISP1: MOV P0,#0        ; 熄灭数码管

         MOV R7,#25       ; 以下调用四次5毫秒延时程序,故25*4*5毫秒=0.5秒

    RP1: MOV A,20H        ; 南北方向要显示的时间移到寄存器A

         MOV DPTR,#TAB    ; 要显示的数字代码表首地址

         MOV B,#10

         DIV AB           ; 要显示的时间与10相除,求出十位和个位

         MOVC A,@A+DPTR   ; 找到十位的显示代码

         MOV P1,#00001110B; 选择南北数码管十位片

         MOV P0,A         ; 送出十位显示代码

         LCALL DELAY1     ; 延时5ms以点亮数码管

         MOV A,B          ; 把个位数移到寄存器A

         MOVC A,@A+DPTR   ; 找到个位数显示代码

         MOV P1,#00001101B ; 选择南北数码管个位片

         MOV P0,A         ; 送出个位数显示代码

         LCALL DELAY1     ; 延时5ms以点亮数码管

         MOV A,21H        ; 东西方向要显示的时间移到寄存器A

         MOV DPTR,#TAB    ; 要显示的数字代码表首地址

         MOV B,#10

         DIV AB           ; 要显示的时间与10相除,求出十位和个位

         MOVC A,@A+DPTR   ; 找到十位的显示代码

         MOV P1,#00001011B; 选择东西数码管的十位片

         MOV P0,A         ; 送出十位显示代码

         LCALL DELAY1     ; 延时5ms以点亮数码管

         MOV A,B          ; 把个位数移到寄存器A

         MOVC A,@A+DPTR   ; 找到个位的显示代码

         MOV P1,#00000111B ; 选择东西数码管的个位片

         MOV P0,A         ; 送出个位显示码

         LCALL DELAY1

         DJNZ R7,RP1      ; 是否已循环25次?(25次才够0.5秒)

         RET

  ;................黄灯的时间显示子程序.................................

  DISP2: MOV P0,#0        ; 熄灭数码管

         MOV R7,#25       ; 以下调用两次0.01秒延时程序,故25*0.02=0.5秒

    RP2: MOV A,22H        ; 要显示的时间移到寄存器A

         MOV DPTR,#TAB    ; 要显示的数字代码表首地址

         MOV B,#10

         DIV AB           ; 要显示的时间与10相除,求出十位和个位

         MOVC A,@A+DPTR   ; 找到十位的显示代码

         MOV P1,#00001010B; 选择南北数码管十位片和东西数码管十位片

         MOV P0,A         ; 送出十位显示代码

         LCALL DELAY      ; 延时10ms以点亮数码管

         MOV P1,#00000101B ; 选择南北数码管个位片和东西数码管个位片

         MOV A,B          ; 把个位数移到寄存器A

         MOVC A,@A+DPTR   ; 找到个位数显示代码

         MOV P0,A         ; 送出个位数显示代码

         LCALL DELAY      ; 延时10ms一点亮数码管

         DJNZ R7,RP2

         RET

   ;..............东西通行的时间显示子程序.............................

  DISP3: MOV P0,#0        ; 熄灭数码管

         MOV R7,#25       ; 以下调用两次0.01秒延时程序,故10*0.05=0.5秒

    RP3: MOV A,23H        ; 要南北方向显示的时间移到寄存器A

         MOV DPTR,#TAB    ; 要显示的数字代码表首地址

         MOV B,#10

         DIV AB           ; 要显示的时间与10相除,求出十位和个位

         MOVC A,@A+DPTR   ; 找到十位的显示代码

         MOV P1,#00001110B; 选择南北数码管十位片

         MOV P0,A         ; 送出十位显示代码

         LCALL DELAY1     ; 延时5ms以点亮数码管

         MOV A,B          ; 把个位数移到寄存器A

         MOVC A,@A+DPTR   ; 找到个位数显示代码

         MOV P1,#00001101B; 选择南北道数码管个位片

         MOV P0,A         ; 送出个位数显示代码

         LCALL DELAY1     ; 延时5ms一点亮数码管

         MOV A,24H        ; 要东西方向显示的时间移到寄存器A

         MOV B,#10

         DIV AB           ; 要显示的时间与10相除,求出十位和个位

         MOVC A,@A+DPTR   ; 找到十位的显示代码

         MOV P1,#00001011B ;

         MOV P0,A         ; 送出十位显示代码

         LCALL DELAY1     ; 延时5ms以点亮数码管

         MOV A,B

         MOVC A,@A+DPTR

         MOV P1,#00000111B ; 选择东西数码管个位片

         MOV P0,A          ; 送出个位显示代码

         LCALL DELAY1

         DJNZ R7,RP3

         RET

;..........设定时间子程序................................................

;根据哪个方向亮绿灯设定那个方向的通行时间,没有绿灯亮不能设定时间,中断

;直接退出。

; ........................................................................

/*  INT0:  MOV IE,#0        ; 关闭中断允许*/

         MOV A,P2         ; 读取交通灯状态

         JNB Acc.3,DXSJ   ;  P2.3,DXSJ    ; DXSJ(东西绿灯亮(P2.3=0)则设定东西通行时间 )

         JNB Acc.0,NBSJ   ;  P2.0,NBSJ    ; NBSJ (南北绿灯亮(P2.0=0)则设定南北通行时间 )

         POP 28H          ;

         POP 28H          ;

         MOV DPTR,#NBLD   ; 如果不能调整时间(没有绿灯亮)则退出后从状态1开始,相当于复位。

         PUSH DPL         ;

         PUSH DPH         ;

   EXIT: MOV IE,#8FH      ; 恢复开中断

         RETI             ;

;      - - - - -南北通行时间设定 - - - - -

  NBSJ:  POP 28H          ; 

         POP 28H          ; 

         MOV DPTR,#NBLD   ;   此处设时为南北通行时间

         PUSH DPL         ;   把断点换成南北绿灯(NBLD)入口

         PUSH DPH         ; 

  XSSM1: MOV A,25H        ; 读取南北通行时间

         MOV 20H,A        ; 为南北方向显示时间做准备

         ADD A,#5         ;

         MOV 21H,A        ; 为东西方向显示时间做准备

         LCALL DISP1      ; 显示时间

         LCALL DELAY1

         MOV A,P3

         JNB P3.2,EXIT    ; 判断有否按下设时确定按钮,若有则退出,若无接着判断加时和减时信号

         JNB P3.3,JX      ; 判断有否加时信号(p3.3所接按钮是否按下)若有跳转处理,无则扫描减时信号

         JNB P3.5,JX1     ; 判断有否减时信号

         AJMP XSSM1       ; 从循环显示时间和扫描按键情况

    JX:  MOV A,25H        ; 读出之前设定的时间值(存储在25H单元)

         ADD A,#1         ; 在之前值基础上加1处理

         MOV 25H,A        ; 回存到25H单元

         MOV 20H,A        ; 为南北显示时间做准备

         ADD A,#3         ; 黄灯时间

         MOV 21H,A        ; 为东西方向显示时间做准备

         LCALL DISP1      ; 显示处理后的时间值

         AJMP XSSM1       ; 从循环显示时间和扫描按键情况

   JX1:  MOV A,25H        ; 读出之前设定的时间值(存储在25H单元)

         SUBB A,#1        ; 在之前值基础上减1处理

         MOV 25H,A        ; 回存到25H单元

         MOV 20H,A        ; 为南北方向显示时间做准备

ADD A,#3         ;

         MOV 21H,A        ; 为东西方向显示时间做准备

         LCALL DISP1      ; 显示处理后的时间值

         AJMP XSSM1       ; 从循环显示时间和扫描按键情况

;       - - - - 东西通行时间设定 - - - - - -

   DXSJ: POP 28H          ; 

         POP 28H          ; 

         MOV DPTR,#DXLD   ;   此处设时为东西通行时间,故若此步处理后返回则应让东西通行故

         PUSH DPL         ;   把断点换成东西绿灯(DXLD)入口

         PUSH DPH         ; 

  XSSM2: MOV A,26H        ; 读取东西通行时间值

         MOV 24H,A        ; 为东西方向显示时间做准备

         ADD A,#3         ;

         MOV 23H,A        ; 为南北方向显示时间做准备

         LCALL DISP3      ; 显示时间

         MOV A,P3

         JNB P3.2,EXIT1    ; 判断有否按下设时确定按钮,若有则退出,若无接着判断加时和减时信号

         JNB P3.3,JX2     ; 判断有否加时信号(p3.3所接按钮是否按下)若有跳转处理,无则扫描减时信号

         JNB P3.5,JX3     ; 判断有否减时信号

         AJMP XSSM2       ; 从循环显示时间和扫描按键情况

  EXIT1: LJMP EXIT         ;  因为如果上游指令(JNB P3.2,EXIT1)为直接JNB p3.2,EXIT则跳出范围

   JX2:  MOV A,26H        ; 读出之前设定的时间值(存储在26H单元)

         ADD A,#1         ; 在之前值基础上加1处理

         MOV 26H,A        ; 回存到26H单元

MOV 24H,A        ; 为东西方向显时间示做准备

         ADD A,#3         ;

         MOV 23H,A        ; 为南北方向显示时间做准备

         LCALL DISP3      ; 显示处理后的时间值

         AJMP XSSM2       ; 从循环显示时间和扫描按键情况

   JX3:  MOV A,26H        ; 读出之前设定的时间值(存储在26H单元)

         SUBB A,#1        ; 在之前值基础上减1处理

         MOV 26H,A        ; 回存到26H单元

         MOV 24H,A        ; 为东西方向显示时间做准备

         ADD A,#3         ;

         MOV 23H,A        ; 为南北方向显示时间做准备

         LCALL DISP3      ; 显示处理后的时间值

         AJMP XSSM2       ; 从循环显示时间和扫描按键情况

 END

附2  系统原理图

文档

基于51单片机的交通灯设计

皖西学院课程设计报告系别:机电学院专业:学生姓名:学号:课程设计题目:基于51单片机的交通灯控制设计起止日期:06月13日—06月25日课程设计地点:指导教师:1概述31.1设计的意义31.2设计的思想31.3设计满足的基本功能42系统方案及硬件设计42.1系统方案的确定42.2显示部分电路设计42.3时钟部分电路设计52.4复位部分电路设计63软件设计73.1应用系统软件设计要求73.2主程序模块的设计73.3功能实现模块的设计83.4延时程序模块的设计84Proteus软件仿真84.1具体
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top