交通灯/霓虹灯控制电路

交通控制其实用汇编也可以实现。在这里插入图片描述
交通灯控制
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



猜你喜欢

转载自blog.csdn.net/qq_44682019/article/details/109137138