⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 traffic.asm

📁 交通灯模拟控制器
💻 ASM
字号:
data segment
helpmess  db "TRAFFIC  LIGHTS$"
orientation1  db "EAST$"
orientation2  db "SOUTH$"
orientation3  db "WEST$"
orientation4  db "NORTH$"
control1 db "red&green lights time(1<=t<=9):?s$ "
control2 db "orange lights time:1s$"
control3 db "change r&g time,all red?(y/n/r):$"
k db ?
data ends

code segment
;移动当前光标
movepoint  macro x,y
	push ax
	push bx
	push dx
	mov bh,0
	mov dl,y
	mov dh,x
	mov ah,2
	int 10h
	pop dx
	pop bx
	pop ax
endm
;**************************
 printfchar macro char,n
	push cx
	mov cx,n
	mov bh,0
	mov al,char
	mov ah,10
	int 10h
	pop cx
endm
;************************
;显示字符串
putstr macro point
	push dx
	push ax
	mov dx,point		
	mov ah,9
	int 21h
	pop ax
	pop dx
endm
;**************************
colourchar macro char,n,colour
	push cx
	mov cx,n
	mov bh,0
	mov bl,colour
	mov al,char
	mov ah,9
	int 10h
	pop cx
endm
;**************************
disappear  macro 
             push ax
             push cx
             mov ah,1h
             mov cx,2000h
             int 10h
             pop cx
             pop ax
endm
;**************************
recur macro 
             push ax
             push cx
             mov ah,1h
             mov cx,0c0dh
             int 10h
             pop cx
             pop ax
endm
;************************
getchar  macro 
             ;push ax  一定不能压栈,入栈
             mov ah,1h
             int 21h
             ;pop ax
endm
;************************
check    macro 
             mov ah,0bh
             int 21h
 endm
;************************


 assume cs:code,ds:data
 start:
	mov ax,data
	mov ds,ax
;-----------------------------主程序开始-----------------------------
                 ;画双横线
                 movepoint 12,19
                 printfchar  '.',20
                 movepoint 12,46
                 printfchar '.',20
                 ;
                 movepoint 16,19
                 printfchar  '.',20
                 movepoint 16,46
                 printfchar '.',20  
                 ;画双竖线
                 mov dh,12
                 mov cx,10
row11:     movepoint dh,38
                 printfchar '.',1
                 dec dh
                 loop row11
                 ;
                 mov dh,16
                 mov cx,10
row12:     movepoint dh,38
                 printfchar '.',1
                 inc dh
                 loop row12
                 ;
                 mov dh,12
                 mov cx,10
row21:     movepoint dh,46
                 printfchar '.',1
                 dec dh
                 loop row21
                 ;
                 mov dh,16
                 mov cx,10
row22:     movepoint dh,46
                 printfchar '.',1
                 inc dh
                 loop row22
;******************************
 help:        movepoint  1,10
                 mov dx,offset helpmess
                 putstr dx    
                 ;    
                 movepoint  14,62
                 mov dx,offset orientation1
                 putstr dx 
                 ;    
                 movepoint  24,40
                 mov dx,offset orientation2
                 putstr dx 
                 ;    
                 movepoint  14,19
                 mov dx,offset orientation3
                 putstr dx    
                 ;
                 movepoint  4,40
                 mov dx,offset orientation4
                 putstr  dx   
                  ;
                 movepoint  4,3
                 mov dx,offset control1
                 putstr  dx   
                  ;
                 movepoint  6,3
                 mov dx,offset control2
                 putstr  dx   
                 ;
                 movepoint  8,3
                 mov dx,offset control3
                 putstr  dx   
 ;******************************** 
 allred:     movepoint 11,42;O1,O3black  
                colourchar 7,1,00000000b  
                movepoint 17,42
                colourchar 7,1,00000000b
                movepoint 14,47;O2,O4black
                colourchar 7,1,00000000b 
                movepoint 14,37
                colourchar 7,1,00000000b
                ;
                movepoint 11,40;R1,R3red         
                colourchar 7,1,00000100b  
                movepoint 17,44
                colourchar 7,1,00000100b
                movepoint 13,47;R2,R4red
                colourchar 7,1,00000100b 
                movepoint 15,37
                colourchar 7,1,00000100b           
 ;********************************   
 yes:         movepoint  4,34
                mov al,0
                getchar  
                cmp al,'1'
                jb yes
                cmp al,'9'
                ja yes
                mov k,al  
                jmp no 
