交通灯控制系统
姓 名:
学 号:
专业班级:
指导老师:
所在学院:电气工程与自动化学院
摘要
本设计是在熟练掌握单片机及其仿真系统使用方法基础上,综合应用单片机原理、微机原理等课程方面的知识,设计一个采用ATC51单片机控制的交通灯控制电路。该设计结合实际情况给出了一种简单低成本城市交通灯控制系统的硬件及软件设计方案、各个路口交通灯的状态循环显示,并对程序流程图进行详细讲解分析。
硬件的设计采用ATC51单片机为核心器件。并辅助复位电路,驱动电路,数码管及晶体管显示部分。通过中断扩展实现交通灯系统特殊情况的转换。
软件设计部分分为一个主程序和两个中断子程序,一个用于有紧急车辆通过时,系统要能禁止普通车辆通行,实行中断可使A(东西道)、B(南北道)两道均亮红灯;另一个用于一道有车而另一道无车时,通过控制交通灯系统能立即让有车道放行,假如A道有车B道无车,长按K0可以控制交通灯系统能立即让东西道放行;假如南北道有车东西道无车,长按K1可以控制交通灯系统能立即南北道放行。
十字路口的交通灯在工作时应具有如下特点:红灯表示该条道路禁止通行;黄灯表示该条道路上未过停车线的车辆禁止通行,已过停车线的车辆继续通行;绿灯亮表示该条道路允许通行。
本设计利用单片机控制可以实现以下功能:
(1)A道和B道上均有车辆要求通过时,A,B道轮流放行。A道放行5分钟(调试时改为5秒钟),B道放行4分钟(调试时改为4秒钟)。
(2)一道有车而另一道无车(实验时用开关K0和K1控制),交通灯控制系统能立即让有车道放行。
(3)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A,B道均为红灯,紧急车由K2开关模拟。
(4)绿灯转换为红灯时黄灯亮1秒钟
1 概述
1.1 设计任务书
设计个单片机控制的交通灯控制系统,可以实现以下功能:
(1)A道和B道上均有车辆要求通过时,A,B道轮流放行。A道放行5分钟(调试时改为5秒钟),B道放行4分钟(调试时改为4秒钟)。
(2)一道有车而另一道无车(实验时用开关K0和K1控制),交通灯控制系统能立即让有车道放行。
(3)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A,B道均为红灯,紧急车由K2开关模拟。
(4)绿灯转换为红灯时黄灯亮1秒钟。
1.2 设计思路
硬件设计部分,为实现所要求的功能,首先参考多种参考资料,选用ATC51单片机为硬件设计的核心器件。它具有128*8位内部RAM,有32根可编程I/O线、两个16位定时器/计数器、5个中断源、可编程串行通道、低功耗的闲置和掉电模式、片内振荡器和时钟电路。其次采用74LS245驱动电路驱动LED晶体管显示部分,用数码管显示黄、红、绿灯。通过中断扩展实现交通灯系统特殊情况的转换。
软件设计部分,分为一个主程序和两个中断子程序,一个用于有紧急车辆通过时,系统要能禁止普通车辆通行,实行中断可使A、B两道均亮红灯;另一个用于一道有车而另一道无车时,通过控制交通灯系统能立即让有车道放行,假如A道有车B道无车,长按K0可以控制交通灯系统能立即A道放行,假如B道有车A道无车,长按K1可以控制交通灯系统能立即B道放行。
2 系统总体方案及硬件设计
2.1 系统总体方案
(1)硬件设计部分
为实现所要求的功能,首先参考多种参考资料,选用ATC51单片机为硬件设计的核心器件。它具有128*8位内部RAM,有32根可编程I/O线、两个16位定时器/计数器、5个中断源、可编程串行通道、低功耗的闲置和掉电模式、片内振荡器和时钟电路。其次采用74LS245驱动电路驱动LED晶体管显示部分, 由ATC51的P2.1口控制北边和东边剩余时间的十位数的显示,P2.0控制北边和东边剩余时间的个位数的显示。用P1端口作为输出端口,用P1.2到P1.7端口分别控制东和北两组灯的状态,低电平点亮,用数码管显示黄、红、绿灯。通过中断扩展实现交通灯系统特殊情况的转换。
(2)软件设计部分
软件设计部分,分为一个主程序和两个中断子程序,一个用于有紧急车辆通过时,系统要能禁止普通车辆通行,实行中断可使A、B两道均亮红灯;另一个用于一道有车而另一道无车时,通过控制交通灯系统能立即让有车道放行,假如A道有车B道无车,长按K0可以控制交通灯系统能立即A道放行,假如B道有车A道无车,长按K1可以控制交通灯系统能立即B道放行。
2.2 硬件设计
(1)ATC51简介
功能:
ATC51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。具有128*8位内部RAM,有32根可编程I/O线、两个16位定时器/计数器·5个中断源、可编程串行通道、低功耗的闲置和掉电模式、片内振荡器和时钟电路。
管脚说明:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为ATC51的一些特殊功能口,如下表所示:
口管脚 备选功能
P(串行输入口)
P(串行输出口)
P(外部中断0)
P(外部中断1)
P(记时器0外部输入)
P(记时器1外部输入)
P(外部数据存储器写选通)
P(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节
PSEN:外部程序存储器的选通信号。
EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。当/EA端保持高电平时,此间内部程序存储器。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,ATC51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
(2)复位部分:
采用上电+按钮电平复位,复位电容采用,电阻,连接如图:
(3)显示部分:
数码管显示部分
采用四位一体共阴数码管,分别显示西和北的剩余时间,A到G为码段控制端口,1到4为片选端口。数码段显示部分通过74LS245接单片机管脚的P0口,片选部分由P2.0到P2.1提供,具体的共阴数码管见图。其中P2.1控制北边和西边剩余时间的十位数的显示;P2.0控制北边和西边剩余时间的个位数的显示。
晶体管显示部分
由于对称性,设计时只设计了西北两个方向。由红黄绿按要求显示。用P1端口作为输出端口,用P1.2到P1.7端口分别控制西和北两组灯的状态,低电平点亮,具体端口功能如下:
P1.2控制北边红灯的亮灭;
P1.3控制北边黄灯的亮灭;
P1.4控制北边绿灯的亮灭;
P1.5控制东边红灯的亮灭;
P1.6控制东边黄灯的亮灭;
P1.7 控制东边绿灯的亮灭。
(4) 驱动部分:74LS245
3 软件设计
3.1 程序流程图
(1) T0中断服务程序
(2)外部中断零服务程序
(3)主程序
3.2 软件系统设计
(1)主程序
P0口作为字形码输出口P2口输出为选信号用P1口控制交通灯的亮灭
23H为标示位,当23H为0时南北红灯亮东西绿灯亮,并进入计时;当23H为1时东西南北黄灯亮,并进入计时;当32H为2时南北绿灯亮东西红灯亮,并进入计时;当23H为1时东西南北黄灯亮,并进入计时。27H为特殊情况标示位,当27H为0时南北红灯东西绿灯亮。当27H为2时南北绿灯东西红灯亮。还有通过标示位2FH.0来判断是否进入东西南北都红的紧急状态。
ORG 0100H
MAIN:MOV SP,#50H
MOV TCON,#05H ;定义中断方式
MOV 20H,#05H ;时间计数单元,A道放行时间
MOV 21H,#02H ;黄灯亮时间
MOV 22H,#05H ;B道放行时间
MOV 23H,#00H ;交通灯转换标示位
MOV 24H,#05H ;时间欲存区,A道放行时间
MOV 25H,#02H ;黄灯亮时间
MOV 26H,#05H ;B道放行时间
MOV 27H,#0FFH ;特殊情况下转换标示位
MOV 28H,#01H ;
MOV 30H,#05H ;显示缓存区
MOV 31H,#00H
MOV TMOD,#01H ;16位计数器
MOV TH0,#03CH
MOV TL0,#0B0H
MOV IE,#10000111B
SETB TR0 ;T0启动计数
MOV R2,#13H
MOV P2,#0FFH
ML1: ACALL DISP
MOV A,23H
CJNE A,#00H,X1
SETB P1.2
CLR P1.3
CLR P1.4
CLR P1.5
CLR P1.6
SETB P1.7
X1: CJNE A,#01H,X2
CLR P1.2
SETB P1.3
CLR P1.4
CLR P1.5
SETB P1.6
CLR P1.7
X2: CJNE A,#02H,X3
CLR P1.2
CLR P1.3
SETB P1.4
SETB P1.5
CLR P1.6
CLR P1.7
X3: CJNE A,#03H,X4
CLR P1.2
SETB P1.3
CLR P1.4
CLR P1.5
SETB P1.6
CLR P1.7
X4: JNB 2FH.0,ML2
SETB P1.2
CLR P1.3
CLR P1.4
SETB P1.5
CLR P1.6
CLR P1.7
AJMP X4
ML2: JB TR0,ML1
ACALL DISP
MOV A,27H
CJNE A,#00H,X11
SETB P1.2
CLR P1.3
CLR P1.4
CLR P1.5
CLR P1.6
SETB P1.7
X11: CJNE A,#01H,X21
CLR P1.2
SETB P1.3
CLR P1.4
CLR P1.5
SETB P1.6
CLR P1.7
X21: CJNE A,#02H,X31
CLR P1.2
CLR P1.3
SETB P1.4
SETB P1.5
CLR P1.6
CLR P1.7
X31: JB P1.0,M1
M1: MOV C,P1.0 ;按键消振
JC M2
M2: LCALL DELAY
MOV C,P1.0
JC ML10
STOP1: MOV C,P1.0
JNC STOP1
LCALL DELAY
MOV C,P1.0
JNC STOP1
MOV R0,#20H
MOV R1,#24H
MOV A,27H ;加一
MOV 23H,A
CLR C
ADD A,R1
MOV R1,A
CLR C
MOV A,23H
ADD A,R0
MOV R0,A
INC @R1
MOV A,@R1
CJNE A,#100,H1
MOV A, #00H
MOV @R1,A
H1: MOV @R0,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
ACALL DISP
ML10: JB P1.1,M3
M3: MOV C,P1.1 ;按键消振
JC M4
M4: LCALL DELAY
MOV C,P1.1
JC ML2
STOP2: MOV C,P1.1
JNC STOP2
LCALL DELAY
MOV C,P1.1
JNC STOP2
MOV R0,#20H
MOV R1,#24H
MOV A,27H ; 减一
MOV 23H,A
CLR C
ADD A,R1
MOV R1,A
CLR C
ADD A,R0
MOV R0,A
DEC @R1
MOV A,@R1
CJNE A,#0FFH,H2
MOV A, #99
MOV @R1,A
H2: MOV @R0,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
ACALL DISP
LJMP ML1
DELAY:MOV R4,#14H
DL00: MOV R5,#0FFH
DL11: DJNZ R5,DL11
DJNZ R4,DL00
RET
(2)T0中断服务程序
T0主要是完成计时,和标示位更值得功能。
当23H 为0时按20H内的初值计时,当23H为1和3时按21H内的初值计时,当23H为2时按22H内的的初值计时。
*********TIME PROCESS******
TIME: PUSH ACC
PUSH PSW
MOV TH0,#03CH
MOV TL0,#0B0H
DJNZ R2,RET0
MOV R2,#13H
MOV A,23H
CJNE A,#00H,L1
MOV A,20H
CLR C
DEC A
CJNE A,#0FFH,GO11
MOV A,23H
CLR C
INC A
MOV 23H,A
MOV A,24H
MOV 20H,A
LJMP L1
GO11: MOV 20H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
LJMP RET0
L1: MOV A,23H
CJNE A,#01H,L2
MOV A,21H
CLR C
DEC A
CJNE A,#0FFH,GO12
MOV A,23H
CLR C
INC A
MOV 23H,A
MOV A,25H
MOV 21H,A
LJMP L2
GO12: MOV 21H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
LJMP RET0
L2: MOV A,23H
CJNE A,#02H,L4
MOV A,22H
CLR C
DEC A
CJNE A,#0FFH,GO13
MOV A,23H
CLR C
INC A
MOV 23H,A
MOV A,26H
MOV 22H,A
LJMP L4
GO13: MOV 22H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
RET0: POP PSW
POP ACC
RETI
L4: MOV A,23H
CJNE A,#03H,RET0
MOV A,21H
CLR C
DEC A
CJNE A,#0FFH,GO14
MOV A,#00H
MOV 23H,A
MOV A,25H
MOV 21H,A
LJMP RET0
GO14: MOV 21H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
LJMP RET
(3)外部中断零服务程序
外部中断零服务程序主要完成的是特殊情况下交通灯状态标示位的转换当P3.0和P3.1有键按下式停T0中断,进入相应键的处理,当第二次有键按下式,若是相同键即推出中断服务程序,若是相异键,就改变特殊情况状态标示位。
SECTION1:PUSH ACC
PUSH PSW
QQQ: MOV C,P3.0 ;按键消振
JC JJJ
ACALL DELAY
MOV C,P3.0
JC JJJ
STOP3: MOV C,P3.0
JNC STOP3
ACALL DELAY
MOV C,P3.0
JNC STOP3
CLR TR0
MOV A,27H
CJNE A,#00H,PPP1
MOV A,#0FFH
MOV 27H,A
MOV 28H,#01H
SETB TR0
AJMP PP1
PPP1: CJNE A,#02H,PPP
MOV 27H,#00H
MOV 28H,#01H
AJMP PP1
PPP: INC 27H
MOV 28H,#01H
PP1: POP PSW
POP ACC
RETI
JJJ: MOV C,P3.1 ;按键消振
JC QQQ
ACALL DELAY
MOV C,P3.1
JC QQQ
STOP4: MOV C,P3.1
JNC STOP4
ACALL DELAY
MOV C,P3.1
JNC STOP4
CLR TR0
MOV A,28H
CJNE A,#02H,GGG1
MOV A,#01H
MOV 27H,A
MOV 28H,A
SETB TR0
LJMP PP1
GGG1: CJNE A,#00H,GGG
MOV 27H,#02H
MOV 28H,#02H
LJMP PP1
GGG: INC 28H
MOV 27H,28H
LJMP PP1
其他程序段都只是完成特定简单功能只须说明器完成功能即可。
4 Proteus软件仿真
4.1 初始状态0仿真图
东边绿灯亮,北边红灯亮。
4.2 状态1
北边和东边黄灯闪烁。
4.3 状态2
东边由黄灯闪烁转亮为红灯,同时北边由黄灯闪烁转亮为绿灯。
4.4 状态3
东边和北边均黄灯闪烁。
4.5 状态4
东西道有车而南北道无车时,按K0键,北边转亮红灯同时东边转亮绿灯。
4.6 状态5
东西道无车而南北道有车时,按K1键,东边转亮红灯同时北边转亮绿灯。
4.7 状态6
紧急车通过时,按K2键,北边和东边均转亮红灯。
5 课程设计体会
通过这次做交通灯的课程设计,自己再次学习了微机原理,并认真复习单片机,查阅和浏览了很多的相关资料, 并且对wave和proteus软件的使用有了一定的了解。
虽然提前做了一些准备工作,但完成初次编程用wave进行编译时,确也出现了一系列的问题。例如:有的符号未定义,源程序起始地址重复,标点符号漏写等,最终还是利用wave中的单步跟踪功能将问题一一解决。软件模拟时,我们用proteus仿真软件运行,发现有时两个绿灯同时亮,当有紧急车辆通过时,两个红灯不受按键控制,出现抖动现象等等一系列的问题。但是最后在同学的帮助下终于完成任务。
通过这次学习,发现自己对书本的掌握只是很表层的一部分,离实际应用还有很大一段距离。真是不用不知道,一用吓一跳。做课程设计期间,自己进一步学习了单片机书上的例子,而且学习了许多书本之外的东西。尤其是,和几个同学一起进行编程调试进而运行时期间,发现自己还算比较喜欢编程。这次做单片机课程设计也对自己以后的学习方向有很大的影响。
参考文献
期刊论文:
[1] 刘心红、郭福田、孙振兴、曾丽丽,Proteus仿真技术在单片机教学中的应用(大庆石油学院应用技术学院,河北秦皇岛),实验技术与管理(Experimental Technology and Management)2007,24(3):96-102
[2] 蔡军、曹慧英,智能交通灯控制系统的设计与实现,(重庆邮电学院,重庆400065)
重庆邮电学院学报(Journal of Chongqing University of Posts and Telecommunications Jun),2004 16(3):128-132
[3] 杨汉祥、刘良福、邬喜辉,利用单片机改进交通灯控制系统(北京电子科技学院学报),北京电子科技学院学报(Journal of Bei jing Electronic Science and Technology institute)2005,13(4):68-72
书、专著:
[1] 余发山主编 《单片机原理与应用技术》北京:中国矿大出版社 2004
[2]赖寿宏主编 《微型计算机控制技术》北京:机械工业出版社 2002
[3]李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,1999.87—90
[4] 李广第等.单片机基础[M].北京:北京航空航天大学出版社,2001.147-151
[5] 栾桂冬,张金铎,金欢阳.传感器及其应用[M].西安:西安电子科技大学出版社,2002.255-261
电子文献:
ATC51单片机简介:
http://hi.baidu.com/vaak/blog/item/425c6566db29b825ab184c86.html
附1: 源程序代码
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP SECTION1
ORG 000BH
LJMP TIME
ORG 0013H
LJMP SECTION2
************ MAIN PROGRAM ***************
ORG 0100H
MAIN: MOV SP,#50H
MOV TCON,#05H ;定义中断方式
MOV 20H,#05H ;时间计数单元,A道放行时间
MOV 21H,#02H ;黄灯亮时间
MOV 22H,#05H ;B道放行时间
MOV 23H,#00H ;交通灯转换标示位
MOV 24H,#05H ;时间欲存区,A道放行时间
MOV 25H,#02H ;黄灯亮时间
MOV 26H,#05H ;B道放行时间
MOV 27H,#0FFH ;特殊情况下转换标示位
MOV 28H,#01H ;
MOV 30H,#05H ;显示缓存区
MOV 31H,#00H
MOV TMOD,#01H ;16位计数器
MOV TH0,#03CH
MOV TL0,#0B0H
MOV IE,#10000111B
SETB TR0 ;T0启动计数
MOV R2,#13H
MOV P2,#0FFH
ML1: ACALL DISP
MOV A,23H
CJNE A,#00H,X1
SETB P1.2
CLR P1.3
CLR P1.4
CLR P1.5
CLR P1.6
SETB P1.7
X1: CJNE A,#01H,X2
CLR P1.2
SETB P1.3
CLR P1.4
CLR P1.5
SETB P1.6
CLR P1.7
X2: CJNE A,#02H,X3
CLR P1.2
CLR P1.3
SETB P1.4
SETB P1.5
CLR P1.6
CLR P1.7
X3: CJNE A,#03H,X4
CLR P1.2
SETB P1.3
CLR P1.4
CLR P1.5
SETB P1.6
CLR P1.7
X4: JNB 2FH.0,ML2
SETB P1.2
CLR P1.3
CLR P1.4
SETB P1.5
CLR P1.6
CLR P1.7
AJMP X4
ML2: JB TR0,ML1
ACALL DISP
MOV A,27H
CJNE A,#00H,X11
SETB P1.2
CLR P1.3
CLR P1.4
CLR P1.5
CLR P1.6
SETB P1.7
X11: CJNE A,#01H,X21
CLR P1.2
SETB P1.3
CLR P1.4
CLR P1.5
SETB P1.6
CLR P1.7
X21: CJNE A,#02H,X31
CLR P1.2
CLR P1.3
SETB P1.4
SETB P1.5
CLR P1.6
CLR P1.7
X31: JB P1.0,M1
M1: MOV C,P1.0 ;按键消振
JC M2
M2: LCALL DELAY
MOV C,P1.0
JC ML10
STOP1: MOV C,P1.0
JNC STOP1
LCALL DELAY
MOV C,P1.0
JNC STOP1
MOV R0,#20H
MOV R1,#24H
MOV A,27H ;加一
MOV 23H,A
CLR C
ADD A,R1
MOV R1,A
CLR C
MOV A,23H
ADD A,R0
MOV R0,A
INC @R1
MOV A,@R1
CJNE A,#100,H1
MOV A, #00H
MOV @R1,A
H1: MOV @R0,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
ACALL DISP
ML10: JB P1.1,M3
M3: MOV C,P1.1 ;按键消振
JC M4
M4: LCALL DELAY
MOV C,P1.1
JC ML2
STOP2: MOV C,P1.1
JNC STOP2
LCALL DELAY
MOV C,P1.1
JNC STOP2
MOV R0,#20H
MOV R1,#24H
MOV A,27H ; 减一
MOV 23H,A
CLR C
ADD A,R1
MOV R1,A
CLR C
ADD A,R0
MOV R0,A
DEC @R1
MOV A,@R1
CJNE A,#0FFH,H2
MOV A, #99
MOV @R1,A
H2: MOV @R0,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
ACALL DISP
LJMP ML1
DELAY: MOV R4,#14H
DL00: MOV R5,#0FFH
DL11: DJNZ R5,DL11
DJNZ R4,DL00
RET
;*********** TIME PROCESS **************
TIME: PUSH ACC
PUSH PSW
MOV TH0,#03CH
MOV TL0,#0B0H
DJNZ R2,RET0
MOV R2, #13H
MOV A, 23H
CJNE A,#00H,L1
MOV A, 20H
CLR C
DEC A
CJNE A, #0FFH,GO11
MOV A, 23H
CLR C
INC A
MOV 23H,A
MOV A, 24H
MOV 20H,A
LJMP L1
GO11: MOV 20H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
LJMP RET0
L1: MOV A,23H
CJNE A,#01H,L2
MOV A,21H
CLR C
DEC A
CJNE A,#0FFH,GO12
MOV A,23H
CLR C
INC A
MOV 23H,A
MOV A,25H
MOV 21H,A
LJMP L2
GO12: MOV 21H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
LJMP RET0
L2: MOV A,23H
CJNE A,#02H,L4
MOV A,22H
CLR C
DEC A
CJNE A,#0FFH,GO13
MOV A,23H
CLR C
INC A
MOV 23H,A
MOV A,26H
MOV 22H,A
LJMP L4
GO13: MOV 22H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
RET0: POP PSW
POP ACC
RETI
L4: MOV A,23H
CJNE A,#03H,RET0
MOV A,21H
CLR C
DEC A
CJNE A,#0FFH,GO14
MOV A,#00H
MOV 23H,A
MOV A,25H
MOV 21H,A
MOV A,20H
MOV B,#0AH
DIV AB
MOV 31H, A
MOV 30H, B
LJMP RET0
GO14: MOV 21H, A
MOV B, #0AH
DIV AB
MOV 31H, A
MOV 30H, B
LJMP RET0
;*******--DISPLAY PART--**********
DISP: MOV R0 ,#30H
MOV R3 ,#0FEH
MOV A ,R3
PLAY: MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1
MOV P2,#0FFH
MOV A,R3
RL A
JNB ACC.2,LD1
INC R0
MOV R3,A
LJMP PLAY
LD1: RET
;;;;;;;;;DELAY
DL1: MOV R7,#05H
DL: MOV R6,#0FFH
DL6: DJNZ R6,$
DJNZ R7,DL
RET
DSEG1:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
;*********************************
SECTION1:PUSH ACC
PUSH PSW
QQQ: MOV C,P3.0 ;按键消振
JC JJJ
ACALL DELAY
MOV C,P3.0
JC JJJ
STOP3: MOV C,P3.0
JNC STOP3
ACALL DELAY
MOV C,P3.0
JNC STOP3
CLR TR0
MOV A,27H
CJNE A,#00H,PPP1
MOV A,#0FFH
MOV 27H,A
MOV 28H,#01H
SETB TR0
AJMP PP1
PPP1: CJNE A,#02H,PPP
MOV 27H,#00H
MOV 28H,#01H
AJMP PP1
PPP: INC 27H
MOV 28H,#01H
PP1: POP PSW
POP ACC
RETI
JJJ: MOV C,P3.1 ;按键消振
JC QQQ
ACALL DELAY
MOV C,P3.1
JC QQQ
STOP4: MOV C,P3.1
JNC STOP4
ACALL DELAY
MOV C,P3.1
JNC STOP4
CLR TR0
MOV A,28H
CJNE A,#02H,GGG1
MOV A,#01H
MOV 27H,A
MOV 28H,A
SETB TR0
LJMP PP1
GGG1: CJNE A,#00H,GGG
MOV 27H,#02H
MOV 28H,#02H
LJMP PP1
GGG: INC 28H
MOV 27H,28H
LJMP PP1
SECTION2:PUSH ACC
PUSH PSW
MOV C,P3.3 ;按键消振
JC PPP
ACALL DELAY
MOV C,P3.3
JC PPP
STOP0: MOV C,P3.3
JNC STOP0
ACALL DELAY
MOV C,P3.3
JNC STOP0
CPL 2FH.0
POP PSW
POP ACC
RETI
END
附2: 系统原理图