资源描述
智能电子产品设计制作
课 程 设 计(论文)
题 目:《 十字路口交通灯控制》
学 院:电气和电子信息工程学院
专业名称:电子信息工程技术
学 号:30240123
学生姓名: 王朋飞
同组组员:郝俊节、陈婷、屈波、雒琦
指导老师: 艾青 、邓彬伟
老师评语:
等级
课设时间: 6月13日—6月2
目录
1 概述 3
1.1 设计意义 3
1.2 设计思想 4
1.3 设计满足基础功效 4
·1.4芯片选择 5
2 系统方案及硬件设计 5
2.1 系统方案确实定 5
2.2 显示部分电路设计 6
2.3 时钟部分电路设计 6
2.4 复位部分电路设计 7
3 软件设计 8
3.1 主程序模块设计 8
3.2 功效实现模块设计 10
3.3 延时程序模块设计 11
·3.4 问题探究 11
4 Proteus软件仿真 11
4.1 Proteus软件系统仿真 11
4.2 具体仿真结果显示 11
5 课程设计体会 15
6 参考文件 15
7附录 15
附1 源程序代码 15
附2 系统原理图 24
1 概述
1.1 设计意义
交通发达,标志着城市发达,相对交通管理则显得越来越关键。交通灯是城市交通中关键指挥系统,它和大家日常生活亲密相关.伴随大家生活水平提升,对交通管制也提出了更高要求,所以提供一个可靠、安全、便捷多功效交通灯控制系统有着现实必需性。
对于复杂城市交通系统,为了确保安全,确保正常交通秩序,十字路口信号控制必需根据一定规律改变,方便于车辆行人能顺利地经过十字路口。
单片机自问世以来,性能不停提升和完善,其资源又能满足很多场所应用,加之单片机含有集成度高、功效强、速度快、体积小、功耗低、使用方便、性能可靠、价格低廉,其易于产品化、抗干扰能力强、可在多种恶劣环境下可靠工作等特点。尤其是它强大面向控制能力,使它在工业控制领域,智能仪表、外设控制、家用电器、机器人、军事装置等方面得到了广泛应用。
考虑到单片机含有物美价廉、功效强、使用方便灵活、可靠性高等特点,拟采取MCS - 51系列单片机来实现十字路口交通信号灯控制。 正常情况下,十字路口红绿灯应交替变换,考虑紧急情况下,如有救护车或警车到来时,应优先让其经过。
另外,单片机课程设计是我们必修课程。经过交通灯模拟系统设计能够深入认识单片机在控制系统中关键性。在完成理论学习和必需试验后,学生掌握了单片机基础原理和多种基础功效应用,但对单片机硬件实际应用设计和单片机完整用户程序设计还不清楚,实际动手能力不够,所以对该课程进行一次课程设计是有必需。
交通灯模拟系统课程设计既让学生巩固了书本学到理论,还让学生学习了单片机硬件电路设计和用户程序设计整个过程,同时学习了查阅资料、参考资料方法。单片机课程设计关键是经过学生独立设计方案并自己编写和调试用户程序,来加深对单片机认识,充足发挥学生个体创新能力。
1.2 设计思想
该设计在熟练掌握单片机及其仿真系统使用方法基础上,综合应用单片机原理、微机原理、微机接口技术等课程方面知识,设计一个采取AT89C51单片机控制交通灯控制电路。
依据设计功效及要求,我们可得系统原理框图图所表示。
上电复
位电路
89C51
数据信号
LED
数码管
段码
调时
电路
振荡电路
片选
交通灯
依据系统原理框图,分别分析各部分电路元器件功效和选择适宜元件。具体设计思绪以下:搜集并整理资料,硬件设计,软件设计,Proteus仿真,设计体会和总结。
1.3 设计满足基础功效
1)南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上车辆交替运行,主干道每次通行时间全部设为30秒、支干道每次通行间为20秒,时间可设置修改。
2)在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;
3)黄灯亮时,要求每秒闪亮一次
4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一个灯亮时间全部用显示器进行显示(采取计时方法)。
5)一道有车而另一道无车(试验时用开关 K0 和 K1 控制),交通灯控制系统能立即让有车道放行。
6)有紧急车辆要求经过时,系统要能严禁一般车辆通行,A、B道均为红灯,紧急车由K2 开关模拟。
·1.4芯片选择
AT89C51是美国ATMEL企业生产低电压,高性能CMOS 8位单片机,有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中止口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,片内含8k bytes可反复擦写Flash只读程序存放器和256 bytes随机存取数据存放器(RAM),器件采取ATMEL企业高密度、非易失性存放技术生产,和标准MCS-51指令系统及8051产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存放单元,能够根据常规方法对其进行编程,也能够在线编程。其将通用微处理器和Flash存放器结合在一起,尤其是可反复擦写Flash存放器可有效地降低开发成本。
2 系统方案及硬件设计
2.1 系统方案确实定
交通灯在安全行车过程中起着十分关键作用,现在交通灯通常设在十字路口,在醒目位置用红、绿、黄三种颜色指示灯, 加上一个倒计时显示计时器来控制行车, 对于通常情况下安全行车、车辆分流发挥着作用, 但依据实际行车过程中出现情况, 怎样全方面有效地利用交通灯指示交通情况,我们尝试用单片机来控制交通灯,在软、硬件方面采取部分改善方法,,使交通灯在控制中灵活而有效。
硬件系统是指组成单片机系统实体和装置,通常由运算器、控制器、存放器、输入接口电路和输入设备、输出接口电路和输出设备等组成。单片机实质上是一个硬件芯片,在实际应用中,通常极难直接和被控对象进行电气连接,必需外加多种扩展接口电路、外部设备、被控对象等硬件和软件,才能组成一个单片机应用系统。该交通灯拟系统硬件部分关键由键盘、显示和运算部分组成。根据题目标设计要求,本课题需要使用LED数码管显示和扩展 键盘。在该交通灯系统设计中采取AT89C51单片机。
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 主程序模块设计
主程序步骤图以下图A所表示:
该交通信号灯控制系统四中工作状态(南北方向交通灯为例):
(1)南北方向A车道红灯亮,东西方向B车道绿灯亮。表示南北方向A车道上车辆严禁通行,东西方向B车道许可通行。绿灯亮足要求时间隔时,控制器发出状态信号,转到下一工作状态。
(2)南北方向A车道红灯亮,东西方向B车道黄灯亮。表示东西方向B车道上未过停车线车辆停止通行,已过停车线车辆继续通行,南北方向A车道严禁通行。黄灯亮足要求时间间隔时,控制器发出状态转换信号,转到下一工作状态。
(3)南北方向A车道绿灯亮,东西方向B车道红灯亮。表示南北方向A车道许可通行,东西方向B车道上车辆严禁通行,绿灯亮足要求时间间隔时,控制器发出状态转换信号,转到下一工作状态。
(4)南北方向A车道黄灯亮,东西方向B车道红灯亮。表示东西方向B车道严禁通行,南北方向A车道上位过限停车线车辆停止通行,已过停车线车辆继续通行。黄灯亮足要求时间间隔时,控制器发出状态转换信号,系统又转换到第(1)种工作状态。
控制灯程序步骤图以下:
置A道放行标志0—F0
A到放行时间送 R4
A道有车?
A道亮绿灯,B道亮红灯
B道有车?
Y
N
开始
许可中止
B道亮黄灯,A道亮红灯
延时5秒
A道亮黄灯,B道亮红灯
R4-1=0?
A道有车?
B到放行时间送 R5
B道亮绿灯,A道亮红灯
延时0.5秒
延时0.5秒
置B道放行标志0—F0
延时5秒
B道有车?
R5-1=0?
Y
N
Y
Y
Y
N
图A 交通灯控制步骤图
3.2 功效实现模块设计
功效实现模块关键由中止处理子程序,键盘处理子程序和显示子程序等组成。下面仅对T0中止服务程序部分进行简单介绍。
T0和K2连接,K2和地连接。按下K2,东西南北四个方向全红,也就是说,东西南北四个通道全部不能通车。 K1和AT89C5135管脚相连。在按下K3前提下,按下K1,此时显示是东西总时间,并可对其调整。调整以后,若长按K3键,则交通灯恢复正常。先按K3键,再按K0和K1可分别对它们进行加一和减一操作。
其中中止服务程序步骤图下图B所表示:
A道亮黄灯,B道亮红灯
B道亮绿灯,A道亮红灯
A道亮绿灯,B道亮红灯
开始
延时5秒
A道亮黄灯,B道亮红灯
B道亮黄灯,A道亮红灯
紧急车经过
A道放行
返回
Y
N
Y
N
N
原道A放行
图B 交通灯控制中中止控制步骤
3.3 延时程序模块设计
延迟程序块是要生成一定是时间延时,这在数码管显示模块中会用到延迟程序,以满足足动态扫描时数码管闪亮能产生视觉效果。
·3.4 问题探究
1.该设计是否需要连接8255芯片拓展I/O口?
答:因为AT89C51所提供I/O口足够,故不需多此一举连接8255芯片。
2:P2口作用?
答:经过P2控制灯亮。
4 Proteus软件仿真
4.1 Proteus软件系统仿真
如硬件系统图所表示接线,图中,在十字路口红,黄,绿交通灯中A道两组同色灯连在起,B上也互联,受MCS-51P1.0-P 1.5控制.紧急车请求经过时由人工控制,以中止方法输入单片机。
打开WAVE6000集成调试环境,把已经编好程序输入,保留为“asm.asm”。选择菜单[文件][新建项目]功效,加入模块文件和保留文件,然后保留项目,系统自动生成“asm.PRJ”文件。
设置好仿真器后,编译程序无误后调试实施程序,结果显示符合要求。
4.2 具体仿真结果显示
依据功效要求分别仿真多种情况下亮灯情况,具体以下:
以下图仿真图所表示,正常情况下南北方向亮绿灯,东西方向亮红灯。南北放行,东西禁行:
以下所表示南北方向亮黄灯5秒,东西方向亮红灯:
以下所表示东西方向亮黄灯5秒,南北方向亮红灯:
均亮红灯:
以下所表示,按下按键K3时,同时按下k0和K1加长降低南北方向东西方向通放时间:
5 课程设计体会
此次课程设计过程是艰辛,不过收获却是很大。
在设计过程中,会出现了部分问题,但全部是常见小问题,如:代码中双引号使用并不是在英语书写状态下,输入字母犯错等,在调试时出现异常,不过这些全部是常常性错误,经过调试修改全部一一处理,程序顺利完成,并实现了其功效。
综合课程设计让我把以前学习到知识得到巩固和深入提升认识,对已经有知识有了更深入了解和认识。在此,因为本身能力有限,在课程设计中碰到了很多问题,但经过查阅相关书籍、资料和和周围同学交流后全部得以一一处理。
因为使用是单片机作为关键控制元件,使得电路可靠性比较高,功效也比较强大,而且能够随时更新系统,进行不一样状态组合。不过在我们设计和调试过程中,也发觉了部分问题,譬如红灯和绿灯切换还不够快速,红绿灯规则效率还不是很高等等,这需要在实践中深入完善。
当然,经过这次课程设计,我也发觉了本身很多不足之处,在以后学习中,我会不停完善自我,不停进取,能使自己在单片机编程这方面有一个大发展。
在此次课程设计过程中,我把单片机理论知识用于实践中,使理论和实践相结合,使我理论知识到了巩固,在查资料翻阅资料过程中也丰富了我知识跟阅历。
6 参考文件
[1] 蔡美琴等-2版.MCS-51系列单片机系统及其应用.北京:高等教育出版社,.1-4
[2] 张毅刚,刘杰. MCS-51系列单片机原理及应用.哈尔滨:哈尔滨工业大学出版社,.256-270
[3] 蔡美琴,张为民等.MCS-51系列单片机系统及其应用.北京:高等教育出版社,1992.68-96
[4] 蒋廷彪等.单片机原理及应用(MCS-51).重庆:重庆大学出版社,.56-89
[5] 余发山,王福忠.单片机原理及应用技术.徐州:中国矿业大学出版社,.98-120
7附录
附1 源程序代码
ORG 0000H
AJMP MAIN
ORG 0003H
LJMP INT0 ; 跳到设定时间中止服务程序
ORG 000BH
LJMP INT1 ; 跳到跳到特种车辆自动服务程序
ORG 0013H
LJMP INT2 ; 跳到南北有车东西无车中止服务程序
ORG 001BH
LJMP INT3 ; 跳到东西有车南北无车中止服务程序
;.........数字显示代码...........................................
ORG 0100H
TAB: DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH
主程序
ORG 0300H
MAIN: MOV 25H,#30 ; 南北通行时间初始值,存到25H单元
MOV 26H,#20 ; 东西通行时间初始值,存到26H单元
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 开始计数
; .......南北绿灯东西红灯................................
NBLD: CLR P3.0 ;
MOV R1,25H ; 南北通行时间30秒(25h)=30,(NBLD即东西绿灯)
NBLD1: MOV P2,#1EH ; 点亮南北绿灯东西红灯
MOV 20H,R1 ; 为南北方向显示时间做准备
MOV A,R1 ;
ADD A,#5 ;
MOV 21H,A ; 为东西方向显示时间做准备
LCALL DISP1 ; 显示通行所剩时间,其中有0.5秒延时
LCALL DISP1 ; 再次显示方便数码管不闪,且再延时0.4秒方便凑够一秒
DJNZ R1,NBLD1 ; 判定30秒是否已完,若未完则从新显示、延时
;.......南北黄灯闪东西红灯.............................................
ShanHD: MOV R2,#5 ; 黄灯闪亮5秒
HD: MOV P2,#1DH ; 点亮黄灯
MOV 22H,R2 ; 为显示时间做准备
LCALL DISP2 ; 黄灯闪亮剩时显示 ,其中延时0.5秒
MOV P2,#1FH ; 熄灭黄灯
LCALL DISP2 ; 显时,且再延时0.5秒方便凑够1秒
DJNZ R2,HD ; 判定5秒是否已完,若未完则从新闪灭、延时和显示
;......南北红灯东西绿灯 ...............................................
DXLD: CLR P3.0 ;
MOV R3,26H ; 东西通行20秒 (26H)=20, (DXLD即东西绿灯)
DXLD1: MOV P2,#33H ; 点亮南北红灯东西绿灯
MOV 24H,R3 ; 为东西方向显示时间做准备
MOV A,R3 ;
ADD A,#5 ;
MOV 23H,A ; 为南北方向显示时间做准备
LCALL DISP3 ; 时间显示 ,其中有0.5秒延时
LCALL DISP3 ; 凑够1秒时间
DJNZ R3,DXLD1 ; 判定20秒是否已完
;.......南北红灯东西黄灯闪.........................................
ShanHD1: MOV R2,#5 ; 转入黄灯闪亮5秒
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
;.......特种车辆经过..................................
Tezhong: MOV P2,#1BH ; 点亮东西南北红灯
SETB P3.0 ;
MOV R4,#15 ; 特殊车辆经过时间15秒
QHD: MOV 27H,R4 ; 为显示做准备
LCALL DISP4 ; 显示时间
DJNZ R4,QHD ; 判定15秒是否到,若不到继续显示时间
CLR p3.0 ;
AJMP NBLD
; 主程序到此完
;......延时程序.......... ............................................
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
;..............特殊车辆经过时间显示子程序....................
DISP4: MOV P0,#0 ; 熄灭数码管
MOV R7,#50 ; 以下调用两次0.01秒延时程序,故40*2*0.01=1秒
RP4: MOV A,27H ; 要显示时间移到寄存器A
MOV DPTR,#TAB ; 要显示数字代码表首地址
MOV B,#10
DIV AB ; 要显示时间和10相除,求出十位和个位
MOVC A,@A+DPTR ; 找到十位显示代码
MOV P1,#00001010B; 选择南北、东西数码管十位片
MOV P0,A ; 送出十位显示代码
LCALL DELAY ; 延时10ms以点亮数码管
MOV A,B ; 把个位数移到寄存器A
MOVC A,@A+DPTR ; 找到个位数显示代码
MOV P1,#00000101B; 选择南北、东西数码管个位片
MOV P0,A ; 送出个位数显示代码
LCALL DELAY ; 延时10ms一点亮数码管
DJNZ R7,RP4
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,#5 ;
MOV 21H,A ; 为东西方向显示时
展开阅读全文