版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程名称微机系统课程设计成绩课 题数字时钟系统与自动报时系统设计评语: 指导教师: 年 月 日班 级: 13030 学 号: 1303 姓 名: # 地 点: B-312 批 次: 第一批 时 间: 2016年3月 微机系统课程设计 数字时钟系统与自动报时系统设计 时间:2016年3月1. 课设题目及成员分工1.1 课设题目:数字时钟与自动报时系统1.2 小组成员介绍及分工学号姓名 任务分工组长1410030总体设计,硬件电路的测试、连接、调试组员130088参与设计,软件编程1303014参与设计,软件测试,调整130305参与设计,资料查找,报告书写2. 课设内容及要求2.1 课程设计目的
2、:1、了解以微机为核心的总线方式访问总线设备的原理,提高接口扩展硬件电路的连接能力;2、你阿姐数字时钟和语音报时的工作原理,提高应用系统的设计和调试的综合能力;3、加深对定时器/计数器、并行接口芯片和语音芯片的硬件电路和软件编程的工作方式和编程方法的理解。2.2 课程设计内容:1、设计数字时钟,能够动态时间显示,整点语音报时;2、利用定时器产生精确的时钟源, 通过中断或者查询的方式将时钟源数值传送到微机控制台;3、微机控制台在进行数据的处理后,控制并行接口芯片进行 DLED 的动态扫描,正确的显示时钟;4、当系统运行后,数码管显示时分秒,每到整点,喇叭播放报时音。2.3 系统功能和设计要求1、
3、基本功能要求:a.系统显示界面:1. 在 DLED 数码管上进行实时刷新显示;2. 使用 8255 扫描数码管,显示时分秒,小时和分钟分别为两位显示,秒使用 LED3的 DP 显示,0.5s 亮,0.5s 灭。b.自动报时要求:1. 通过编程实现语音录制,播放,可以随时修改报时音内容;2. 报时音以 12 时制录制,12 个报时音以连续地址存放在 ISD1420 芯片内,录音顺序如表 2.1 所示:表 2.1 录音顺序表地址报音时地址报音时00十二点整06六点整01一点整07七点整02二点整08八点整03三点整09九点整04四点整10十点整05五点整11十一点整2、发挥部分:1.增加“语音提醒
4、”功能,自行设计提醒时间和播放的录音内容。打开“语音提醒”功能后,数字钟运行到设定的时刻,喇叭发声提醒事先录制的语音;2. 增加“秒表计时”功能,启动该功能后可在 DLED 上进行 00.0099.99 秒计时;3. 增加“时区转换”功能,根据设定的时区表随时转换相应时区的时刻。 3. 课设实现方案3.1 总体设计思路1、数字时钟部分:1.利用 CLOCK 分频器提供的信号作为可编程定时器 8254 的时钟源,通过 8254 进行 16分频,产生 0.5 秒的精确时钟;2.监控时钟通过查询获取时钟,根据时钟计算出时分秒,然后驱动 4 位数码管实时显示出时间;3.基本 I/O 驱动器 74LS2
5、44 作为可编程定时器 8254 的时钟监控端口。2、自动报时部分:1.通过调用电脑系统的蜂鸣器函数beep()实现报时2.系统可以通过可编程并行接口 8255 的PA 口和 PB 口控制时间显示数码管的段和位3.2 硬件设计方案1、总体布局:该系统主要使用的 QTH-2008PCI 实验箱和个人 PC 机,涉及到的芯片有通用可编程并行接口 8255、可编程定时器 8254、驱动器 74LS244、32Hz 的时钟源 CLOCK等,除此之外,还有 DLED 数码管、按键和一些导线等硬件。其中,数码管 DLED 主要显示时钟的时分秒,语音芯片 ISD1420 主要用于录音。2、硬件连接图:总体硬
6、件连接图如图 3.1 所示: 图3.13、详细设计:如图3.1所示, 该系统可分为两大部分, 通用可编程并行接口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 主要用于从时钟模式切换到特殊功能状态,
7、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 作为输入连接 32H
8、z 的时钟源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 主要用于在时钟状态下调节分
9、钟部分的加。3.3 软件设计方案1、开发环境:对于软件开发环境,我们采用的 PC 机中的 VC+ 6.0 软件,新建了一个 C+ 的工程,将与总线驱动有关的文件加进去,然后编写自己的程序。2、软件流程图:该系统软件流程图如图 3.2 所示:图 3.2 程序流程图4. 完成内容及实验结果4.1 本系统实际完成的功能:1、数字时钟显示功能:对程序进行编译,运行后,数码管 DLED 正常显示所设定的时间,小数点作为秒单位以预定的 0.5 秒的频率闪烁。四位数码管可正常显示时和分;如果按下按键 KEY7,就会退出时钟模式,进入特殊模式,实现相应的语音提醒功能、秒表定时功能、时区转换功能等。2、自动报时
10、功能:运行程序,选择自动录音功能,每到整点就会自动报时3、语音提醒功能:运行程序,进入特殊模式,选择语音提醒功能,然后数字钟运行到设定的时刻,就会自动蜂鸣4、秒表计时功能:运行程序,进入特殊模式,选择秒表计时功能,按下对应的按键 KEY2,启动秒表定时,在数码管 DLED 上就会显示秒表计时,然后再次按下对于的按键 KEY2,秒表计时就会停止。按下相应的按键 KEY3,就会使秒表计时功能停止,然后退出。5、时区转换功能:在此功能中,我们定义了东 0 区到东 11 区共 12 个区时,对应的城市分别是伦敦、布鲁塞尔、雅典、德黑兰、莫斯科、卡斯兰、阿拉木图、曼谷、北京、首尔、关岛、悉尼、马加达等。
11、运行程序,输入对应的区时数字,就可以实现相应的时区转换功能。 团队实验总结:(共同编写)1、经过本次实验,我们非常清楚的掌握了一个完整系统的设计与实现,更加清晰的体会了要用系统的观点去看待问题,解决问题。2、通过本次实验,我们对硬件系统中一些芯片,如 8255、8254、ISD1420 等,有了一个更好的掌握,更加清楚了它们的用途,并学会了硬件连线和编程使用,感觉收获很大。3、通过本次实验,我们对 VC+ 6.0 软件有了一个更加深入的了解,并用它成功的写出了整个系统的程序,运行通过,下载到实验箱中,硬件系统可以按照预先设定的功能进行工作。4、通过本次实验,我们体会到了团队合作的重要性,大家分
12、工协作,相互讨论,互帮互助,最终顺利的完成了本次实验。6. 遇到的问题及解决办法1、软件方面:a. 新建工程时添加文件问题:在新建工程时,我们添加原有的文件出现了问题,我们仔细查找了资料,终于找到了正确的方法,添加文件成功。b.编译过程中存在错误:在编程中,有的变量定义和使用的不合适,导致了最后的编译错误,我们仔细查找原因,最终找到了错误,改正之后运行通过。c.单线程处理时钟进度,在整点响铃时,时钟停止,运用算法进行弥补,也是不足支出。验收后,课下学会了用多线程进行处理。d.在数码显示时未能注意到数码管的刷新频率太低,导致显示有闪烁现象。个人收获、体会和建议: 通过本次微机课程设计,深切了解体
13、会到一个项目或一件产品从设计到完成再到检验的完整过程,从中收获颇大,作为本次课设的组长及硬件设计者,收获亦多,课设活动的整体安排计划分工,的确给组长带来了不少问题,在了解大家的长处之后,方便大家的分工及合作,通过小组人员的共同合作,终于完成了本次课设,作为硬件及总体方案设计者,从刚开始的一头雾水,到老师的指导,组员的帮助解答,终于找到突破口,并从实践中真正理解了8255、8254等器件的功能,编程方法,对系统与外设、总线与接口等方面有了更加清晰的认识,对以后工作与学习提供了巨大的帮助,这是一次非常好的课设,期待有机会可以再尝试,收获更多。8. 附录序:本次实验的主要源程#include Std
14、Afx.h#include #include QTH9054fun.h#include #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifCWinApp theApp;using namespace std;void Init8254()ULONG adr8254=0x00;ULONG adr,dat;adr=adr8254+3;/选计数器0作为时钟发生器dat=0x37;IO8bWrite(adr,dat);adr=adr8254;dat=0x32;/32 分频IO8b
15、Write(adr,dat);dat=0;IO8bWrite(adr,dat);adr=adr8254+3;/选计时器1作为秒表计数器dat=0x77;IO8bWrite(adr,dat);adr=adr8254+1;dat=0x10;IO8bWrite(adr,dat);dat=0x00;IO8bWrite(adr,dat);void Init8255()ULONG adr8255=0x20;ULONG adr,dat;adr=adr8255+3;dat=0x88;IO8bWrite(adr,dat);IO8bWrite(adr8255+2,0xff);void Player(int h,i
16、nt n)/报时模块int t=h*10+n;for( int i = 0; i t; i+)Beep(500,500);Sleep(500);int w=-1,x=-1,y=-1,z=-1;/闹钟变量int h=0,n=8,m=5,l=9,shiqu=8;/初始时间变量 时区 int clk_flag = 0;/定时开关void Clock()/设置定时部分Beep(500,500);cout 请输入指定时间(x x x x):wxyz;clk_flag = 1;void Second()/秒表计时ULONG wei410=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82
17、,0xf8,0x80,0x90; /0 1 2 3 4 5 6 7 8 9ULONG adr8255=0x20;ULONG adr,dat;int i=0,j=0,l=0,m=0,n=0;while(1)int key;int key1;int state;while(state=IO8bRead(0x60)&(0x04)=0x00)adr=adr8255+1;dat=0x80;IO8bWrite(adr,dat);adr=adr8255;dat=wei4n;IO8bWrite(adr,dat);Sleep(1);adr=adr8255+1;dat=0x40;IO8bWrite(adr,dat
18、);adr=adr8255;dat=wei4m-0x80;IO8bWrite(adr,dat);Sleep(1);if(state=1) break;adr=adr8255+1;dat=0x20;IO8bWrite(adr,dat);adr=adr8255;dat=wei4l;IO8bWrite(adr,dat);Sleep(1);adr=adr8255+1;dat=0x10;IO8bWrite(adr,dat);adr=adr8255;dat=wei4i;IO8bWrite(adr,dat);Sleep(1);j+;while(state=IO8bRead(0x60)&(0x04)=0x04
19、)key=IO8bRead(adr8255+2)&(0x80);key1=IO8bRead(adr8255+2)&(0x40);adr=adr8255+1;dat=0x80;IO8bWrite(adr,dat);adr=adr8255;dat=wei4n;IO8bWrite(adr,dat);adr=adr8255+1;dat=0x40;IO8bWrite(adr,dat);adr=adr8255;dat=wei4m-0x80;IO8bWrite(adr,dat);Sleep(1);if(state=0) break;adr=adr8255+1;dat=0x20;IO8bWrite(adr,d
20、at);adr=adr8255;dat=wei4l;IO8bWrite(adr,dat);adr=adr8255+1;dat=0x10;IO8bWrite(adr,dat);adr=adr8255;dat=wei4i;IO8bWrite(adr,dat);j+;if(j=2 & key=0)i += 10;j=0;if(j=2)j=0;if(i=10)i=0;l+;if(l=10)l=0;m+;if(m=10)n+;m=0;if(n=10)n=0;if(key1=0)break;void shiqubiao()cout当前时区为:shiqu时区endl;cout请输入您需要查询的时区endl;
21、cout时区0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12endl;cout城市 伦敦 布鲁塞尔 雅典 德黑兰 莫斯科 卡拉奇 阿拉木图 曼谷 北京 首尔 关岛 悉尼 马加丹 opt;shi = h*10 + n - shiqu + opt;shiqu = opt;h = shi / 10;n = shi % 10;void shizhong()ULONG adr8254=0x00;ULONG adr8255=0x20;ULONG adrisd=0x40;ULONG adr,dat;ULONG wei410=0xc0,0xf9,0xa4,0xb0,0x99,0
22、x92,0x82,0xf8,0x80,0x90;int i=0,j=0,k1=0,k=0,k2=0,k3=0,key2,key3,key4,key5;while(1)if(!(IO8bRead(adr8255+2)&(0x20) break;while(IO8bRead(0x60)&(0x02)=0x00)/显示时分模块/位选信号 通过B高位端口/显示数字信号 通过A端口adr=adr8255+1; /数码1dat=0x80;IO8bWrite(adr,dat);adr=adr8255;dat=wei4h;IO8bWrite(adr,dat);Sleep(1);adr=adr8255+1; /
23、数码2dat=0x40;IO8bWrite(adr,dat);adr=adr8255;dat=wei4n;IO8bWrite(adr,dat);Sleep(1);adr=adr8255+1;/数码3dat=0x20;IO8bWrite(adr,dat);adr=adr8255;dat=wei4m;IO8bWrite(adr,dat);Sleep(1);adr=adr8255+1;/数码4dat=0x10;IO8bWrite(adr,dat);adr=adr8255;dat=wei4l;IO8bWrite(adr,dat);Sleep(1);j+;/低电平判定while(IO8bRead(0x6
24、0)&(0x02)=0x02)/通过C端口获取 Keykey2=IO8bRead(adr8255+2)&(0x80);key3=IO8bRead(adr8255+2)&(0x40);key4=IO8bRead(adr8255+2)&(0x10);key5=IO8bRead(0x60)&(0x08);adr=adr8255;dat=0x80;IO8bWrite(adr,dat);adr=adr8255+1;dat=0x80;IO8bWrite(adr,dat);adr=adr8255;dat=wei4h;IO8bWrite(adr,dat);Sleep(1);adr=adr8255+1;dat=
25、0x40;IO8bWrite(adr,dat);adr=adr8255;dat=wei4n-0x80;/点是亮的IO8bWrite(adr,dat);Sleep(1);adr=adr8255+1;dat=0x20;IO8bWrite(adr,dat);adr=adr8255;dat=wei4m;IO8bWrite(adr,dat);Sleep(1);adr=adr8255+1;dat=0x10;IO8bWrite(adr,dat);adr=adr8255;dat=wei4l;IO8bWrite(adr,dat);Sleep(1);j+;/高电平判定/时钟自我调整部分if(j=2)/满足则加ii
26、+;j=0;if(i=60)/分钟计时个位i=0;l+;if(l=10)/分钟计时十位l=0;m+;if(m=6)n+;m=0;Player(h,n); /整点放音i += 10*h+n;if(n=10)h+;n=0;if(h=1 & n = 2)h=0;n=0;if(w=h & x=n & y=m & z=l & clk_flag = 1) /定时语音提醒Beep(1000,1000);i+;clk_flag = 0;if(k1!=key3)/增加一小时n+;k1=key3;int s;s=h*10+n;if(s11)s=s-12;if(s=9)h=0;n=s;elseh=1;n=s-10;if(k!=key2)/减一小时n-;k=key2;int s;s=h*10+n;if(s11)s=s-12;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论