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

📄 gundong.asm

📁 8*8双色点阵做的简易广告牌,是一次微机课程设计的源码
💻 ASM
字号:
ioport		equ  0c400h-0280h 
proth 		equ  ioport+290h 
protlr 	equ  ioport+298h 
protly 	equ  ioport+2a0h 

io8253a 	equ ioport+280h
io8253b 	equ ioport+281h
io8253c 	equ ioport+283h

io8255a 	equ ioport+288h;a端口输出
io8255b 	equ ioport+28bh
io8255c 	equ ioport+28ah;c端口输入

DATA 		SEGMENT 
MESS  		DB  '                   -------------------------------------------------',0AH,0DH
          	DB  '                   *************************************************' ,0AH,0DH
          	DB  0AH,0DH
          	DB  '                            This program displays "3 2 1 0 Go!"',0AH,0DH
          	DB  0AH,0DH
          	DB  '                            To return to DOS, please press "r".',0AH,0DH
          	DB  0AH,0DH
          	DB  0AH,0DH
          	DB  '                   *************************************************' ,0AH,0DH
          	DB  '                   -------------------------------------------------','$'        

min1  		DB  00h,01h,02h,03h,04h,05h,06h,07h 
three		DB 0H,0H,7eH,52H,42H,66H,0H,0H				;显示数据
two		DB 0H,0H,72H,5aH,4eH,66H,0H,0H
one		DB 0H,0H,0H,7EH,20H,0H,0H,0H
zero		DB 0H,0H,7eH,42H,42H,7cH,0H,0H
g6   		db 0h,7ah,60h,0h,0ch,12h,12h,0ch
g5		DB 7ah,60h,0h,0ch,12h,12h,0ch,0h
g4		DB 60h,0h,0ch,12h,12h,0ch,0h,0eh
g3		DB 0h,0ch,12h,12h,0ch,0h,0eh,4ah
g2		db 0ch,12h,12h,0ch,0h,0eh,4ah,42h
g1		db 12h,12h,0ch,0h,0eh,4ah,42h,3ch
flag		db 01h						;当前显示的是第几个字
flag1		db 00h
DATA      ENDS 
;============================================================
CODE      SEGMENT 
ASSUME    CS:CODE,DS:DATA 
;============================================================ 
START:		MOV   AX,DATA 
		MOV   DS,AX 
		MOV   DX,OFFSET MESS 
		MOV   AH,09 
		INT   21H                      ;显示提示信息 
;============================================================ 

;对要显示的字进行判断

main:		call delay_8253
		mov ah,flag				;d1-d10为红色显示区
d1:		cmp ah,01h                    	;判断是否显示第一个字
		jne  d2
		mov  bx,offset three 
		mov  dx,protlr 
		jmp display
d2:		cmp ah,02h						;判断是否显示第二个字,以下类推
		jne  d3
		mov  bx,offset two 
		mov  dx,protlr 
		jmp display
d3:		cmp ah,03h						
		jne  d4
		mov  bx,offset one 
		mov  dx,protlr 
		jmp display
d4:		cmp ah,04h						
		jne  d5
		mov  bx,offset zero 
		mov  dx,protlr 
		jmp display
d5:		cmp ah,05h						
		jne  d6
		mov  bx,offset g1 
		mov  dx,protlr 
		jmp display
d6:		cmp ah,06h						
		jne  d7
		mov  bx,offset g2 
		mov  dx,protlr 
		jmp display
;
d7:		cmp ah,07h						
		jne  d8
		mov  bx,offset g3 
		mov  dx,protlr 
		jmp display
d8:		cmp ah,08h						
		jne  d9
		mov  bx,offset g4 
		mov  dx,protlr 
		jmp display
d9:		cmp ah,09h						
		jne  d10
		mov  bx,offset g5 
		mov  dx,protlr 
		jmp display
d10:		cmp ah,0ah						
		jne  d11
		mov  bx,offset g6 
		mov  dx,protlr 
		jmp display
;;;;;									;以下为黄色显示区
d11:		cmp ah,0bh						;判断是否显示第一个字
		jne  d12
		mov  bx,offset three 
		mov  dx,protly
		jmp display
d12:		cmp ah,0ch						
		jne  d13
		mov  bx,offset two 
		mov  dx,protly
		jmp display
d13:		cmp ah,0dh						
		jne  d14
		mov  bx,offset one 
		mov  dx,protly
		jmp display
d14:		cmp ah,0eh						
		jne  d15
		mov  bx,offset zero
		mov  dx,protly
		jmp display
d15:		cmp ah,0fh						
		jne  d16
		mov  bx,offset g1 
		mov  dx,protly
		jmp display
d16:		cmp ah,10h						
		jne  d17
		mov  bx,offset g2 
		mov  dx,protly
		jmp display
d17:		cmp ah,11h						
		jne  d18
		mov  bx,offset g3
		mov  dx,protly
		jmp display
d18:		cmp ah,12h						
		jne  d19
		mov  bx,offset g4 
		mov  dx,protly
		jmp display
d19:		cmp ah,13h						
		jne  d20
		mov  bx,offset g5 
		mov  dx,protly
		jmp display
d20:		mov  bx,offset g6 				
		mov  dx,protly
		

;===================================================================
;显示部分程序

display: 		call delay_8255                
			test al,01h					  ;读取8255,当输出为低电平时继续显示当前字,当为
			jnz main1					  ;高电平时跳到main1
  
			mov  ah,01h 
			mov  cx,0008h 
			mov  si,offset min1 
next_b:	    	mov  al,[si] 
			xlat                             ;得到第一行码 
			push dx
			mov  dx,proth 
			out  dx,al 
			pop dx
			mov  al,ah 
			out  dx,al                       ;显示第一行红 
			shl  ah,01 
			inc  si 
			push  cx 
			mov  cx,0ffffh 
delay2:   		loop  delay2                     ;延时
			pop  cx 
			loop  next_b 
			mov  ah,01                       ;有无键按下
			int 16h
			jz display 						;没有键按下跳转到显示程序
			mov ah,00h                     
			int 16h
			cmp al,72h						 ;有键按下判断是否按下的键为“r”
			je  p_out						;为“r”跳转,结束程序
			jmp display						;不是“r”跳转到显示程序
main1:   		mov  al,00                          ;对dx清0,重新对8253赋值
			out  dx,al 	
;==============================================================
return:		mov al,flag
			cmp al,14h
							;判断8个显示的字是否完成
			je back								;显示完跳转
			inc al                             
			mov flag,al
			jmp main							 ;没有显示完, flag + 1,跳转,显示下一个字
;==============================================================
;对最后显示字进行处理
back:			mov al,flag1						;对 flag1 进行判断
			cmp al,0ffh
			jne next                            ;当 flag1为00h跳转到next
			mov al,00h							;flag1 为01h ,则把flag1重新赋值为00h,并把01h给flag,跳转到main重新从第一个字显示
			mov flag1,al
			mov al,01h
			mov flag,al
			jmp main
next:			xor al,0ffh							;al 的值为0h,对al 取反,把值重新给flag1
			mov flag1,al
			jmp main							;跳到main 时,直接显示最后一个字,从而使最后一个字的显示时间比其它的长一倍  

;=================================================================
 delay_8253      PROC  NEAR                   
			mov dx,io8253c 			;向8253写控制字 
			mov al,36h 				;使0通道为工作方式3 
			out dx,al 
			mov ax,400h 				;写入循环计数初值400 
			mov dx,io8253a 
			out dx,al 				;先写入低字节 
			mov al,ah 
			out dx,al 				;后写入高字节 
			mov dx,io8253c 
			mov al,70h 				;设8253通道1工作方式0
			out dx,al 
			mov ax,400 				;写入循环计数初值400 
			mov dx,io8253b 
			out dx,al 				;先写低字节 
			mov al,ah 
			out dx,al 				;后写高字节 
			RET			
delay_8253    ENDP
;==============================================================
delay_8255	PROC  NEAR
			push dx
			mov dx,io8255b			 ;写控制字.设8255为C口输入,A口输出 
			mov al,8bh 
			out dx,al 
			mov dx,io8255c 			;从C口输入一数据 
			in al,dx 
			pop dx
			ret
delay_8255	endp

;===========================================================
p_out:		MOV AH,4CH 					;返回 
		INT 21H 
CODE    ENDS 
	END     START 
;=============================================================

⌨️ 快捷键说明

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