;*****************************
allred1:     jmp  allred    
;********************************
 getkey:    recur
                 movepoint  8,35
                 getchar  ;mov ah,1
                               ;int 21h
                 cmp al,'y'
                 je yes
                 cmp al,'n'
                 je no
                 cmp al,'r'
                 je allred1
                 jne getkey
                 
;************************
              
 no:         disappear                   
                movepoint 11,40 ;R1,R3black
                colourchar 7,1,00000000b  
                movepoint 17,44
                colourchar 7,1,00000000b
                movepoint 13,47;R2,R4black
                colourchar 7,1,00000000b 
                movepoint 15,37
                colourchar 7,1,00000000b 
                ;
               
;****************
                ;one
                movepoint 11,40;R1,R3red         
                colourchar 7,1,00000100b  ;10000100b闪烁
                movepoint 17,44
                colourchar 7,1,00000100b
                ;
                movepoint 15,47;G2,G4green
                colourchar 7,1,00000010b 
                movepoint 13,37
                colourchar 7,1,00000010b
                ;------------
                movepoint 11,42;O1,O3black  
                colourchar 7,1,00000000b  
                movepoint 17,42
                colourchar 7,1,00000000b
                ;
                movepoint 14,47;O2,O4black
                colourchar 7,1,00000000b 
                movepoint 14,37
                colourchar 7,1,00000000b;
                ;---------------------------------------
                call contrl
               movepoint 4,34
               printfchar k,1
                ;two
                movepoint 11,42;O1,O3orange    
                colourchar 7,1,10001110b  ;闪烁
                movepoint 17,42
                colourchar 7,1,10001110b
                ;
                movepoint 14,47;O2,O4orange
                colourchar 7,1,10001110b 
                movepoint 14,37
                colourchar 7,1,10001110b
                ;------------
                movepoint 11,40 ;R1,R3black
                colourchar 7,1,00000000b  
                movepoint 17,44
                colourchar 7,1,00000000b
                ;
                movepoint 15,47;G2,G4black
                colourchar 7,1,00000000b 
                movepoint 13,37
                colourchar 7,1,00000000b
                 ;------------------------------------
                call delay
                ;call delay
                ;call delay
                ;three
                movepoint 11,44;G1,G3green   
                colourchar 7,1,00000100b  
                movepoint 17,40
                colourchar 7,1,00000100b
                ;
                movepoint 13,47;R2,R4red
                colourchar 7,1,00000010b 
                movepoint 15,37
                colourchar 7,1,00000010b
                ;------------
                movepoint 11,42;O1,O3black  
                colourchar 7,1,00000000b  
                movepoint 17,42
                colourchar 7,1,00000000b
                ;
                movepoint 14,47;O2,O4black
                colourchar 7,1,00000000b 
                movepoint 14,37
                colourchar 7,1,00000000b               
                ;------------------------------------
                 call contrl
                movepoint 4,34
                printfchar k,1
                 ; four
                movepoint 11,42;O1,O3orange   
                colourchar 7,1,10001110b  
                movepoint 17,42
                colourchar 7,1,10001110b
                ;
                movepoint 14,47;O2,O4orange
                colourchar 7,1,10001110b 
                movepoint 14,37
                colourchar 7,1,10001110b
                ;------------
                movepoint 11,44;G1,G3black
                colourchar 7,1,00000000b  
                movepoint 17,40
                colourchar 7,1,00000000b
                ;
                movepoint 13,47;R2,R4black
                colourchar 7,1,00000000b 
                movepoint 15,37
                colourchar 7,1,00000000b 
                call  delay 
                check 
                cmp  al,00h
                je  getkey
                cmp   al,ffh
              
                  
;******************************
delay    proc   near
             push  bx
             push  cx
             push ax
             mov  bl,02
back:    mov  cx,33144;33144*15.08us=0.5s  
            ;                     
wait1: in al,61h
            and al,10h
            cmp al,ah
            je  wait1
            mov ah,al
            loop wait1
            ;
            dec  bl
            jnz  back
            pop ax
            pop  cx
            pop  bx
            ret
 delay   endp     
;*****************
contrl     proc    near
               push cx
               mov cx,0
               mov cl,k
               mov al,cl
next:       call  delay
               dec cl
               movepoint 4,34
               printfchar cl,1
               cmp cl,'0'
               jnz  next               
               pop cx
               ret
contrl     endp        
 ;*******************************
 code ends
end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -