匯編語言實現通過8255A和4個開關控制實現8個LED燈和8個7位數碼管顯示指定數字全亮、全滅、從左至右、從右至左跑馬燈式點亮


最后改進代碼:

	.MODEL	TINY	
	.STACK	100
	.DATA
ledshow DB 11111110B   ;數據段定義變量按“變量名 數據類型 數據”;DB為字節型
seven DB 07h	
zero DB 00h
		
	.CODE
START:	A equ 0270H		;數碼管端口地址
		B equ 0271H		;0-1開關端口地址
		C equ 0272H		;控制數碼管顯示內容 
		
		mov	ax,@DATA   ;獲得當前程序的數據段地址,並傳送給數據段DS寄存器保存。
		mov ds,ax      ;這樣,程序中訪問存儲器操作數時,默認情況下就會從DS指定的數據段進行存取  
		mov	dx,273h
		mov	al,10000010H   
		out	dx,al
		
function:	
		call delay
		mov	dx,B	
		in	al,dx   ;從dx端口地址中將數據讀入到al中
		and	al,00001111B
		cmp	al,00000001B
		je	fun1
		cmp	al,00000010B
		je	fun2
		cmp	al,00000100B
		je	fun3
		cmp	al,00001000B
		je	fun4	
		
fun1:	mov	dx,A
		mov	al,00H
		out	dx,al   ;將al中的值讀出到dx端口地址中
		jmp	function
		
fun2:	mov	dx,A
		mov	al,0FFH
		out	dx,al
		
		mov	dx,C
		mov	al,01011011B
		out	dx,al
		jmp	function	

fun3:	mov	dx,C
		mov	al,01001111B
		out	dx,al
		mov	dx,A
		
fun3xh:	mov cx,8
        lea	bx,ledshow
		rol ledshow
		mov al,seven
		dec seven
		xlat
		out	dx,al
		call delay
		loop fun3xh
		jmp	function
		
fun4:	mov	dx,C
		mov	al,01100110B
		out	dx,al
		mov	dx,A
		
fun4xh: mov cx,8
		lea	bx,ledshow
		ror ledshow
		mov	al,zero
		inc zero
		xlat
		out	dx,al
		call delay
		loop fun4xh
		jmp	function

delay	proc near   ;proc為子程序起點; 調用程序和子程序在同一code segment中時用near, 只能被相同code segment的其它程序調用; 不在同一code segment中時用far,可以被相同或不同的代碼段程序調用。
		push cx
		mov	cx,30000
delay1: loop delay1
		pop cx
		ret   ;子程序結束時調用, 用於實現相應地址參數從該子程序到下一步程序的轉移的轉移
delay	endp

END	START

  改進前匯編代碼:

	.MODEL	TINY
COM_ADD		EQU	0273H	
PA_ADD		EQU	0270H	
PB_ADD		EQU	0271H
PC_ADD		EQU	0272H		
	.STACK	100
	.DATA
LED_Data	DB	11111110B	
		DB	11111101B	
		DB	11111011B
		DB	11110111B	
		DB	11101111B	
		DB	11011111B
		DB	10111111B
		DB	01111111B		

	.CODE
START:		MOV	AX,@DATA
		MOV	DS,AX
		NOP
		MOV	DX,COM_ADD
		MOV	AL,82H		;PA、PB、PC為基本輸出模式
		OUT	DX,AL
		
LOOP1:		CALL	DL500ms
		CALL	DL500ms
		MOV	DX,PB_ADD	
		IN	AL,DX
		AND	AL,00001111B
		CMP	AL,00000001B
		JE	f1
		cmp	al,00000010B
		je	f2
		cmp	al,00000100B
		je	f3
		cmp	al,00001000B
		je	f4
		 
f1:
		mov	dx,PA_ADD
		MOV	al,00H
		OUT	dx,al
		jmp	LOOP1

f2:	mov	dx,PA_ADD
		MOV	al,0FFH
		OUT	dx,al
		mov	dx,PC_ADD
		mov	al,01011011B
		out	dx,al
		jmp	LOOP1
		
f4:
		mov	dx,PC_ADD
		mov	al,01100110B
		out	dx,al
		mov	dx,PA_ADD
		lea	bx,LED_DATA
		mov	al,0
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,1
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,2
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,3
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,4
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,5
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,6
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,7
		xlat
		out	dx,al
		call	DL500ms
		jmp	LOOP1

f3:	
		mov	dx,PC_ADD
		mov	al,01001111B
		out	dx,al
		mov	dx,PA_ADD
		lea	bx,LED_DATA
		mov	al,7
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,6
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,5
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,4
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,3
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,2
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,1
		xlat
		out	dx,al
		call	DL500ms
		lea	bx,LED_DATA
		mov	al,0
		xlat
		out	dx,al
		call	DL500ms
		jmp	LOOP1

DL500ms		PROC	NEAR
		PUSH	CX
		MOV	CX,30000
DL500ms1:	LOOP	DL500ms1
		POP	CX
		RET
DL500ms		ENDP
	 	END	START

  前導題目:

 

 

 

 

 

 

 

 

LEDdt  db 8 dup(0)
            mov si, offset LEDdt
            call LEDdisp
LEDdisp   proc
                push ax
	push bx
	push dx
	mov bx, offset LEDtb
	mov ah, 0feh
LED1:	lodsb
	xlat cs:LEDtb
	mov dx, segport
	out dx, al
	mov al, ah
	mov dx, bitport
	out dx, al
  	call delay
	rol ah, 1
	cmp ah, 0feh
	jnz LED1
	pop dx
	pop bx
	pop ax
	ret
LEDtb	db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h
	db 80h, 90h, 88h, 83h, 0c6h, 0c1h, 86h, 8eh
LEDdisp	endp
timer	=10
delay	proc
	push bx
	push cx
	mov bx, timer
delay1:	xor cx, cx
delay2: 	loop delay2
 	dec bx
	jnz delay1
	pop cx
	pop bx
	ret
delay	endp

  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM