首页 > 编程知识 正文

微机交通信号灯的设计实验(微机程序设计题)

时间:2023-05-04 13:19:00 阅读:76638 作者:2286

1、设计任务

交通信号灯控制系统:要求能显示剩余时间,控制红、黄、绿三色灯的显示。2、总体方案设计与方案论证

)1)总体方案设计

设计交叉口信号灯控制系统,采用LED显示单元两组发光二极管(红黄绿)分别模拟交叉口两组信号灯。 a、南北路口绿灯、东西路口红灯同时点亮20秒。 代码管倒退20秒时显示。 B、南北路口黄灯亮5秒钟,同时东西路口红灯持续亮。 代码管倒带5秒钟时显示。 C、南北路口红灯、东西路口绿灯同时点亮20秒。 d、南北路口红灯继续亮,同时东西路口黄灯亮5秒钟。 e、回转(1)重复。 (在此基础上,按下紧急开关时,可以增加暂停时间、两组交叉口红灯等功能)方案论证

观察红绿灯的显示规则,可以发现有“红绿、红黄、绿红、自然之眼”4种状态。 要将红绿灯的显示抽象为这四种状态的周期切换,并产生不同的时间,只需将每个状态直接添加到延迟程序中即可。 为了更准确地记录时间和显示剩下的时间,我想采用8253控制1秒,运行10次循环就10秒,20次就20秒。这样任务就完成了。 通过以上论证,方案可行,可以进行具体的设计和操作。3、总框图及总体软件设计说明

)1)总框图

)2)总体软件设计说明

a、根据8253计数,每1s输出一个脉冲,刷新10次,持续10秒,重复减法直到达到零; b、8255端口的后4位为输入输出端口,c端口的前4位控制某数码管的显示,b端口控制数码管的显示值,a端口控制信号机; c、交替选择数码管高低位码,计数同时数码管显示数字,信号点亮; d、8253锁存读取的e、计数为零时状态发生变化,数码管上重新显示下一个状态的数字,信号灯变为下一个状态; f、重复上述过程,使信号灯四种状态循环秒钟4、接口电路逻辑图及硬件设计说明,或系统资源使用说明

(1)接口电路逻辑图

)2)硬件设计说明

8253芯片说明

8253有三个独立的16位计数器,有六种工作方式。 利用8253减法计数器的原理,每次发送脉冲时减去1,减去0生成定时信号输出。 因为计数频率为2MHz,计数器最大值为65536,所以最大定时时间为0.5us*65536=32.768ms,不能满足1S的要求,所以需要级联两个计数器来解决问题。 将2MHz的时钟信号直接施加到CLK0输入端子,使计数器0在模式2下动作,将计数初始值选择为5000时,从out0端子以0.25ms周期获得2MHz/5000=400Hz的脉冲。 该信号与CLK1输入连接,使计数器1在模式2下动作,为了使out1输出周期为20s的波形,将时间常数设为400,输出到out1至8255的PC0,判断在上升沿1s是否结束。 8255芯片说明

8255A向外围设备提供三个8位I/O端口,即a端口、b端口、c端口,每个端口还可以分两组进行编程,以三种操作模式工作。 在该实验中,作为输入输出的控制操作使用了8255A,将c端口分为上下端口,分别用a、b端口进行了控制。 PC0接收从8253的out1输出的信号,根据边缘判断1S的计时是否完成。 PC1用于判断有无紧急键按下,如果是高电平,则为紧急状态,点亮4个交叉路口的红色。 c端口的前4位用于控制数码管的显示位数,测试中数码管为低电平有效,状态控制字分别为1101、1110时,对应的第2位和第1位较亮。 然后进行循环。 a端口作为输出端子与发光二极管连接,通过接收状态控制字来显示对应的指示灯。 b端口也作为输出端依次与数码管的LA、b、c、d、e、f、g、h连接。5、局部程序框图及其设计说明

首先,在8253进行初始化,产生周期为1秒的脉冲,用子程序控制在主程序中规定的循环次数,即秒数,控制产生脉冲的个数,1脉冲为1秒。 要判断是否为一个脉冲,在上升沿进行判断,出现一个上升沿时产生一个脉冲,将循环次数减少一个,直到有n个脉冲为止,即判断为经过了n秒。 延迟中判断紧急键的按下,按下时循环判断紧急键的状态,持续输出紧急状态。 松开紧急按钮后,紧急前的状态会继续延迟。

剩下的延迟次数是剩下的时间,所以在数码管上显示CX的值就可以达到显示时间的目的。 CX里有两位数字。 在这种情况下,将CX的值设为10,用AH和AL分别得到馀数(一位数字)和商值(十位数字)。 要同时显示两位数字,两位数字必须分别显示在数字代码的上下两位,并不断循环显示。 这种情况下,显示频率快,肉眼看起来两位数同时点亮。6、源程序清单(详细注释)

