交通控制其实用汇编也可以实现。
交通灯控制
8255四个端口
40CH ~ 40FH
data segment
encode dw 0861H,0451H,030cH,028aH,-1 ; 控制编码
remain db 30,3,20,3 ; 维持时间
clock dw ?,? ; 存放延时初始时间
PortA equ 40cH ; 8255的PA口地址
s db "traffic light control. Press [ESC] key to exit ... ",0dh,0ah,"$" ;程序功能提示
data ends
code segment
assume cs:code,ds:data
go: mov ax,data
mov ds,ax
mov dx,offset s ;显示提示
mov ah,9
int 21h
mov dx, PortA+3
mov al,80H
out dx,al ; 8255初始化为输出方式
L0: lea si,encode
lea di,remain
L1: mov ax,[si]
mov dx, PortA
out dx,al
inc dx
mov al,ah
out dx,al ; 输出控制编码
mov ah,2cH
int 21H ; 取系统时间,返回CH:CL=时:分、DH:DL=秒:1/100秒
mov clock,dx
mov clock+2,cx
LA: mov ah,0bh
int 21h ; 检测有无按键,返回AL=0FFh(有按键)或0(无按键)
cmp al,0
jz L2
mov ah,8
int 21h ; 等待输入一个字符,返回 AL=输入的字符
cmp al,27
jz exit ; 是[ESC],则结束
L2: mov ah,2cH
int 21H ; 取系统时间,返回CH:CL=时:分、DH:DL=秒:1/100秒
mov bx,clock
cmp cx,clock+2 ; 时分有无改变
Jz L3
add dh,60 ; 当前秒数加60
L3: sub dh,bh ; 已延时的秒数
Cmp dh,[di] ; 延时到否
Jc LA
Inc si ; 改变数据指针
Inc si
Inc di
Cmp word ptr[si],-1 ; 是否结束标志
Jz L0
Jmp L1
Exit: mov al,0 ; 所有灯灭
Mov dx,porta
Out dx,al
Inc dx
Out dx,al
Mov ah,4ch ; 结束程序
Int 21h
Code ends
End go
霓虹灯控制
LS373七个端口
440H ~ 446H
data segment
a db 255 ;a~g七个变量放置七个端口的数据
g db 255 ;数据的输出由子程序完成
b db 255
CC db 0
d db 0
e db 0
f db 0
clock db ?
port equ 440h ; 端口
s db "neon light control. Press any key to exit ...",0dh,0ah,"$" ;程序功能提示
data ends
code segment
assume ds:data,cs:code
start: mov ax,data
mov ds,ax
mov dx,offset s ;显示提示
mov ah,9
int 21h
again:
;mov ah,2ch 被屏蔽的程序是用来判断时间是否是黑天
;int 21h 来控制灯的开关
;cmp ch,20 由于演示的需要而屏蔽掉了
;jnc f1
;cmp ch,6
;jc f1
;jmp exit
f1: call xianshi1
mov ax,12
mov dx,0001h
mov a,dh
mov g,dl
f4: call xianshi1
ror dx,1
mov a,dh
mov g,dl
dec al
jnz f4
mov dx,0ffffh
mov a,dh
mov g,dl
mov ah,b
mov al,CC
mov cx,6
f5: xor dx,0fffeh
mov a,dh
mov g,dl
xor ax,0ffffh
mov b,ah
mov CC,al
call xianshi1
loop f5
mov bp,2
f15: mov b,255
mov CC,0
mov si,12
mov dx,8000h
mov bx,0001h
mov d,dh
mov f,bl
call xianshi1
f14: sar dx,1
sal bx,1
inc bx
push bx
push cx
push dx
or bl,ch
or bh,dl
or cl,dh
mov d,cl
mov e,bh
mov f,bl
call xianshi1
pop dx
pop cx
pop bx
dec si
jnz f14
mov si,12
mov bx,0fffh
mov cx,0
mov dx,0fff0h
f6: shr bx,1
shr cl,1
shl ch,1
shl dx,1
push bx
push cx
push dx
or bl,ch
or bh,dl
or cl,dh
mov d,cl
mov e,bh
mov f,bl
call xianshi1
pop dx
pop cx
pop bx
dec si
jnz f6
dec bp
jnz f15
mov cx,20
mov d,33h
mov e,33h
mov f,33h
f16: not d
not e
not f
call xianshi1
call delay2
loop f16
mov d,0
mov e,0
mov f,0
call xianshi1
call delay2
mov si,2
f9: mov bx,8000h
f8: mov cx,2
f7: xchg bl,bh
mov b,bl
mov CC,bh
call xianshi1
loop f7
shr bh,1
jnz f8
dec si
jnz f9
mov cx,8
mov bx,0080h
mov CC,bh
mov b,bl
f0: call xianshi1
xchg bl,bh
mov CC,bh
mov b,bl
call xianshi1
xchg bl,bh
sar bl,1
mov CC,bh
mov b,bl
loop f0
mov si,2
mov dx,0080h
mov cx,1
mov ax,8
mov d,dl
f3: call xianshi1
sar dl,1
sar cx,1
mov d,dl
mov e,ch
mov f,cl
dec al
jnz f3
mov cx,8000h
mov ax,16
mov e,ch
dec si
jnz f3
mov si,6
mov bx,0fffh
mov cx,0
mov dx,0fff0h
f11: shr bx,1
shr cl,1
shl ch,1
shl dx,1
push bx
push cx
push dx
or bl,ch
or bh,dl
or cl,dh
mov d,cl
mov e,bh
mov f,bl
call xianshi1
pop dx
pop cx
pop bx
shr bx,1
shr cl,1
shl ch,1
shl dx,1
push bx
push cx
push dx
or bl,ch
or bh,dl
or cl,dh
mov d,cl
mov e,bh
mov f,bl
call xianshi1
pop dx
pop cx
pop bx
dec si
jnz f11
jmp again
exit: mov cx,7
mov dx,port
ex2: mov al,0
out dx,al
inc dx
loop ex2
mov ah,4ch
int 21h
xianshi1 proc near
push ax
push cx
push dx
push si
mov cx,7
lea si,a
mov dx,port
xs: mov al,[si]
out dx,al
inc si
inc dx
loop xs
pop si
pop dx
pop cx
pop ax
call delay2
call test2
ret
xianshi1 endp
delay2 proc near
push si
push ax
push bx
push cx
push dx
mov si,7
de3: mov ah,2cH
int 21H ; 取系统时间,返回CH:CL=时:分、DH:DL=秒:1/100秒
mov clock,dl
de2: mov ah,2cH
int 21H ; 取系统时间,返回CH:CL=时:分、DH:DL=秒:1/100秒
cmp clock,dl
Jz de2
dec si
jnz de3
pop dx
pop cx
pop bx
pop ax
pop si
ret
delay2 endp
test2 proc near
push ax
push dx
mov ah,6h
mov dl,0ffh
int 21h
jnz te1
pop dx
pop ax
jmp te3
te1: pop dx
pop ax
mov cx,7
mov dx,port
te2: mov al,0
out dx,al
inc dx
loop te2
mov ah,4ch
int 21h
te3: ret
test2 endp
code ends
end start