基于单片机的数字电子钟万年历课程设计

基于单片机的数字电子钟万年历课程设计
基于单片机的数字电子钟万年历课程设计

汇编语言

课程设计报告书

一.课程设计的题目和内容

用汇编语言编写一个万年历程序系统,该系统要有进入系统的封面,要有验证用户名和密码的功能,能正确显示万年历,在推出系统的时候,要有封底。

二.系统设计及功能要求

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

相关主题
相关文档
最新文档