整点报时数字钟.docx

上传人:b****6 文档编号:3111256 上传时间:2022-11-17 格式:DOCX 页数:16 大小:244.69KB
下载 相关 举报
整点报时数字钟.docx_第1页
第1页 / 共16页
整点报时数字钟.docx_第2页
第2页 / 共16页
整点报时数字钟.docx_第3页
第3页 / 共16页
整点报时数字钟.docx_第4页
第4页 / 共16页
整点报时数字钟.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

整点报时数字钟.docx

《整点报时数字钟.docx》由会员分享,可在线阅读,更多相关《整点报时数字钟.docx(16页珍藏版)》请在冰豆网上搜索。

整点报时数字钟.docx

整点报时数字钟

数字钟

一、设计任务

本任务为:

数字钟。

设计任务具体内容如下:

基本设计任务

依据命题题意,本设计采用89C51进行24小时计时并显示。

要求其显示时间范围是00:

00:

00~23:

59:

59,具备有时分秒校准功能。

数字钟上面要带有闹钟,闹钟与时钟之间能随时切换,闹钟具备时分秒设置功能。

控制设计任务

由于本设计采用手动校准时钟与手动设置闹钟方案,所以要求用较少的按键来达到切换闹钟与时钟、时钟时分秒校准、闹钟时分秒设置等功能。

软件设计任务

数字钟的所有计时都要由软件控制实现。

用软件对几个按键所得信号进行相应改变,以控制时钟与闹钟的显示。

通过软件对闹钟与时钟进行比较,当时钟所显示时间与闹钟一样时,要启动报时模块。

三、总体设计

经过对各个方案分析比较,最终确定总方案如图3-1所示。

该系统所有模块都由主单片机控制。

其中,设计各个模块,包括单片机、显示模块、电机驱动、光电探测由四节AA电池供电。

电机驱动采用L298驱动芯片控制。

用光电传感器对边线的探测来控制距离。

通过单片机的机器周期计算时间计数周期,以达到计时目的。

图3-1系统方案图

系统硬件电路设计

3.1.1显示及控制模块

图3-4语音报时模块

系统软件设计

3.2.1软件计时的分析与计算

单片机内部定时器有4种工作模式,方式0是13位计数器,由于计时时间过短,中断频率高,所以不选用此模式;方式2是自动重装式计数器,是8位计数器,同样中断频率过高;方式3也是8位计数器;方式1是16位计数器,综合考虑,选用方式1做精确计时。

由于51单片机是12分频,因此机器周期=晶振频率/12。

在该设计中,选用频率为12MHz的晶振,因此机器周期=1μs。

定时1s需要1000000个机器周期,因此通过20次定时器中断完成1s的定时,每次完成50000个周期的定时,因此每次给定时器的初值应该是TH0=B0H,TL0=3CH。

3.2.2系统软件设计

设计两套存储方案,一套存储时钟,一套存储闹钟,两者互不干涉,只有当两者相等时才会调用闹钟播放子程序,而当每次整点时则会调用整点报时子程序。

本设计有调用T0中断,并有以下子程序:

voiddelay(void)片机原理及其接口技术.北京:

清华大学出版社,2005

2、阎石.数字电子技术基础.北京:

高等教育出版社,2001

3、童诗白华成英.模拟电子技术基础.北京:

高等教育出版社,2001

4、郁有文等.传感器原理及工程应用.西安:

西安电子科技大学出版社,2008

附件一:

参考程序如下:

#include<>

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsignedcharcodetab[]={0xfd,0xfb,0xf7,0xef,0xdf,0xbf};

unsignedcharcodets[]={0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50};

unsignedcharwei[]={0,1,2,3,4,5};

unsignedcharsec,min,hou,rsec,rmin,rhou,tcont;

unsignedchara0,a1,a2;

unsignedcharsmh;

voiddelay(void)//延时子程序

{unsignedchari,j;

for(i=10;i>0;i--)

for(j=248;j>0;j--);

}

voiddelay2(void)//1420专用延时子程序

{unsignedchari,j,k;

for(i=200;i>0;i--)

for(j=248;j>0;j--)

for(k=20;k>0;k--);

}

voidplay(unsignedchartemp)//1420播放子程序

{P1=0;P3_0=1;P3_1=1;P1=temp;

P3_1=0;

delay2();

P1=0;

P3_1=1;

}

