没有合适的资源?快使用搜索试试~ 我知道了~
首页汇编实现交通灯控制模拟程序设计
汇编实现交通灯控制模拟程序设计

1、完成一个十字路口的红绿灯正常状态的控制:实现日常生活中正常的交通路口的控制功能,实现南北、东西方向的切换。 2、显示时间,精确到秒;灯亮时间长短可变。 3、具有自动和手动控制功能。 提高要求: 1、完成夜间状态的控制:由于夜间车辆和行人很少,实现南北、东西方向的黄灯闪烁,进入夜间控制状态。 2、完成紧急状态的控制:南北双方向都设置为红灯,利于执行紧急公务。 3、完成交通堵塞状态的控制:由于交通事故等原因出现南北或东西某一方向堵塞,可人为地调整每个方向的红灯时间,进入手动控制状态。 有详细的注释,和使用方法。
资源详情
资源评论
资源推荐

使用方法:使用 win-masm 运行后,首先输入个任意的两位数表示红灯亮的时间如 05 或
99,然后输入个其他任意字符来作为分隔,接着输入个任意的小于红灯的两位数表示红灯
亮的时间如 03 或 98 等等来表示黄灯亮的时间,绿灯亮的时间为红灯的时间减去黄灯的时
间。输入后开始工作。
当输入 9 时进入手动控制状态,接着可分别输入 1,2,3,4,5,6,来点亮各方向的灯,输入
a,b,c,d,e,f 分别灭各方向灯。输入 7 时返回自动控制状态。
当输入 0 时,则进入夜间状态,黄灯开始闪烁。
当输入 8 时进入紧急状态,个方向红灯亮起。
后两个状态没有做返回到自动控制的功能。
STACK SEGMENT STACK
DW 64 DUP(0)
STACK ENDS
DATA SEGMENT
STRING0 DB 13,10,3 DUP(9,20H),6 DUP(20H),'+',12 DUP(20H),'+$'
STRING1 DB 13,10,3 DUP(9,20H),'======= *** =======$' ;上面一行
STRING2 DB 13,10,3 DUP(9,20H),6 DUP(20H),'*',12 DUP(20H),'*$';一个制表等于 7 个
空格
STRING3 DB 13,10,3 DUP(9,20H),'======= * * * *** =======$' ;下面一行
STRTIME DB 13,10,4 DUP(9,20H),'TIME: S$';显示时间的格式
STRSHOW DB 13,10,2 DUP(9,20H),'SHOW TIME:$'
STRRED DB 13,10,2 DUP(9,20H),'RED LIGHT(S),YELLOW LIGHT(S):$'
STRBLUE DB 13,10,2 DUP(9,20H),'BLUE LIGHT(S)=RED LIGHT(S)-YELLOW
LIGHT(S)$'
RED DB 35H,30H ;红灯亮的时间
BLUE DB 33H,30H ;绿灯亮的时间
YELLOW DB 32H,30H ;黄灯亮的时间
SAVE DB 35H,30H,?,32H,30H ;初始红,黄两种灯亮的时间
COLOUR_CHANGE DB 01H;COLOUR_CHANGE 为 1 时,表示南北红灯亮。为 0 表示
东西
SAVE_RED_NB DB ? ;南北方向
SAVE_YELLOW_NB DB ?
SAVE_BLUE_NB DB ?
SAVE_RED_DX DB ? ;东西方向
SAVE_YELLOW_DX DB ?
SAVE_BLUE_DX DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV BYTE PTR SAVE_RED_NB,04H;红色
MOV BYTE PTR SAVE_YELLOW_NB,07H;白色·

