汇编语言交通灯
- 格式:doc
- 大小:141.00 KB
- 文档页数:16
单片机交通灯实验汇编语言程序经过几天的整理,终于将网络上得到交通灯仿真文件,用汇编自己编写了一个程序,实验结果完全符合本人的思路,实验成功。
程序比较长,估计还会用更好的办法重新写。
编写心得是:单片机编程,不一定要背指令,用时可以查,也不必去默写子程序,用时还是可以查,但是,很关键的就是,你的程序,你自己要清楚整个的执行过程,也就是单片机的执行流程。
而在实际的应用中,要注意驱动电路的设计,特别是单片机上电复位输出高电平可能造成的影响。
程序如下:如果网页显示格式错乱可从51hei/f/jtda.rar 处下载. ORG 0000HSTART:MOV R2,#30SU0:MOV P0,#00HMOV P1,#00HMOV P2,#00HMOV P3,#00111111BMOV A,R2MOV R4,AMOV A,R4MOV R0,AMOV B,#5DIV ABMOV B,#3MUL ABMOV R1,ASETB P0.4SETB P0.7SETB P2.2SETBP2.5AJMP KEYSU1A: DEC R0DEC R1SUL5: CJNE R1,#5,SUL6SETB P2.7SUL6: CJNE R1,#4,SUL7SETB P2.7SUL7: CJNE R1,#3,SUL1SETB P2.7SUL1: CJNE R1,#2,SUL2SETB P2.7SUL2: CJNE R1,#1,SUL3SETB P2.7SUL3: CJNE R1,#0,SUL4MOV A,R0MOV R1,ACLR P2.5CLR P0.7SETB P0.5SETB P2.4SUL4: CJNE R0,#0,KEYAJMP SU0BKEY: JB P3.5,KEY1 LCALL DELAY MOVR2,#45KEY1:JB P3.2,KEY2 LCALL DELAY MOV R2,#60KEY2:JB P3.3,KEY3 LCALL DELAY MOV A,R2 ADD A,#5 MOV R2,A CJNE R2,#95,DD MOVR2,#95KEY3:JB P3.4,DD LCALL DELAY MOV A,R2 SUBB A,#5 MOV R2,A CJNE R2,#0,DD MOV R2,#0DD:MOV R3,#50;数码1DD1: MOV P1,#00H MOV A,R0 MOV B,#10 DIV AB MOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,A SETB P0.0 LCALL DELAY1 CLR P0.0 MOV A,B MOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,A SETB P0.1 LCALL DELAY1 CLR P0.1;数码2 MOV。
汇编语言课程设计交通信号灯控制系统初始界面:实现功能齐全。
思路清晰~~~~~~~~~~~~一、设计要求利用PC机键盘和屏幕实现交通灯信号灯,控制系统。
二、设计内容与要求基本要求:1、完成一个十字路口的红绿灯正常状态的控制:实现日常生活中正常的交通路口的控制功能,实现南北、东西方向的切换。
2、显示时间,精确到秒;灯亮时间长短可变。
3、具有自动和手动控制功能。
提高要求:1、完成夜间状态的控制:由于夜间车辆和行人很少,实现南北、东西方向的黄灯闪烁,进入夜间控制状态。
2、完成紧急状态的控制:南北双方向都设置为红灯,利于执行紧急公务。
3、完成交通堵塞状态的控制:由于交通事故等原因出现南北或东西某一方向堵塞,可人为地调整每个方向的红灯时间,进入手动控制状态。
附加要求:必要的辅助功能(设置、修改等)。
三、编程提示要求用汇编语言进行编程,下面是编写过程中主要涉及的知识点(其中举例只是实现方法之一,同学可根据自己对知识的掌握情况进行设计并调试):1、视频显示程序设计:一般由DOS 或BIOS调用来完成。
有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。
用INT 10H即可建立某种显示方式。
用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用,例:要输出多于一个字符时,利用DOS功能调用9。
2、键盘扫描程序设计:检测键盘状态,有无输入,并检测输入各值。
例:利用DOS系统功能调用的01号功能,接受从键盘输入的字符到AL寄存器。
3、定时器中断处理程序:在此中断处理程序中,计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。
例:在系统定时中断处理程序中,有一条中断指令INT 1CH指令,在ROM BIOS中,1CH的处理仅一条IRET指令,实际上它并没有做任何工作而只是为用户提供了一个软中断类型号,所以INT 1CH指令每秒也将执行18.2次,设计中可用这个定时周期性工作的处理程序来代替原有的1CH程序,实现定时。
题目:简易交通灯一、设计目的利用TDN微机原理试验箱及单元电路,实现对一道路交通灯的控制。
当通过车辆计数达到50时,绿灯灭,红灯亮,同时数码块倒计时若干秒(此次设计中设为9秒)。
此时,车辆停止,行人可以通过。
二、参加人员及分工李——试验报告霍——调试程序洪——编写程序三、技术要求1、设计完成交通灯的电路2、采用TDN试验箱上的8255、8259、8253完成3、程序设计中采用软件延时四、试验器材TDN-MD86/51实验箱一台,8253一片,8255一片,8259一片,数码管一组,发光二极管一组。
五、设计和调试环境TDN-MD86/51教学试验系统六、题目分析、工作原理、设计思想题目分析我们所做的交通灯是控制单路口处车辆和行人的通过及停止的简易交通灯。
因此需要两个灯和一块用于显示倒计时的数码块来控制车辆和行人的通行、停留问题。
其中两个灯分为红绿色,主要根据两只灯的亮灭情况来控制车辆,当红灯灭绿灯亮的时候车辆可以通过,而红灯亮绿灯灭时车辆就要停止通行。
数码块用于显示倒计时的时间以控制人,当倒计时开始时人通行,倒计时结束后行人就要等待。
根据题目分析得出以下设计思想及工作原理:设计思想在一开始启动交通灯时设置为红灯灭绿灯亮,让车辆先通行,行人等待,当通过50辆车后,红绿灯都同时灭然后红灯亮绿灯灭且数码快开始倒计时,此时为行人通行时间。
然后当数码块倒计时到0时行人通行的时间结束。
转而红灯灭绿灯亮又改为车辆通行时间。
红绿灯和数码块如此反复工作就构成的交通灯。
工作原理通过向8259写入程序来控制其他器件的工作。
在程序一开始写入中断向量和各芯片的控制方式字,以确保发生中断是正确的响应中断及芯片正确的工作状态。
接下来的程序就是控制8255和8253,8255选择工作方式1,A、B、C、口都做基本的输入输出。
通过8255A 口先让红灯灭绿灯亮。
8253选择工作方式2:计数停止中断,通过8253对车辆的计数达到50辆车是就发出中断请求。
欢迎下载我曾做过的微机原理与汇编语言课程设计:交通灯。
程序在MASM,唐都TDN86/88实验系统上运行通过。
指导老师对你这次编程的构想,这想法看问题出发点在哪问的很少,但是细节会问很多。
当时,他有问我:你每次运行程序时都敲入G=0000:2000这是什么意思。
程序中有“MOV[SI],AX”语句,你知道它干什么的(中断矢量初始化),那它现在内容是什么(看着程序,我也说了),那它为什么里面放的就是这个值,而不是其他值?(我不会了,只说是规定。
心里很生气,不问思想,问什么呢!)后面还有更气人的,你们这系统不符合实际,你一开始在几点启动的它,你怎么就知道过多长时间就进入夜间(0点以后)的?夏天白天长,冬天白天短,我家还睡觉可晚了。
(我当时都疯了,实在没话说。
不过也确实没考虑时间校准的问题,只觉得是个模拟,不用太当真,不过老师说的蛮对的。
)这只是给大家个思路,以时间作为出发点,去完成交通灯的工作时序图。
这份实验报告是不完整的,其中我们小组的流程图没画,同时程序没有语法错误,但是运行起来一个是灯显示不对,一个是绿灯倒记时只有一组(正常是两组)。
硬件连线图也没有。
希望大家多去动手实践,永远都别想着不劳而获。
要是按我这次的思路来,希望可以把时间开始,校准考虑进去。
这次试验我原想着用两8253级连隔1S引起一中断,结果一看实验箱只一个8253,才选用了软件编程加硬件结合起来,得到一固定时间的方法。
万事开头难,这个实验前两天都不知怎么办。
祝大家学习好,身体棒!末了,有什么问题,可以给我在下这个资源的评论区或我的CSDN个人主页上留言中北大学电子与计算机科学技术学院汇编语言课程设计题目:交通灯控制系统班级:04090402指导教师:完成日期:2007年7月13日学号姓名负责模块成绩组长04090402xx8255A成员04090402xx绿灯倒计时成员04090402xx8259中断成员04090402xx夜间控制成员04090402xx82531需求分析在当今社会里,交通越来越发达,车辆也越来越来多,由此也带来了大量交通问题。
——交通灯设计人:张玉印200800800439李娜200800800099一、设计目标:设计一个工作于支、干路交叉处的交通灯系统,支道和干道各有一组交通灯,依次为绿、黄、红。
主干道红灯20秒、黄灯4秒、红灯14秒,支干道绿灯10秒、黄灯4秒、红灯24秒。
主要功能:1、每一时间段内两组数码管都只有一个灯亮,并且颜色不同,能够实现数码管倒计时计时到零时能够自动的转换成下一个阶段,四个阶段交替周期进行。
2、在道路出现紧急情况时,能够手动中断控制使主道和支道的交通灯都变成红灯,并且紧急情况排除后能够手动控制恢复到原来中断前的状态有序执行。
3、能够报警,根据特殊情况的分类报警器(蜂鸣器)的发生的频率不一样,蜂鸣器的频率能够通过旋钮手动调节。
一、实验器材唐都TS-PITE试验箱,用到的芯片单元有8254单元.、8255单元、8259单元、LED显示单元、数码管显示单元、单脉冲产生单元、A/D 0809转换单元、蜂鸣器单元、时钟源。
二、实验原理与方法:1.、8259工作原理1、数据总线缓冲器:8259A与系统数据总线的接口,是8位双向三态缓冲器。
CPU与8259A之间的控制命令信息、状态信息以及中断类型信息,都是通过缓冲器传送的。
2、读/写控制逻辑:CPU通过它实现对8259A的读/写操作。
中断请求寄存器IRR:8位,用以分别保存8个中断请求信号,当响应的中断请求输入脚有中断请求时,该寄存器的相应位置1。
3、在试验中应用到8259的MIR7中断申请口,首先写入中断向量表中,将中断申请口接在KK1+上。
通过手动按下KK1+来决定是否产生中断。
4、中断子程序中必须用STI开中断否则会影响下一个中断的响应。
2、8254的工作原理1)8254是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。
其CLK0~CLK2是计数器0~2的时钟脉冲输入端, GATE0~GATE2是门控脉冲输入端, OUT0~OUT2是输出端。
单片机控制交通灯源程序:DISPLAY11 EQU 40H ; 东西显示码缓冲区1 DISPLAY12 EQU 41H ; 东西显示码缓冲区2 DISPLAY21 EQU 42H ;南北显示码缓冲区1 DISPLAY22 EQU 43H ;南北显示码缓冲区2 ORG 0000H SJMP MAIN ORG 0003H ;外部中断0入口入口LJMP PINT0 ORG 0013H ;外部中断1入口入口LJMP PINT1 MAIN:MOV SP,#60H ;设栈底;设栈底MOV IE,#85H ;外部中断0、外部中断1设置设置 S0:MOV R0,#20 MOV R1,#80 MOV P1,#21H ;点亮东西左转绿灯;点亮东西左转绿灯SETB P3.0 CLR P3.1 CLR P3.4 SETB P3.5 LP0:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R0,#6, LP0 ;R0﹥6,转LP0 MOV R3, #0 LP1:CPL P1.0 ;绿灯闪烁3次LCALL DISP LCALL DELAY1 INC R3 CJNE R3,#2, LP1 MOV R3, #0 DEC R0 DEC R1 CJNE R0,#3, LP1 ;R0﹥3,转LP1 S1:MOV P1,#22H ;点亮东西左转黄灯点亮东西左转黄灯LP2:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R0,#0, LP2 ;R0﹥0,转LP2 S2:MOV P1,#0CH ;点亮东西绿灯点亮东西绿灯MOV R0,#60 LP3:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R0,#6, LP3 ;R0﹥6,转LP3 MOV R3, #0 LP4:CPL P1.0 ;绿灯闪烁3次LCALL DISP LCALL DELAY1 INC R3 CJNE R3,#2, LP4 MOV R3, #0 DEC R0 DEC R1 CJNE R0,#3, LP4 ;R0﹥3,转LP4 S3:MOV P1,#14H ;点亮东西黄灯点亮东西黄灯LP5:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R0,#0, LP5 ;R0﹥0,转LP5 S4:MOV R0,#60 MOV R1,#20 MOV P1,#64H ;点亮南北左转绿灯点亮南北左转绿灯CLR P3.0 CLR P3.1 CLR P3.4 SETB P3.5 LP10:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R1,#6, LP10 ;R1﹥6,转LP10 MOV R3, #0 LP11:CPL P1.6 ;绿灯闪烁3次LCALL DISP LCALL DELAY1 INC R3 CJNE R3,#2, LP11 MOV R3, #0 DEC R0 DEC R1 CJNE R1, #3, LP11 ;R1﹥3,转LP11 S5:MOV P1, #0A4H ;点亮南北左转黄灯点亮南北左转黄灯LP12:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R1, #0, LP12 ;R1﹥0,转LP12 S6:MOV P1, #24H ;点亮南北绿灯点亮南北绿灯SETB P3.0 SETB P3.1 CLR P3.4 CLR P3.5 MOV R1, #40 LP13:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R1,#6, LP13 ;R1﹥6,转LP13 MOV R3, #0 LP14:CPL P1.0 ;绿灯闪烁3次LCALL DISP LCALL DELAY1 INC R3 CJNE R3,#2, LP14 MOV R3, #0 DEC R0 DEC R1 CJNE R1,#3, LP14 ;R0﹥3,转LP14 S7:MOV P1, #24H ;点亮南北黄灯点亮南北黄灯SETB P3.0 CLR P3.1 SETB P3.4 CLR P3.5 LP15:LCALL DISP LCALL DELAY DEC R0 DEC R1 CJNE R1,#0, LP15 ;R0﹥0,转LP15 LJMP S0 DISP :MOV A,R0 ;东西时间显示(CD4511) MOV B,#1 0 DIV AB SW AP A MOV DISPLAY11, A MOV DISPLAY12, B ANL DISPLAY11, 0F0H ANL DISPLAY12, F0H MOV A, DISPLAY11 ORL A, DISPLAY12 MOV P0, A MOV A, R1 ;南北时间显示(CD4511) MOV B,#1 0 DIV AB SW AP A MOV DISPLAY21, A MOV DISPLAY22, B ANL DISPLAY21, 0F0H ANL DISPLAY22, F0H MOV A, DISPLAY21 ORL A, DISPLAY22 MOV P2, A RET DELA Y:MOV R5,#05H ;1S延时(6MH Z晶体)晶体)K1:MOV R6,# 200 K2:MOV R7,#248 NOP K3:DJNZ R7, K3 DJNZ R6, K2 DJNZ R5, K1 RET DELAY1:MOV R5, #05H ;0.5S延时延时K11:MOV R6, #100 K12:MOV R7, #248 NOP K13:DJNZ R7, K13 DJNZ R6, K12 DJNZ R5, K11 RET PINT0:PUSH 90H ;中断子0程序,紧急情况(东西通行),保存P1口原来状态口原来状态 PUSH B0H ;保存P3口原来状态口原来状态MOV P1,#0CH ;点亮东西绿灯点亮东西绿灯SETB P3.0 CLR P3.1 CLR P3.4 SETB P3.5 POP B0H POP 90H PINT1:PUSH 90H ;中断子1程序,紧急情况(南北通行),保存P1口原来状态口原来状态PUSH B0H ;保存P3口原来状态口原来状态 MOV P1, #24H ; 点亮南北绿灯点亮南北绿灯 SETB P3.0 SETB P3.1 CLR P3.4 CLR P3.5 POP B0H POP 90H RETI END S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 P1= 21H P1= 2 P1= 2 P1= P1= P1= P1= P1= P1= P1= P1= P1= P3= 9FH P3= 9FH P3= 9FH P3= 9FH P3= 9FH P3= 9FH P3= 8FH P3= 8FH P3= 8FH P3= 3FH P3= P3= 5FH S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 P1.0 1 闪0 0 0 0 0 0 0 0 0 0 P1.1 0 0 1 0 0 0 0 0 0 0 0 0 P1.2 0 0 0 1 1 1 1 1 1 1 1 1 P1.3 0 0 0 1 闪0 0 0 0 0 0 0 P1.4 0 0 0 0 0 1 0 0 0 0 0 0 P1.5 1 1 1 0 0 0 1 1 1 1 1 1 P1.6 0 0 0 0 0 0 1 闪0 0 0 0 P1.7 0 0 0 0 0 0 0 0 1 0 0 0 P3.4 1 1 1 1 1 1 0 0 0 1 1 1 P3.5 0 0 0 0 0 0 0 0 0 1 闪0 P3.6 0 0 0 0 0 0 0 0 0 0 0 1 P3.7 1 1 1 1 1 1 1 1 1 0 0 0 初始值:P1=21H P3=9FH 。
一、实验名称:单片机设计交通灯二、实验目的1、巩固单片机基础,利用所学单片机知识编写程序。
2、掌握单片机的编程调试过程。
三、设计要求:1、A、B 两路各放行60S,并在数显管上显示各路通行标。
2、绿灯最后5S闪烁。
3、绿灯到红灯间有黄灯并闪4S。
4、在数显管上显示剩余时间。
四、硬件、软件的设计原理1、硬件设计图:见附页。
2、硬件设计说明:(1)、用单片机的P1口接6只二极管模拟交通灯,P1口先输入高电平熄灭星号灯,输出低电平点亮信号灯。
P1口线控制功能及相应控制码如表:(2)用单片机P0口皆数显管闲事剩余时间。
3、软件设计说明;(1)、软件设计思路1)、主程序主要采取调用子程序,由R7寄存器确定交通灯的各时间,并用它来做子减一坐到倒计时和各红灯的剩余时间是否到0,并用RS1中的R1控制A绿B红的倒计时5S时绿灯闪的状态,R4控制A黄灯闪的状态,R5控制A红B绿闪的状态,R6控制B黄灯闪的状态。
利用定时器查询方式定时1S。
2)、程序流程图:见附页五、程序及说明;见附页六、心得这个专周从刚开始的没头绪,到最后终于明白。
下面就是我在专周过程周遇到的一些困难的描述。
1.分析交通灯的状态的时候少了两种状态,导致最后的程序是红灯和黄灯后都有黄灯,最后在老师的提醒下,我又加了倒数5S时绿灯闪的状态。
2.硬件设计好后,开始编程。
3.编程时,我先画好大概的流程图,以致编程时不容易混乱。
4.编好程后就开始调试,通过不断的改程序,以致程序无误,调试过程中,开始的时候用中断定时,但最后数显闪得太快,经过反复的修改,最后定位定时器查询方式。
在此过程中,通过看书,反复改错,问同学、老师,终于完成了专周。
通过这次专周,我更进一步熟悉了单片机,也明白了如何去设计一个东西的思路,如何改错。
在以后的学习生活中我会更加努力,学更多的东西。
设计报告一、设计方法:1、通过老师上课讲的内容及要求来设计。
2、开始时可跟着老师走从基础使用4094实现倒计时开始一步一步实现。
3、实现基础部分后我们就可按着自己的思路结合单片机的学习从而一步一步实现整个功能。
二、设计思路:1、首先在实现整个功能之前我并不清楚自己要设计的界面应是什么样子的,我从最基本的开始先学会使用4094实现一位倒计时,然后使用4094实现两位倒计时,实现了两位倒计时之后基本上就可以实现四个路口的倒计时显示。
2、完成基本型后就要想办法如何才能实现在线修改参数,且按照新的参数执行,而且参数用什么来设置等等,通过单片机的学习我想到了用中断方式的方法来实现,且在中断里来调用子程序来设置参数,并选用了键盘来设置参数。
因为单片机里已学过键盘子程序,现在再来使用这样的键盘,虽比单片机里学过的4*4键盘复杂点,但总不会太难了。
就这样一步一步按照自己的思路完成。
3、以上实现后,我们也可多加些按键来控制暂停、复位、行人按键等等,而这些在完成以上功能后再来实现它们就会很容易了。
流程图:三、选择的芯片:AT89C51、4094、KEYPAD-PHONE、LED-GREEN、LED-RED、LED-YELLOW、TSEG-COM-AN-GRN、3WATT100R、BUTTON 四、硬件设计:五、软件设计:1、部分代码:;30H、34H、35H主干道红、绿、黄灯,33H、31H、32H支干道红、绿、黄灯,修改用外部中断ORG 0000HLJMP MAINORG 0003H ;复位中断入口地址LJMP FWORG 0013H ;修改参数中断入口地址LJMP XGORG 0030HMAIN:MOV 30H,#50MOV 31H,#30MOV 32H,#20MOV 33H,#40MOV 34H,#32MOV 35H,#08LOOP: SETB IT0 ;设置外部中断0的触发方式SETB IT1 ;设置外部中断1的触发方式SETB EX0 ;开启外部中断0SETB EX1 ;开启外部中断1SETB PX0 ;设置优先级CLR PX1SETB EA ;开启总中断STAR1:MOV 40H,30HMOV 41H,31HMOV 42H,32HMOV 43H,33HMOV 44H,34HMOV 45H,35H;主干道的红与支干道的绿ZHUHO:CLR P2.7 ;关门,减震作用MOV 46H,#0F5H ;显示LED亮与灭MOV A,40H ;显示主干道的红灯参数LCALL XSLCALL LPMOV A,41H ;显示支干道的绿灯参数LCALL XSLCALL LOPSETB P2.7 ;开门,减震作用LCALL DELAYDEC 40H ;倒计时JNB P1.7,ZHIHODJNZ 41H,ZHUHOCLR P2.7MOV A,40H ;显示主干道的红灯参数LCALL XSLCALL LPMOV A,41H ;显示支干道的绿灯参数LCALL XSLCALL LOPSETB P2.7LCALL DELAY;主干道的红与支干道的黄ZIHU:CLR P2.7MOV 46H,#0F6H ;显示LED亮与灭MOV A,42H ;显示主干道的红灯参数LCALL XSLCALL LPMOV A,42H ;显示支干道的黄灯参数LCALL XSLCALL LOPSETB P2.7LCALL DELAYJNB P1.7,ZHIHO ;倒计时DJNZ 42H,ZIHUCLR P2.7MOV A,42H ;显示主干道的红灯参数LCALL XSLCALL LPMOV A,42H ;显示支干道的黄灯参数LCALL XSLCALL LOPSETB P2.7LCALL DELAY;支干道的红与主干道的绿ZHIHO:CLR P2.7MOV 46H,#0EBH ;显示LED亮与灭MOV A,43H ;显示支干道的红灯参数LCALL XSLCALL LOPMOV A,44H ;显示主干道的绿灯参数LCALL XSLCALL LPSETB P2.7LCALL DELAYDEC 43HDJNZ 44H,ZHIHOCLR P2.7MOV A,43H ;显示支干道的红灯参数LCALL XSLCALL LOPMOV A,44H ;显示主干道的绿灯参数LCALL XSLCALL LPSETB P2.7LCALL DELAY;支干道的红与主干道的黄ZUHU:CLR P2.7MOV 46H,#0DBH ;显示LED亮与灭MOV A,45H ;显示支干道的红灯参数LCALL XSLCALL LOPMOV A,45H ;显示主干道的黄灯参数LCALL XSLCALL LPSETB P2.7LCALL DELAYDJNZ 45H,ZUHUCLR P2.7MOV A,45H ;显示支干道的红灯参数LCALL XSLCALL LOPMOV A,45H ;显示主干道的黄灯参数LCALL XSLCALL LPSETB P2.7LCALL DELAYLJMP STAR1XG:JB P3.3,EXIT ;修改参数中断服务子程序MOV A,#00H ;使数码管都显示00MOV 46H,#0FFH ;使LED都灭LCALL XSLCALL LPLCALL LOPSJMP FCZFW:CLR EA ;复位中断服务子程序MOV A,#88MOV 46H,#0FFHLCALL XSLCALL LPLCALL LOP;产生中断后对参数重新赋初值FCZ:MOV P0,#0F9HMOV P2,#0BFHLCALL LKEY1 ;设置第一个参数MOV 30H,20HMOV P0,#0A4HMOV P2,#0BFHLCALL LKEY1 ;设置第二个参数MOV 31H,20HMOV P0,#0B0HMOV P2,#0BFHLCALL LKEY1 ;设置第三个参数MOV 33H,20HMOV P0,#99HMOV P2,#0BFHLCALL LKEY1 ;设置第四个参数MOV 34H,20HMOV A,30HSUBB A,31HMOV 32H,AMOV A,33HSUBB A,34HMOV 35H,AMOV 40H,30HMOV 41H,31HMOV 42H,32HMOV 43H,33HMOV 44H,34HMOV 45H,35HMOV P0,#0FFHMOV P2,#0FFHEXIT:RETI ;中断返回DELAY:MOV R3,#10 ;延时0.5s子程序MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HSETB TR0LOOP1:JBC TF0,LOOP2SJMP LOOP1LOOP2:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R3,LOOP1CLR TR0RETXS:MOV DPTR,#TAB ;显示子程序MOV B,#10DIV ABMOVC A,@A+DPTRMOV R5,AMOV A,BMOVC A,@A+DPTRMOV R6,ARETTAB: DB 0C0H,0F9H,0A4H,0B0HDB 99H,92H,82H,0F8HDB 80H,90H,88H,83HDB 0C6H,0A1H,86H,8EHLP:CLR C ;4094主干道显示两位倒计时子程序MOV R0,#08HMOV A,R6LP1:CLR P3.7RLC AMOV P3.6,CSETB P3.7DJNZ R0,LP1MOV A,R5MOV R0,#08HLP2:CLR P3.7RLC AMOV P3.6,CSETB P3.7DJNZ R0,LP2RETLOP:CLR C ;4094支干道显示两位数倒计时子程序MOV R0,#08HMOV A,R6LOP1:CLR P3.5RLC AMOV P3.4,CSETB P3.5DJNZ R0,LOP1MOV A,R5MOV R0,#08HLOP2:CLR P3.5RLC AMOV P3.4,CSETB P3.5DJNZ R0,LOP2XP2:MOV R0,#08H ;四个路口红绿灯LED显示器子程序MOV A,46HLP5:CLR P3.1RLC AMOV P3.0,CSETB P3.1DJNZ R0,LP5RET;键盘扫描子程序KEY16:LCALL KS ; 读键盘JZ KEY16 ; 判是否有键按下,A=0表示无键按下,再读LCALL T10MS ; 延时LCALL KS ; 有键按下的话,再读一次,消除抖动JZ KEY16 ; 判是否有键按下,A=0表示无键按下,再读MOV R2,#0EFH ; 列扫描初值,11101111MOV R4,#00H ; 列扫描计数单元置"0"; 下面进行列扫描(0~3)、读行值(01、04、07、0FF)LK1:MOV P1,R2 ; P1.4=0, 扫描第一列JB P1.0,ONE ; 判是否第0行健按下,否判下一行MOV A,#01H ; 是,行值"01"LJMP KPONE:JB P1.1,TWO ; 判是否第1行健按下,否判下一行MOV A,#04H ;是,行值"04"LJMP KPTWO:JB P1.2,THREE ; 判是否第2行健按下,否判下一行MOV A,#07H ; 是,行值"07"LJMP KPTHREE:JB P1.3,NEXT ; 判是否第3行健按下,否则扫描下一列MOV A,#0FFH ; 是,行值"0ff"LJMP KPNEXT:INC R4 ; 列计数加1MOV A,R2 ; 行扫描完,列移位,继续JNB ACC.6,KND ; 判是否列扫描结束RL A ; 左移,扫下一列MOV R2,AAJMP LK1 ; 转下一列读键KND:AJMP KEY16KP:ADD A,R4 ; 生成键值,A=行基值+列值(0~3)PUSH ACCLK:LCALL KSJNZ LKPOP ACCSETB P1.7RETT10MS:MOV R7,#10H ;T10ms延时子程序TS1:MOV R6,#0FFHTS2:NOPNOPDJNZ R6,TS2DJNZ R7,TS1RETKS:MOV P1,#0FH ; 判有无键按下子程序MOV A,P1CPL AANL A,#0FHRETLKEY1:MOV A,#0LCALL KEY16 ; 读第一个数CJNE A,#0AH,LKEY2 ; 键值>9则重读键SJMP LKEY1LKEY2:JNC LKEY1MOV R0,A ; 保存第一个数SWAP ALCALL XSP0P2 ; 显示第一个数LKEY3:MOV A,#0LCALL KEY16 ; 读第二个数CJNE A,#0AH,LKEY4 ; 键值>9(非数字键)则重读键SJMP LKEY3SJMP LKEY3LKEY4:JNC LKEY3MOV R1,A ; 第二个数存入B中MOV A,R0 ; 取第一个数SWAP A ; 换到高位ADD A,R1 ; 第二个数(低位)与第一个数(高位)合并MOV 20H,APUSH AMOV A,R0MOV B,#10MUL ABADD A,R1MOV 20H,APOP ALCALL XSP0P2 ; 显示两个数JB P1.3,$ ;判确定键有没按下RETXSP0P2:PUSH B ;显示子程序MOV DPTR,#XSTAB ; 取数据表首地址MOV B,A ; 保存原数据ANL A,#0FH ; 截取低4位数MOVC A,@A+DPTR ; 取显示字型码MOV P0,A ; 送P0显示MOV A,B ; 取原数据ANL A,#0F0H ; 截取高4位SWAP A ; 半字节交换MOVC A,@A+DPTR ; 取显示段码MOV P2,A ; 送P2显示MOV A,BPOP BRETXSTAB: DB 0C0H,0F9H,0A4H,0B0HDB 99H,92H,82H,0F8HDB 80H,90H,88H,83HDB 0C6H,0A1H,86H,8EHEND六、时间安排:1、要完成这个项目我们只有两个周的时间,第一个周我们完成了基本的用4094实现两位数的倒计时,并实现基本的十字路口,两路显示,能够实现最基本的运行。