微机课程设计报告数字时钟系统与自动报时系统设计.docx
《微机课程设计报告数字时钟系统与自动报时系统设计.docx》由会员分享,可在线阅读,更多相关《微机课程设计报告数字时钟系统与自动报时系统设计.docx(12页珍藏版)》请在冰豆网上搜索。
![微机课程设计报告数字时钟系统与自动报时系统设计.docx](https://file1.bdocx.com/fileroot1/2023-4/20/9fecd0ef-298e-42c0-8210-fb115682ff0f/9fecd0ef-298e-42c0-8210-fb115682ff0f1.gif)
微机课程设计报告数字时钟系统与自动报时系统设计
课程名称
微机系统课程设计
成
绩
课题
数字时钟系统与自动报时系统设计
评语:
指导教师:
年月日
班级:
13030
学号:
1303
姓名:
####
地点:
B-312
批次:
第一批
时间:
2016年3月
微机系统课程设计
——数字时钟系统与自动报时系统设计
时间:
2016年3月
1.课设题目及成员分工
课设题目:
数字时钟与自动报时系统
小组成员介绍及分工
学号
姓名
任务分工
组长
1410030
总体设计,硬件电路的测试、连接、调试
组员
130088
参与设计,软件编程
1303014
参与设计,软件测试,调整
130305
参与设计,资料查找,报告书写
2.课设内容及要求
课程设计目的:
1、了解以微机为核心的总线方式访问总线设备的原理,提高接口扩展硬件电路的连接能力;
2、你阿姐数字时钟和语音报时的工作原理,提高应用系统的设计和调试的综合能力;
3、加深对定时器/计数器、并行接口芯片和语音芯片的硬件电路和软件编程的工作方式和编程
方法的理解。
课程设计内容:
1、设计数字时钟,能够动态时间显示,整点语音报时;
2、利用定时器产生精确的时钟源,通过中断或者查询的方式将时钟源数值传送到微机控制台;
3、微机控制台在进行数据的处理后,控制并行接口芯片进行DLED的动态扫描,正确的显示
时钟;
4、当系统运行后,数码管显示时分秒,每到整点,喇叭播放报时音。
系统功能和设计要求
1、基本功能要求:
a.系统显示界面:
1.在DLED数码管上进行实时刷新显示;
2.使用8255扫描数码管,显示时分秒,小时和分钟分别为两位显示,秒使用LED3
的DP显示,亮,灭。
b.自动报时要求:
1.通过编程实现语音录制,播放,可以随时修改报时音内容;
2.报时音以12时制录制,12个报时音以连续地址存放在ISD1420芯片内,
录音顺序
如表所示:
表录音顺序表
地址
报音时
地址
报音时
00
十二点整
06
六点整
01
一点整
07
七点整
02
二点整
08
八点整
03
三点整
09
九点整
04
四点整
10
十点整
05
五点整
11
十一点整
2、发挥部分:
1.增加“语音提醒”功能,自行设计提醒时间和播放的录音内容。
打开“语音提醒”功
能后,数字钟运行到设定的时刻,喇叭发声提醒事先录制的语音;
2.增加“秒表计时”功能,启动该功能后可在DLED上进行~秒计时;
3.增加“时区转换”功能,根据设定的时区表随时转换相应时区的时刻。
3.课设实现方案
总体设计思路
1、数字时钟部分:
1.利用CLOCK分频器提供的信号作为可编程定时器8254的时钟源,通过8254进行16
分频,产生秒的精确时钟;
2.监控时钟通过查询获取时钟,根据时钟计算出时分秒,然后驱动4位数码管实时显示
出时间;
3.基本I/O驱动器74LS244作为可编程定时器8254的时钟监控端口。
2、自动报时部分:
1.通过调用电脑系统的蜂鸣器函数beep()实现报时
2.系统可以通过可编程并行接口8255的PA口和PB口控制时间显示数码管的段和位
硬件设计方案
1、总体布局:
该系统主要使用的QTH-2008PCI实验箱和个人PC机,涉及到的芯片有通用可编程并行接
口8255、可编程定时器8254、驱动器74LS244、32Hz的时钟源CLOCK
等,除此之外,还有DLED数码管、按键和一些导线等硬件。
其中,数码管DLED主要显示
时钟的时分秒,语音芯片ISD1420主要用于录音。
2、硬件连接图:
总体硬件连接图如图所示:
图
3、详细设计:
如图所示,该系统可分为两大部分,通用可编程并行接口8255部分和可编程定时器8253
部分:
8255部分:
a.输入部分:
8255的8位数据信号线与总线的数据信号线相连,两个地址A0、A1
分别接总线的LA0、LA1,RD和WR信号分别接总线的IORD和IOWR信号,片
选信号CS2接总线的地址0020H。
PC口的PC4、PC5、PC6、PC7、作为输入分别
与按键KEY4、KEY7、KEY3、KEY4相连。
其中,KEY4主要用于时钟模式下分
钟的减,KEY7主要用于从时钟模式切换到特殊功能状态,KEY2主要用于秒表的
启动和暂停,KEY3主要用于秒表的退出。
b.输出部分:
8255的PA口8条信号线作为输出与数码管的段相连,PB口的低四位
作为输出与数码管部分的四位相连,PC口的PC0、PC1、PC2作为输出分别于语
音芯片ISD1420的REC、PLAYE、PLAYL相连。
8254部分:
c.输入部分:
8254的8位数据信号线与总线的数据信号线相连,两个地址A0、A1
分别接总线的LA0、LA1,RD和WR信号分别接总线的IORD和IOWR信号,片
选信号CS1接总线的地址0000H。
通道0中CLK0作为输入连接32Hz的时钟源
CLOCK0,门控位GET0连接按键KEY1;通道1中CLK1作为输入连接1024Hz
的时钟源CLOCK1,门控位GET1连接按键KEY8。
d.输出部分:
通道0中的输出OUT0连接驱动器74LS244的输入口A1,通道1中的
输出OUT1连接驱动器74LS244的输入口A2。
e.驱动器74LS244部分:
按键KEY5连接驱动器74LS244的输入口A3,输出口Y1、
Y2、Y3连接总线的数据信号线LD1、LD2、LD3,片选信号CS4连接总线的地址
0060H。
其中,按键KEY5主要用于在时钟状态下调节分钟部分的加。
软件设计方案
1、开发环境:
对于软件开发环境,我们采用的PC机中的VC++软件,新建了一个C++的工程,将
与总线驱动有关的文件加进去,然后编写自己的程序。
2、软件流程图:
该系统软件流程图如图所示:
图程序流程图
4.完成内容及实验结果
本系统实际完成的功能:
1、数字时钟显示功能:
对程序进行编译,运行后,数码管DLED正常显示所设定的时间,小数点作为秒单位以预
定的秒的频率闪烁。
四位数码管可正常显示时和分;如果按下按键KEY7,就会退出时钟
模式,进入特殊模式,实现相应的语音提醒功能、秒表定时功能、时区转换功能等。
2、自动报时功能:
运行程序,选择自动录音功能,每到整点就会自动报时
3、语音提醒功能:
运行程序,进入特殊模式,选择语音提醒功能,然后数字钟运行到设定的时刻,就会自动蜂鸣
4、秒表计时功能:
运行程序,进入特殊模式,选择秒表计时功能,按下对应的按键KEY2,启动秒表定时,
在数码管DLED上就会显示秒表计时,然后再次按下对于的按键KEY2,秒表计时就会停止。
按下相应的按键KEY3,就会使秒表计时功能停止,然后退出。
5、时区转换功能:
在此功能中,我们定义了东0区到东11区共12个区时,对应的城市分别是伦敦、布鲁塞
尔、雅典、德黑兰、莫斯科、卡斯兰、阿拉木图、曼谷、北京、首尔、关岛、悉尼、马加达等。
运行程序,输入对应的区时数字,就可以实现相应的时区转换功能。
团队实验总结:
(共同编写)
1、经过本次实验,我们非常清楚的掌握了一个完整系统的设计与实现,更加清晰的体会了要
用系统的观点去看待问题,解决问题。
2、通过本次实验,我们对硬件系统中一些芯片,如8255、8254、ISD1420等,有了一个更好
的掌握,更加清楚了它们的用途,并学会了硬件连线和编程使用,感觉收获很大。
3、通过本次实验,我们对VC++软件有了一个更加深入的了解,并用它成功的写出了整个
系统的程序,运行通过,下载到实验箱中,硬件系统可以按照预先设定的功能进行工作。
4、通过本次实验,我们体会到了团队合作的重要性,大家分工协作,相互讨论,互帮互助,
最终顺利的完成了本次实验。
6.遇到的问题及解决办法
1、软件方面:
a.新建工程时添加文件问题:
在新建工程时,我们添加原有的文件出现了问题,我们仔
细查找了资料,终于找到了正确的方法,添加文件成功。
b.编译过程中存在错误:
在编程中,有的变量定义和使用的不合适,导致了最后的编译
错误,我们仔细查找原因,最终找到了错误,改正之后运行通过。
c.单线程处理时钟进度,在整点响铃时,时钟停止,运用算法进行弥补,也是不足支出。
验收后,课下学会了用多线程进行处理。
d.在数码显示时未能注意到数码管的刷新频率太低,导致显示有闪烁现象。
个人收获、体会和建议:
通过本次微机课程设计,深切了解体会到一个项目或一件产品从设计到完成再到检验的完整过程,从中收获颇大,作为本次课设的组长及硬件设计者,收获亦多,课设活动的整体安排计划分工,的确给组长带来了不少问题,在了解大家的长处之后,方便大家的分工及合作,通过小组人员的共同合作,终于完成了本次课设,作为硬件及总体方案设计者,从刚开始的一头雾水,到老师的指导,组员的帮助解答,终于找到突破口,并从实践中真正理解了8255、8254等器件的功能,编程方法,对系统与外设、总线与接口等方面有了更加清晰的认识,对以后工作与学习提供了巨大的帮助,这是一次非常好的课设,期待有机会可以再尝试,收获更多。
8.附录序:
本次实验的主要源程
#include""
#include
#include""
#include<>
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
CWinApptheApp;
usingnamespacestd;
voidInit8254(){
ULONGadr8254=0x00;
ULONGadr,dat;
adr=adr8254+3;CStringstrHello;
cout<<(LPCTSTR)strHello<}
ULONGadr8254=0x00;
ULONGadr8255=0x20;
ULONGadrisd=0x40;
Init9054();
OpenInt();
Init8254();音提醒"<cout<<"2.秒表计时"<cout<<"3.时区转换"<cout<<"4.时钟"<cin>>flag;
switch(flag){
case1:
Clock();
break;
case2:
Second();
break;
case3:
shiqubiao();
break;
case4:
shizhong();
break;
}
}
}
CloseInt();
Cleanup();
returnnRetCode;
}