voiddisplay(void)//显示子程序

{for(a2=0;a2<6;a2++)

{wei[0]=hou/10;

wei[1]=hou%10;

wei[2]=min/10;

wei[3]=min%10;

wei[4]=sec/10;

wei[5]=sec%10;

P2=tab[a2];

P0=table[wei[a2]];

delay();

}

}

voidrdisplay(void)//闹钟显示子程序

{for(a2=0;a2<6;a2++)

{wei[0]=rhou/10;

wei[1]=rhou%10;

wei[2]=rmin/10;

wei[3]=rmin%10;

wei[4]=rsec/10;

wei[5]=rsec%10;

P2=tab[a2];

P0=table[wei[a2]];

delay();

}

}

voidring(void)//闹钟控制子程序

{while(P3_5==0)

rdisplay();

smh=0;

a0=0;

while(a0==0)

{rdisplay();

if(P3_3==0)

{delay();

if(P3_3==0)

{switch(smh)

{case0:

rsec++;

break;

case1:

rmin++;

break;

case2:

rhou++;

break;

}

if(rsec==60)

{rsec=0;

rmin++;

}

if(rmin==60)

{rmin=0;

rhou++;

}

if(rhou==24)

rhou=0;

}

while(P3_3==0)

rdisplay();

}

if(P3_2==0)

{delay();

if(P3_2==0)

{switch(smh)

{case0:

rsec--;

break;

case1:

rmin--;

break;

case2:

rhou--;

break;

}

if(rsec==-1)

{rsec=59;

rmin--;

}

if(rmin==-1)

{rmin=59;

rhou--;

}

if(rhou==-1)

rhou=23;

}

while(P3_2==0)

rdisplay();

}

if(P3_4==0)

{delay();

if(P3_4==0)

smh++;

if(smh==3)

smh=0;

while(P3_4==0)

rdisplay();

}

if(P3_5==0)

{delay();

if(P3_5==0)

a0=1;

while(P3_5==0)

rdisplay();

break;

}

}

smh=0;

}

voidexamring(void)//闹钟播放子程序

{unsignedchari,j,k;

if(sec==rsec)

{if(min==rmin)

{if(hou==rhou)

{P1=0;P3_0=1;P3_1=1;P1=0x70;

P3_1=0;

for(i=150;i>0;i--)

display();

P1=0;

P3_1=1;

P1=0;P3_0=1;P3_1=1;P1=0x70;

P3_1=0;

for(i=150;i>0;i--)

display();

P1=0;

P3_1=1;

P1=0;P3_0=1;P3_1=1;P1=0x70;

P3_1=0;

for(i=150;i>0;i--)

display();

P1=0;

P3_1=1;

P1=0;P3_0=1;P3_1=1;P1=0x70;

P3_1=0;

for(i=150;i>0;i--)

display();

P1=0;

P3_1=1;

}

}

}

}

voidzhengdian(void)//整点报时子程序

{unsignedchardian;

if(sec==0)

{if(min==0)

{dian=hou/10;

if(dian==0)

{play(0x60);play(0x68);dian=hou%10;dian=ts[dian];play(dian);play(0x58);}

if(dian==1)

{dian=hou%10;

if(dian==0){play(0x60);play(0x68);play(0x50);play(0x58);}

if(dian!

=0){play(0x60);play(0x68);play(0x50);dian=hou%10;dian=ts[dian];play(dian);play(0x58);}

}

if(dian==2)

{dian=hou%10;

if(dian==0){play(0x60);play(0x68);play(0x10);play(0x50);play(0x58);}

if(dian!

=0){play(0x60);play(0x68);play(0x10);play(0x50);dian=hou%10;dian=ts[dian];play(dian);play(0x58);}

}

}

}

}

voidmain(void)//主程序

{unsignedchari;

TMOD=1;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

ET0=1;

EA=1;

tcont=0;

sec=0;

min=0;

hou=0;

rsec=0;

rmin=0;

rhou=0;

smh=0;

for(i=50;i>0;i--)

display();

while

(1)

{display();

examring();

zhengdian();

if(P3_3==0)

{delay();

if(P3_3==0)

{switch(smh)

{case0:

sec++;

break;

case1:

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

当前位置:首页 > 工程科技 > 机械仪表

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

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