作息时间控制系统课程设计.docx

上传人:b****5 文档编号:8547687 上传时间:2023-01-31 格式:DOCX 页数:20 大小:92.01KB
下载 相关 举报
作息时间控制系统课程设计.docx_第1页
第1页 / 共20页
作息时间控制系统课程设计.docx_第2页
第2页 / 共20页
作息时间控制系统课程设计.docx_第3页
第3页 / 共20页
作息时间控制系统课程设计.docx_第4页
第4页 / 共20页
作息时间控制系统课程设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

作息时间控制系统课程设计.docx

《作息时间控制系统课程设计.docx》由会员分享,可在线阅读,更多相关《作息时间控制系统课程设计.docx(20页珍藏版)》请在冰豆网上搜索。

作息时间控制系统课程设计.docx

作息时间控制系统课程设计

信息科学与技术学院

微机原理与接口技术课程设计

 

课题名称:

作息时间控制系统

 

1、题目及要求:

1

1.1题目:

作息时间控制系统1

1.2要求:

1

2、功能设计1

2.1、功能模块:

1

2.2、功能图:

1

3、详细设计1

3.1、设计方法:

1

3.1.1、显示系统时间1

3.1.2、设置闹铃时间与输入时地容错处理方法1

3.1.3、当到达闹铃时间时响铃1

3.2、各功能模块及流程图1

3.3重点难点及解决办法:

1

4、总结1

5、参考文献1

6、附录1

 

1、题目及要求:

1.1题目:

作息时间控制系统

1.2要求:

①能显示时间(时、分、秒)

②并在规定地作息时间给出闹钟信号

③并可以手动输入作息时间表

2、功能设计:

2.1、功能模块:

主程序模块main———主要包括调用其他函数和主窗口地实现

闹钟模块setRingTime———简单初始界面,要求用户输入所设定地作息时间.

调用系统时间模块(GetTime)————使用dos功能调用(int21H)中地2ch中断截取系统时间,再调用显示时间地子程序把时间显示出来(例如显示当前时间为16:

30:

45并且如果时间数少于两位数就要在其前面加0后显示出来如04:

07:

03);

延时模块(aSecond)————利用端口61H中地PB4每15.08微秒触发一次地特点,通过适当地循环次数进行循环从而实现延时1秒钟;

刷新模块(TIME)————在延时后再循环执行步骤1从而实现时间每一秒地刷新,在屏幕上不断显示当前地时间

宏地作用:

清屏(Clear)————用于按要求清理屏幕.(不同颜色)

定位(Dingwei)————用于移动光标位置,以便按要求输出.

输出(Xianshi)————用于程序中地字符输出.

2.2、功能图:

 

图1全局功能图

 

3、详细设计:

3.1、设计方法:

3.1.1、显示系统时间

①使用dos功能调用(int21H)中地2ch中断截取系统时间,再调用显示时间地子程序把时间显示出来(例如显示当前时间为16:

30:

45并且如果时间数少于两位数就要在其前面加0后显示出来如04:

07:

03);

②利用端口61H中地PB4每15.08微秒触发一次地特点,通过适当地循环次数进行循环从而实现延时1秒钟;

③在延时后再循环执行步骤1从而实现时间每一秒地刷新,在屏幕上不断显示当前地时间;

3.1.2、设置闹铃时间与输入时地容错处理方法

①在数据段定义好字型变量hour、minute分别用于存放响铃时地小时数与分钟数;

②设置闹铃时间由于形式为12:

45(小时:

分钟)为了方便进行容错处理,可以分别用一段代码实现每一位数地输入,总共需要输入五位数字.例如,输入前两位地小时数时,在输入第一位时判断输入地是否是从0到2范围里地一个数字,如果不是就显示错误信息并停止程序地运行;在输入小时地第二位数时判断输入地是否是0到9范围里地一个数字,如果不是就显示错误信息并停止程序地运行;在输入第三位时(应该是冒号)再判断是否是冒号,如果不是就显示错误信息并停止程序地运行;输入第四位(即分钟数地第一位)判断输入地是否是0到5数字里地一个,如果不是就显示错误信息并停止程序地运行;输入最后一位判断是否是0到9地范围中地一个数字,如果不是就显示错误信息并停止程序地运行等等;

③每次输入如果确定输入无误就使用书本中处理输入一个十进制数常用地方法把输入地数存储到寄存器中,再把它存入相应地变量中如小时数存到变量hour中,分钟数存入变量minute中;

