LED电子钟设计Word文档下载推荐.docx
《LED电子钟设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《LED电子钟设计Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
5
3.1整体实现展示
3.2时钟调节功能
6
4设计总计
4.1调试过程中遇到的问题
4.2心得体会
附录:
源程序
7
1项目设计的背景和目的
⑴设计的背景
数字钟是采用数字电路实现对时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。
数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。
不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
而且是控制的核心部分。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。
而且向着精确、低功耗、多功能发展。
基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。
从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。
⑵设计的目的
单片机项目设计是以课题或设计方式开展的一门课程,具有较强的综合性、实践性,是工科、工程类院校或职业类院校电类专业在校生的必修课,是将单片机原理与应用课程的理论知识转变为应用技术的重要教学环节。
这一环节不但能加深对单片机原理的理解,而且还能培养学生的实践动手能力,开发学生的分析、解决问题的能力。
单片机项目设计环节的训练能够让学生知道单片机工程项目的制作过程,使学生尽早了解单片机系统的开发流程。
掌握单片机系统的开发应用,巩固和加深已学过的知识,提高动手能力及解决实际问题的能力,同时培养团队合作精神。
将自己学到的知识更好地运用于实际当中。
2项目系统方案设计
2.1设计任务及要求
2.1.1项目设计任务
⑴根据技术要求和现有开发环境,制作智能电子钟(LCD);
⑵设计系统实现方案;
⑶设计并绘制电路原理图;
⑷画出功能模块的程序流程图;
⑸使用汇编语言(或C语言)编写实现程序
⑹结合硬件调试、修改并完善程序;
⑺编写课程设计报告。
2.1.2项目设计要求
⑴计时:
秒、分、时、天、周、月、年。
⑵闰年自动判别。
⑶自定任意时刻自动开/关屏。
⑷计时精度:
误差≤1秒/月(具有微调设置)。
⑸键盘采用动态扫描方式查询。
所有的查询、设置功能均由功能键K1、K2完
⑹选作内容:
编写上位机程序,通过串口发送指令来调整时钟。
2.2项目方案设计
2.2.1设计原理
此设计原理框图如图所示,此电路包括以下四个部分:
单片机,键盘,DS1302时钟采集模块及LCD1602液晶显示屏。
经过编译程序仿真后,89C51的4K空间不够用,就选用更大空间的89C52单片机了。
图1
原理框图
2.3器件连接
2.3.1LCD1602引脚对应开发板连接图
图2
LCD1602引脚
图3
DS1302引脚
2.4原理图及仿真
2.4.1原理图
图4
仿真原理图
2.4.2仿真图
仿真效果图
3实验结果
3.1整体实现展示
图5
实物整体图
3.2时钟调节功能
在该电子钟的设计中修改定时或调整时间时采用了闪烁,在编程上,首先进行了初始化定义了程序的入口地址以及中断的入口地址,在主程序的开始定义了一组固定单元用来存储计数的秒,分,时以及定时时间的序号等。
其次,时,分,秒显示用了软件译码(查表)的方式,再用了一段固定的程序段进行进制转化。
最后,用查询方式对按键进行判断,若有键按下,则进行软件延时消抖,避免了抖动引起的干扰,执行相应的定时,选时或调时程序段。
对当前时间或定时时间修改后又返回到最初的显示程序段,如此循环下去。
4设计总计
4.1调试过程中遇到的问题
⑴自动开关屏调节按键时,按下开关,屏幕闪烁过快,得不到理想效果。
解决办法:
在程序中加入延时程序,消除抖动
⑵调节时间时,原本设计的是逆序(按照秒、分、时、星期、天、月、年的次序)调节,调节误差过大,而且时钟走时不稳定。
⑶解决办法:
将调节功能改为正序(按照年、月、日、星期、时、分、秒的次序)调节,实现了误差最小化,得到了理想的调节效果。
4.2心得体会
通过本次智能电子时钟的课程设计,我学习将理论和实践相结合,初步掌握综合运用所学知识分析和设计一般数字系统的基本方法,增强动手解决实际问题的能力。
通过这次设计,我学会了了初步设计电路的整体思想。
学会了怎样查找资料,设计电路。
熟悉了绘制电路原理图和电路的调试整个过程,是所学的知识应用到实践,进一步所学的知识。
整个设计过程让我收获很多,前所学过的理论知识又再次重现在我们的脑海中,经过了自己的亲手实践使我们更好的理解和掌握了那些知识。
同时,经过这短短几天的课程设计也使我提高了自己与其他同学交流沟通的能力。
这次课程设计也使我明白了“实践是检验真理的唯一标准”,要想更好的掌握以前学过的知识除了定期的“温故知新”外,还需要进行一些实验和实践。
使我们的理论和实践能力同步提高,这次课程设计也使我深刻的认识到了团队合作的重要性。
使我明白现实生活中电子钟的工作原理,锻炼了查找资料的能力。
通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
通过这次智能电子时钟设计,本人在多方面都有所提高。
通过这次智能电子时钟设计,综合运用本专业所学课程的理论和生产实际知识进行智能电子时钟设计工作的实际训练从而培养和提高学生独立工作能力,巩固与扩充了课程所学的内容,掌握智能电子时钟设计的方法和步骤,掌握智能电子时钟设计的工艺方案,了解了智能电子时钟的基本结构,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。
参考文献
[1]张毅刚.单片机原理及应用[J].高等教育出版社,2009.2.
[2]孙育才,王荣兴,孙华芳,新型AT89S52系列单片机及其应用.北京:
清华大学出版社,2005.1.1.
[3]朱清慧,张凤蕊,王志奎,Proteus教程—电子线路设计、制版与仿真,北京:
清华大学出版社,2008.9.1.
[4]侯玉宝,陈忠平,李成群等,基于Proteus的51系列单片机设计与仿真,北京:
电子工业出版社,2008.9.1.
[5]彭小军.用单片机实现电子时钟[J].新余高专学报,2004,9
(2):
54-57.
[6]徐宏亮,艾学忠等.实现多功能电子时钟设计[J].吉林化工学院学报,2001,5
(1):
26-29.
源程序
#include<
reg52.h>
#defineucharunsignedchar//宏定义
#defineuintunsignedint//宏定义
#definerstRST=0;
#definenrstRST=1;
sbitrs=P2^0;
sbitrw=P2^1;
sbitlcden=P2^2;
sbitshift_key=P3^1;
/*sbitvdd=P2^7;
*/
sbitup_key=P3^2;
voidwrite_sfm(uchar,uchar);
voidwrite_sfm1(uchar,uchar);
voidwrite_sfm2(uchar,uchar);
uintyear=2015;
ucharmonth=06,day=16,week,setup_bit;
ucharhour=23,minute=59,second=50,num,count;
ucharcodeweek_string[7][4]={"
MON"
"
TUE"
WED"
THU"
FRI"
SAT"
SUN"
};
uchardatamonth_day[12]={31,0,31,30,31,30,31,31,30,31,30,31};
ucharcodetable[]="
2015-06-16(TUE)"
;
ucharcodetable1[]="
23:
59:
50"
//--------------------------------------
voidinit(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
/*EX0=1;
PT0=1;
TR0=1;
}
//-----------------------------
voiddelay(uintn)
uinti,j;
for(i=n;
i>
0;
i--)
for(j=110;
j>
j--);
//---------------------------
voidLCD1602_write_com(ucharcom)
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
//---------------------------------
voidLCD1602_write_dat(uchardat)
rs=1;
P0=dat;
//-----------------------------------
voidleapyear()
if(year%4==0&
&
year%100!
=0||year%400==0)
month_day[1]=29;
else
month_day[1]=28;
//-------------------------
ucharCaculateWeek(inty,charm,chard)
继续阅读