汇编语言的交通灯
- 格式:pdf
- 大小:214.49 KB
- 文档页数:16
设计报告一、设计方法: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实现两位数的倒计时,并实现基本的十字路口,两路显示,能够实现最基本的运行。
题目:智能交通灯控制系统班级:p09电气四班姓名:刘强0903110429一、任务:设计并制作一个城市交道口交通灯控制糸统二、要求:根据下图交道口模型,装上交通灯。
交道口模型如图所示。
交通灯控制规则如下:1)每个街口有左拐、右拐、直行及行人四种指示灯。
每个灯有红、绿两种颜色。
自行车与汽车共用左拐、右拐和直行灯。
2)共有四种通行方式:①车辆南北直行、各路右拐,南北向行人通行。
南北向通行时间为1分钟,各路右拐比直行滞后10秒钟开放。
②南北向左拐、各路右拐,行人禁行。
通行时间为1分钟。
③东西向直行、各路右拐,东西向行人通行。
东西向通行时间为1分钟,各路右拐比直行滞后10秒钟开放。
④东西向左拐、各路右拐。
行人禁行。
通行时间为1分钟。
3)在通行结束前10秒钟,绿灯闪烁直至结束。
1, 基本部分:按照上述控制要求,用发光二极管代替交通灯,用PROTEUS绘制电路图,并仿真调试实现之。
2, 发挥部分:1.有倒计时时间显示。
2若交道口出现紧急情况,交警可将糸统设置成手动:全路口车辆禁行、行人通行。
紧急情况结束后再转成自动状态。
3当有119、120等特种车辆通过时,糸统自动转为特种车放行,其它车辆禁止状态。
特种车辆通过15秒钟后,糸统自动恢复,用模型车演示。
4其它自选措施。
智能交通灯控制系统1.系统功能的确定功能一:可以实现红绿灯的转换以及控制路口的基本功能。
功能二:有倒计时功能和最后十秒绿灯闪烁的功能。
功能三:出现紧急情况时,警察可以手动控制特殊状态,并维持交通。
功能四:119或120等特种车经过时,可转换成为特种车道行驶状态,并在情况消除后15秒,恢复原状。
2.方案论证2.1方案一:如下图所示,为proteus仿真图。
其中,P1,P0端口的8位分别来控制东西,南北方向的红绿灯。
且运用了4个74LS164的8位移位寄存器(串行输入,并行输出)来控制4个LED的数码显示,通过AT89C51单片机的P3.0,P3.1两个扩展端口来接4个并行连接的74LS164的DIN和CLK两个端口来显示倒计时的功能,这会产生乱码使得显示杂乱,而主程序以顺序执行为主,其中穿插着对P3.7的端口高低电平的测试和跳转语句来实现功能三,并且功能一、二在主程序中实现,没有功能四的的实现程序。
汇编语言课程设计交通信号灯控制系统初始界面:实现功能齐全。
思路清晰~~~~~~~~~~~~一、设计要求利用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是输出端。
设计报告一、设计方法:1、通过老师上课讲的内容及要求来设计。
2、开始时可跟着老师走从基础使用4094实现倒计时开始一步一步实现。
3、实现基础部分后我们就可按着自己的思路结合单片机的学习从而一步一步实现整个功能。
二、设计思路:1、首先在实现整个功能之前我并不清楚自己要设计的界面应是什么样子的,我从最基本的开始先学会使用4094实现一位倒计时,然后使用4094实现两位倒计时,实现了两位倒计时之后基本上就可以实现四个路口的倒计时显示。
2、完成基本型后就要想办法如何才能实现在线修改参数,且按照新的参数执行,而且参数用什么来设置等等,通过单片机的学习我想到了用中断方式的方法来实现,且在中断里来调用子程序来设置参数,并选用了键盘来设置参数。
因为单片机里已学过键盘子程序,现在再来使用这样的键盘,虽比单片机里学过的4*4键盘复杂点,但总不会太难了。
就这样一步一步按照自己的思路完成。
3、以上实现后,我们也可多加些按键来控制暂停、复位、行人按键等等,而这些在完成以上功能后再来实现它们就会很容易了。
流程图:开始设置一位数倒计时设置两位数倒计时设置一个路口红灯参数倒计时显示设置另一个路口支路绿灯参数倒计时显示设置十字路口两路红黄绿灯循环倒计时显示设置十字路口红黄绿LED显示设置读写键盘、显示子程序通过调用键盘、显示子程序来赋初值而实现十字路口两路显示先赋初值实现十字路口两路显示,后使用中断服务子程序调用键盘、显示子程序来重新赋初值实现十字路口两路显示使用中断实现设置参数复位功能通过查询方式实现行人按键绿灯显示功能总体完善程序及其功能,将其融合实现整个功能调整完善整个硬件电路图让其美观结束三、选择的芯片: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 ;倒计时DJNZ 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 XSSETB 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 XSMOV 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 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,#08HLP1: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显示器子程序LP5: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实现两位数的倒计时,并实现基本的十字路口,两路显示,能够实现最基本的运行。