数字时钟.docx
- 文档编号:6149336
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:16
- 大小:278.29KB
数字时钟.docx
《数字时钟.docx》由会员分享,可在线阅读,更多相关《数字时钟.docx(16页珍藏版)》请在冰豆网上搜索。
数字时钟
一、实训目的
根据单片机系统开发与应用课程所学的概念、理论和方法,按照一般的单片机系统的开发过程,以Proteus7.5sp3为平台,KeilC51V9.00uVision4为软件开发工具,设计出一个适当难度的单片机系统;进一步掌握51单片机体系结构和单片机系统。
使学生能理论联系实际,加深和巩固所学的理论知识,提高学生的实践能力和单片机系统的综合运用能力。
二、实训内容
1、以Proteus7.5sp3为平台,设计出硬件系统。
2、以KeilC51V9.00uVision4为软件开发工具,编制程序实现如下功能:
(1)用六位LED数码管输出显示时、分、秒;
(2)具备校准功能,可以设置当前时间;(3)具备定时启动功能。
3、所有的源代码均在加上详细的注释。
4、画出程序流程图。
5、要有软硬件联调的操作及截图。
三、实训步骤
1、设计方案
(1)选用MCS-51系列主流芯片AT89C51,内部带有4KBFlashROM,无须扩展程序存储器。
由于数字钟没有大量运算和暂存数据,片内128B的RAM可以满口设计要求,无须外扩片外RAM。
(2)利用AT89C51内部定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。
该方案节省硬件成本,且能够使读者对前面所学知识进行综合运用,因此,本系统设计采用这一方案。
(3)利用单片机并行I/O端口,实现LED动态显示。
(4)综合上述方案分析,本系统选用主流芯片AT89S51单片机作为主控制器,采用单片机内部定时器实现计时、用七个按键控制时钟的各项功能和动态LED显示(6位)。
按键功能定义。
与P1口相连的7个按键定义如下:
K1键启动设置时间的功能;K2键实现分位加一功能;K3键实现时位加一功能。
K4键启动设置闹钟的功能;K5键实现分为减一功能。
K6键实现时位加一功能K8键实现退出设置和闹铃功能。
(5)系统硬件设计电路如下图所示,单片机的P0口作为6位LED显示的段选口,P0.0~P0.7分别接6个LED的a~g。
,单片机P2口的P2.0~P2.5分别连接6个LED的段选口。
P0.6口作为蜂鸣器的引脚。
2、绘制电路原理图
(1)点击“开始”-〉“程序”按钮,选择Proteus7Professional运行ISIS7Professional,进入ProteusISIS集成环境,ProteusISIS7的界面如图1所示。
图1ProteusISIS7的编辑界面
(2)将所需元器件加入到对象选择器窗口
单击对象选择器按钮P,在弹出的“PickDevices”页面中,使用搜索引擎在”Keywords”栏中分别输入“AT89C51”、“2N2905”、“7SEG-MPX1-CA”、“BUTTON”、“CAP”、“RES”、“SPEAKER”,在搜索结果”Results”栏中找到该对象,并将其添加至对象选择器窗口。
(3)放置元器件至原理图编辑窗口
将“AT89C51”、“2N2905”、“7SEG-MPX1-CA”、“BUTTON”、“CAP”、“RES”、“SPEAKER”放置到原理图编辑窗口,如图2所示。
图2放置元器件至图形编辑窗口
(4)添加电源和接地引脚
单击绘图工具栏中的Inter-sheetTerminal按钮,在对象选择器窗口选中对象“POWER”和“GROUND”将其放置到原理图编辑窗口。
(6)元器件之间的连线
在原理图编辑窗口中,完成各对象的连线,如图3所示。
图3完成各对象的连线后的界面
(7)调试运行
单击仿真运行开始按钮,能清楚的观察到:
引脚的电频变化。
红色代表高电平,蓝色代表低电平,灰色代表未接入信号,或者为三态。
(8)保存该原理图
从“文件”下拉菜单选择“保存”项,将文件名命名为数字时钟,就此完成了电路原理图的绘制。
3、软件设计
(1)根据总体设计思路,画出流程图如图4所示。
图4程序流程图
(1)选择【工程】/【新建工程】选项。
(2)在弹出的“CreateNewProject”对话框中选择要保存项目文件的路径保存到McuPort目录里,在“文件名”文本框中输入项目名qq,然后单击“保存”按钮。
(3)这时会弹出一个对话框,要求选择单片机的型号。
可以根据使用的单片机型号来选择,KeilC51几乎支持所有的80C51内核的单片机,这里选择AT89C51,先选择ATMEL公司,再选择AT89C51,右边Description栏中即显示该单片机的基本说明,然后单击“确定”按钮,弹出将8051初始化代码复制到项目中的询问对话框,单击“是”按钮。
(4)选择【文件】/【新建文件】选项,在弹出的程序文本框中输入程序(附录1)。
(5)选择【文件】/【保存】选项,保存文件。
在弹出的对话框中,选择要保存的路径,在“文件名”文本框中输入文件名。
上面程序用的是C程序文件,所以需要存储为C源程序文件,所以输入.c扩展名,单击“保存”按钮。
此处输入文件名为1.c
(6)将1.c文件加入到项目中。
用鼠标右键点击左边项目窗口中的“SourceGroup1”,在弹出的菜单中选择“AddFiletoGroup‘SourceGroup1’”,选择刚才建立的文件MyProjest.c,文件类型选择CSourcefile(*.c)。
单击“Add按钮,然后单击“Close”按钮,关闭该窗口。
这时在SourceGroup1里就有1.c文件和事先建立项目时已经加入的文件ST-ARTUP.A51。
(7)对目标进行一些设置。
用鼠标右键单击MyProjest,在弹出的菜单选项中选择“OptionsforTarget‘Target1’”选项,弹出“OptionsforTarget‘Target1’”对话框。
①设置【目标】选项卡。
修改单片机工作的频率为12MHZ,其他默认即可。
②设置【输出】选项卡。
选中创建HEX文件选项,最后单击确定按钮关闭窗口。
(8)编译连接程序,选择【工程】/【重建全部目标文件】,如没有错误则编译成功,如图5所示,如程序出现错误,则在步骤(4)中进行修改根据提示修改程序,在步骤(4)中进行修改。
图5编译连接成功信息
(9)编译结束之后,选择【调试】/【Start/StopDebugSessionCtrl+F5】选项,即进入到调试环境。
(10)装载代码之后,开发环境OutputWindow(在左下角)显示如图6所示的装载成功信息
图6调试界面
4、uvision3IDE和ProteusVSM联调
(1)uvision3IDE的设置
①打开刚才建立的工程Myproject。
②打开projec【菜单】/【optionsfortarget’target1’】选项,在弹出的窗口中,单击【调试】选项卡按钮,在出现的对话框的右栏上部的下拉菜单里选中“proteusVSMSimulator”,再单击一下“使用”前面表明选中的小圆点,点击“确定”按钮。
如图7所示。
图7uvision3IDE开发环境optionsfortarget/调试选项设置
(2)ProteusVSM的设置
①进入Proteus的ISIS,打开原理图;
②修改AT89C51属性并加载程序文件;
双击U1-AT89C51,打开“editcomponent“对话框,如图8所示
在”programfile:
”选择在项目生成的HEX文件:
qq.hex.单击确定。
图8AT89C51编辑原件界面
③单击菜单栏“调试”,选中“使用远程调试监控”,此后便可以实现uVision3I与ProteusVSM联调。
(3)然后重新运行程序便可以实现keiluvision3与proteusVSM的联调,如图9所示。
图9uvision3IDE与ProteusVSM实现联调
四、设计总结
通过一周的专业综合能力的实训使我知道了自己单独设计能力的不足以及综合运用知识的能力不能很好的使用,但也体会到学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
这次设计我学到了很多,不仅了解了设计电路的程序,以及数字钟的原理与设计。
同时在软件设计编程上,让我了解到很多编程方面的技巧,并且使我对单片机的各个引脚的功能有更深入的了解,巩固了单片机的书面知识,发现了以往在学习中忽视的东西,明白了在实际的设计工作中只有书面知识是不足的,只有在自己的实践中才能发现问题并解决问题,,提高了实践能力和单片机系统的综合运用能力,在这次设计过程中,体现出自己单独设计的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
虽然在操作中遇到了问题,但在同学和老师的帮助下还是完成了本次课程设计此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,此次课程设计收获颇丰。
附录1源程序:
#include
unsignedcharsec,msec,fen,hou,mhou,mfen;
unsignedcharled1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//定义数组
unsignedcharnaomfen,naomhou,naofen,naohou,naomsec,naosec;
unsignedchara,b,naowei;
sbitk1=P1^0;//调时
sbitk2=P1^3;//加一
sbitk3=P1^4;//换位
sbitk4=P1^1;//调闹
sbitk8=P1^7;//退出
sbitk5=P1^2;//
sbitk6=P1^5;
sbitnaoling=P1^6;
voidjiayi();
voidtiaoshi();
voidtiaonao();
voidnaozhong();
voiddisplay();
voidjianyi();
voiddelay(unsignedchark)//延时
{
unsignedchari,j;
for(i=0;i for(j=0;j<100;j++); } voidint0()interrupt1//中断 { TH0=0x3c; TL0=0xb0; msec++; if(msec==20) { msec=0; sec++; if(sec==60) { sec=0; fen++; if(fen==60) { fen=0; hou++; if(hou==24) { hou=0; } } } } } voidmain()//主函数 { sec=0; fen=59; hou=23; TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; TR0=1; while (1) { display(); if(k1==0)tiaoshi(); if(k4==0)tiaonao(); } } voiddisplay()//显示 { P2=0x01; P0=led[hou/10]; delay(10); P2=0x02; P0=led1[hou%10]; delay(10); P2=0x08; P0=led1[fen%10]; delay(10); P2=0x04; P0=led[fen/10]; delay(10); P2=0x20; P0=led[sec%10]; delay(10); P2=0x10; P0=led[sec/10]; delay(10); if(naowei==1) { if(sec<60) { if(naohou==hou) { if(naofen==fen) { naozhong(); } } } } } voidtiaonao()//调闹 { a=hou; b=fen; TR0=0; naowei=1; while(TR0==0) { P2=0x01; P0=led[hou/10]; delay(10); P2=0x02; P0=led1[hou%10]; delay(10); P2=0x08; P0=led1[fen%10]; delay(10); P2=0x04; P0=led[fen/10]; delay(10); P2=0x20; P0=led[sec%10]; delay(10); P2=0x10; P0=led[sec/10]; delay(10); if(k2==0)jiayi(); if(k3==0)jiayi(); if(k8==0){TR0=1;hou=a;fen=b;break;} if(k5==0)jianyi(); if(k6==0)jianyi(); naohou=hou; naofen=fen; } } voidnaozhong()//响铃 { if(naohou==hou) { if(naofen==fen) { P2=0xff; delay(200); P2=0x01; P0=led[hou/10]; delay(10); P2=0x02; P0=led1[hou%10]; delay(10); P2=0x08; P0=led1[fen%10]; delay(10); P2=0x04; P0=led[fen/10]; delay(10); P2=0x20; P0=led[sec%10]; delay(10); P2=0x10; P0=led[sec/10]; delay(10); P2=0x00; delay(200); naoling=0; delay(50); naoling=1; delay(50); if(k8==0) { naowei=0; } } } } voidtiaoshi()//调时 { TR0=0; while(TR0==0) { P2=0x01; P0=led[hou/10]; delay(10); P2=0x02; P0=led1[hou%10]; delay(10); P2=0x08; P0=led1[fen%10]; delay(10); P2=0x04; P0=led[fen/10]; delay(10); P2=0x20; P0=led[sec%10]; delay(10); P2=0x10; P0=led[sec/10]; delay(10); if(k2==0)jiayi(); if(k3==0)jiayi(); if(k8==0)TR0=1; if(k5==0)jianyi(); if(k6==0)jianyi(); } } voidjiayi()//加一 { if(k2==0) { delay(250); if(k2==0) { if(fen==60)fen=0; fen++; if(fen==60) { fen=0; hou++; if(hou==24) hou=0; } } } if(k3==0) { delay(250); if(k3==0) { hou++; if(hou==24)hou=0; } } } voidjianyi()//减一 { if(k5==0) { delay(250); if(k5==0) { if(fen==0)fen=59; fen--; if(fen==0)fen=59; } } if(k6==0) { delay(250); if(k6==0) { if(hou==0)hou=23; hou--; if(hou==0)hou=23; } } } /*voidshanshuo() { unsignedchard,e; e=0; while(d==0) { for(d=0;d<10;d++) { if(k2==0||k5==0) { P2=0x30; delay(200); P2=0x00; delay(200); jiayi(); } if(k3==0||k6==0) { P2=0xc0; delay(200); P2=0x00; delay(200); } } } }*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 时钟