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

📄 electric clock.asm

📁 上个学期自己写的汇编课程设计,文档就不发了. 七段码电子表显示程序 1.七段码电子表显示程序 2.菜单选择:设置时,分,秒,开始,退出 3.模拟七段码管显示时,分,秒 4.简单界面修饰
💻 ASM
字号:
Data segment
Disptime db 00,00,":",00,00,":",00,00,"$"	;为了存储要显示的时间
Time dw A10,A11,A12,A13,A14,A15,A16,A17,A18,A19
Welcome db 02,00,'Welcome To Use Our Electric Clock','$'
ESCExit db 03,00,'Press ESC to exit','$'
ShowT db 04,00,'1 Show time','$'	;1 开始显示时钟
SetT db 05,00,'2 Set time','$'		;2 设置时间'
MenuW db 'Menu Window','$'
ShowTimeW db 'ShowTime Window','$'
SetTimeW db 'SetTime Window','$'
Tip db 'Hour:Minute:Second','$'		;设置时间提示
Error db 'Set time error,please set again!','$'		;设置时间错误
Stime db 6 dup(?)
;*****定义0-9十个图形数字*****
s0 db 6
	db 5fh,0fah,0,0		;5fh为ASCII码的95即"-"
	db 7ch,0fah,1,-1	;0fah为01111010对于属性字符的白底绿色
	db 7ch,0fah,1,0		;7ch为ASCII码的1247即"|"
	db 5fh,0fah,0,1
	db 7ch,0fah,0,1
	db 7ch,0fah,-1,0
s1 db 2
	db 7ch,0fah,1,0
	db 7ch,0fah,1,0
s2 db 5
	db 5fh,0fah,0,0
	db 7ch,0fah,1,1
	db 5fh,0fah,0,-1
	db 7ch,0fah,1,-1
	db 5fh,0fah,0,1
s3 db 5
	db 5fh,0fah,0,0
	db 7ch,0fah,1,1
	db 5fh,0fah,0,-1
	db 7ch,0fah,1,1
	db 5fh,0fah,0,-1
s4 db 4
	db 7ch,0fah,1,0
	db 5fh,0fah,0,1
	db 7ch,0fah,1,1
	db 7ch,0fah,-1,0
s5 db 5
	db 5fh,0fah,0,0
	db 7ch,0fah,1,-1
	db 5fh,0fah,0,1
	db 7ch,0fah,1,1
	db 5fh,0fah,0,-1
s6 db 6
	db 5fh,0fah,0,0
	db 7ch,0fah,1,-1
	db 5fh,0fah,0,1
	db 7ch,0fah,1,1
	db 5fh,0fah,0,-1
	db 7ch,0fah,0,-1
s7 db 3
	db 5fh,0fah,0,0
	db 7ch,0fah,1,1
	db 7ch,0fah,1,0
s8 db 7
	db 7ch,0fah,1,0
	db 5fh,0fah,-1,1
	db 7ch,0fah,1,1
	db 5fh,0fah,0,-1
	db 7ch,0fah,1,1
	db 5fh,0fah,0,-1
	db 7ch,0fah,0,-1
s9 db 6
	db 7ch,0fah,1,0
	db 5fh,0fah,-1,1
	db 7ch,0fah,1,1
	db 5fh,0fah,0,-1
	db 7ch,0fah,1,1
	db 5fh,0fah,0,-1
s10 db 2
	db 07h,0fah,1,0
	db 07h,0fah,1,0
Data ends
;...................
Clear macro att,ulrow,ulcol,lrrow,lrcol	;清屏宏
	push ax
	push bx
	push cx
	push dx
	mov ah,6
	mov al,0	;上卷行数. al为0时实际完成的是清除屏幕
	mov bh,att	;attribute 卷入行属性
	mov ch,ulrow	;upper left row 左上角行号
	mov cl,ulcol	;upper left column 左上角列号
	mov dh,lrrow	;lower right row 右下角行号
	mov dl,lrcol	;lower right column 右下角列号
	int 10h
	pop dx
	pop cx
	pop bx
	pop ax
endm
;......................
Display macro string	;显示字符串
	push ax
	push bx
	push cx
	push dx
	push di
	mov ah,09h
	lea dx,string
	int 21h
	pop di
	pop dx
	pop cx
	pop bx
	pop ax
endm
;........................
Locate macro row,col	;光标定位,参数为行和列
	push ax
	push bx
	push cx
	push dx
	push di
	mov bh,0	;bh为行号
	mov dh,row
	mov dl,col
	mov ah,02h
	int 10h
	pop di
	pop dx
	pop cx
	pop bx
	pop ax
endm
;........................
ShowChange macro c1,c2,c3	;系统时间转换到Disptime中
	mov al,c1
	cbw
	mov bh,10
	div bh
	add al,'0'
	mov Disptime[c2],al
	add ah,'0'
	mov Disptime[c3],ah
endm
;........................
Setchange macro c1,c2,c3	;设置系统时间放到Stime中
	mov al,Stime[c2]
	sub al,'0'
	mov bh,10
	mul bh
	add al,Stime[c3]
	sub al,'0'
	mov c1,al
endm
;-------------------------------------------------------------------
Code segment
assume cs:Code,ds:Data
;--------------主函数----------------
Start:
	mov ax,Data
	mov ds,ax
	call Menu
	mov ah,01h	;输入选择
	int 21h
	cmp al,'1'
	je Choice1
	cmp al,'2'
	je Choice2
	cmp al,1bh	;按Esc退出
	je Exit1
	jmp Start
Choice1:
	call ShowTime
Choice2:
	call SetTime
Exit1:
	jmp Exit
;--------子函数----------
ShowTime proc near
	Clear 07h,0,0,2,79
	Locate 2,34
	Display MenuW
	Clear 0a0h,3,18,10,60
	Clear 0f7h,4,19,9,59	;从第四行,20列开始
	Locate 4,22
	Display Welcome
	Locate 6,22
	Display ShowT
	Locate 7,22
	Display SetT
	Locate 9,41
	Display ESCExit
	mov  ah,01h
	mov  ch,20h
	int  10h		;取消鼠标显示
	Clear 0ah,12,36,12,79
	Locate 12,32
	Display ShowTimeW
	Clear 0b0h,13,18,21,60
Show:
	Clear 0f0h,14,19,20,59	;刷新显示时间的部分
	mov ah,2ch
	int 21h			;取系统时间
	Showchange ch,0,1
	Showchange cl,3,4
	Showchange dh,6,7
	mov bx,0
	mov dx,0f18h
Again:
	Locate dh,dl
	mov al,Disptime[bx]
	cmp al,':'
	je A20
	sub al,'0'
	shl al,1
	cbw
	mov si,ax
	jmp Time[si]
Return:
	add dx,0004h
	inc bx
	cmp bx,8
	jnz Again
	call Delay	;调用延迟为了显示时间慢些
	jmp Show
A10:
	call prog0
	jmp Return
A11:
	call prog1
	jmp Return
A12:
	call prog2
	jmp Return
A13:
	call prog3
	jmp Return
A14:
	call prog4
	jmp Return
A15:
	call prog5
	jmp Return
A16:
	call prog6
	jmp Return
A17:
	call prog7
	jmp Return
A18:
	call prog8
	jmp Return
A19:
	call prog9
	jmp Return
A20:
	call prog10
	jmp Return
	ret
ShowTime endp
;---------------------------------
SetTime proc near		;输入时间子程序
	Clear 07h,0,0,2,79
	Locate 2,34
	Display MenuW
	Clear 0a0h,3,18,10,60
	Clear 0f7h,4,19,9,59	;从第四行,20列开始
	Locate 4,22
	Display Welcome
	Locate 6,22
	Display ShowT
	Locate 7,22
	Display SetT
	Locate 9,41
	Display ESCExit

	Clear 0ah,12,36,12,79
	Locate 12,32
	Display SetTimeW
	Clear 0b0h,13,18,21,60
	Clear 0f0h,14,19,20,59
	Locate 15,30
	Display Tip
	Locate 17,37
	lea dx,Stime
	mov bx,0