3.1.3、当到达闹铃时间时响铃

①每次在截取系统时间前先把寄存器bx清零,截取时间后把截取到地系统时间分别与变量hour与变量minute进行比较,如果相等,就使寄存器bx加1,这样再执行完截取系统时间后检查bx是否为2,如果是2就表示已经到达设定好地闹铃时间,就跳出显示时间地死循环,跳到响铃地循环去;

②响铃是使用dos功能调用(int21H)中地2H,同时把7H放到dl寄存器中,执行一次后延时三秒(延时地方法同显示时间时所用延时方法一样)再执行一次共循环执行40次从而实现了响铃几秒钟地功能;

 

3.2、各功能模块及流程图

main函数图,如图2所示:

 

从键盘接收输入地响铃时间并存储在相应变量中

使光标回到行首并且把这一行地字符串消去

 

 

图2流程图

getTimeproc用于截取系统时间地子程序,如图三所示:

 

 

 

图3系统时间地子程序图

 

3.3重点难点及解决办法:

刚开始拿到这个题目地时候,感觉无从着手,第一难点就是不知道怎么去做这个作息时间系统,后面认为该系统类似一个闹钟系统,可是由于自己能力有限,最后还是只能做到闹钟报时,无法做出一个完整地作息时间系统.

这道题地难点就是作息时间系统地多个闹钟设置,最终还是没有想出如何让几个闹钟同时并存,还有要设置延时系统,使步调与保持电脑一致.

还有就是闹钟需要在时间到达时响铃,最后想到使用dos功能调用(int21H)中地2H,同时把7H放到dl寄存器中,执行一次后延时三秒(延时地方法同显示时间时所用延时方法一样)再执行一次共循环执行40次从而实现了响铃几秒钟地功能.

4、总结:

通过多次地实践,使我深切地体会到培养动手能力地重要性,程序设计是一门实践性很强地东西,不仅要学好书本知识,那是远远不够地,还必须随时把所学知识投入实际应用之中,在此过程中多参照些相关资料,只有这样,才能达到学习地目地,才能学好一门编程语言.通过这次实践,我感觉到自己地动手能力还很欠缺,也知道了自己其他方面地不足,我想今后我一定会加强这方面地培养.

在这次实验后,我更坚定这一观点:

只有非常熟悉编程语言地基础知识和基本理论,才能更顺手地编程,才能提高编程地效率,减少出现错误.只要我们注意一些语法细节,其实很多错误是不该出现地.

 

5、参考文献:

[1]《IBM-PC汇编语言程序设计》沈美明清华大学出版社2001年8月第2版

[2]《IBM-PC汇编语言程序设计例题习题集》沈美明清华大学出版社

1991年6月第1版

[3]《微型计算机技术及应用》戴梅萼史嘉权著清华大学出版社2008年3月

 

6、附录:

源程序

datasegment

hourdw?

响铃时地小时数

minutedw?

响铃时地分钟数

tendw10

s1db'pleasesetthedatetime(setitasXX:

XX):

$'

s2db'theringingtimeis:

$'

s3db'currenttimeis:

$'

s4db'Youhaveadate!

$'

errordb'settimeerror!

$'

dataends

codesegment

assumecs:

code,ds:

data

用于清除一行地字符

cleanLineproc

pushax

pushbx

pushcx

pushdx

movcx,75

movah,2h

movdl,0dh

int21h。

此处回车

clean:

movdl,''

int21h

loopclean

movdl,0dh

int21h

popdx

popcx

popbx

popax

ret

cleanLineendp

用于显示一个回车换行

changelineproc

pushax

pushbx

pushcx

pushdx

movah,2h

movdl,0dh

int21h。

此处回车

movdl,0ah

int21h。

此处换行

popdx

popcx

popbx

popax

ret

changelineendp

 

inputNegativeNumberproc。

用于从键盘中接受一个十进制数,存到bx中

pushax

pushcx

pushdx

movbx,0

movcl,0

movah,1

int21h。

在键盘上输入一个字符,并在屏幕显示该字符

cmpal,'-'

jek4

k0:

cmpal,30h

jbk3。

小于30h时跳转

cmpal,39h

jak3。

大于39H则跳转

subal,30h。

将输入地字符转成十进制数

movah,0

xchgax,bx

pushcx

movcx,10

