汇编语言课程设计 显示系统当前时间与日期
华北科技学院课程设计说明书课程名称:汇编语言班级: 姓名: _ _ 学号:__ 设计题目:显示系统当前时间与日期 _ 设计时间: 2009-06-21至2009-07-02指导教师: _ _ _ 评语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:____________一、课程设计目的进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二、课程设计要求1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。
2.遵循模块化、结构化的程序设计方法。
3.要求程序必须正确。
4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
5.要求程序结构合理,语句使用得当。
6.适当追求编程技巧和程序运行效率。
三、课程设计题目:题目:显示系统当前时间与日期要求设计界面提示信息为:“Please input DATE(D) OR TIME(T)OR QUIT(Q):”,从键盘键入“D”,可显示系统日期。
从键盘输入“T”,可显示系统时间。
从键盘输入“Q”,退出程序。
利用DOS的系统功能调用的2AH和2CH功能调用,读取系统日期和时间。
将日期和时间转换为相应的ASCII码字符,显示在屏幕上。
四、课题分析这个题目是显示系统当前时间与日期,这就需要用DOS的2A号功能---取系统日期和2C号功能---取系统时间,以及BIOS的06号功能---清屏或上卷,02号功能---制光标位置。
此题目主要是将时间,日期转换为相应的ASCII码,并显示出来。
五、流程图:开始设置显示方式为80×25彩色文本方显示界面提示信息从键盘输入单个字符AL=’D’? 显示系统日期AL=’T ’? 显示系统时间返回操作系统AL=’Q ’? 结束NNNY Y Y六、程序源代码:CLEAR_SCREEN MACRO OP1,OP2,OP3,OP4 ;1宏定义,设置七个参数MOV AH,06H ;2 AH=06屏幕初始化或上卷指定的行MOV AL,00H ;3 清屏MOV BH,79H ;4 卷入行属性MOV CH,OP1 ;5 左上角行号MOV CL,OP2 ;6 左上角列号MOV DH,OP3 ;7 右上角行号MOV DL,OP4 ;8 右上角列号INT 10H ;9 调用BIOS功能【见43行】MOV AH,02H ;10 制定光标位置MOV BH,00H ;11 第0页MOV DH,00H ;12 第0行MOV DL,00H ;13 第0列INT 10H ;14ENDM ;15STACK SEGMENT ;16定义堆栈段DB 200 DUP(0) ;17STACK ENDS ;18DATA SEGMENT ;19 定义数据段WELCOME DB 'WELCOME YOU TO COME HERE!$' ;20 提示界面INF01 DB 0DH,0AH,'THIS IS A DISPLAY PROGAME!$' ;21INF02 DB 0DH,0AH,'D:DISPLAY SYSTEM DATE;$' ;22INF03 DB 0DH,0AH,'T:DISPLAY SYSTEM TIME;$' ;23INF04 DB 0DH,0AH,'Q:QUIT.',0DH,0AH,'$' ;24INF05 DB 0DH,0AH,'PLEASE INPUT THE CHAR:$' ;25INPUTER DB 0DH,0AH,'INPUT ERROR!',0DH,0AH,'$' ;26DATEDIS DB ' 00 - 00 - 0000',0AH,'$' ;27 显示DATETIMEDIS DB ' 00 ',3AH,' 00 ',3AH,' 00 ',0AH,'$' ;28 显示TIME【3A冒号 0A换行 OD回车】DATA ENDS ;29CODE SEGMENT ;30 代码段ASSUME CS:CODE,DS:DATA,SS:STACK ;31START: ;32MAIN PROC FAR ;33MOV AH,00H ;34 AH=0设置显示模式MOV AL,03H ;35 设置80*25图形显示CLEAR_SCREEN 00H,00H,19H,50H ;37 调用宏定义MOV AX,DATA ;38MOV DS,AX ;39MOV AX,STACK ;40MOV SS,AX ;41SHOW MACRO b ;42---46 显示宏定义LEA DX,b ;43MOV AH,9 ;44INT 21H ;45ENDM ;46SHOW WELCOME ;47---52 调用宏定义,显示字符串的内容SHOW INF01 ;48SHOW INF02 ;49SHOW INF03 ;50SHOW INF04 ;51SHOW INF05 ;52INPUT:MOV AH,01 ;53 键盘输入并回写INT 21H ;54CMP AL,44H ;55 与D比较JNE L1 ;56 不相等转L1CALL DATEDISPLAY ;57 相等调用日期显示子程序JMP EXIT1 ;58 继续输入字母L1:CMP AL,54H ;59 与T比较JNE L2 ;60 不相等转L2CALL TIMEDISPLAY ;61 相等调用时间显示子程序JMP EXIT1 ;62 继续输入字母L2:CMP AL,51H ;63 与Q比较JE EXIT ;64 相等转EXITSHOW INPUTER ;65 显示输入错误SHOW INF05 ;66 显示输入提示EXIT1:SHOW INF05 ;68 显示输入提示JMP INPUT ;69EXIT:MOV AH,4CH ;70 结束INT 21H ;71MAIN ENDP ;72DATEDISPLAY PROC NEAR ;73 日期显示子程序MOV AH,2AH ;74 取当前系统日期INT 21H ;75MOV AX,CX ;76 送年份入AX作为被除数【年份存在CX中】MOV BX,10 ;77 (BX)=10LEA SI,DATEDIS + 14 ;78 使SI指向年的最后一位【从0开始数】MOV CX,4 ;79 (CX)=4 年的位数,循环4次PUSH DX ;80 DX入栈,保存月日TAB:XOR DX, DX ;81 DX清零,存余数DIV BX ;82 (DX,AX)/BX,商送AX,余数送DXADD DL, 30H ;83 余数与30H相加变为字符的ASCII码MOV [SI], DL ;84 余数送入SI所指向的字节区DEC SI ;85 SI减一LOOP TAB ;86 循环4次【年的ASCII码转换】POP DX ;87 DX还原MOV AL, DL ;88 日送AL 【日存在DL中】XOR AH, AH ;89 AH清零DIV BL ;90 AX/BL,商送AL,余数送AH ADD AX, 3030H ;91 转变为数字字符的ASCII码SUB SI, 4 ;92 使SI指向日的第一位MOV [SI], AX ;93 (AX)送SI所指向的字节区MOV AL, DH ;94 月送AL 【月存在DH中】XOR AH, AH ;95 AH清零DIV BL ;96 AX/BL, 商送AL,余数送AH ADD AX, 3030H ;97 转变为数字字符的ASCII码SUB SI, 5 ;98 使SI指向月的第一位MOV [SI], AX ;99 (AX)送SI所指向的字节区SHOW DATEDIS ;100 显示日期RETDATEDISPLAY ENDP ;101 调用后返回TIMEDISPLAY PROC NEAR ;102 时间显示子程序MOV AH,2CH ;103INT 21H ;104MOV BX,10 ;105LEA DI,TIMEDIS ;106MOV AL,CH ;107 CH存时XOR AH,AH ;108DIV BL ;109ADD AX,3030H ;110MOV [DI+1],AX ;111MOV AL,CL ;112 CL存分XOR AH,AH ;113DIV BL ;114ADD AX,3030H ;115MOV [DI+6],AX ;116MOV AL,DH ;117 DH存秒XOR AH,AH ;118DIV BL ;119ADD AX,3030H ;120MOV [DI+11],AX ;121SHOW TIMEDIS ;122RETTIMEDISPLAY ENDP ;123 时间调用返回CODE ENDS ;124END START ;125七、结果显示八、感想、收获及体会刚开始拿到这个程序的时候,首先想到应该是从键盘输入的这个字符跟大写字母T,D,Q分别比较,如果和哪个字母的ASCII码相等,就调用与此字母相应的子程序,显示日期,时间或者直接退出。
在程序的开始,就已经先定义了清屏上卷宏定义,制定了光标位置。
考虑到程序中多次要显示字符串,所以将显示字符串也作为一个宏定义,避免了代码冗长,程序罗嗦,不清晰的麻烦。
而在整个程序中,我们只有两个子程序,日期显示子程序和时间显示子程序。
在编写日期显示子程序时,先取CX中存的系统当前日期,存在AX中,作为被除数,除以10,给各位加上30H,变为它的ASCII码。
使存日月的DX入栈,以保护日月。
指针指向DATEDIS字符串的最后一位,即年的最后一位,循环4次,将年的ASCII码依次放入字符串DATEDIS ' 00-00-0000'的‘0000’位,随后DX出栈还原。
取DL中存的日,放入AL中,将高位AH清零,AX作为被除数,重复转换ASCII码的步骤,指针减4,指向字符串DATEDIS ' 00 - 00 - 0000'的日的第一位,将转换后的日的ASCII码放进‘00’位。
日期时间汇编语言设计
前言在程序的实现过程中,先在数据段开一段显示缓冲区,用来存储系统时间,调用子程序的清屏部分。
通过调用DOS中断,得到系统当前时间,并将其二进制转换成ASCII 码。
目前DOS常用的9类中断(20H-27H和2FH)分为两种:DOS专用中断和DOS可调用中断。
(1)DOS专用中断。
DOS专用中断是指INT22H、INT23H和INT24H三个中断,属于DOS操作时专用,用户不要直接使用。
INT27H和INT2FH六个中断。
这六个中断都直接供用户直接调用,但都必须要满足一定的入口条件。
(2)由于中DOS可调用中断。
DOS可调用中断是指INT20H、INT21H、INT25H、INT26H、断有很多中,本身就比较复杂,所以在这里只是简单的提一下,不做深入研究。
只对其中的INT10和INT21两种特别常见且应用广泛的在程序设计过程中结合程序加以说明。
中文摘要本程序设计依托最基本的计算机语言---汇编语言。
通过汇编程序调用系统时间或日期。
首先调用DOS中断,得到系统当前时间或日期,并将其二进制转换成ASCII码,再调用DOS字符串显示功能将时间或日期以电子时钟的方式显示在显示器上。
意义在于能更好更快使时间、日期的程序得以实现。
使得时间、日期的显示程序更加精炼,更加准确。
关键字: 更好更快精炼准确目录1.系统总体设计 (2)2.详细设计 (3)2.1功能模块的分析 (3)2.2 寄存器的移动方法 (3)2.3 PUSH和POP的调用 (3)2.4 S系统的调用 (3)3.系统测试 (5)4.程序清单 (6)设计总结 (12)参考文献 (13)致谢 (14)1.系统总体设计(1)用汇编语言编写程序,使其能实现在PC机上用电子时钟时、分、秒的格式显示时间、日期的功能。
(2)调用DOS中断,得到系统当前时间、日期,并将其二进制转换成ASCII码。
(3)把程序设计成用刷新的方式来不断获取系统的时间、日期。
(4)获取键盘的按键值,以ESC键图1-1 系统功能模块图2.详细设计2.1功能模块的分析由于获取了的系统时间或日期不会自动刷新,所以要设计成刷新的方式来不断获取系统的时间或日期,这样就形成了会跳动的电子钟或日期了。
单片机(汇编语言)秒表课程设计设计
题目名称:秒表电路设计姓名:班级:学号:指导教师:日期:2016年7月13日《单片机原理及接口技术课程设计》教学大纲课程代码:课程名称:单片机原理及接口技术课程设计周数: 2 学分:1.0学分一、课程设计的性质、任务与目的单片机原理及接口技术课程设计是在学生学习完理论课和实验课的基础上开设的,通过完成一个涉及MCS-51或其他系列单片机多种资源应用并具有综合功能的设计与编程应用,使学生能够将课堂上学到的理论知识与实际应用结合起来,同时在软件编程、仿真调试及相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的设计开发工作打下一定的基础。
本课程设计的主要目的如下:1、增进对单片机的感性认识,加深对单片机理论知识的理解,掌握单片机内部功能模块(如定时/计数器、中断、片内外存贮器、I/O口、串行口等)的应用;2、掌握单片机应用系统的软硬件设计过程及实现方法,为以后设计和实现单片机应用系统打下良好基础;3、提高综合应用所学理论知识独立分析和解决实际问题的能力。
二、本课程设计的基本理论本课程设计的基本理论是单片机原理及接口技术的基本理论,主要包括单片机的硬件结构原理、指令系统、汇编语言、中断系统、定时/计数器、串行接口、I/O接口等。
在学习掌握单片机原理及接口技术课程的前提下,利用实验室提供的单片机实验条件或基于仿真软件,采用汇编语言或C51编程,设计实现一个具体的单片机应用系统项目,熟悉单片机系统设计开发的完整过程。
三、课程设计的方式与基本要求课程设计的方式:每个班级学生按2~3人分为一组,以组为单位进行课程设计(也可一人独立进行),课程设计的题目从教师给定的题目中选取,也可以是指导教师审核通过的学生自选题目。
基本要求:每组选定题目后,按题目要求,首先进行方案论证,通过查阅资料、集体讨论,确定设计方案;然后进行具体的硬件和软件设计;完成设计后,进行硬件/软件调试;最后撰写课程设计报告。
用汇编语言显示系统日期时间
国家示范性软件学院汇编程序设计与组成原理课程设计姓名: _______ _班级: _______ _学号: _______ _指导老师: _______ _成绩: _______ _评语一. 课程设计的目的及意义通过课程设计,主要达到以下目的:1. 使学生增进对汇编语言的认识,加强用汇编语言编程的能力。
2. 使学生掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等。
3. 使学生了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下良好基础。
(垃,圾,文库,叫你说我文档质量偏低)二. 基本内容题目:显示系统当前时间与日期要求设计界面提示信息为:“Please input DATE(D) OR TIME(T)OR QUIT(Q):”,从键盘键入“D”,可显示系统日期。
从键盘输入“T”,可显示系统时间。
从键盘输入“Q”,退出程序。
利用DOS 的系统功能调用的2AH 和2CH 功能调用,读取系统日期和时间。
将日期和时间转换为相应的ASCII 码字符,显示在屏幕上。
(垃,圾,文库,叫你说我文档质量偏低) (垃,圾,文库,叫你说我文档质量偏低) (垃,圾,文库,叫你说我文档质量偏低)三. 系统功能结构框图(垃,圾,文库,叫你说我文档质量偏低) (垃,圾,文库,叫你说我文档质量偏低) (垃,圾,文库,叫你说我文档质量偏低)主程序MAIN(显示界面提示信息,根据键盘输入的字符调用各子程序) 子程序DATEDISPLAY(调用DOS 的2AH 功能,取系统当前日期,将日期转换成对应的ASCII 码值并显示)子程序TIMEDISPLAY(调用DOS 的2CH 功能,取系统当前时间,将时间转换成对应的ASCII 码值并显示)CALLCALL四. 系统流程框图五. 源程序代码;*************清屏宏定义***********CLEAR_SCREEN MACRO ;宏定义,设置七个参数MOV AH,06H ;AH=06屏幕初始化或上卷指定的行 MOV AL,00H ;清屏INT 10H ;调用BIOS 功能 MOV AH,02H ;制定光标位置 MOV BH,00H ;第0页 MOV DH,00H ;第0行 MOV DL,00H ;第0列 INT 10H ENDM;*********定义堆栈段******** STACK SEGMENT DB 200 DUP (?) tos label byte STACK ENDS;*********定义数据段******** DATA SEGMENTSTR00 DB ' |********** Welcome! **********|$' ;提示界面 STR01 DB 0DH,0AH,' |* *|$' STR02 DB 0DH,0AH,' |* This is a display program. *|$'开始设置显示方式为80×25彩色文本方显示界面提示信息从键盘输入单个字符判断字符显示系统日期显示系统时间提示输入错误结束D(d)T(t)otherQ(q)STR03 DB 0DH,0AH,' |* D: display Date *|$' STR04 DB 0DH,0AH,' |* T: display Time *|$' STR05 DB 0DH,0AH,' |* Q: Quit *|$' STR06 DB 0DH,0AH,' |* *|$' STR07 DB 0DH,0AH,' |********************************|$' STR08 DB 0DH,0AH,'Please input a char: $'INPUTER DB 0DH,0AH,'Input Error!',0DH,0AH,'$'DATEDIS DB' 0000-00-00 ',0AH,'$';显示DATETIMEDIS DB' 00:00:00',0AH,'$';显示TIMEDATA ENDS;*********定义代码段********CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MAIN PROC FARMOV AH,00H ;AH=0设置显示模式MOV AL,03H ;设置80*25图形显示INT 10HCLEAR_SCREEN ;调用宏定义MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXmov sp,offset tos;*******显示宏定义********;用于显示字符串SHOW MACRO strLEA DX,strMOV AH,9INT 21HENDMSHOW STR00SHOW STR01SHOW STR02SHOW STR03SHOW STR04SHOW STR05SHOW STR06SHOW STR07INPUT:SHOW STR08 ;显示输入提示MOV AH,01 ;键盘输入并回写INT 21HCMP AL,"D";与D比较JE PRINT_DATE ;相等转PRINT_DATE打印日期CMP AL,"d"JE PRINT_DATECMP AL,"T";与D比较JE PRINT_TIME ;相等转PRINT_TIME打印时间CMP AL,"t"JE PRINT_TIMECMP AL,"Q";与Q比较JE EXIT ;相等转EXIT退出程序CMP AL,"q"JE EXITSHOW INPUTER ;显示输入错误JMP INPUTPRINT_DATE:CALL DATEDISPLAY ;调用日期显示子程序JMP INPUT ;继续输入字母PRINT_TIME:CALL TIMEDISPLAY ;调用时间显示子程序JMP INPUT ;继续输入字母EXIT: ;结束,退出程序MOV AH,4CHINT 21HMAIN ENDP;*********日期显示子程序*********DATEDISPLAY PROC NEARMOV AH,2AH ;取当前系统日期INT 21HMOV AX,CX ;送年份入AX作为被除数【年份存在CX中】MOV BX,10 ;(BX)=10LEA SI,DATEDIS+4 ;使SI指向年的最后一位【从0开始数】MOV CX,4 ;(CX)=4 年的位数,循环4次PUSH DX ;DX入栈,保存月日TAB:XOR DX,DX ;DX清零,存余数DIV BX ;(DX,AX)/BX,商送AX,余数送DXADD DL, 30H ;余数与30H相加变为字符的ASCII码MOV [SI], DL ;余数送入SI所指向的字节区DEC SI ;SI减一LOOP TAB ;循环4次POP DX ;DX还原MOV AL, DL ;日送AL【日存在DL中】XOR AH, AH ;AH清零DIV BL ;AX/BL,商送AL,余数送AH【AL为十位,AH为个位】ADD AX, 3030H ;转变为数字字符的ASCII码LEA SI, DATEDIS+9 ;使SI指向日的十位MOV [SI], AX ;(AX)送SI所指向的字节区MOV AL, DH ;月送AL 【月存在DH中】XOR AH, AH ;AH清零DIV BL ;AX/BL,商送AL,余数送AH【AL为十位,AH为个位】ADD AX, 3030H ;转变为数字字符的ASCII码LEA SI, DATEDIS+6 ;使SI指向月的十位MOV [SI], AX ;(AX)送SI所指向的字节区SHOW DATEDIS ;显示日期RET ;调用后返回DATEDISPLAY ENDP;*********时间显示子程序*********TIMEDISPLAY PROC NEARMOV AH,2CHINT 21HMOV BX,10MOV AL,CH ;CH存时XOR AH,AHDIV BLADD AX,3030HLEA DI,TIMEDIS+1MOV [DI],AXMOV AL,CL ;CL存分XOR AH,AHDIV BLADD AX,3030HLEA DI,TIMEDIS+4MOV [DI],AXMOV AL,DH ;DH存秒XOR AH,AHDIV BLADD AX,3030HLEA DI,TIMEDIS+7MOV [DI],AXSHOW TIMEDISRET ;时间调用返回TIMEDISPLAY ENDPCODE ENDSEND START六.使用说明七.参考文献[1]沈美明、温冬婵,《IBM-PC汇编语言程序设计(第二版)》,清华大学出版社,2010年10月。
汇编语言_输入输出程序设计
《汇编语言程序设计教程》之输入输出程序设计指导老师:XXX制作人:XXX一、实验目的通过学习《汇编语言程序设计教程》的相关知识完成输入输出程序的相关操作,理解有关改程序的理论知识,掌握设计报告的流程以及解决问题的方法,并且提高利用计算机分析解决综合性实际问题的基本能力,将理论与实践相结合,实现对知识的升华以及灵活运用,具体步骤如下:1)掌握输入输出指令的使用;2)了解对CMOS RAM的读写3)访问CMOS RAM,编程,以“年/月/日时:分:秒”的格式,显示当前的日期、时间。
观察并记录运行结果。
二、实验原理及基本技术路线图(方框原理图)程序源代码:assume cs:code,ds:datadata segmenttime db 'yy/mm/dd hh:mm:ss',0dh,0ah,'$'cmos db 9,8,7,4,2,0data endscode segmentstart:mov ax,datamov ds,axmov bx,0mov si,0mov cx,6a: push cxmov al,cmos[bx]out 70h,alin al,71hmov ah,almov cl,4shr al,cland ah,0fhadd ax,3030hmov word ptr time[si],axinc bxadd si,3pop cxloop amov ah,6mov al,0mov bh,1fhmov cx,0mov dx,184fhint 10hmov ah,2mov bh,0mov dh,13mov dl,32int 10hmov dx,offset timemov ah,9int 21hmov ax,4c00hint 21hcode endsend start三、所用仪器、材料(设备名称、型号、规格等)Masm 6.0,debug。
四、实验方法、步骤1.使用masm6.0将所写的程序进行编译,生成exe文件,运行。
汇编语言---编写一个可以自行启动计算机,不需要在现有操作系统环境中运行的程序。
1、课程设计的目的、任务1.1目的编写一个可以自行启动计算机,不需要在现有操作系统环境中运行的程序。
1.2任务该程序完成的功能如下:①列出功能选项,让用户通过键盘进行选择,界面如下。
reset pc ;重新启动计算机start system ;引导现有操作系统clock ;进入时钟程序set clock ;设置时间②用户输入“1”后重新启动计算机。
③用户输入“2”后引导现有的操作系统。
④用户输入“3”后,执行动态显示当前日期、时间的程序。
显示格式:年/月/日时:分:秒,当按下F1键后,改变显示颜色;按下Esc 键后,回到主选单。
⑤用户输入“4”后可更改当前日期、时间,更改后返回到主选单。
2、软件需求分析和设计2.1分析①学习汇编语言的主要目的:其一,为了“深入理解机器工作的基本原理”,其二,“培养底层编程意识和思想”。
为了提高自己对计算机工作基本原理的认识和培养底层编程思想,所选题目在脱离当前操作系统的环境下运行,摆脱了操作系统的束缚,实现了真正的对硬件编程。
②在DOS下编写安装程序,在安装程序中包含任务程序;③运行安装程序,将任务程序写到软盘上;④为了让任务程序可以在开机后自动执行,需要将任务程序写到软盘的0道0面1扇区上(程序最后两个字节以55AA作为引导程序结束标志)。
如果程序长度大于512字节,则需要用多个扇区来存放,这种情况下,处于软盘0道0面1扇区中的程序就必须负责将其他扇区中的内容读入内存。
2.2设计(1)程序主体包含三个程序段,安装程序段(setupsg)、引导程序段(initsg)、任务程序段(syssg)。
(2)安装程序流程图:安装程序完成功能:①将引导程序写入软盘第一扇区。
②将任务程序写入软盘第二扇区开始以后的3个扇区。
其中引导程序从0x7C00 到0x7E00 共512字节(写在软盘的第一扇区);任务程序从0x0000 到0x0485 共1157字节(写在软盘的第二、三、四扇区),所以引导程序、任务程序共占用软盘的4个扇区即可。
单片机C语言电子钟显示年月日星期及时间(带注释)
#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" 2011-12-30 SA T";uchar code table1[]=" 23:59:55 ";uchar code week1[][3]={"MON","TUE","WEN","THU","FRI","SA T","SUN"}; /*uchar code week2[]="TUE";uchar code week3[]="WEN";uchar code week4[]="THU";uchar code week5[]="FRI";uchar code week6[]="SA T";uchar code week7[]="SUN"; */uchar count,shi,fen,miao,dnum,year,month,day,week,a=5;sbit rs=P2^0; //数据命令sbit rw=P2^1; //读写sbit en=P2^2; //使能sbit d1=P3^1; //独立键盘sbit d2=P3^2;sbit d3=P3^3;sbit d4=P3^4;void delay(uchar z) //延时{uint x,y;for(x=110;x>0;x--)for(y=z;z>0;z--);}void write_com(uchar com) //写指令{rs=0;rw=0;en=0;P0=com;delay(5);en=1;delay(5);en=0;}void write_date(uchar date) //写数据{rs=1;rw=0;en=0;P0=date;delay(5);en=1;delay(5);en=0;}void write_weekday (uchar a){uchar x;write_com(0x80+13);for(x=0;x<3;x++){write_date(week1[a][x]);}}void weekday(uint i){write_weekday(i%7);}void write_sfm(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add); //指向要写的地址write_date(0x30+shi); //0x30代表的数字是0,+shi表示shi的数字write_date(0x30+ge); //ge的数字}void write_ymd(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add); //指向要写的地址write_date(0x30+shi); //0x30代表的数字是0,+shi表示shi的数字write_date(0x30+ge); //ge的数字}void unit(){uchar num;en=0;write_com(0x38); //显示write_com(0x0c); //光标不显示write_com(0x06); //指针加1,整屏不移动write_com(0x01); //清屏write_com(0x80); //指针指向0x80for(num=0;num<16;num++) //第一行显示table数组{write_date(table[num]);delay(20);}write_com(0x80+0x40);for(num=0;num<16;num++) //第二行显示table1数组{write_date(table1[num]);delay(20);}TMOD=0X01;TH0=(65536-50000)/256; //开启中断TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;shi=23;fen=59;miao=55;year=11;month=12;day=30;}void jishu() //计数{if(count==20){count=0;miao++; //秒加if(miao==60){miao=0;fen++; //分加if(fen==60){fen=0;shi++;if(shi==24){shi=0;day++;a++;weekday(a);//时加}write_sfm(3,shi);write_ymd(9,day);if(day==31){day=0x01;write_ymd(9,day);month++;write_ymd(6,month);if(month==13){month=0x01;write_ymd(6,month);year++;write_ymd(3,year);}}}write_sfm(6,fen);}write_sfm(9,miao);}}void change(){d4=0;if(d1==0) //移光标{delay(10);if(d1==0){while(!d1);dnum++;if(dnum==1){TR0=0;write_com(0x0f);write_com(0x80+0x40+10);}if(dnum==2){write_com(0x80+0x40+7);}if(dnum==3){write_com(0x80+0x40+4);}if(dnum==4){write_com(0x80+10);}if(dnum==5){write_com(0x80+7);}if(dnum==6){write_com(0x80+4);}if(dnum==7){dnum=0;TR0=1;write_com(0x0c);}}}if(d2==0) //加数据{delay(10);if(d2==0){while(!d2);if(dnum==1){miao++;if(miao==60)miao=0;write_sfm(9,miao); //顺序不能换write_com(0x80+0x40+10); //顺序不能换}if(dnum==2){fen++;if(fen==60)fen=0;write_sfm(6,fen);write_com(0x80+0x40+7);}if(dnum==3){shi++;if(shi==24){shi=0;}write_sfm(3,shi);write_com(0x80+0x40+4);}if(dnum==4){day++;a++;weekday(a);if(day==31)day=1;write_ymd(9,day);write_com(0x80+10);}if(dnum==5){month++;if(month==13)month=1;write_ymd(6,month);write_com(0x80+7);}if(dnum==6){year++;write_ymd(3,year%100);write_com(0x80+4);}}}if(d3==0) //减数据{delay(10);if(d3==0){while(!d3);if(dnum==1){miao--;if(miao==-1)miao=59;write_sfm(9,miao);write_com(0x80+0x40+10);}if(dnum==2){fen--;if(fen==-1)fen=59;write_sfm(6,fen);write_com(0x80+0x40+7);}if(dnum==3){shi--;if(shi==-1)shi=23;write_sfm(3,shi);write_com(0x80+0x40+4);}if(dnum==4){day--;a--;weekday(a);if(day==0)day=30;write_ymd(9,day);write_com(0x80+10);}if(dnum==5){month--;if(month==0)month=12;write_ymd(6,month);write_com(0x80+7);}if(dnum==6){year--;write_ymd(3,year%100);write_com(0x80+4);}}}}void main(){unit();while(1){jishu();change();}}void timer0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}#include<reg52.h>#define uchar unsigned char //宏定义#define uint unsigned int //宏定义sbit rs=P3^5; //液晶数据/指令选择端:1-数据,0-指令sbit lcden=P3^4; //液晶使能控制端:1-有效,0-无效sbit shift_key=P3^2;//位置移动键sbit up_key=P3^3;//增加键uchar temp=0;//定义定时器溢出计数变量,每隔50ms产生1次溢出,temp加1uint year=2011;//定义年变量并赋初值2011年uchar month=06,day=01,week;//定义月、日、星期变量,并赋初值5月23日uchar hour=23,minute=59,second=58;//定义时、分、秒变量,并赋初值12时00分00秒uchar code week_string[7][4]={"MON","TUE","WED","THU","FRI","SA T","SUN"};//定义星期英文缩写表uchar data month_day[12]={31,0,31,30,31,30,31,31,30,31,30,31};//定义每月天数表/*--定时计数器T0及中断初始化函数--*/void init(void){TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;//16位计数初值除以256得到高8位初值TL0=(65536-50000)%256;//16位计数初值除以256的余数得到低8位初值EA=1;//开总中断ET0=1;//开启定时器0中断EX0=1;//开启外部中断,外部中断用于调整时间PT0=1;//将定时器0中断设置高优先级,调整时间期不停止计时TR0=1;//启动定时器0}/*----------1ms延时函数----------*/void delay(uint n){uint i,j;for(i=n;i>0;i--)for(j=114;j>0;j--);}/*-------LCD1602写指令函数-----*/void LCD1602_write_com(uchar com){rs=0;//rs=0,置指令输入状态P0=com;//输出指令码delay(1);//延时1mslcden=1;//lcden=1,使能端有效delay(1);//延时1mslcden=0;//lcden=0,使能端无效}/*-------LCD1602写数据函数-----*/void LCD1602_write_dat(uchar dat){rs=1;//rs=1,置数据输入状态P0=dat; //输出待显示字符的字符码(ASCII码)delay(1);//延时1mslcden=1;//lcden=1,使能端有效delay(1);//延时1mslcden=0;//lcden=0,使能端无效}/*********************公历平年的2月只有28天,公历闰年的2月有29天。
汇编语言实时时钟程序的设计说明
课程设计说明书姓名:学号:院系:专业:题目:实时时钟程序设计指导教师:职称:课程设计说明书院系:专业:姓名:学号:课程设计题目:实时时钟程序设计起迄日期:课程设计地点:指导教师:系主任:课程设计任务书课程设计任务书目录第一章课题设计目的容及要求 (6)1.1 目的................ ... . . . . . . . . .61.2 容 (6)1.3 要求 (6)第二章程序流程图设计 (2)2.1主流程图设计 (2)2.2子流程图设计.............. 错误!未定义书签。
第三章程序段落的说明 (8)3.1光标的设立和隐藏 (8)3.2调用系统的时间 (5)3.3判断是否有键盘的输入 (6)第四章程序调试说明、结果记录与分析 (7)4.1程序调试的过程 (7)4.2调试结果 (7)4.3分析结果 (8)第五章总结与体会 (8)参考文献 (8)附录 (9)1.程序流程图 (9)2.程序清单 (11)第一章课题设计目得容及要求1.1 目得1)培养学生文献检索的能力,特别是如何利用Internet检索需要的文献资料。
2)培养学生综合分析问题、发现问题和解决问题的能力。
3)培养学生运用知识的能力和工程设计的能力。
4)提高学生课程设计报告撰写水平。
1.2 容设计一个根据所学汇编语言课程的知识,熟练8086汇编语言的编程原理,和程序设计思想,编写一个实时时钟程序进一步提高综合运用知识的能力。
1.3 要求每隔一秒显示系统时钟;可以重复输入,有退出键功能。
第二章程序流程图设计2.1主流程图设计由方案设计分析可知,此次设计比较简单,先初始化程序,然后设立光标,在光标移动时,不断地取时,取分,取秒,并不断的循环。
在循环的过程中,当按下ESC键时退出程序;当按下其它键时,程序继续运行,并显示时间界面,再按下ESC键时,程序又将退出。
流程图设计:当初始化后,设定一个光标用来显示时间的时、分、秒,并将光标隐藏。
(汇编)实现数码管显示年,月,日,时,分,秒,星期,温度,按键可调万年历
;///////////////////////////////////////////;本程序源代码由湖南工程职业技术学院提供.;专业单片机培训,让你学习单片机更容易.;程序员:蒋庆桥;QQ:xxxxxxxxx;本程序用汇编实现数码管显示年,月,日,时,分,秒,星期,温度,按键可调万年历,H_ADJ BIT P3.0 ;时/年调整M_ADJ BIT P3.1 ;分/月调整S_ADJ BIT P1.4 ;秒/日调整DT_SET BIT P1.6 ;时间/日期选择STR BIT P1.5;启动走时T_RST BIT P1.0 ;实时时钟复位线引脚T_CLK BIT P1.1 ;实时时钟时钟线引脚T_IO BIT P1.2 ;实时时钟数据线引脚HH_BIT EQU 40H ;时高位HL_BIT EQU 41H ;时低位MH_BIT EQU 42H ;分高位ML_BIT EQU 43H ;分低位SH_BIT EQU 44H ;秒高位SL_BIT EQU 45H ;秒低位TEMPER_L EQU 46HTEMPER_H EQU 47HYH_BIT EQU 48H ;年高位YL_BIT EQU 49H ;年低位MOH_BIT EQU 4aH ;月高位MOL_BIT EQU 4bH ;月低位DH_BIT EQU 4cH ;日高位DL_BIT EQU 4dH ;日低位SEC EQU 30HMIN EQU 31HHOUR EQU 32HDAY EQU 33HMONTH EQU 34HWEEK EQU 35HYEAR EQU 36HTEMPER equ 37hFLAG1 BIT 20h.0 ;DS18B20存在标志位DQ BIT P1.3A_BIT EQU 55HB_BIT EQU 56HDS1302_ADDR EQU 5EHDS1302_DATA EQU 5FHORG 00HLJMP STARTSTART:MOV SP,#60HMOV TMOD,#11HMOV TH0,#3CHMOV TL0,#0B0HMOV R0,#10SETB EASETB ET0SETB TR0MOV R1,37HMOV YEAR,#13H ;上电预置日期、时间MOV WEEK,#03H ;周1 MONMOV MONTH,#07H ;2011 04 25 12:00:00MOV DAY,#05HMOV HOUR,#23HMOV MIN,#00HMOV SEC,#00HMOV 50H,#0/////////////////////////////////////////////////////////////////////// ////MAIN:LCALL KEY//MAIN2:CALL FENLILCALL INIT_18B20LCALL GET_TEMPERcall CHANGEcall dispcall displayAJMP MAINFENLI:MOV A,YEARMOV B,#10HDIV ABMOV YL_BIT,BMOV YH_BIT,AMOV A,MONTHMOV B,#10HDIV ABMOV MOL_BIT,BMOV MOH_BIT,AMOV A,DAYMOV B,#10HDIV ABMOV DL_BIT,BMOV DH_BIT,AMOV A,HOURMOV B,#10HDIV ABMOV HL_BIT,BMOV HH_BIT,AMOV A,MINMOV B,#10HDIV ABMOV ML_BIT,BMOV MH_BIT,AMOV A,SECMOV B,#10HDIV ABMOV SL_BIT,BMOV SH_BIT,ARETKEY: ;按键子程序JB F0,MAIN10 ;F0=1,开始走时。
屏幕显示当前系统的时间
Hefei University微机原理课程设计课程名称:屏幕显示当前系统的时间学生班级:07级自动化(2)班报告人:王清源:陈瑜:王源卿:指导教师:刘伟、林泽坤课程设计时间:2010年1月4日自动化专业微机原理课程设计任务书2目录摘要 ....................... 错误!未定义书签。
设计题目 ................... 错误!未定义书签。
设计原理 ................... 错误!未定义书签。
任务安排 ................... 错误!未定义书签。
设备与器材 ................. 错误!未定义书签。
流程图 ..................... 错误!未定义书签。
主程序:..................................... 错误!未定义书签。
子程序TIMEDISPLAY: ............ 错误!未定义书签。
子程序DATEDISPLAY: ............ 错误!未定义书签。
............................................................................................................................ 错误!未定义书签。
程序清单 ................... 错误!未定义书签。
程序实现 ................... 错误!未定义书签。
设计总结 ................... 错误!未定义书签。
参考文献 ................... 错误!未定义书签。
3摘要此次课程设计主要是学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应技术的指导性作用,进一步加强理论知识与应用相结合的实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题的能力得到问题的能力得到全面提高。
利用汇编语言取系统时间
利用汇编语言取系统时间汇编语言小程序解读本程序是利用汇编语言编写的取系统时间的的小程序,程序简单易读,构思巧妙!代码为:code segmentassume cs:codestart:mov ah,2ch;2ch号功能调用,取系统时间:ch,cl,dh 中分别存放时分秒int21hcall disptime;调用disptime子程序显示时间exit:mov ax,4c00h;结束程序,前往DOSint21hdisptime procmov al,ch;小时的值赋给alcbw;al扩展成ax,用做除法的被除数call bindecmov dl,':';显示":"mov ah,02hint21hmov al,cl;分cbwcall bindecmov dl,':';显示":"mov ah,02hint21hmov al,dh;秒cbwcall bindecretdisptime endpbindec procpush ax;保存寄存器的值(一定要的)push cxpush dxmov dx,0;被除数高16位置0mov cx,10d;除数为10ddiv cxmov bx,dx;先保存余数mov dl,al;显示商(即十进制二位数的十位)add dl,30h;转换成Ascii码mov ah,02h;2号功能调用,显示字符(十位)int21hmov dx,bx;恢复余数的值(十进制二位数的个位) add dl,30h;转换成ASCII码mov ah,02h;2号功能调用,显示字符(个位)int21hpop dx;恢复寄存器的值pop cxpop axret;子程序前往bindec endpcode endsend start。
