📄 shangchuan+copy+of+travellights.asm
字号:
;设置数据段,以及端口地址分配
data segment
pb db ?
porta equ 218h
portb equ 219h
portc equ 21Ah
ptcon equ 21Bh
mess db 'ENTER ANY KEY CAN EXIT TO DOS!',0dh,0ah,'$'
data ends
;设置堆栈段和代码段
stack segment stack
sta dw 50 dup(?)
top equ length sta
stack ends
code segment
assume cs:code,ds:data,es:data,ss:stack
start: mov ax,data
mov ds,ax
mov es,ax
mov ah,09h ;显示
mov dx,offset mess
int 21h
mov dx,ptcon ;输入控制字
mov al,80h ;工作在方式0
out dx,al ;A、B、C口都为输出
;初始化设置
mov dx,portb ;控制4个黄灯灭
mov al,0ffh
out dx,al
mov dx,portc ;控制4个绿灯灭
mov al,0f0h ;4个红灯亮
out dx,al
call delay5 ;延时
mov pb,10100101b ;控制交通灯灯正常运行的控制字
lll: mov al,pb
mov dx,portc ;控制红绿灯
out dx,al
call delay10
or al,0ffh ;红灯亮灭不变
out dx,al ;绿灯全灭
mov cx,0004h ;黄灯闪烁次数
ttt: mov ah,06h
mov dl,0ffh
int 21h
jnz ppp ;判断是否有键按下
mov dx,portb ;绿灯亮的相应位置黄灯亮
mov al,pb
out dx,al
call delay5
or al,0f0h ;绿灯灭,红灯亮灭不变
out dx,al
call delay5
loop ttt ;黄灯闪烁4次
not pb ;pb取反,红绿灯亮灭互换
mov ah,06h
mov dl,0feh
int 21h
jnz ppp ;判断是否有键按下
jmp lll ;继续控制红绿灯
ppp: mov ax,4c00h ;退出,回到DOS
int 21h
;延时程序
delay1 proc near ;延时子程序
push cx
mov cx,0ffffh
ccc: loop ccc
pop cx
ret
delay1 endp
delay5 proc near ;延时程序
push ax
push cx
mov cx,0060h
uuu: call delay1 ;调用延时子程序
loop uuu
pop cx
pop ax
ret
delay5 endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -