基于单片机的数字电子钟万年历课程设计
汇编语言
课程设计报告书
一.课程设计的题目和内容
用汇编语言编写一个万年历程序系统,该系统要有进入系统的封面,要有验证用户名和密码的功能,能正确显示万年历,在推出系统的时候,要有封底。
二.系统设计及功能要求
1.系统封面设计
内容:题目名称,设计日期,设计者姓名。
要求:具有动感,如题目名称移动;字体具有立体感。可插入一些图画,如学校的校徽图。
2.输入画面设计
内容及要求:①密码及口令:输入,核查及修改功能。②年份:输入及判断功能。如:年份值是否为4位整数,不为4位,提示用户重输。
3.日历计算功能设计
①求某年某月某日是星期几的子功能。(要求编成子程序)
算法:s=(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+c
(其中:y为年份;c为某月某日是这一年的第几天,由②求出;s为总天数。“/”为整除。)
n=s%7 (其中:n为星期数;“%”为求余数)
②求某月某日是这一年的第几天的子功能。(要求编成子程序)
二月份是否为平年(28天)或闰年(29天)的算法:
y/400=0∨y/4=0∧y/100≠0 (y为年份;“/”整除),则y为以闰年;否则,y为平年。
根据①②可求出一年中的日历。
4.日历输出功能设计。
①格式及显示设计
显示要求:设置显示滚动区;在该区中每次显示4个月的日历(并列排列)。
②日历打印设计:将日历按年存入磁盘不同的文件中保存,供打印或
再次显示使用。
1.程序系统总体功能模块调用图及模块功能说明
封面程序的功能是显示欢迎信息,并且显示制
作人的信息的;验证用户名和密码的程序是验证用
户是否是合法的用户的,该程序要有容错的功能;
万年历程序是主程序,该程序的功能是通过用户输
入年和月,来查询日历的,并且该程序还可以判断
输入的年份是平年还是闰年。封底程序是用来显示
用户退出万年历系统的时候,一个感谢用户使用万
年历的界面的。
2.程序系统详细的程序框图(每个子程序的流程图)
①封面子程序,封底子程序的框图
注:以封面程序为例,封底程序与封面程序类似
②用户名和密码子程序框图
注:以用户名程序为例,密码程序和用户名程序类似
③求某年某月某日是星期几的子程序
④..求某月某日是这一年的第几天的
⑤判断是平年还是闰年的子程序
⑥年份月份转化为真值的子程序
四. 程序运行结果
五.系统源程序
.386
DATA SEGMENT USE16
A0 DB ' _____◆____◆____◆____◆____◆____◆_____◆_____ $' DB '※※$' DB '| |$' DB '◆◆$' DB '| ┏☆━━━━━━━━━━━━━━☆┓|$' DB '◆☆^ǒ^*☆*^ǒ^*★*^ǒ^*☆*^ǒ^*★*^ǒ^*☆◆$' DB '| ┃欢迎进入万年历系统┃|$' DB '◆☆^ǒ^*★*^ǒ^*☆*^ǒ^*★*^ǒ^*☆*^ǒ^*☆◆$' DB '| ┗☆━━━━━━━━━━━━━━☆┛|$' DB '◆◆$' DB '| |$' DB '◆制作人:某某某◆$' DB '| |$' DB '◆班级:2班◆$' DB '| |$' DB '◆学号:123456789012 ◆$' DB '| |$' DB '◆日期:08.1.15 ◆$' DB '| |$' DB '◆◆$' DB '| |$' DB '◆◆$' DB '| 版权所有,请勿仿冒|$' DB '※____◆____◆____◆____◆____◆____◆____◆____※$'
A1 DB ' ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆┏━☆━━━━━━★━━━━━━☆━┓◆$' DB '◇┃◆◇┃◇$' DB '◆┃请输入用户名和密码┃◆$' DB '◇┃◇↑↑↑↑↑↑↑↑↑↑↑↑↑◆┃◇$' DB '◆┗━☆━━━━━━★━━━━━━☆━┛◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆◆$' DB '◇用户名:◇$' DB '◆◆$' DB '◇◇$' DB '◆密码: ◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆◆$' DB ' ◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇$'
A2 DB '******★******☆******★*******☆*******★********$' DB '☆☆$' DB '| |$' DB '★★$' DB '| *********************************** |$' DB '☆* 欢迎再次使用万年历系统* ☆$' DB '| *********************************** |$' DB '★★$' DB '| |$' DB '☆☆$' DB '| |$' DB '★☆☆★★$' DB '| 如有不足之处,请联系我☆☆|$' DB '☆☆$' DB '| ★★☆|$' DB '★我们会不断的完善的★$' DB '| |$' DB '☆^_^ ☆$' DB '| |$' DB '★ISBN 7-300-00528-9 ★$' DB '| |$' DB '☆********★******☆********★********★*********☆$'
A3 DB '******************万年历*******************$' DB '** ** ** **$' DB '======================================$' DB '| S UN | MON | T UE | WED | T HU | F A I | S A T |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$'
YEAR DW ?
MONTH DB ?
B DW ?
C1 DW 0
D1 DW 0
E DW 0
G DB 0
T DW 0
S DB 0
P DW ?
N DW 0
Y DW 0
M DW 0
BUF1 DB 31,?,31,30,31,30,31,31,30,31,30,31
BUF2 DB 1,2,3,4,5,6,7,8,9,10,11,12
INPUT1 DB '请输入要查询的年份:$'
INPUT2 DB '请输入要查询的月份:$'
INPUT3 DB '该年是平年$'
INPUT4 DB '该年是闰年$'
INPUT5 DB '要继续查询? 1.继续查询 2.退出万年历系统$'
STR5 DB 5
DB 0
DB 5 DUP(0)
STR6 DB 3
DB 0
DB 3 DUP(0)
BUF3 DB ' 1',0AH,0DH,'$'
DB ' 2',0AH,0DH,'$'
DB ' 3',0AH,0DH,'$'
DB ' 4',0AH,0DH,'$'
DB ' 5',0AH,0DH,'$'
DB ' 6',0AH,0DH,'$'
DB ' 7',0AH,0DH,'$'
DB ' 8',0AH,0DH,'$'
DB ' 9',0AH,0DH,'$'
DB '10',0AH,0DH,'$'
DB '11',0AH,0DH,'$'
DB '12',0AH,0DH,'$'
DB '13',0AH,0DH,'$'
DB '14',0AH,0DH,'$'
DB '15',0AH,0DH,'$'
DB '16',0AH,0DH,'$'
DB '17',0AH,0DH,'$'
DB '18',0AH,0DH,'$'
DB '19',0AH,0DH,'$'
DB '20',0AH,0DH,'$'
DB '21',0AH,0DH,'$'
DB '22',0AH,0DH,'$'
DB '23',0AH,0DH,'$'
DB '24',0AH,0DH,'$'
DB '25',0AH,0DH,'$'
DB '26',0AH,0DH,'$'
DB '27',0AH,0DH,'$'
DB '28',0AH,0DH,'$'
DB '29',0AH,0DH,'$'
DB '30',0AH,0DH,'$'
DB '31',0AH,0DH,'$'
C DB ?
D DB ?
STR1 DB 20
DB 0
DB 20 DUP(0)
STR2 DB 20
DB 0
DB 20 DUP(0)
STR3 DB 'admin' ; 用户名
COUNT1 EQU $-STR3
STR4 DB 'admin' ;密码
COUNT2 EQU $-STR4
BUF4 DB '用户名不正确,请重新输入!$'
BUF5 DB '密码不正确,请重新输入!$'
DATA ENDS
STACK SEGMENT USE16 STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,0 ;设置显示方式
MOV AL,3 ;彩色文本方式
INT 10H
;************************封面程序************************************ MOV AH,6
MOV AL,0
MOV CL,0 ;清整个屏幕
MOV DH,24
MOV DL,79
MOV BH,26
INT 10H
MOV CX,24
MOV SI,OFFSET A0
MOV B,000EH
LOPA0: MOV AH,2
MOV BX,0
MOV DX,B
INT 10H
ADD DX,0100H
MOV B,DX
MOV DX,SI
MOV AH,9
INT 21H
ADD SI,52
DEC CX
JNZ LOPA0
MOV AH,1
INT 21H
;*************************用户名,密码程序****************************
MOV AL,0
MOV CH,0
MOV CL,0 ;清整个屏幕
MOV DH,24
MOV DL,79
MOV BH,30
INT 10H
MOV CX,24 ;显示用户名的密码页面,共24行,循环输出24次
MOV SI,OFFSET A1
MOV B,000EH
LOPA1: MOV AH,2 ;定光标位置
MOV BX,1
MOV DX,B
INT 10H
ADD DX,0100H
MOV B,DX
MOV DX,SI ; 显示字符串
MOV AH,9
INT 21H
ADD SI,52
DEC CX
JNZ LOPA1
MOV C,3 ;容错三次
LOPA2: MOV AH,2 ;设置用户名光标位置
MOV BH,0 ; 页号为1(帧屏号)
MOV DX,0D21H
INT 10H
LEA DX,STR1 ;输入用户名,保存在缓冲区STR1中
MOV AH,10
INT 21H
MOV AL,STR1+1 ;用户名的长度送到AL中
CMP AL,COUNT1 ;比较输入的用户名是否和指定的用户名长度一样
JNE R ;长度不一样,跳转到P
LEA SI,STR1+2
LEA DI,STR3
MOV CX,COUNT1
REPZ CMPSB ;逐一比较两串的对应字符是否相等
JNE R ;不相等,跳转到P 否则程序往下执行,输入密码
MOV D,3
LOPA3: MOV AH,2 ;设置密码光标位置
MOV BH,0 ; 页号为1(帧屏号)
MOV DX,1021H
INT 10H
LEA DX,STR2 ;输入密码,保存在缓冲区STR2中
MOV AH,10
INT 21H