MOV BYTE PTR SAVE_BLUE_NB,07H
MOV BYTE PTR SAVE_RED_DX,07H
MOV BYTE PTR SAVE_YELLOW_DX,0EH;黄色
MOV BYTE PTR SAVE_BLUE_DX,07H
MOV SI,OFFSET STRING0
MOV CX,3
ROAD1:CALL SHOW ;设置南北方向的道路
LOOP ROAD1
MOV SI,OFFSET STRING1
CALL SHOW
MOV SI,OFFSET STRING2
MOV CX,5
NEXT:CALL SHOW
LOOP NEXT
MOV SI,OFFSET STRING3
CALL SHOW
MOV SI,OFFSET STRING0
MOV CX,3
ROAD2:CALL SHOW ;设置南北方向的道路
LOOP ROAD2
MOV SI,OFFSET STRTIME
CALL SHOW
MOV SI,OFFSET STRSHOW
CALL SHOW
MOV SI,OFFSET STRRED
CALL SHOW
MOV SI,OFFSET STRBLUE
CALL SHOW
CALL NORTH_RED ;设置北边的红灯
CALL NORTH_YELLOW;设置北边的黄灯
CALL NORTH_BLUE;设置北边的绿灯
CALL WEST_BLUE;设置西边的绿灯
CALL WEST_YELLOW;设置西边的黄灯
CALL WEST_RED;设置西边的红灯
CALL EAST_RED;设置东边的红灯
CALL EAST_YELLOW;设置东边黄灯
CALL EAST_BLUE;设置东边的绿灯
CALL SOUTH_BLUE;设置南边绿灯
CALL SOUTH_YELLOW;设置南边的黄灯
CALL SOUTH_RED;设置南边的红灯
MOV DH,16

MOV DL,46
MOV AH,02H;设置光标位置
INT 10H
MOV AH,00H;从键盘读入字符
INT 16H
MOV AH,09 ;按当前指定属性显示
MOV BH,0
MOV BL,SAVE_RED_NB;红色
MOV CX,01 ;字符重复一次
INT 10H
MOV BYTE PTR [SAVE+1],AL;输入红灯亮时间十位放在高地址
MOV CX,0FFFFH
DELAY:LOOP DELAY
MOV DH,16
MOV DL,47
MOV AH,2;设置光标位置
INT 10H
MOV AH,00H
INT 16H
MOV AH,09
MOV BH,0
MOV BL,SAVE_RED_NB;红色
MOV CX,01
INT 10H
MOV BYTE PTR [SAVE],AL;输入红灯点亮时间的个位放在低地址
MOV CX,0FFFFH
DELAY1:LOOP DELAY1
MOV DH,16
MOV DL,48
MOV AH,2
INT 10H
MOV AH,00H
INT 16H
MOV AH,09
MOV BH,0
MOV BL,SAVE_RED_NB;红色
MOV CX,01
INT 10H
MOV BYTE PTR [SAVE+2],AL;在红黄亮灯时间中间可以输入字符加以区分

MOV CX,0FFFFH
DELAY2:LOOP DELAY2
MOV DH,16
MOV DL,49
MOV AH,2
INT 10H
MOV AH,00H
INT 16H
MOV AH,09
MOV BH,0
MOV BL,SAVE_RED_NB;红色
MOV CX,01 ;字符重复一次
INT 10H
MOV BYTE PTR [SAVE+4],AL;输入黄灯点亮时间的十位放在高地址
MOV CX,0FFFFH
DELAY3:LOOP DELAY3
MOV DH,16
MOV DL,50
MOV AH,2
INT 10H
MOV AH,00H
INT 16H
MOV AH,09
MOV BH,0
MOV BL,SAVE_RED_NB;红色
MOV CX,01 ;字符重复一次
INT 10H
MOV BYTE PTR [SAVE+3],AL;输入黄灯点亮时间的个位放在低地址
MOV AL,[SAVE]
MOV BYTE PTR [RED],AL;将输入红灯点亮的时间送入红灯亮的时间
MOV AL,[SAVE+1]
MOV BYTE PTR [RED+1],AL
MOV AL,[SAVE+3]
MOV BYTE PTR[YELLOW],AL;将黄灯点亮的时间送入红灯亮的时间
MOV AL,[SAVE+4]
MOV BYTE PTR [YELLOW+1],AL
MOV BYTE PTR [SAVE+3],30H;将输入黄灯点亮时间清零
MOV BYTE PTR [SAVE+4],30H
A1: MOV DI,OFFSET RED;红灯亮的时间送 DI
MOV SI,OFFSET SAVE
剩余15页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1