codesegmentassumecs : codestart : movax,CS MOV DS,AX MOV DX,203H; 8255初始化,连接端口IOY0 MOV AL,10000001B; a端口输出为LED,b端口输出为数字代码、C0~C3输入、C4~C7输出OUT DX、AL CALL INITIAL_8253; 8253初始化A1: MOV DX,200h; 将MOV AL连接到8255的a端口,

01101111B ;东西红,南北绿 OUT DX,AL ;将灯状态传送给LED显示 MOV CX,20 ;计时20秒 CALL action MOV DX,200h ;东西红,南北黄 MOV AL,01111011B OUT DX,AL MOV CX,5 ;计时5秒 CALL action MOV DX,200h;东西绿,南北红 MOV AL,10011111B OUT DX,AL MOV CX,20 ;计时20秒 CALL action MOV DX,200h ;东西黄,南北红 MOV AL,10110111B OUT DX,AL MOV CX,5 ;计时5秒 CALL action JMP A1 ;循环到状态A1,即东西红,南北绿EXIT: MOV AH,4CH INT 21H action PROC PUSH AX PUSH DX PUSH CX mov ah,al;保存紧急状态前的路灯的状态LOOP2: mov dx,202h in al,dx test al,02h;判断c口倒数第二位是否有状态 JnZ L1 ;无紧急状态 ;有紧急键则转到紧急键处理 CALL DISP;显示当前时间 mov dx,200h mov AL,00111111B;路口都显示红灯 out dx,al JMP LOOP2L1: mov dx,200h mov al,ah out dx,al CALL DISPL2: MOV DX,202h;检测1s是否计完wait1: CALL DISP IN AL,DX TEST AL,01H JZ wait1 ;若1s没计数完,继续 wait2: CALL DISP IN AL,DX TEST AL,01H JNZ wait2 LOOP LOOP2 ;20s或5s计数完全?若没计数完,继续 POP CX POP DX POP AX RET action ENDPINITIAL_8253 PROC ;8253初始化,1s PUSH AX PUSH DX mov al,00110101B mov dx,20Bh out dx,al mov al,00h mov dx,208h out dx,al mov al,50h mov dx,208h out dx,al mov al,01110101B mov dx,20Bh out dx,al mov al,00h mov dx,209h out dx,al mov al,04h mov dx,209h out dx,al POP DX POP AX RETINITIAL_8253 ENDPtime1 PROC near lea di,time lea si,x1 MOV CX,2 MOV AL,11101111b ;AL=DFH 1101 1111 控制 Y1~Y5 循环点亮 MOV [si],AL l31: mov dx,202h mov al,0ffh out dx,al MOV DX,201H ;B口输出段码 MOV AL,[DI] OUT DX,AL INC DI MOV AL,[si] MOV DX,202H ;c口输出 OUT DX,AL ROl byte ptr[si],1;循环左移一位 loop l31 RETtime1 ENDPDISP PROC ;数码管显示 PUSH AXPUSH BXPUSH DXPUSH CXlea di,timeMOV AX,CXMOV CL,0AH ;将CL中16进制数转化为十进制数DIV CLMOV BX,OFFSET table1XLATmov [di],alinc dimov al,ahMOV BX,OFFSET table1XLATmov [di],alcall time1POP CXPOP DXPOP BXPOP AXRETDISP ENDPtable1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH time db 2 dup(?)x1 db ?code endsend start

7、系统功能与操作说明

a、南北路口的绿灯、东西路口的红灯同时亮20秒。数码管20秒倒记时显示。b、南北路口的黄灯亮5秒,同时东西路口的红灯继续亮。数码管5秒倒记时显示。c、南北路口的红灯、东西路口的绿灯同时亮20秒。d、南北路口的红灯继续亮、同时东西路口的黄灯亮5秒。e、转a循环f、期间,紧急开关按下,时间暂停,两组路口都显示红灯;紧急开关拨起,继续暂停前的状态继续

8、总结

这个设计是利用四种状态来表示两个路口的红绿灯状态,使用这样化整为零的方法,再利用8255对四种状态进行切换控制,使每种状态之间利用一个延时子程序先进行大概的延时,再利用8253进行对一秒钟的准确延时,利用循环的方式,循环十次为十秒,则完成了对每种信号灯状态的准确定时;为了解决AB口都被占用,而还需要输出口进行对数码管高低位选择的控制,则想到了使用C口的高四位进行该项操作,至于之后的紧急状态的设置,则靠C口的低四位进行输入控制,只需判断相应位置的状态便可以进行这一类的操作。整个实验最困难的地方就是最开始对四种状态的分析,世界上的任何事物总可以使用各种状态来表示,事物的变换规律也可以使用状态之间的转化来体现出来。我们可以将身边的事物转化为某种逻辑关系,这样就能实现各种功能的设备了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。