数字时钟Word文档格式.docx
《数字时钟Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字时钟Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
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<
reg51.h>
//片内寄存器定义
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<
k;
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()//主函数
fen=59;
hou=23;
TMOD=0x01;
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];
P2=0x08;
P0=led1[fen%10];
P2=0x04;
P0=led[fen/10];
P2=0x20;
P0=led[sec%10];
P2=0x10;
P0=led[sec/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)
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()//响铃
P2=0xff;
delay(200);
P2=0x00;
naoling=0;
delay(50);
naoling=1;
if(k8==0)
naowei=0;
}
voidtiaoshi()//调时
{
if(k8==0)TR0=1;
voidjiayi()//加一
if(k2==0)
delay(250);
if(k2==0)
if(fen==60)fen=0;
if(fen==60)
if(k3==0)
{
if(hou==24)hou=0;
}
voidjianyi()//减一
if(k5==0)
if(k5==0)
{
if(fen==0)fen=59;
fen--;
if(k6==0)
if(hou==0)hou=23;
hou--;
/*voidshanshuo()
unsignedchard,e;
e=0;
while(d==0)
for(d=0;
d<
10;
d++)
if(k2==0||k5==0)
P2=0x30;
jiayi();
if(k3==0||k6==0)
P2=0xc0;
}*/