沈理单片机课设电子钟Word格式文档下载.docx
《沈理单片机课设电子钟Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《沈理单片机课设电子钟Word格式文档下载.docx(21页珍藏版)》请在冰点文库上搜索。
1引言
现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。
从而达到计时的功能,是人民日常生活补课缺少的工具。
数字式电子钟用集成电路计时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,设定闹钟和整点报时。
电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此,电子钟的应用会越来越广泛。
而且随着电子技术的不断提高,电子钟也将向着更加精确、更低的功耗、多功能的方向发展。
这是由于电子钟有如此多的功能及广泛的应用范围,因此,电子钟的研究及扩大其在各个领域的应用,有着非常现实和价值的意义。
2总体设计
2.1时钟的基本原理分析
利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为100,每中断一次中断计数初值减1,当减到0时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。
由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。
2.2时钟设计分析
针对要实现的功能,采用AT89S52单片机进行设计,AT89S52单片机是一款低功耗,高性能的单片机,器件采用高密度、非易失性存储技术制造,兼容标准MCS-52指令系统及80C52引脚结构。
这样,既能做到经济合理又能实现预期的功能。
在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。
程序可分为闹钟的时间显示程序、时间调整程序、闹钟调整程序、定时调整程序,延时程序等。
运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。
准备实现的目标:
(1)可以像正常的时钟一样准确显示时间。
(2)整点报时功能,能够在整点时刻进行短暂的报警。
(3)闹钟功能,能够在预先设定的时刻进行近乎10秒的报警,以实现闹钟。
(4)电子钟可自由设定时间。
2.3系统的结构框图
图1电路的总体设计框架
图2电路的分部设计框架
3详细设计
3.1硬件设计
3.1.151单片机的简单介绍
单片机是一种采用超大规模集成电路技术,它把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器、计数器等集成到一块硅片上,构成了一个小而完善的小计算机系统的集成电路芯片。
51单片机是对目前所有兼容Intel8031指令系统的单片机的统称,该系列单片机的始祖是Intel的8031单片机,后来随着Flanshrom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一。
51单片机是基础入门的一个单片机,还是应用最广泛的一种。
3.1.2时间设置
如图3开关从上到下分别是秒钟加1、分钟加1、分钟减1、时钟加1、时钟减1和设定闹铃。
图3时间设置模块
3.1.3闹钟设置
如图4开关从上到下分别是秒钟加1、秒钟减1、分钟加1、分钟减1、时钟加1、时钟减1。
图4闹钟设置模块
3.1.4显示部分
设定电子钟的初始值为12:
00:
00,显示部分如图5所示。
图5显示模块
3.1.5硬件原理图
各模块拼接组合,电路总体设计图如图5。
数码管位选的8个端口接在单片机的P2口,段选端则接在单片机的P0口,由于P0口;
内部没有接电阻,因此需在P0口外部接一个10k的排阻,并将其上拉。
按键分别接在单片机的P1和P3口,用来调整时间。
图6硬件原理图
3.2软件设计
3.2.1整体程序
#include<
reg51.h>
absacc.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//段定义
0xbf,0x86,0xcb,0xcf,0xef,0xed,0xfd,0x87,0xff,0xdf,};
ucharsecond=0;
ucharminute=0;
ucharhour=12;
//正常显示时间的定义
//闹钟时的定义
ucharshi=0;
//闹钟时的定义
ucharfen=0;
//闹钟分的定义
ucharmiao=0;
//闹钟秒的定义
ucharbjcs;
//报警次数
ucharmstcnt=0;
sbitP10=P1^0;
//秒键加
sbitP11=P1^1;
//分键加
sbitP12=P1^2;
//分键减
sbitP13=P1^3;
//时键加
sbitP14=P1^4;
//时键减
sbitP15=P1^5;
//整点报时
sbitP16=P1^6;
//闹钟
sbitP17=P1^7;
//关闭闹铃
sbitP30=P3^0;
//闹钟秒的调整加
sbitP31=P3^1;
//闹钟秒的调整减
sbitP32=P3^2;
//闹钟分的调整加
sbitP33=P3^3;
//闹钟分的调整减
sbitP34=P3^4;
//闹钟时的调整加
sbitP35=P3^5;
//闹钟时的调整减
/*函数声明*/
voiddelay(uintk);
voidtime_pro();
voiddisplay();
voidkeyscan();
voidzhengdian();
voidnaozhong();
//延时子程序,采用for循环的方法实现
voiddelay(uintk)
{
ucharj;
while((k--)!
=0)
{
for(j=0;
j<
250;
j++)
{;
}
}
//时间处理子程序
voidtime_pro(void)
if(second==60)
second=0;
minute++;
if(minute==60)
minute=0;
hour++;
if(hour==24)
{hour=0;
}
//显示子程序
voiddisplay(void)
{
if(P16==1)
P2=0xfe;
//共阴极数码管低电平0有效
P0=dispcode[hour/10];
delay
(1);
P2=0xfd;
P0=(dispcode[hour%10]);
P2=0xfb;
P0=0x40;
P2=0xf7;
P0=(dispcode[minute/10]);
P2=0xef;
P0=(dispcode[minute%10]);
P2=0xdf;
P2=0xbf;
P0=dispcode[second/10];
P2=0x7f;
P0=dispcode[second%10];
//键盘扫描子程序
voidkeyscan(void)
if(P10==0)
delay(50);
second++;
{second=0;
if(P11==0)
{minute=0;
if(P12==0)
minute--;
if(minute==-1)
{minute=59;
if(P13==0)
if(P13==0)
hour++;
if(P14==0)
hour--;
if(hour==-1)
{hour=23;
/***************************整点报警子程序***************************/
voidzhengdian(void)
if((second==0)&
(minute==0))//整点报时
P15=0;
delay(50);
P15=1;
/******************************闹钟*******************************/
voidnaozhong(void)
if(P16==0)//按住P16显示闹钟界面
P0=dispcode[shi/10];
P0=(dispcode[shi%10]);
P0=(dispcode[fen/10]);
P0=(dispcode[fen%10]);
P0=dispcode[miao/10];
P0=dispcode[miao%10];
if(P30==0)//设定秒
delay(30);
if(P30==0)
miao++;
if(miao==60)
miao=0;
if(P31==0)
miao--;
if(miao==-1)
{miao=59;
if(P32==0)
delay(30);
fen++;
if(fen==60)
{fen=0;
if(P33==0)
fen--;
if(fen==-1)
{fen=59;
if(P34==0)
if(P34==0)
shi++;
if(shi==24)
{shi=0;
if(P35==0)
if(P35==0)
shi--;
if(shi==-1)
{shi=23;
if((hour==shi)&
(minute==fen)&
(second==miao))//闹钟时间到,开始报警
for(bjcs=0;
bjcs<
5;
bjcs++)
P17=0;
delay(200);
P17=1;
//中断系统子程序
voidtimer0(void)interrupt1using0//50ms中断一次
TH0=0x3c;
TMOD=0x01;
mstcnt++;
if(mstcnt==19)
second++;
mstcnt=0;
//主函数
voidmain(void)
voidzhengdian(void);
P1=0xff;
//初始化
TMOD=0x01;
TH0=(65536-50000)/256;
//预置计数初值,50ms
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while
(1)
keyscan();
time_pro();
zhengdian();
naozhong();
display();
3.2.2程序流程图
4实验结果及分析
4.1硬件实物图
焊接好的电路如图8所示:
图8实物图
(1)
接通电源后如图9所示:
图9实物图
(2)
预设定时间,当到达时间后显示如图10
图10实物图(3)
4.2实验结果分析
电子钟通电之后,默认初始值为12:
00,左侧的按键可以校正时间,右侧按键设置闹钟。
到规定的闹钟时间响的时候,蜂鸣器会发生警报,并伴随着小灯的闪烁。
每到整点时,电子钟会自动报时。
5心得体会
本次课程设计很好的锻炼了我们的动手能力以及团队合作能力,使我加深了对单片机的认识,并且熟悉了单片机系统的设计流程,收获丰硕。
让我们开阔了视野,同时也增长了见识,在课余时间发挥想象和积极思考,锻炼了自己的思维能力。
在元件的选择和电路的设计上我们大胆创新,敢于尝试,并且积极搜查资料,认真分析,选择出最优的电路组合,使整个系统能够按照设计要求稳定运行。
功能上基本达标:
时钟的显示,调时功能,闹钟及整点报时功能。
精确度完全可以满足日常生活显示时间的需要,调时功能,方便快捷。
硬件设施合乎要求,软件设计可以配合硬件实现其功能。
从这次的课程设计中,我真正的体会到,知识的重要性,特别是理论联系实际,把我们所学的理论知识运用到实际生活当中。
参考文献
[1]刘盛雄,周奇,韦1.H.G.GragonTheElementsofSingle-ChipMicrocomputer
ArchitectureComputer,1980(13)27~41
[2]何立民我国单片机应用技术发展趋势及展望自动化与仪表,1992
(1)1~5
[3]张静基于单片机数字钟的设计办公自动化杂志,2006(89)4~5
[4]攀金荣,谢智文数字倒计时秒表的设计与实现中南敏粗大学计算机科学学院
院报,2005
(1)62~63
[5]周兴华一款电路极简单的单片机电子钟设计详解电子制作,2003(10)31
[6]郭长立DDJ-II型多功能单片机计时器的改进设计仪表技术2004(4):
29~30