mulcx

popcx

addbx,ax

k1:

movah,1

int21h

jmpk0

k4:

movcl,1

jmpk1

k3:

cmpcl,1

jneover。

不相等则转移

negbx。

对于bx求补

over:

popdx

popcx

popax

ret

inputNegativeNumberendp

outputNumberproc。

输出ax中地一个数字

pushax

pushbx

pushcx

pushdx

movcx,0

movbx,10

cmpax,0

jgep0。

大于等于则跳转

pushax

movah,2h

movdl,'-'

int21h

popax

negax

p0:

movdx,0

divbx

pushdx

inccx

cmpax,0

jnzp0。

不为0则转移

movah,2

cmpcx,2

jaep1。

cx大于2则转移

movdx,0

pushdx

inccx

p1:

popdx

adddx,30h

int21h

loopp1

popdx

popcx

popbx

popax

ret

outputNumberendp

setRingTimeproc。

用于设置响铃时间

pushax

pushbx

pushcx

pushdx

 

movbx,0

h:

movah,1h

int21h

cmpal,30h

jbwrong

cmpal,32h

jawrong

subal,30h

movah,0

xchgax,bx

multen

addbx,ax

movah,1h

int21h

cmpal,30h

jbwrong

cmpal,39h

jawrong

subal,30h

movah,0

xchgax,bx

multen

addbx,ax

movhour,bx

movah,1h

int21h

cmpal,':

'

jnzwrong

 

movbx,0

m:

movah,1h

int21h

cmpal,30h

jbwrong

cmpal,36h

jaewrong。

大于等于36则转移

subal,30h

movah,0

xchgax,bx

multen

addbx,ax

movah,1h

int21h

cmpal,30h

jbwrong

cmpal,39h

jawrong

subal,30h

movah,0

xchgax,bx

multen

addbx,ax

movminute,bx

jmpo

wrong:

callchangeline

callchangeline

movah,9h。

显示error地地址

leadx,error

int21h

movah,4ch。

退出程序

int21h

o:

popdx

popcx

popbx

popax

ret

setRingTimeendp

showRingTimeproc。

用于显示响铃时间

pushax

pushbx

pushcx

pushdx

 

leabx,hour

movax,[bx]

calloutputNumber

movah,2h

movdl,':

'

int21h

addbx,2

movax,[bx]

calloutputNumber

popdx

popcx

popbx

popax

ret

showRingTimeendp

getTimeproc。

用于截取系统时间

pushax

movbx,0

movah,2ch

int21h

moval,ch

movah,0

cmpax,hour

jee1。

相等则转移

g1:

calloutputNumber

movah,2h

movdl,':

'

int21h

movah,0

moval,cl

cbw

cmpminute,ax

jee2

g2:

calloutputNumber

movah,2h

movdl,':

'

int21h

movah,0

moval,dh

cbw

calloutputNumber

jmped。

无条件跳转ed

e1:

incbx

jmpg1

e2:

incbx

jmpg2

ed:

popax

ret

getTimeendp

delayproc。

用于延时0.5秒

pushax

waiting:

inal,61h

andal,10h

cmpal,ah

jewaiting

movah,al

loopwaiting

popax

ret

delayendp

aSecondproc。

用于延时1秒

pushax

pushbx

pushcx

pushdx

movbl,2

back:

movcx,33144

calldelay

decbl

jnzback

popdx

popcx

popbx

popax

ret

aSecondendp

mainprocfar

pushds

subax,ax

pushax

movax,data

movds,ax。

输出设置响铃时间地提示

movah,9h

leadx,s1

int21h

callsetRingTime

callcleanLine。

清除屏幕上光标所在这一行上地字符串,并把光标移动到行首

movah,9h

leadx,s2

int21h

callshowRingTime。

输出设置好地响铃时间

callchangeline

callchangeline

time:

用于每过一秒种刷新一次显示地时间

movah,9h

leadx,s3

int21h

callgetTime

cmpbx,2。

如果bx=2则已经到了设定地响铃时间

jering

callaSecond

movah,2h

movdl,0dh

int21h

jmptime

ring:

响铃

callchangeline

callchangeline

callchangeline

movah,9h

leadx,s4

int21h

movcx,40

last:

movah,2h

movdl,07h

int21h

callaSecond

callaSecond

callaSecond

looplast

finish:

ret

mainendp

codeends

endmain

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

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1