沈理单片机课设电子钟优秀论文.docx
- 文档编号:9609091
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:18
- 大小:433.36KB
沈理单片机课设电子钟优秀论文.docx
《沈理单片机课设电子钟优秀论文.docx》由会员分享,可在线阅读,更多相关《沈理单片机课设电子钟优秀论文.docx(18页珍藏版)》请在冰点文库上搜索。
沈理单片机课设电子钟优秀论文
摘要
多功能电子钟的应用现如今非常广泛,它是由单片机作为电子钟的核心控制器,通过它的中断定时器实现计时功能,将其时间数据经单片机输出,利用数码管显示器显示出来。
通过键盘可以进行调整时,分,秒等功能。
本系统利用单片机实现其具有计时,整点报时,闹钟等功能的数字时钟,是基于单片机STC89C52的现代计时装置。
显示极具人性化,另外具有闹钟功能,整点报时功能,调时功能。
利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。
关键词:
STC89C52单片机4位7段共阴极数码管开关
目录
1引言1
2总体设计2
2.1时钟设计分析2
2.2时钟的基本原理分析2
2.3系统的总体结构框图3
3详细设计3
3.1硬件设计4
3.1.1芯片的简单介绍4
3.1.2硬件原理图4
3.2软件设计5
3.2.1部分程序5
3.2.2程序流程图13
4实验结果及分析15
4.1硬件实物图15
4.2实验结果分析16
5心得体会17
参考文献18
1引言
1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。
现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。
从而达到计时的功能,是人民日常生活补课缺少的工具。
现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
2总体设计
2.1时钟设计分析
首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。
这是前期准备工作。
第二部分是硬件部分:
依据想要的功能分块设计设计,如闹钟设计、时间设计、整点报时、显示电路等。
第三部分是软件部分:
先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。
第四部分是软件画图部分:
设计好电路后进行画图,包括电路图和仿真图的绘制。
第五部分是软件仿真部分:
软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。
第六部分是硬件实现部分:
连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能!
2.2时钟的基本原理分析
利用单片机中断定时器完成计时功能,定时器0计时中断程序每隔0.05s中断一次并当作一个计数,设定定时1秒的中断计数初值为20,每中断一次中断计数初值减1,当减到0时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。
由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。
2.3系统的总体结构框图
图1电路的总体设计框架
3详细设计
3.1硬件设计
3.1.1芯片的简单介绍
单片机又称为微控制器,在一块半导体芯片上集中了中央处理器(简称CPU),只读存储器(简称ROM),随机存储器(简称RAM),输出输出接口(简称I/OInterface),计时器(Timer/Counter),中断系统(InterruptSystem)构成一台完整的数字计算机。
目前,单片机已经渗透到我们生活的各个领域,几乎很难找到某个领域没有单片机的踪迹了。
自导弹的导航装置,飞机上各种仪表的控制,工业自动化过程的实时控制和数据处理,计算机的网络通讯与数据传输,到广泛使用的各种智能IC卡,录像机、摄像机、全自动洗衣机等的控制,及民用豪华轿车的安全保障系统,还有我们厂看到的程控玩具、电子宠物等等都是离不开单片机的,更不用说是自动控制领域的机器人和智能仪表等各种智能机械了。
3.1.2硬件原理图
图2硬件原理图
说明:
数码管位选的8个端口接在单片机的P2口,段选端则接在单片机的P0口,由于P0口;内部没有接电阻,因此需在P0口外部接一个10k的排阻,并将其上拉。
按键分别接在单片机的P1和P3口,用来调整时间。
3.2软件设计
3.2.1部分程序
/*首先是端口定义,然后是声明函数这里不做详细说明
延时函数的代码编写采用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;}
}}
}
//显示子程序,共阴极数码管,低电平0有效
voiddisplay(void)
{
if(P16==1)
{
P2=0xfe;
P0=dispcode[hour/10];
delay
(1);
P2=0xfd;
P0=(dispcode[hour%10]);
delay
(1);
P2=0xfb;
P0=0x40;
delay
(1);
P2=0xf7;
P0=(dispcode[minute/10]);
delay
(1);
P2=0xef;
P0=(dispcode[minute%10]);
delay
(1);
P2=0xdf;
P0=0x40;
delay
(1);
P2=0xbf;
P0=dispcode[second/10];
delay
(1);
P2=0x7f;
P0=dispcode[second%10];
delay
(1);
}
}
/***************************键盘扫描子程序***************************/
voidkeyscan(void)
{
if(P10==0)
{
delay(50);
if(P10==0)
{
second++;
if(second==60)
{second=0;}
}
}
if(P11==0)
{
delay(50);
if(P11==0)
{
minute++;
if(minute==60)
{minute=0;}
}
}
if(P12==0)
{
delay(50);
if(P12==0)
{
minute--;
if(minute==-1)
{minute=59;}
}
}
if(P13==0)
{
delay(50);
if(P13==0)
{
hour++;
if(hour==24)
{hour=0;}
}
}
if(P14==0)
{
delay(50);
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显示闹钟界面
{
P2=0xfe;
P0=dispcode[shi/10];
delay
(1);
P2=0xfd;
P0=(dispcode[shi%10]);
delay
(1);
P2=0xfb;
P0=0x40;
delay
(1);
P2=0xf7;
P0=(dispcode[fen/10]);
delay
(1);
P2=0xef;
P0=(dispcode[fen%10]);
delay
(1);
P2=0xdf;
P0=0x40;
delay
(1);
P2=0xbf;
P0=dispcode[miao/10];
delay
(1);
P2=0x7f;
P0=dispcode[miao%10];
delay
(1);
}
if(P30==0)//设定秒
{
delay(30);
if(P30==0)
{
miao++;
if(miao==60)
{
miao=0;
}
}
delay(50);
}
if(P31==0)
{
delay(30);
if(P31==0)
{
miao--;
if(miao==-1)
{miao=59;}
}
delay(50);}
if(P32==0)
{
delay(30);
if(P32==0)
{
fen++;
if(fen==60)
{fen=0;}
}
delay(50);}
if(P33==0)
{
delay(30);
if(P33==0)
{
fen--;
if(fen==-1)
{fen=59;}
}
delay(50);
}
if(P34==0)
{
delay(30);
if(P34==0)
{
shi++;
if(shi==24)
{shi=0;}
}
delay(50);}
if(P35==0)
{
delay(30);
if(P35==0)
{
shi--;
if(shi==-1)
{shi=23;}
}
delay(50);
}
if((hour==shi)&(minute==fen)&(second==miao))//闹钟时间到,开始报警
{
for(bjcs=0;bjcs<5;bjcs++)
{
P17=0;
delay(200);
P17=1;
delay(200);
}
}
}
//中断系统子程序
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硬件实物图
硬件实物图如图3所示:
图3实物图
(1)
接通电源后如图4所示:
图4实物图
(2)
预设定时间,当到达时间后显示如图5:
图5实物图(3)
4.2实验结果分析
电子钟通电之后,默认初始值为12:
00:
00,左侧的按键可以校正时间,右侧按键设置闹钟。
到规定的闹钟时间响的时候,蜂鸣器会发生警报,并伴随着小灯的闪烁。
每到整点时,电子钟会自动报时。
5心得体会
本次基于51单片机的电子钟耗时很久,最后做出的来的功能也是经过反复多次调试才全部达标,是一次很有意义的学习和动手经历。
从不懂单片机到在单片机上成功编写出电子钟的程序,自己设计电路,焊接电路,下载程序,调试成功,那一刻我们的喜悦,是无法用任何语言来加以形容的!
通过本次课程设计我们的感受到看再多的课本可能效果也不如实际编程的学习效率高。
调试程序比编程本身枯燥的多,但是在某种意义上更加重要。
但是实际结果能不能达到还要看调试,要考虑算法逻辑、语法、内存地址等诸多方面。
这一点在对硬件编程上体现的尤为明显。
本实验最后完成了数字钟的诸多功能,但并没有向其他领域拓展的功能,是比较遗憾的地方。
希望在以后能得到很好的弥补!
参考文献
[1]何宏森多功能智云隆基于单片机的数字式电子钟的设计与制作重庆工学
院学报2006(8)91
[2]卢超基于单片机的数字电子钟的设计与制作大庆师范学院学报,2006(5):
49
[3]刘建英基于单片机的时钟设计内蒙古石油化工2005
(1):
13
[4]蔡希彪,曹洪奎,芳琳单片机电子时钟系统的设计与仿真中国科技信息,
2007(4):
61~63
[5]何立民我国单片机应用技术发展趋势及展望自动化与仪表,1992
(1)1~5
[6]张静基于单片机数字钟的设计办公自动化杂志,2006(89)4~5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电子钟 优秀论文
![提示](https://static.bingdoc.com/images/bang_tan.gif)