Input:
	mov ah,08h	;键盘输入缓冲区
	int 21h
	cmp al,1bh
	je Exit2
	jne Next
Exit2:
	jmp Exit
Next:
	cmp al,48	;小于字符'0'
	jb Input
	cmp al,57	;大于字符'9'
	ja Input
	mov Stime[bx],al
	mov dl,al
	mov ah,02h
	int 21h
	inc bx
	cmp bx,6
	jne Input
	SetChange ch,0,1
	SetChange cl,2,3
	SetChange dh,4,5
	mov dl,00
	mov ah,2dh	;设置系统时间
	int 21h
	cmp al,00	;返回参数al=00成功
	jne E
	call ShowTime
E:
	call ErrorTime
	ret
SetTime endp
;---------------------------------------
ErrorTime proc near
	Clear 0f0h,14,19,20,59	;刷新显示时间的部分
	Locate 17,23
	Display Error
	mov ah,01h
	int 21h
	jmp Choice2
	ret
ErrorTime endp
;---------------------------------------
prog0 proc
	lea di,s0
	call Moveshape
	ret
prog0 endp
prog1 proc
	lea di,s1
	call Moveshape
	ret
prog1 endp
prog2 proc
	lea di,s2
	call Moveshape
	ret
prog2 endp
prog3 proc
	lea di,s3
	call Moveshape
	ret
prog3 endp
prog4 proc
	lea di,s4
	call Moveshape
	ret
prog4 endp
prog5 proc
	lea di,s5
	call Moveshape
	ret
prog5 endp
prog6 proc
	lea di,s6
	call Moveshape
	ret
prog6 endp
prog7 proc
	lea di,s7
	call Moveshape
	ret
prog7 endp
prog8 proc
	lea di,s8
	call Moveshape
	ret
prog8 endp
prog9 proc
	lea di,s9
	call Moveshape
	ret
prog9 endp
prog10 proc
	lea di,s10
	call Moveshape
	ret
prog10 endp
;------------------------------------------------
Moveshape proc near
	push ax
	push bx
	push cx
	push dx
	push di
	mov ah,0fh
	int 10h		;取当前显示方式
	sub ch,ch
	mov cl,[di]	;循环显示一个字的次数
	inc di
plotnext:
	add dh,[di+2]
	add dl,[di+3]
	mov ah,2
	int 10h		;设置光标位置
	mov al,[di]
	mov bl,[di+1]
	push cx
	mov cx,1
	mov ah,09
	int 10h
	pop cx
	add di,4
	loop plotnext
	pop di
	pop dx
	pop cx
	pop bx
	pop ax
	ret
Moveshape endp
;-----------------------------------------
Menu proc near
	Clear 0ah,0,0,24,79	;清除全屏
	Locate 2,34
	Display MenuW		;定位显示 'MenuWindow'
	Clear 0a0h,3,18,10,60
	Clear 0f0h,4,19,9,59	;设置窗口和字体颜色
	Locate 4,22
	Display Welcome
	Locate 6,22
	Display ShowT
	Locate 7,22
	Display SetT
	Locate 9,41
	Display ESCExit
	Locate 7,35
	ret
Menu endp

Delay proc near		;延迟
	push ax
	push cx
	push dx
	mov cx,1000h
Again1:
	mov ax,1000h
again2:
	dec ax
	jnz Again2
	mov dl,0ffh
	mov ah,06h
	int 21h
	cmp al,'2'
	je C2
	cmp al,1bh
	je Exit3
	jmp continue
C2:
	jmp Choice2
Exit3:
	jmp Exit
continue:
	loop again1
	pop dx
	pop cx
	pop ax
	ret
Delay endp

Exit:
	Clear 07h,0,0,24,79
	mov ah,4ch
	int 21h
Code ends
	end Start

⌨️ 快捷键说明

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