微机原理课程设计数字时钟程序.docx

上传人:b****1 文档编号:14775564 上传时间:2023-06-27 格式:DOCX 页数:29 大小:119.13KB
下载 相关 举报
微机原理课程设计数字时钟程序.docx_第1页
第1页 / 共29页
微机原理课程设计数字时钟程序.docx_第2页
第2页 / 共29页
微机原理课程设计数字时钟程序.docx_第3页
第3页 / 共29页
微机原理课程设计数字时钟程序.docx_第4页
第4页 / 共29页
微机原理课程设计数字时钟程序.docx_第5页
第5页 / 共29页
微机原理课程设计数字时钟程序.docx_第6页
第6页 / 共29页
微机原理课程设计数字时钟程序.docx_第7页
第7页 / 共29页
微机原理课程设计数字时钟程序.docx_第8页
第8页 / 共29页
微机原理课程设计数字时钟程序.docx_第9页
第9页 / 共29页
微机原理课程设计数字时钟程序.docx_第10页
第10页 / 共29页
微机原理课程设计数字时钟程序.docx_第11页
第11页 / 共29页
微机原理课程设计数字时钟程序.docx_第12页
第12页 / 共29页
微机原理课程设计数字时钟程序.docx_第13页
第13页 / 共29页
微机原理课程设计数字时钟程序.docx_第14页
第14页 / 共29页
微机原理课程设计数字时钟程序.docx_第15页
第15页 / 共29页
微机原理课程设计数字时钟程序.docx_第16页
第16页 / 共29页
微机原理课程设计数字时钟程序.docx_第17页
第17页 / 共29页
微机原理课程设计数字时钟程序.docx_第18页
第18页 / 共29页
微机原理课程设计数字时钟程序.docx_第19页
第19页 / 共29页
微机原理课程设计数字时钟程序.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机原理课程设计数字时钟程序.docx

《微机原理课程设计数字时钟程序.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计数字时钟程序.docx(29页珍藏版)》请在冰点文库上搜索。

微机原理课程设计数字时钟程序.docx

微机原理课程设计数字时钟程序

河北科技大学

课程设计报告

学生姓名:

学号:

专业班级:

电子信息科学与工程

课程名称:

微型计算机原理与应用

学年学期:

2011—2012学年第1学期

 

指导教师:

20011年12月

 

课程设计成绩评定表

学生姓名

学号

成绩

专业班级

起止时间

2011/12/26—2011/12/30

设计题目

数字时钟程序

 

指导教师:

年月日

一、课设题目与目的………………………………….4

二、设计任务………………………………………….4

三、总框图与设计流程……………………………….4

四、源程序清单……………………………………….6

五、调试结果与显示………………………………….19

六、个人贡献………………………………………….19

七、课程设计总结与体会…………………………….21

一、课设题目与目的

实习题目:

数字时钟程序

实习目的:

通过实习,使我们进一步弄懂所学到的课本知识,巩固和深化对8086系统的指令系统、中断系统、键盘/显示系统、程序设计、应用开发等基本理论知识的理解,提高汇编语言应用于技术的实践操作技能,掌握汇编语言应用系统设计、研制的方法,培养利用科技革新、开发和创新的基本能力,为毕业后从事与其相关的工作打下一定的基础。

二、课设任务

本课题为利用汇编语言设置时钟程序,其显示效果为:

截取系统时间,能以时、分、秒(其中时为24小时制)的形式显示,并且通过合理的操作能修改时和分的内容来修改时间。

再有,可以给它设定一个ALARM时间,到这个时间它就能产生信号,起到定时作用,。

除此之外还能显示日期,日期分为年、月、日,其显示方式为xxxx年xx月xx日。

三、总框图与流程

四.源程序清单

DATASEGMENT;数据段开始

MESS1DB'****************ASMASSIGNMENT*******************',0AH,0DH

DB'***************ELECTRONICCLOCK******************',0AH,0DH

DB'*******PressCorctoEDITtheALARMtime*******',0AH,0DH

DB'*******PRESSMORmTOCHANGESOUND!

*************',0AH,0DH

DB’****PRESSSORsTOSETTHETIME**************',0AH,0DH;显示功能菜单

DB'***********PRESSESCBUTTONTOEXIT**************',0AH,0DH,'$'

TNDB'PLEASEINPUTTHENEWTIME(hh:

mm:

ss):

',0DH,0AH,'$'

TMDB'PLEASEINPUTTHEALARMTIME(hh:

mm:

ss):

',0DH,0AH,'$'

MUSICMESSDB'PLEASECHOOSETHETYPEOFMUSIC:

1(FAST)2(MIDDLE)3(SLOW)',0DH,0AH,'$'

MESS2DB'Timeis:

',0AH,0DH,'$'

MESS3DB'TODAYIS:

',0AH,0DH,'$'

DBUFFER1DB20DUP('')

T_BUFFDB40;在数据段开一段时间显示缓冲区

DB?

DB40DUP(?

HORDB?

MINDB?

SECDB?

TEMPHORDB?

TEMPMINDB?

TEMPSECDB?

MUSICDW800;存放音乐的频率数

DATAENDS

STACKSEGMENT

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK,DS:

DATA

START:

CALLCLEAR;调用清屏子程序

DISPLAY:

;时间显示部分

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETT_BUFF;送T_BUFF的偏移地址到BX

MOVAH,2CH;调用DOS时间调用功能,功能号:

2CH,小时,分钟,秒数分别保存在CH,CL,DH中

INT21H

;判断时间是否相等

SUBDH,1;秒数+1修正

CALLCHECK

;.........................................................................

MOVAL,CH;小时数设定

MOVAH,0

CALLBCTD;调用进制转换子程序二进制BCD码子程序

PUSHAX

ANDAL,0F0H;选取AL高四位

MOVCL,4;设置右循环的次数

RORAL,CL;右循环

ORAL,30H;加30H得到ACSII码

MOV[BX],AL;将得到的结果送到T_BUFF缓冲区

INCBX;BX自加1,指针指向下一个缓冲区的下一个地址

POPAX

ANDAL,0FH;选取低四位

ORAL,30H

MOV[BX],AL;将转换后的低四位值送入缓冲区的下一个地址

INCBX

;........................................................................

MOVAL,':

';显示分隔符号

MOV[BX],AL

INCBX

;........................................................................

MOVAH,2CH;取时间

INT21H

;.......................................................................

MOVAL,CL;分钟数设定

MOVAH,0

CALLBCTD;调用进制转换子程序二进制BCD码子程序

PUSHAX

ANDAL,0F0H;选取AL高四位

MOVCL,4;设定循环次数

 

rolal,cl;循环左移4次

oral,30h;加30H得到ACSII码

mov[bx],al;将得到的结果送到T_BUFF缓冲区

incbx;BX自加1,指针指向下一个缓冲区的下一个地址

popax

andal,0fh;选取低四位

oral,30h

mov[bx],al;将转换后的低四位值送入缓冲区的下一个地址

incbx

;.....................................................................

moval,':

';显示分隔符号

mov[bx],al

incbx

;.....................................................................

movah,2ch;秒设定

int21h

moval,dh

movah,0

callbctd;调用进制转换子程序二进制BCD码子程序

pushax

andal,0f0h;选取AL高四位

movcl,4

rolal,cl

oral,30h;加30H得到ACSII码

mov[bx],al;将得到的结果送到T_BUFF缓冲区

incbx

popax

andal,0fh;选取低四位

oral,30h

mov[bx],al;将转换后的低四位值送入缓冲区的下一个地址

incbx

;..........................................................

moval,'$';将字符串的结束位送至显示缓冲区的最后一位

mov[bx],al

;..........................................................

calldate

pushbx;置光标位置,AH=2,BH=0,DH跟DL分别为行号与列号,并入栈保护BX

movah,2;0~1用于此程序最下边的在下面的两个置光标位置

movbh,0

movdh,17;行

movdl,41;列

int10h

popbx

leadx,t_buff;送T_BUFF偏移地址到DX,并调用DOS显示功能,功能号为9

movah,9

int21h;至此当前时间的显示功能结束!

pushbx;置光标位置

movah,2

movbh,0

movdh,16

movdl,41

int10h;日期

popbx

leadx,DBUFFER1

movah,9

int21h

pushbx;置光标位置

movah,2

movbh,0

movdh,16

movdl,21

int10h

popbx

leadx,mess3

movah,9

int21h;显示MESS3

 

pushbx;置光标位置

movah,2

movbh,0

movdh,0

movdl,0

int10h

popbx

leadx,mess1

movah,9

int21h;显示MESS1

pushbx;置光标位置

movah,2

movbh,0

movdh,17

movdl,21

int10h

popbx

leadx,mess2

movah,9

int21h;显示MESS2

;.............................................

calldelay1

movah,1;调用键盘I/O中断功能号1,获取键值到AL

int16h

cmpal,'M'

jeeditmusic

cmpal,'m'

jeeditmusic

cmpal,'c';是c键,转移闹钟时间修改程序

jeedittime

cmpal,'C';是C键,转移闹钟时间修改程序

jeedittime

cmpal,'s';是s键,转移时间修改程序

jecor

cmpal,'S';是S键,转移时间修改程序

jecor

cmpal,1bh

jzquit;是ESC键,退出程序

jmpdisplay

quit:

movah,4ch

int21h

ret

Cor:

callsettime;设置时间

;..........................................

 

editmusicproc

pushax;入栈保护数据

pushbx

pushcx

pushdx

pushf

movdx,offsetmusicmess;显示修改音乐的种类提示

movah,09h

int21h

movdx,offsett_buff;数据缓冲区的数据输入

movah,0ah

int21h

anddx,0h

leabx,t_buff

incbx

incbx

incbx

moval,[bx]

cmpal,'1'

jem800to

cmpal,'2'

jem1600to

cmpal,'3'

jem3200to

m800to:

movmusic,800

jmpt

m1600to:

movmusic,1600

jmpt

m3200to:

movmusic,3200

t:

popf;出栈恢复数据

popdx

popcx

popbx

popax

jmpstart

ret;返回DOS

editmusicendp;结束

 

bctdprocnear;二进制BCD码子程序

;AX输入参数

;AX输出参数,存放调整过的BCD码

movdx,ax

movax,0

movcx,16;设置循环次数

bctd1:

clc;清进位标志C

rcldx,1;通过进位的循环左移

adcal,al;带进位加法

daa;加法的十进制调整

xchgal,ah;交换高,低8位

adcal,al

daa

xchgal,ah

loopbctd1;循环次数保存在CX里

ret

bctdendp

;.....................................

edittimeproc;时间修改程序

pushax;入栈保护数据

pushbx

pushcx

pushdx

pushf

movdx,offsettm;显示修改时间的格式提示

movah,09h

int21h

movdx,offsett_buff;数据缓冲区的数据输入

movah,0ah

int21h

anddx,0h

leabx,t_buff

incbx

incbx

incbx

movdh,[bx]

subdh,30h

incbx

MOVDL,[BX]

SUBDL,30H

MOVCL,10

MOVAL,DH

MULCL

ADDAL,DL

MOVCH,AL

MOVHOR,AL

MOVTEMPHOR,AL

INCBX

INCBX

MOVDH,[BX]

SUBDH,30H

INCBX

MOVDL,[BX]

SUBDL,30H

MOVCL,10

MOVAL,DH

MULCL

ADDAL,DL

MOVCL,AL

MOVMIN,AL

MOVTEMPMIN,AL

INCBX

INCBX

MOVDH,[BX]

SUBDH,30H

INCBX

MOVDL,[BX]

SUBDL,30H

MOVCL,10

MOVAL,DH

MULCL

ADDAL,DL

MOVDH,AL

MOVTEMPSEC,AL

POPF;出栈恢复数据

POPDX

POPCX

POPBX

POPAX

JMPSTART

RET

EDITTIMEENDP

;......................................

CLEARPROCNEAR

PUSHAX;入栈保护现场

PUSHBX

PUSHCX

PUSHDX

MOVAX,0600H;AH=06(滚动)AL=00(全屏空白)

MOVBH,1FH;设置背景颜色(1蓝色)和前景颜色(F白色)

SUBCX,CX

MOVDX,5F5FH

INT10H

POPDX;出栈恢复现场

POPCX

POPBX

POPAX

RET

CLEARENDP

;....................

DATEPROCNEAR

MOVAH,2AH;取日期CX:

DH:

DL=年:

月:

日AL=星期

INT21H

MOVSI,0

MOVAX,CX

MOVBX,100

DIVBL

MOVBL,AH

CALLBCDASC1;日期数值转换成相应的ASCII码字符

MOVAL,BL

CALLBCDASC1

INCSI

MOVAL,DH

CALLBCDASC1

INCSI

MOVAL,DL

CALLBCDASC1

MOVAL,'$'

MOVDBUFFER1[SI],AL

RET

DATEENDP

;..................

BCDASC1PROCNEAR

PUSHBX

CBW

MOVBL,10

DIVBL

ADDAL,'0'

MOVDBUFFER1[SI],AL

INCSI

ADDAH,'0'

MOVDBUFFER1[SI],AH

INCSI

POPBX

RET

BCDASC1ENDP

;........................................

SETTIMEPROC;时间修改子程序

CALLINPUT;调用键盘输入子程序输入数据

MOVCH,HOR

MOVCL,MIN

MOVDH,SEC

ANDDL,0H

MOVAH,2DH

INT21H

JMPSTART

RET

SETTIMEENDP

;........................................

DELAY1PROC;精确延迟时间子程序

MOVDX,04FFH;循环次数

UP:

XORCX,CX

A:

NOP

LOOPA

DECDX

JNZUP

RET

DELAY1ENDP

;.......................................

INPUTPROC;输入子程序

PUSHAX;入栈保护数据

PUSHBX

PUSHCX

PUSHDX

PUSHF

MOVDX,OFFSETTN;显示修改时间的格式提示

MOVAH,09H

INT21H

MOVDX,OFFSETT_BUFF;数据缓冲区的数据输入

MOVAH,0AH

INT21H

ANDDX,0H

LEABX,T_BUFF

INCBX

INCBX

MOVDH,[BX]

SUBDH,30H

INCBX

MOVDL,[BX]

SUBDL,30H

MOVCL,10

MOVAL,DH

MULCL

ADDAL,DL

MOVCH,AL

MOVHOR,AL

INCBX

INCBX

MOVDH,[BX]

SUBDH,30H

INCBX

MOVDL,[BX]

SUBDL,30H

MOVCL,10

MOVAL,DH

MULCL

ADDAL,DL

MOVCL,AL

MOVMIN,AL

INCBX

INCBX

MOVDH,[BX]

SUBDH,30H

INCBX

MOVDL,[BX]

SUBDL,30H

MOVCL,10

MOVAL,DH

MULCL

ADDAL,DL

MOVDH,AL

MOVSEC,AL

POPF;出栈恢复数据

POPDX

POPCX

POPBX

POPAX

RET

INPUTENDP

;..................................................

CHECKPROC

PUSHAX

PUSHBX

CMPCH,TEMPHOR;设置定点报时

JNECF1

CMPCL,TEMPMIN

JNECF1

CMPDH,TEMPSEC

JEXIANG

CF1:

CMPCL,0;设置整点报时

JNECF

CMPDH,0

JNECF

XIANG:

CALLOPEN

PUSHDX

PUSHCX

MOVDX,12H

MOVAX,34DEH

MOVCX,MUSIC

DIVCX

OUT42H,AL

MOVAL,AH

OUT42H,AL

MOVAH,1

INT21H

POPCX

POPDX

CALLCLOSE

CF:

POPBX

POPAX

RET

CHECKENDP

OPENPROC

PUSHAX

INAL,61H

ORAL,03H

OUT61H,AL

POPAX

RET

OPENENDP

CLOSEPROC

PUSHAX

INAL,61H

ANDAL,0FCH

OUT61H,AL

POPAX

RET

CLOSEENDP

;................

CODEENDS

ENDSTART

 

五.调试结果与显示

六.个人贡献

在本次课设实现过程中,我主要负责程序校正,和一部分程序的解释,主要有以下程序:

MOVAL,CH;小时数设定

MOVAH,0

CALLBCTD;调用进制转换子程序二进制BCD码子程序

PUSHAX

ANDAL,0F0H;选取AL高四位

MOVCL,4;设置右循环的次数

RORAL,CL;右循环

ORAL,30H;加30H得到ACSII码

MOV[BX],AL;将得到的结果送到T_BUFF缓冲区

INCBX;BX自加1,指针指向下一个缓冲区的下一个地址

POPAX

ANDAL,0FH;选取低四位

ORAL,30H

MOV[BX],AL;将转换后的低四位值送入缓冲区的下一个地址

INCBX

;........................................................................

MOVAL,':

';显示分隔符号

MOV[BX],AL

INCBX

;........................................................................

MOVAH,2CH;取时间

INT21H

;.......................................................................

MOVAL,CL;分钟数设定

MOVAH,0

CALLBCTD;调用进制转换子程序二进制BCD码子程序

PUSH

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2