汇编语言课程设计-基于单片机的数字电子钟万年历设计.doc_第1页
汇编语言课程设计-基于单片机的数字电子钟万年历设计.doc_第2页
汇编语言课程设计-基于单片机的数字电子钟万年历设计.doc_第3页
汇编语言课程设计-基于单片机的数字电子钟万年历设计.doc_第4页
汇编语言课程设计-基于单片机的数字电子钟万年历设计.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇 编 语 言 课 程 设 计 报 告 书一课程设计的题目和内容用汇编语言编写一个万年历程序系统,该系统要有进入系统的封面,要有验证用户名和密码的功能,能正确显示万年历,在推出系统的时候,要有封底。二.系统设计及功能要求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=0y/4=0y/1000 (y为年份;“/”整除),则y为以闰年;否则,y为平年。 根据可求出一年中的日历。 4.日历输出功能设计。 格式及显示设计显示要求:设置显示滚动区;在该区中每次显示4个月的日历(并列排列)。 日历打印设计:将日历按年存入磁盘不同的文件中保存,供打印或再次显示使用。封 面 程 序验证用户名和密 码 程 序万 年 历 程 序(主 程 序)封 底 程 序开 始结 束三程序系统说明书1程序系统总体功能模块调用图及模块功能说明 封面程序的功能是显示欢迎信息,并且显示制作人的信息的;验证用户名和密码的程序是验证用户是否是合法的用户的,该程序要有容错的功能;万年历程序是主程序,该程序的功能是通过用户输入年和月,来查询日历的,并且该程序还可以判断输入的年份是平年还是闰年。封底程序是用来显示用户退出万年历系统的时候,一个感谢用户使用万年历的界面的。2程序系统详细的程序框图(每个子程序的流程图) 封面子程序,封底子程序的框图注:以封面程序为例,封底程序与封面程序类似(SI)-DX,九号调用(SI)+52-SI,(CX)-1(CX)=0?25-CX中,SI指向A的首址,000E-B2号功能调用,B-DX,(DX)+0010-DX ,DX-BDX-B开 始结 束NY 用户名和密码子程序框图 注:以用户名程序为例,密码程序和用户名程序类似输入一字符串-STR1区取输入字符串长度-ALSTR1串与STR3串长度相等STR1+2-SI,STR3-DI,COUNT1-CX两串对应元素相等?继续输入密码重新输入开 始结 束YYNN求某年某月某日是星期几的子程序开 始保 护 现 场YEAR-1-AXYEAR-1-CX(YEAR-1)/4, 商(AX)-C1,(C1)+(CX)-CX(YEAR-1)/100, 商(AX)-D1,(CX)-(D1)-CX(YEAR-1)/400, 商(AX)-E,(E)+(CX)-CX调用求某月一日是这的第几天的子程序,得到T(CX)+(T)-CX,(CX)-AX,(CX)/7 余数(DX)-N恢 复 现 场结 束MONTH-DL, (DL)-1-DLDI指向BUF2首地址SI指向 BUF1首地址T+1开 始结 束DI(DL)?SI-BL, T+(BX),SI+1, DI+1YN保 护 现 场恢 复 现 场.求某月某日是这一年的第几天的判断是平年还是闰年的子程序YEAR-AX0-DX开 始(AX)/400, 余数-(DX)(DX)=0 ?年份能否被4除尽年份能否被100除尽显示平年,28-BUF1显示闰年,29-BUF1保 护 现 场恢 复 现 场结 束YNYNYN年份月份转化为真值的子程序保 护 现 场恢 复 现 场DI-BL(BL)-30H-BL0-BH(BX)*10-BX0-AX(AX)+(BX)-AX(DI)+1-DI, (CX)-1-CX(CX)=0 ?开 始结 束YN 四. 程序运行结果五.系统源程序.386DATA SEGMENT USE16A0 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 0D1 DW 0E DW 0G DB 0T DW 0S DB 0P DW ?N DW 0Y DW 0M DW 0BUF1 DB 31,?,31,30,31,30,31,31,30,31,30,31BUF2 DB 1,2,3,4,5,6,7,8,9,10,11,12INPUT1 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 $-STR3STR4 DB admin ;密码COUNT2 EQU $-STR4BUF4 DB 用户名不正确,请重新输入!$BUF5 DB 密 码不正确,请重新输入!$DATA ENDSSTACK SEGMENT USE16 STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AH,0 ;设置显示方式 MOV AL,3 ;彩色文本方式 INT 10H;*封面程序* MOV AH,6 MOV AL,0 MOV CH,0 MOV CL,0 ;清整个屏幕 MOV DH,24 MOV DL,79 MOV BH,26 INT 10H MOV CX,24 MOV SI,OFFSET A0 MOV B,000EHLOPA0: 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 AH,6 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,000EHLOPA1: 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,3LOPA3: MOV AH,2 ;设置密码光标位置 MOV BH,0 ; 页号为1(帧屏号) MOV DX,1021H INT 10H LEA DX,STR2 ;输入密码,保存在缓冲区STR2中 MOV AH,10 INT 21H MOV AL,STR2+1 ;密码的长度送到AL中 CMP AL,COUNT2 ;比较输入的密码是否和指定的密码长度一样 JNE Q ;长度不一样,跳转到Q LEA SI,STR2+2 LEA DI,STR4 MOV CX,COUNT2 REPZ CMPSB ;逐一比较两串的对应字符是否相等 JNE Q ;不相等,转Q JMP T1 ;相等,转LOPA4R: MOV AH,2 ;设置显示用户名错误信息光标位置 MOV BH,0 ; 页号为1(帧屏号) MOV DX,1521H INT 10H LEA DX,BUF4 ;输出用户名错误信息 MOV AH,9 INT 21H MOV AH,6 MOV AL,1 MOV CH,13 MOV CL,33 ;清用户名输入行的屏幕 MOV DH,13 MOV DL,53 MOV BH,30 INT 10H MOV AH,1 INT 21H MOV AH,6 MOV AL,1 MOV CH,21 MOV CL,33 ;清用户名出错行的屏幕 MOV DH,21 MOV DL,60 MOV BH,20 INT 10H DEC C ;循环次数减1 JNZ LOPA2 ;跳转到LOPA2,重新输入用户名 JE EXITQ: MOV AH,2 ;设置显示密码错误信息光标位置 MOV BH,0 ; 页号为1(帧屏号) MOV DX,1521H INT 10H LEA DX,BUF5 ;输出密码错误信息 MOV AH,9 INT 21H MOV AH,6 MOV AL,1 MOV CH,16 MOV CL,33 ;清密码输入行的屏幕 MOV DH,16 MOV DL,53 MOV BH,30 INT 10H MOV AH,1 INT 21H MOV AH,6 MOV AL,1 MOV CH,21 MOV CL,33 ;清密码出错行的屏幕 MOV DH,21 MOV DL,60 MOV BH,20 INT 10H DEC D ;循环次数减1 JNZ LOPA3 ;跳转到LOPA3,重新输入密码 JE EXIT MOV AH,1 INT 21H;*显示万年历程序*T1: MOV T,0 MOV AH,6 MOV AL,0 MOV CH,0 MOV CL,0 ;清整个屏幕 MOV DH,24 MOV DL,79 MOV BH,27 INT 10H MOV CX,17 MOV SI,OFFSET A3 MOV B,0411HLOPA4: 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,44 DEC CX JNZ LOPA4 MOV AH,2 ;定输入年份提示信息的光标 MOV BX,0 MOV DH,1 MOV DL,17 INT 10H LEA DX,INPUT1 ;提示信息 ,请输入要查询的年份 MOV AH,9 INT 21H MOV AH,2 ;定输入年份的光标 MOV BX,0 MOV DH,5 MOV DL,19 INT 10H LEA DX,STR5 ;输入年份 ,保存在缓冲区STR1中 MOV AH,10 INT 21H LEA DI,STR5+2 ; DI指向年份输入串的首地址 MOV CL,STR5+1 ;输入年份字符串的长度送到CL MOV AX,0 ;年份转化为真值P1: MOV BL,DI ; 取字符送到BL SUB BL,30H ;字符减去30H,转化为真值 MOV BH,0 MOV P,10 MUL P ADD AX,BX INC DI ;DI指向下一个字符 DEC CX ;长度减一 JNZ P1 MOV YEAR,AX ;把年送到YEAR中 CALL PR ;调用判断平年还是闰年的程序 JC L1 ;有进位,借位,跳转到L1,输出闰年,否则顺序执行,是平年 MOV AH,2 ;输出平年信息的光标 MOV BX,0 MOV DH,1 MOV DL,36 INT 10H LEA DX,INPUT3 ;输出平年 MOV AH,9 INT 21H LEA DI,BUF1 MOV DI+1,BYTE PTR 28 ;平年把28送入BUF1中 JMP J0L1: MOV AH,2 ;输出闰年信息的光标 MOV BX,0 MOV DH,1 MOV DL,36 INT 10H LEA DX,INPUT4 ; 输出闰年 MOV AH,9 INT 21H LEA DI,BUF1 MOV DI+1,BYTE PTR 29 ;闰年把29送入BUF1中J0: MOV AH,2 ;定输入月份提示信息的光标 MOV BX,0 MOV DH,2 MOV DL,17 INT 10H LEA DX,INPUT2 ;提示信息 ,请输入要查询的月份 MOV AH,9 INT 21H MOV AH,2 ;定输入月份的光标 MOV BX,0 MOV DH,5 MOV DL,56 INT 10H LEA DX,STR6 ;输入月份 ,保存在缓冲区STR2中 MOV AH,10 INT 21H LEA DI,STR6+2 ;DI指向月份输入串的首地址 MOV CL,STR6+1 ;月份输入串的长度送到CL中 MOV AX,0P2: MOV BL,DI ;取字符送到BL中 SUB BL,30H ;字符减去30H MOV BH,0 MOV S,10 MUL S ADD AX,BX INC DI ;DI指向下一个字符 DEC CX ;长度减一 JNZ P2 MOV WORD PTR MONTH,AX ;月份值送到MONTH中 CALL DTOB1 ;显示日历,调用DTOB1子程序返回N侄 MOV DI,OFFSET BUF1 DEC MONTH ADD DI,WORD PTR MONTH ;取出每个月的天数 MOV CL,DI MOV G,CL MOV SI,OFFSET BUF3 MOV AL,6 MUL N ADD AX,19 MOV B,AX MOV C1,9J1: MOV AH,2 ;确定每个月的一号的光标位置,即确定初始输入位置 MOV BX, 0 MOV DH,BYTE PTR C1 MOV DL,BYTE PTR B INT 10H CMP DL,55 JBE J2 ;DL33,跳转到J2,否则行加1列从3开始 ADD C1,2 MOV B,19 JMP J1J2: MOV DX,SI MOV AH,9 ;在当前光标位置显示数字 INT 21H ADD SI,5 ADD B,6 DEC G JNZ J1 MOV AH,2 ;定输入月份的光标 MOV BX,0 MOV DH,22 MOV DL,17 INT 10H LEA DX,INPUT5 MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,31H JE T1 JMP T2DTOB1 PROC NEAR ;求某年某月某日是星期几子程序 PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV CX,0 DEC YEAR MOV AX,YEAR ;YEAR-1送入AX中 MOV CX,YEAR MOV DX,0 MOV BL,4 DIV BX MOV C1,AX ;(YEAR-1)/4送入C1中 ADD CX,C1 MOV AX,YEAR MOV DX,0 MOV BL,100 DIV BX MOV D1,AX ;(YEAR-1)/100送入D中 SUB CX,D1 MOV AX,YEAR MOV DX,0 MOV BX,400 DIV BX MOV E,AX ;(YEAR-1)/400 送入E中 ADD CX,E MOV DX,0 ;DX清零 MOV BX,0 ;BX清零 MOV DL,MONTH ;求每个月的第一天是本年的第几天 SUB DL,1 MOV DI,OFFSET BUF2 MOV SI,OFFSET BUF1R1: CMP DI,DL JA R2 ;一月份的时候,跳转到R2 MOV BL,SI ; 其它月份的时候,进行累加,计算每个月的第一天是该年的第几天 ADD T,BX ADD SI,1 ADD DI,1 JMP R1R2: ADD T,1 ADD CX,T ;s=(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+T MOV AX,CX MOV DX,0 MOV BX,7 ;S%7,计算每个月的第一天是星期几 DIV BX MOV N,DX POP DI POP SI POP DX POP CX POP BX POP AX RETDTOB1 ENDPPR PROC NEAR ;判断是平年还是闰年 PUSH AX PUSH BX PUSH CX PUSH DX MOV AX,YEAR MOV CX,AX MOV DX,0 MOV BX,4 DIV BX CMP DX,0 JNZ B1 MOV AX,CX MOV BX,100 DIV BX CMP DX,0 JNZ B2 MOV AX,CX MOV BX,400 DIV BX CMP DX,0 JZ B2B1: CLC JMP B3B2: STCB3: POP DX POP CX POP BX POP AX RETPR ENDP ;*底封程序*T2: MOV AH,6 MOV AL,0 MOV CH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论