资源描述
汇编语言程序设计 袁全清
精品资料
汇编语言课程设计报告
课 题: 设计时钟显示程序
指导老师: 袁全 清
学 部: 信息科学与技术学部 专业班级: 10软件工程(1)班
学 号:
汇编程序设计报告
一、任务及要求:
任务:编程设计时实时钟(数字、模拟均可)
要求:数字尽量大,颜色应鲜艳,程序尽量少。
二、程序设计的分析
1、时钟的获取:
① 用软中断INT 1AH
AH
功能
入口参数
出口参数
说明
0
读数
CX、DX=高、低字AL=0,若时钟未过24
双字为((时*60+
分)*60+秒)*18.2
1
写数
CX、DX=高、低字
2
读时
CH\CL\DH=时分秒CF=1,时钟未操作
均为压缩BCD码
3
写时
CH\CL\DH=时分秒
4
读日
CX\DH\DL=年月日
5
写日
CX\DH\DL=年月日
6
写铃
CH\CL\DH=时分秒
CF=1,时钟未操作或已置响铃允许
7
请铃
请除响铃
②直接读取CMOS中的数据
MOV AH,2CH
INT 21H;通过2ch号DOS调用,获得时间信息
MOV AL,CH;小时
LEA SI,HOUR
CALL PL
2、时钟的显示
7段显示
仅供学习与交流,如有侵权请联系网站删除 谢谢14
如右图,由三横线和四竖线组成。每条线需要显示时,每一方块的ASCII码为219;不需显示时,方块的ASCII码为32。
由此7段显示和不显示的组合,形成0—9的数字。
显示横线:先定位左边位置,显示数个方块
显示竖线:数次定位每行位置并显示一个方块
开始
三、程序流程图如下:
MOV AH,1
INT 16H
JZ NO-KEY
ZF=0
CALL NEAD-TIME
CALL NEAD-DAY
CALL ZHUAN
CALL DISPLAY
EXIT
COMPATRE PROC NEAR
STATR
LEA DL,B0
CALL SHOW
CMP AL,30H
JNZ Y1
N Y
四.完整程序
STACK SEGMENT STACK 'STACK'
DB 1024 DUP (0)
STACK ENDS
DATA SEGMENT
BWORD EQU THIS BYTE
R0 DW (0)
R1 DW (0)
R2 DW (0)
R3 DW (0)
R4 DW (0)
R5 DW (0)
R6 DW (0)
R7 DW (0)
;
TEMP1 DW (0)
TEMP2 DW (0)
TEMP3 DW (0)
TEMP4 DW (0)
;
LED1 DB (0) ;时针十位显示
LED2 DB (0) ;时针个位显示
LED3 DB (0)
LED4 DB (0) ;分针十位显示
LED5 DB (0) ;分针个位显示
LED6 DB (0)
LED7 DB (0) ;秒针十位显示
LED8 DB (0) ;秒针个位显示
S_REG DB (0)
M_REG DB (0)
H_REG DB (0)
;---1-9个数字的显示方式-------------
F0 DB 0
DB 5FH,0AH,0,0
DB 7CH,0AH,1,-1
DB 7CH,0AH,1,0
DB 5FH,0AH,0,1
DB 7CH,0AH,0,1
DB 7CH,0AH,-1,0
DB 5FH,0,0,-1 ;中间段
F1 DB 0
DB 5FH,0,0,0 ;0灭
DB 7CH,0,1,-1 ;0AH亮
DB 7CH,0,1,0
DB 5FH,0,0,1
DB 7CH,0AH,0,1 ;中上
DB 7CH,0AH,-1,0 ;中下
DB 5FH,0,0,-1
F2 DB 0
DB 5FH,0AH,0,0
DB 7CH,0,1,-1 ;左上
DB 7CH,0AH,1,0
DB 5FH,0AH,0,1
DB 7CH,0,0,1 ;左下
DB 7CH,0AH,-1,0
DB 5FH,0AH,0,-1
F3 DB 0
DB 5FH,0AH,0,0
DB 7CH,0,1,-1
DB 7CH,0,1,0
DB 5FH,0AH,0,1
DB 7CH,0AH,0,1
DB 7CH,0AH,-1,0
DB 5FH,0AH,0,-1
F4 DB 0
DB 5FH,0,0,0
DB 7CH,0AH,1,-1
DB 7CH,0,1,0
DB 5FH,0,0,1
DB 7CH,0AH,0,1
DB 7CH,0AH,-1,0
DB 5FH,0AH,0,-1
F5 DB 0
DB 5FH,0AH,0,0
DB 7CH,0AH,1,-1
DB 7CH,0,1,0
DB 5FH,0AH,0,1
DB 7CH,0AH,0,1
DB 7CH,0,-1,0
DB 5FH,0AH,0,-1
F6 DB 0
DB 5FH,0AH,0,0
DB 7CH,0AH,1,-1
DB 7CH,0AH,1,0
DB 5FH,0AH,0,1
DB 7CH,0AH,0,1
DB 7CH,0,-1,0
DB 5FH,0AH,0,-1
F7 DB 0
DB 5FH,0AH,0,0
DB 7CH,0,1,-1
DB 7CH,0,1,0
DB 5FH,0,0,1
DB 7CH,0AH,0,1
DB 7CH,0AH,-1,0
DB 5FH,0,0,-1
F8 DB 0
DB 5FH,0AH,0,0
DB 7CH,0AH,1,-1
DB 7CH,0AH,1,0
DB 5FH,0AH,0,1
DB 7CH,0AH,0,1
DB 7CH,0AH,-1,0
DB 5FH,0AH,0,-1
F9 DB 0
DB 5FH,0AH,0,0
DB 7CH,0AH,1,-1
DB 7CH,0,1,0
DB 5FH,0AH,0,1
DB 7CH,0AH,0,1
DB 7CH,0AH,-1,0
DB 5FH,0AH,0,-1
;------------------------------------
ROW DB 20
COL DB 10
T0 DB 0
T1 DB 0
T2 DB 0
T3 DB 0
T4 DB 0
T5 DB 0
;------------------------------------
DATA ENDS
DO_WAIT: MOV AH,1
INT 16H
JZ NO_KEY
YES_KEY: MOV AH,0
INT 16H
CMP AL,1BH
JNZ NO_KEY
CALL EXIT
NO_KEY: CALL READ_TIME
CALL CONVERT_ASCII
MOV AX,0A2eH
MOV CX,092BH
CALL DISPLAY
MOV CH,0AH
CALL DISPLAY
MOV CL,21H
CALL DISPLAY
MOV CH,09H
CALL DISPLAY
CALL MOVE
JMP DO_WAIT
EXIT:
MOV TEMP1,0000H
MOV TEMP2,184FH
MOV BH,0FH
CALL CLR_SCREEN
RET
MAIN ENDP
READ_TIME PROC NEAR ;读取时间时分秒
MOV AH,02H
INT 1AH
MOV H_REG,CH
MOV M_REG,CL
MOV S_REG,DH
RET
READ_TIME ENDP
CONVERT_ASCII PROC NEAR
;-----以下为时分秒值转化为LED信号----
MOV AL,H_REG
AND AL,0F0H
MOV CL,4
ROR AL,CL
ADD AL,30H
MOV LED1,AL ;给时针十位数赋值
MOV AL,H_REG
AND AL,0FH
ADD AL,30H
MOV LED2,AL ;给时针个位数赋值
MOV AL,M_REG
AND AL,0F0H
MOV CL,4
ROR AL,CL
ADD AL,30H
MOV LED4,AL ;给分针十位数赋值
MOV AL,M_REG
AND AL,0FH
ADD AL,30H
MOV LED5,AL ;给分针个位数赋值
MOV AL,S_REG
AND AL,0F0H
MOV CL,4
ROR AL,CL
ADD AL,30H
MOV LED7,AL ;给秒针十位数赋值
MOV AL,S_REG
AND AL,0FH
ADD AL,30H
MOV LED8,AL ;给秒针个位数赋值
MOV LED3,3AH
MOV LED6,3AH
RET
DISPLAY PROC NEAR
PUSH BX
PUSH CX
PUSH AX
MOV AL,160
MUL CH
MOV BL,CL
ROL BL,1
MOV BH,0
ADD BX,AX
POP AX
MOV ES:[WD_BUFFER+BX],AX
POP CX
POP BX
RET
DISPLAY ENDP
DISPLAY_TIME1: MOV AL,[BX]
MOV AH,1EH
CALL DISPLAY
INC CX
INC BX
DEC R0
JNZ DISPLAY_TIME1
RET
DISPLAY_TIME ENDP
CLR_SCREEN PROC NEAR
MOV AH,06H
MOV CX,TEMP1
MOV DX,TEMP2
INT 10H
MOV AH,02H
MOV DH,24H
MOV DL,80
MOV BH,0
INT 10H
RET
CLR_SCREEN ENDP
MOVE PROC NEAR
LEA BX,LED8
MOV CX,0832H
CALL COMPARE
LEA BX,LED7
MOV CX,082EH
CALL COMPARE
LEA BX,LED5
MOV CX,0828H
CALL COMPARE
LEA BX,LED4
MOV CX,0824H
CALL COMPARE
LEA BX,LED2
MOV CX,081EH
CALL COMPARE
LEA BX,LED1
MOV CX,081AH
CALL COMPARE
RET
MOVE ENDP
COMPARE PROC NEAR
MOV AL,[BX]
CMP AL,30H
JNZ Y1
LEA DI,F0
CALL XIANSHI
Y1: CMP AL,31H
JNZ Y2
LEA DI,F1
CALL XIANSHI
Y2: CMP AL,32H
JNZ Y3
LEA DI,F2
CALL XIANSHI
Y3: CMP AL,33H
JNZ Y4
LEA DI,F3
CALL XIANSHI
Y4: CMP AL,34H
JNZ Y5
LEA DI,F4
CALL XIANSHI
Y5: CMP AL,35H
JNZ Y6
LEA DI,F5
CALL XIANSHI
Y6: CMP AL,36H
JNZ Y7
LEA DI,F6
CALL XIANSHI
Y7: CMP AL,37H
JNZ Y8
LEA DI,F7
CALL XIANSHI
Y8: CMP AL,38H
JNZ Y9
LEA DI,F8
CALL XIANSHI
Y9: CMP AL,39H
JNZ Y10
LEA DI,F9
CALL XIANSHI
Y10: RET
COMPARE ENDP
XIANSHI PROC NEAR
MOV DX,7
ADD DI,4
S: MOV AL,[DI]
ADD CL,AL
DEC DI
MOV AL,[DI]
ADD CH,AL
DEC DI
MOV AH,[DI]
DEC DI
MOV AL,[DI]
CALL DISPLAY
ADD DI,7
DEC DX
JNZ S
RET
XIANSHI ENDP
PROGRAM ENDS
END START
五、运行结果
展开阅读全文