整点报时数字钟资料.docx
- 文档编号:27897157
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:19
- 大小:236.62KB
整点报时数字钟资料.docx
《整点报时数字钟资料.docx》由会员分享,可在线阅读,更多相关《整点报时数字钟资料.docx(19页珍藏版)》请在冰豆网上搜索。
整点报时数字钟资料
整点报时数字钟
数字钟
一、设计任务
本任务为:
数字钟。
设计任务具体内容如下:
1.1基本设计任务
依据命题题意,本设计采用89C51进行24小时计时并显示。
要求其显示时间范围是00:
00:
00~23:
59:
59,具备有时分秒校准功能。
数字钟上面要带有闹钟,闹钟与时钟之间能随时切换,闹钟具备时分秒设置功能。
1.2控制设计任务
由于本设计采用手动校准时钟与手动设置闹钟方案,所以要求用较少的按键来达到切换闹钟与时钟、时钟时分秒校准、闹钟时分秒设置等功能。
1.3软件设计任务
数字钟的所有计时都要由软件控制实现。
用软件对几个按键所得信号进行相应改变,以控制时钟与闹钟的显示。
通过软件对闹钟与时钟进行比较,当时钟所显示时间与闹钟一样时,要启动报时模块。
三、总体设计
经过对各个方案分析比较,最终确定总方案如图3-1所示。
该系统所有模块都由主单片机控制。
其中,设计各个模块,包括单片机、显示模块、电机驱动、光电探测由四节AA电池供电。
电机驱动采用L298驱动芯片控制。
用光电传感器对边线的探测来控制距离。
通过单片机的机器周期计算时间计数周期,以达到计时目的。
闹钟
AT89C52
按键
时间显示
语音报时
图3-1系统方案图
3.1系统硬件电路设计
3.1.1显示及控制模块
图3-4语音报时模块
3.2系统软件设计
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)//延时子程序
voiddelay2(void)//1420专用延时子程序
voidplay(unsignedchartemp)//1420播放子程序
voiddisplay(void)//显示子程序
voidrdisplay(void)//闹钟显示子程序
voidring(void)//闹钟控制子程序
voidexamring(void)//闹钟播放子程序
voidzhengdian(void)//整点报时子程序
Ⅳ、测试结果及结果分析
4.1测试仪器及工具
测试仪器及工具:
电源一个。
4.2测试步骤
①、接上电源。
②、设定闹钟为00:
01:
00,并试听闹钟是否准确。
③、试听每次整点报时是否准确。
④、试验各按键功能是否正常。
4.3测试结果如下
闹钟与整点报时功能均正确无误,各按键功能均正常。
4.4测试结果分析
通过对测试数据的分析,可以看出,数字钟能实现时钟计时,并带有闹钟与整点报时功能,即数字钟已经实现了题目所给出的所有要求。
参考文献:
1、胡汉才.单片机原理及其接口技术.北京:
清华大学出版社,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:
min++;
break;
case2:
hou++;
break;
}
if(sec==60)
{sec=0;
min++;
}
if(min==60)
{min=0;
hou++;
}
if(hou==24)
hou=0;
}
while(P3_3==0)
display();
}
if(P3_2==0)
{delay();
if(P3_2==0)
{switch(smh)
{case0:
sec--;
break;
case1:
min--;
break;
case2:
hou--;
break;
}
if(sec==-1)
{sec=59;
min--;
}
if(min==-1)
{min=59;
hou--;
}
if(hou==-1)
hou=23;
}
while(P3_2==0)
display();
}
if(P3_4==0)
{delay();
if(P3_4==0)
smh++;
if(smh==3)
smh=0;
while(P3_4==0)
display();
}
if(P3_5==0)
{delay();
if(P3_5==0)
ring();
}
}
}
voidt0(void)interrupt1using0//调用中断
{TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tcont++;
if(tcont==100)
{tcont=0;
sec++;
if(sec==60)
{sec=0;
min++;
if(min==60)
{min=0;
hou++;
if(hou==24)
hou=0;
}
}
}
}
附件二:
总原理图如下:
附件三:
元器件清单
元器件清单报表
元件名称
数量
单片机AT89C51
一块
语音芯片ISD1420
一块
喇叭
一个
12M晶振
一个
单排排针
若干
电
容
220uF
5个
47uF
3个
10uF
3个
47nF
5个
33pF
5个
电
阻
470K
5个
100K
5个
10K
10个
5.1K
5个
4.7K
10个
1K
5个
470
3个
大板子
一块
驻基体
一个
4位共阴显示数码管
2个
排线
若干
附表一元器件清单
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整点 报时 数字 资料