应用软件课程设计论文文档格式.docx

上传人:b****6 文档编号:21688129 上传时间:2023-01-31 格式:DOCX 页数:44 大小:87.57KB
下载 相关 举报
应用软件课程设计论文文档格式.docx_第1页
第1页 / 共44页
应用软件课程设计论文文档格式.docx_第2页
第2页 / 共44页
应用软件课程设计论文文档格式.docx_第3页
第3页 / 共44页
应用软件课程设计论文文档格式.docx_第4页
第4页 / 共44页
应用软件课程设计论文文档格式.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

应用软件课程设计论文文档格式.docx

《应用软件课程设计论文文档格式.docx》由会员分享,可在线阅读,更多相关《应用软件课程设计论文文档格式.docx(44页珍藏版)》请在冰豆网上搜索。

应用软件课程设计论文文档格式.docx

认真完成每一个步骤,总体设计,运用8086汇编语言编写程序,掌握接口电路设计思路,反复调试与测试,在有精力与时间的情况下,对系统功能稍作扩展,但不画蛇添足,用心完成设计论文的撰写。

以严谨认真的态度来对待课程设计,并有所收获。

二、综合训练任务

利用STARES598PCI实验箱设计一个具有时、分、秒显示的电子钟,并定义一个启动键,当开启改建时时钟从当前设定值开始走时,时间数据可用数码管显示,同时按下语音播报键,可以准确清晰地报出显示的北京时间,并且可以设置时间。

三、总体设计

语音播报电子钟大致可以分三个大方向来完成,其功能模块图如图1所示。

一是主体电子钟的设计,需要完成的是将时间按时、分、秒显示在数码管上,并且可以走时及设置时间,需要用到的模块主要有8253计数器、8259A可编程中断处理芯片,还有8279;

二是录音部分,需要用语音模块对所用到的声音进行处理,把所要用到的声音片段按地址存放在ISD1420中;

三是将两者有机的结合起来,在电子钟程序中添加功能,调用放音程序后可以播报当前显示的时间。

系统流程图如图2所示。

四、

详细设计说明

在明确总体设计思路的情况下,需要分块将功能实现,最后将几个部分结合起来,就可以完成整个语音播报电子钟系统。

各分块的功能详细介绍如下。

(1)电子钟设计

电子钟的实现主要用到的芯片有8253计数器和8259中断处理器还有显示时间的数码管。

8253采用的是方式二——分频计数器,设计过程中需要用到三个计数器,即秒计数器、分计数器和时计数器,分别记录秒、时、分。

将CLK端接62.5K型号,并在8259初始化时设置初值为31.25K,也就是没半秒产生一次中断,将中断信号送到8259的IR0(中断向量号为8H,存放中断向量的起始地址是20H),8259的INT向CPU发出中断请求信号,紧接着CPU的INTA会向8259发出响应中断请求信号。

当累计两次中断,即一秒会产生一次脉冲作为秒计数器的时钟脉冲,秒计数器会加一,秒计数器采用六十进制计数,当秒计数器计数六十次会发出一个“分脉冲”信号,此信号作为分计数器的时钟脉冲,使分计数器加一,分计数器同样采用六十进制计数,当分计数器计数六十次后会发出一个“时脉冲”信号,该信号将作为时计数器的时钟信号,是时计数器加一,时计数器采用二十四进制计数,计数满二十四次,重新计数。

电子钟还需要实现的功能是设置时间。

显示在数码管上的时间都先要存在buffer中,buffer+7和buffer+6存放的是小时,buffer+4和buffer+3存放的是分钟,buffer+1和buffer中存放的是秒,当设置时间时还会用buffer1。

设置按键F,当按下时开始设置时间,预设置时间位添加闪烁效果作为提示,设置时间的规则如下,设置小时是,其十位不能高于2,当小时的十位为1或0时,个位为0~9任意一个数,当十位为2时,个位不能高于4;

设置分钟和秒的情况类似,十位数不能高于5,个位数可设置为0~9任意一个数。

十位乘以十加个位便可算出时、分、秒的具体值。

无论是buffer或者是buffer1中的数都不能直接转化为可显示在数码管上,要用其表示时间必须转化为可显示格式。

将hour、min、sec分别除以10,将除数和余数分别显示在不同位置的数码管上,数码管的接法是并联的,要显示的数据会送到每个数码管上,但是为何数码管上显示的数据不同?

若给小时的十位数码管送一个数据,要将小时十位的数码管选通而将其它数码管全部关闭,一段时间后给个位数码管以同样的方式发送显示的数据,依次类推显示其它位,由于这个时间是非常短促的,人眼无法识别它的变化,因此看到数码管可以显示不同的数。

(2)录音

录音需要用到语音模块中的ISD1420芯片。

ISD1420可直接模拟存储,能提供真实的音乐、语音或音频,内有160个可寻址段,总共能录放20秒的声音。

根据报时的需要,应录入十五段声音,分别是:

现在时刻、十、分、点、整和0、1、2、3、4、5、6、7、8、9。

其中现在时刻需要用1秒的时间来播放,而其它则用0.5秒的时间播放。

地址从00H开始,到08H存放1秒的录音,往后到0CH,存放0.5秒的录音,依次类推。

语音模块的REC是输入低电平有效的录音信号,用作录音控制,PLAYE是电平放音控制,PLAYL是下降沿触发放音。

8255的A0和A1均为0,用方式0,选择了PA端口。

PA端口控制G6区的按键,程序中控制1~4键为录音键,相应的录音用5~8键播放,由此可知需要用到四个录音程序来完成十五段声音的录入,程序内容基本一致,只是在定义录放音起始地址时有所区别。

(3)报时

声音片段已经存到ISD1420,只需要在时钟程序中添加相应的子程序便可以播放声音。

当按键扫描确定输入的键值为E时,调用报时子程序,先报“现在时刻”,再报小时,判断hour的值,将其除以十,将除数与零比较,若等于零则直接报余数的值,再报“点”,否则要先报除数和“十”,再报余数和“点”,最后报分钟,将min的值除以十,若十位为零,则顺序播报除数和余数,接着报分,若十位不为零,先报十位,再报“十”和余数,最后报“分”。

播报声音的过程中,每次调用放音程序后紧接着都要调用显示时间的子程序,以免报时造成时间显示异常。

(4)扩展

完成以上功能后可以对语音播报电子钟可以作两方面简单的扩展。

一是整点报时,在完成报时子程序后,整点报时便可轻而易举的实现,只要在扫描按键之前添加一段程序,判断分、秒是否为零,若都为零则直接调用报时子程序,报时子程序中在添加报“整”的部分即可。

二是将时间同步显示在液晶显示屏上,预计在显示屏上显示两行内容,第一行显示“北京时间”,只要将四个字用字模软件取模,显示在相应的位置,第二行显示时间有一定的困难,要将buffer中的数取出存在buffer2中,按照时间显示的顺序排列,时、分、秒中间用冒号隔开,因此还需要对“:

”取模,将时间调整到合适的位置,并同数码管上的数据一样刷新显示,如此一来,显示屏上的时间也会走时。

五、调试与测试

根据详细设计,将语音播报电子钟的设计模块化,在实现功能及调试与测试的过程也是采用各个击破的策略,最后再逐一整合。

(1)电子钟

电子钟主要实现的功能是显示时间和设置时间,时间走时的原理在上一节有介绍,每隔0.5秒产生一次中断,累计两次中断计时一次。

这部分内容有范例,所以调试与测试均顺利,两个功能都完全实现。

(2)语音部分调试与测试

在整个系统功能的模块化实现过程中,语音部分可以算是一个难点,原因在于对ISD1420芯片一无所知,因而语音部分的调试与测试花费大量时间。

一开始主要测试ISD1420的能存储录音的时间,理论上ISD1420能录放20秒的声音,但实际情况并非如此,经过多次测试,最长的录放时间是12秒。

ISD1420内部有160个可寻址段,也就是说,录音是按地址存放在ISD1420中的,但是实验箱上的ISD1420并不是160段都能够用上,50H以后的地址都不可用。

经过反复测试,最合理的录音方案是从00H到08H开始录第一段音,录放时间为1秒,之后的则是每四个可寻址段存放一段声音,即录放音时间为0.5秒,总共将录音分为15段。

分配好存储空间之后,用编写的录音程序将声音录入,每个程序能录4个声音片段,每个程序段都是用G6去的1~4键控制录音,5~8键播放录音,0.5秒的时间比较短促,不能很好的掌握录音时间,按键播放声音,对放音效果不好的声音片段要重新录入。

(3)报时功能调试

依照详细设计中报时部分的思路,在电子钟程序中加入了报时子程序,调试修改后的程序,没有严重的错误,但是报时发生错误,分钟为两位数时,个位所播报的数一直与小时的个位一致,多次修改和研究程序,没能发现其中的错误,只能换个思路对这部分的程序重新编写。

新的程序解决了报时出现的问题,可是也带出了其它问题,在整点报时后,时间的显示出现异常——回到初值,估计入栈出栈操作过多而引起,就这个问题,调试了很长时间,最后在报“整”的部分程序上添加了强行JMP至显示时间的子程序上,该问题才得以解决,报时功能实现。

至此语音播报电子钟的设计所要求的任务已全部完成。

(4)扩展功能

将时间显示在液晶显示屏上是语音播报电子钟的一个扩展功能,功能实现并不困难,仅在走时部分遇到问题,并能很快解决。

将程序段加到电子钟程序中,获取buffer中的数据显示在显示屏上,并同数码管上的时间一起刷新显示,另外需要注意的是在屏幕显示文字和字符所调用的子程序是不一样的,显示文字调用的是WordDISL,显示字符调用的是ByteDISL。

综合上述调试过程,一个带有扩展功能的语音播报电子钟便完成了,实现了详细设计中所涉及到的所有功能,系统的整体效果差强人意。

六、实习日志

七、实习总结

锲而不舍的努力,终于完成语音播报电子钟的设计,虽然在验收成果和答辩的过程中表现不尽如人意,但是在理论知识掌握得不扎实的情况下,取得这样的成果会有一种大喜过望的感觉。

整个课程设计过程中,每个环节都会有所收获。

实习中用到两块大的理论知识是接口技术和汇编语言,大量的实践,需要特别多的相关知识,对于不清楚或已经淡忘的内容,要查阅课本或资料,再将其运用到实践中,因此,整个实习下来,两门课程的知识都较大范围的复习到了,尤其是课程学习中没有掌握好的内容在实践过程中得以理解,诸如在运用8253、8255和8259几个芯片的过程中,对其功能、结构、控制字到最终的应用都建立起更新更全面的认知。

与此同时,较长的代码编写提高了运用汇编语言编程的能力。

课程设计是一次系统而完整的综合训练,整个过程都必须事必躬亲,独立思考,仔细分析,得出总体设计方案,再逐步深入,将每一模块的功能实现,脚踏实地一步一步地接近目标,提高了将理论知识转化为实践应用的能力。

当然,实现的过程并非是一帆风顺的,其间会不断涌现出意料之外的问题,要不断地思考问题出现的原因,想办法解决问题,这方面的能力也有所提高。

同学间会有做相似题目的或是用到相同模块的,每个人想问题的角度不一样,会有不一样的见地,三人行必有我师,常常在一起讨论,能了解到同一个问题的不同看法,让自己的想法不拘泥于狭小的范围,也常常会有醍醐灌顶的感觉。

由此可见,合作与交流也是非常重要的。

虽然,语音播报电子钟的功能已全部实现,但仍然有可以扩展的地方,比如,除了现实十、分、秒之外,还可以按键设置显示年、月、日,也可以设定闹钟,有了上述功能,系统将会更加的完善和强大。

这些都是可以继续努力完成的内容。

为期十天的接口技术课程设计已经画上了句点,然而学习没有终点,完成了任务并不代表已经掌握好知识,没有完成也并非一无所获,在往后还要以严谨认真的态度不断学习。

八、核心代码清单

(1)录音程序

这部分有四个程序,内容基本一致,只是定义的起始地址不一样,其中除第一个声音片段是1秒之外,其余都为0.5秒。

#Voice1.asm

.MODELTINY

.STACK100;

堆栈段

ISD1420_AD1EQU00H;

1号键录放音起始地址

ISD1420_AD2EQU08H;

2号键录放音起始地址

ISD1420_AD3EQU0CH;

3号键录放音起始地址

ISD1420_AD4EQU10H;

4号键录放音起始地址

ISDCOMMEQU0C000H;

录放音地址/操作模式输入地址,0F000H是接到CS1上的地址

I8255_CtrEQU0D003H;

8255控制端口地址

I8255_PAEQU0D000H;

键盘数据输入口

I8255_PCEQU0D002H;

ISD1420控制输出口

.DATA

KeepModeDB7;

保存REC、PLAYE、PLAYL当前值

bNewKeyDB0;

有键按下标志位,清0-无键按下

KEYnoDB0;

按键缓存

KeyTabDWKEY1,KEY2,KEY3,KEY4,KEY5,KEY6,KEY7,KEY8;

录音键、放音键子程序入口地址

.CODE;

程序段

START:

MOVAX,@DATA

MOVDS,AX

NOP

CALLMainInit;

主程序初始化

Main:

CALLScanKey;

扫描按键

JNBMain

Main1:

CALLKeyRun;

按键处理

CMPbNewKey,0;

是否有新的键按下

JZMain

MOVbNewKey,0;

清按键标志

JMPMain1;

循环进行实验内容介绍与ISD1420功能测试

;

主程序初始化

MainInitPROCNEAR

MOVDX,I8255_Ctr;

8255初始化

MOVAL,90H;

PA为输入,PC的低四位为输出

OUTDX,AL

CALLISD_INIT;

ISD1420初始化

RET

MainInitENDP

********************************

录放音子程序

KEY1PROCNEAR

MOVAL,ISD1420_AD1;

1号键录音首地址

CALLKEY_REC1

KEY1ENDP

KEY2PROCNEAR

MOVAL,ISD1420_AD2;

2号键录音首地址

CALLKEY_REC2

KEY2ENDP

KEY3PROCNEAR

MOVAL,ISD1420_AD3;

3号键录音首地址

KEY3ENDP

KEY4PROCNEAR

MOVAL,ISD1420_AD4;

4号键录音首地址

KEY4ENDP

录音子程序

KEY_REC1PROCNEAR

MOVCX,4;

录音时间长度,1s

CALLISD_REC;

调用录音子程序

KEY_REC11:

CALLDelay_025S;

延时

CMPbNewKey,0;

检测按键是否有键按下

JNZKEY_REC12

LOOPKEY_REC11;

录音时间,根据CX的值决定

KEY_REC12:

CALLISD_STOP;

停止录音

KEY_REC1ENDP

KEY_REC2PROCNEAR

MOVCX,2;

录音时间长度,0.5s

KEY_REC21:

JNZKEY_REC22

LOOPKEY_REC21;

KEY_REC22:

KEY_REC2ENDP

放音子程序

KEY5PROCNEAR

5号键放音首地址

CALLKEY_PLAY1

KEY5ENDP

KEY6PROCNEAR

6号键放音首地址

CALLKEY_PLAY2

KEY6ENDP

KEY7PROCNEAR

MOVAL,ISD1420_AD3;

7号键放音首地址

KEY7ENDP

KEY8PROCNEAR

8号键放音首地址

KEY8ENDP

KEY_PLAY1PROCNEAR

MOVCX,4

CALLISD_PLAY;

KEY_PLAY11:

用于进度显示的时间参照

JNZKEY_PLAY12

LOOPKEY_PLAY11

KEY_PLAY12:

CALLISD_STOP

KEY_PLAY1ENDP

KEY_PLAY2PROCNEAR

MOVCX,2

KEY_PLAY21:

JNZKEY_PLAY22

LOOPKEY_PLAY21

KEY_PLAY22:

KEY_PLAY2ENDP

KeyRunPROCNEAR

LEABX,KeyTab;

有键按下,跳到相应处理程序

MOVAL,KEYno;

KEYno--按键值

SHLAL,1;

×

2倍

XORAH,AH

ADDBX,AX

CALL[BX];

[BX]=对应按键子程序入口地址

RET

KeyRunENDP

按键扫描

ScanKeyPROCNEAR

MOVDX,I8255_PA;

8255.PA----检测按键输入

INAL,DX;

键扫描

CMPAL,0FFH

JNZScanKey1

ScanKey4:

CLC;

无按键按下

ScanKey1:

CALLScanKey2;

有按键,取抖动处理

JNBScanKey4

ScanKey3:

MOVBL,KEYno

CALLDelay20ms;

消抖动

CALLDelay20ms

CALLScanKey2

CMPBL,KEYno

JNZScanKey3

ScanKey5:

MOVDX,I8255_PA

ScanKey6:

INAL,DX

CMPAL,0FFH

JNZScanKey6

STC

RET

ScanKeyENDP

按下的键(1~8)转化为对应的键值(0~7),便于多分支程序处理

ScanKey2PROCNEAR

PUSHBX

XORBL,BL

MOVDX,I8255_PA

INAL,DX

TESTAL,01H

JZScanKey21

INCBL

TESTAL,02H

TESTAL,04H

TESTAL,08H

TESTAL,10H

TESTAL,20H

TESTAL,40H

TESTAL,80H

CLC

JMPScanKey22

ScanKey21:

STC;

有键按下,置有键按下标志

MOVKEYno,BL;

获得键值

ScanKey22:

POPBX

ScanKey2ENDP

Delay20

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

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

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

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