电子时钟单片机完整版.docx

上传人:b****8 文档编号:11179488 上传时间:2023-02-25 格式:DOCX 页数:17 大小:103.85KB
下载 相关 举报
电子时钟单片机完整版.docx_第1页
第1页 / 共17页
电子时钟单片机完整版.docx_第2页
第2页 / 共17页
电子时钟单片机完整版.docx_第3页
第3页 / 共17页
电子时钟单片机完整版.docx_第4页
第4页 / 共17页
电子时钟单片机完整版.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

电子时钟单片机完整版.docx

《电子时钟单片机完整版.docx》由会员分享,可在线阅读,更多相关《电子时钟单片机完整版.docx(17页珍藏版)》请在冰豆网上搜索。

电子时钟单片机完整版.docx

电子时钟单片机完整版

烟台南山学院

单片机课程设计

题目

姓名:

所在学院

所学专业:

班级:

学号:

指导教师:

完成时间:

摘要

随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。

由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。

本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。

在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。

主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。

实验证明效果良好,可以投入使用。

本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—51

单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。

在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。

本系统为多功能数字钟的系统。

本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。

本电子时钟具有日期、时、分、

秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。

关键词:

单片机AT89S52电子时钟汇编语言

绪论.错误!

未定义书签

1.总体设计.错误!

未定义书签

设计目的.错误!

未定义书签

总体设计.错误!

未定义书签

2.硬件设计.错误!

未定义书签

总体接线.错误!

未定义书签

2.2硬件连接.错误!

未定义书签

3.软件设计.错误!

未定义书签

主程序流程图及程序设计错误!

未定义书签

键盘非法性检测.错误!

未定义书签

断服务程序流程.错误!

未定义书签

4.仿真调试.错误!

未定义书签

总结.错误!

未定义书签

参考文献.错误!

未定义书签

绪论

单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。

在工业生产中,电流、电压、温度、压力和流量也都是常用的被控参数。

单片机电子时钟系统,是利用单片机作为系统的主控制器,采用AT89S52单片机作为控制核心对时钟

芯片DS1302的控制,同时读取时间,并队输入信号作出处理。

该单片机具有集成度高,运算快速快,体积小、运行可靠,价值低廉的特点。

鉴于这样的重要性,我们打算设计一

种基于单片机的电子时钟系统,实现对时间的调整。

本设计以单片机AT89C5伪控制核

心,由实时时钟模块,键盘模块组成其中实时时钟采用DS1302可实现对时间的显示,设

置,计时等功能

在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。

早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性价比的不断提高,新一代产品的应用也越来越广泛。

大则可以构成复杂的工业过程控制系统,完成复杂的控制功能;小则可以用于家电控制,甚至可以用于儿童电子玩具。

它功能强大、体积小、质量轻、灵活好用,配以适当的接口芯片,可以构成各种各样、功能各异的微电子产品。

近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

数子时钟在日常生活中最常见,应用也最广泛。

本次设计以硬件软件化为指导思想,充分发挥单片机功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。

同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性,而且系统具有一定的可扩展性。

1.总体设计

设计目的

应用单片机控制技术,设计出以89c51单片机为核心的电子时钟,电子时钟能够显示时、分、秒显示时间的功能,还可以进行时和分的校对,而且其片选的灵活性强。

设计一个电子时钟,可以查询日历,可以设置时间,掉电时间不丢失;时钟必须有定闹功能,定闹设置掉电不丢失。

总体设计

该电子时钟由89C51,BUTTON1602LCD液晶屏等构成,采用晶振电路作为驱动电路,利用单片机内部定时计数器0通过软件扩展产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。

闹钟和时钟的时分秒的调节是由一个按键控制,而另外一个按键控制时钟和闹钟的时间的调节。

图1系统结构框图

该电子时钟由STC89C51BUTTOJN1602LCD液晶屏等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ使用的定时器/计数器工作方式0,通过软件扩展产生的一秒定时,达到时分秒的计时,60秒为一分钟,60分钟为一小时,24小时为一天,又重00:

00:

00开始计时。

没有按键按下时,时钟正常运行,当按下调节时钟按键K1,就

会关闭时钟,当按下闹钟按键K3时时钟就会进入设置时间界面,但是时钟不会停止工作,按K2键,,就可以对时钟和闹钟要设置的时间进行调整。

2.硬件设计

总体接线

装有UNSPTMID仿真软件的PC机一台,UNSPT十六位单片机实验箱一台8pin排线两根、短路块若干。

本程序用到的实验箱硬件模块为:

SPCE061舷心及实验箱中提供的4*4键盘模块和6位LED数码管显示模块。

SPE061A共提供两个16位通用的并行I/O口:

IOA0-IOA15IOB0-IOB15。

两个口的每一位都可以通过编程单独定义为输入或输出口,本实验采用IOA15—IOA8连接4*4键盘,IOA0-IOA7、IOA0—IOA15连接数码管。

图总体接线图

这部分的主要接线如下:

IOA8-15接液晶显示模块DB0-DB7

I0B4接液晶显示模块AO

I0B5接液晶显示模块的R/W

I0B6接液晶显示模块的EP

DB0-DB7为双向数据口,A0为数据/使命控制位,R/w为读/写信号,EP是全能端(低电平有效)

要这部分工作时Key接线与IOA低八位相连就可以了。

本实验中,定义每个键的功能,包括数字键、功能键和一些保留键,其中标“0-9”

为数字键,标“F2-F4”为保留键,标“F1”为重新设置时间键,标“ENT为确认键,标

“DEL为删除键。

运行程序后,按常规的显示方法,从数码管的第一位开始显示,六位数码管一次显示时、分、秒的十位、个位。

设置错误按DEL键即可重新设置,设置完成按

ENT®,重新设置按F1键。

2.2硬件连接

利用4*4键盘和6位LED数码管分别与SPCE061A单片机IOA口、IOB口的相关引脚相接,IOA0~IOA7连接和6位数码管的a~g、dp,IOA口的高八位IOA15~IOA8连接4x4键盘的L1~L4C1~C4IOB15~IOB12连接数码管的位信号1~4,IOB2~IOB1连接数码管的位信号5~6,IOB0连接数码管的分隔符信号DD几把JP4、JP5的引脚全部用跳线短接起来,用一根排线连接J27和JP7。

时间的设置可以通过4*4键盘的数字键来完成,时间的显示通过6位数码管来完成,以实现计时的功能。

硬件连接图如下:

IOAO

IOA1

IOA2

IOA3

IOA4

IOA14

IOA5

IOA13

IOA6

IOA12

IOA7

SPCE061A

IOB15

IOA11

图硬件接线图

3.软件设计

主程序流程图及程序设计

本系统软件设计程序主要分为主程序(其中包括键盘非法性检测、时钟数据处理、键值转换等子模块)、中断服务子程序、键盘子程序、数码管显示子程序及中断定义子程序'主程序对程序框架进行设计在调用各个子程序实现系统时钟的设置及重置功能,下面分别详细介绍。

图主程序流程图

 

主程序代码:

#include""

#include""

#include"061A"

typedefunsignedcharuchar;

#defineKEY_DEL11

#defineKEY_ENT12

#defineKEY_F113

#defineYESCarryFlag1

#defineClearCarryFlag0

#defineYESIntFlag1

#defineClearIntFlag0

#definetrue1

#definefalse0unsignedintINTflag;unsignedintKeyVal;unsignedintKeyDownTimes;unsignedintKeycodeLED[6];unsignedintEnterFg;

unsignedintF1flag;

unsignedintsecFlag,minFlag,hourFlag;voidclockPro(void);

unsignedintSetKeyValPro(void);

unsignedintKeyDataChange(unsignedintKey_Data);unsignedintg_Data[11]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};intmain(){

unsignedinti;

KeyDownTimes=0;INTflag=0;

EnterFg=0;

i=0;

Key_Init();DIG_Init();while

(1)

KeyVal=Key_Get();

KeyVal=KeyDataChange(KeyVal)switch(KeyVal)

caseKEY_F1:

INT_IRQ5();if(KeyDownTimes>=6)KeyDownTimes=0;

F1flag=true;EnterFg=false;

caseKEY_DEL:

if(F1flag=true)

if(KeyDownTimes>0)KeyDownTimes--;

break;case0xff:

break;caseKEY_ENT:

if(KeyDownTimes==6)

SP_INT_IRQ5();F1flag=false;

EnterFg=truebreak;

default:

if(F1flag==true)if(KeyDownTimes<6)

KeycodeLED[KeyDownTimes]=KeyVal;if(SetKeyValPro()==true)

{

KeyDownTimes++;

break;

for(i=0;i<6;i++)

DIG_Set(i+1,g_Data[KeycodeLED[i]]);clockPro();

F_ClearWatchdog();

键盘非法性检测

开始

 

X

1

数字键

数字键

按下次

按下次

数为1

数为2

判断数字键按下的次数

数字键

数字键

按下次

按下次

数为3

数为4

T

按下数字键小于6时有效

按下数

如果前一次

字键小

按下数字键

于3时

2,按下的数

有效

字键小于四

才有效

数字键

按下次

数为6

 

 

返回检测结果

图键盘非法性检测子程序流程图

voidSetKeyValPro(void)

unsignedintSetKeyValPro(void)ucharflag;

switch(KeyDownTimes){

case0:

if(KeycodeLED[KeyDownTimes]<3)

{flag=true;elseflag=false;break;

case1:

if(KeycodeLED[KeyDownTimes-1]==2)

{

if(KeycodeLED[KeyDownTimes]<5)flag=true;

else

flag=false;

}

else

flag=true;break;

if(KeycodeLED[KeyDownTimes]<6)

 

开始

N

秒的个位是不是9

Y

N

秒的十位是不是5

秒的十位加1,个位回零

Y

秒回零

秒的个位加1

N

分的个位是不是9

Y

N

分的十位是不是5

分的十位加1,个位回零

Y

分回零

分的个位加1

N

Y

时的十位不为2

时的个位是不是9

Y

N

分的十位加1,个位回零

N

时的个位是不是3

Y

时的个位加1

时回零

 

 

返回

图时钟数据处理子程序流程图

voidclockPro(void)

while(INTflag==1)

INTflag=ClearIntFlag;if(KeycodeLED[4]==5&&KeycodeLED[5]==9)KeycodeLED[4]=0;

KeycodeLED[5]=0;

secFlag=YESCarryFlag;}elseif(KeycodeLED[5]==9)

KeycodeLED[5]=0;KeycodeLED[4]++;elseKeycodeLED[5]++;

}}while(secFlag==1)

{

secFlag=ClearCarryFlag;if(KeycodeLED[2]==5&&KeycodeLED[3]==9){

KeycodeLED[2]=0;

KeycodeLED[3]=0;

minFlag=YESCarryFlag;}else{if(KeycodeLED[3]==9)

{KeycodeLED[3]=0;KeycodeLED[2]++;

}

elseKeycodeLED[3]++;while(minFlag==1)minFlag=ClearCarryFlag;if(KeycodeLED[0]==2&&KeycodeLED[1]==3){

KeycodeLED[0]=0;

KeycodeLED[1]=0;

hourFlag=YESCarryFlag;}

else{

if(KeycodeLED[1]==9)

{KeycodeLED[1]=0;KeycodeLED[0]++;

elseKeycodeLED[1]++;

断服务程序流程

图IRQ5中断服务程序流程图

 

寄存器入栈保护

程序说明:

在IRQ5_2HZ中断里定时1s的时间,在IRQ6_TMB中断里调用键盘程序扫描键盘,而IRQ4的1KHZ中断当中,进行数码管显示的动态扫描。

中断服务程序代码:

」NCLUDE061A

」NCLUDE

」NCLUDE

.IRAM

.PUBLICsum;

.VARsum=0

.PUBLIC」RQ5;

.PUBLIC_IRQ6;

xternaI」NTflag;

.externalF_Key_Scan

.PUBLIC_IRQ4_IRQ4:

pushr1,r5to[sp]r1=C_IRQ4_1KHztestr1,[P」NT_Ctrl]jnzL_IRQ4_1KHzr1=C_IRQ4_2KHztestr1,[P」NT_Ctrl]jnzL_IRQ4_2KHzL_IRQ4_4KHz:

callF_DIG_Driver1=C_IRQ4_4KHz[P」NT_Clear]=r1popr1,r5from[sp]reti

L_IRQ4_2KHz:

[P_INT_Clear]=r1popr1,r5from[sp]reti

L_IRQ4_1KHz:

[P_INT_Clear]=r1popr1,r5from[sp]reti

」RQ5:

pushr1,r4to[sp];r1=0x0008;

testr1,[P_INT_Ctrl];jnzL_4Hz;

本系统是通过4*4键盘的数字键来完成时、分、秒的准确计时,通过数码管显示出来。

按确认键完成设置,重置键重新设定时间,删除键删除上一步操作,重新设置。

单片机课程设计已经接近尾声,留给我印象最深的不是我最后做成了什么或者我的设计实现了什么功能,我认为最重要的是设计的过程。

因为设计的过程在整个过程中所占时间最多,锻炼我们的价值也是最大的。

设计开始的时候我真的是毫无头绪,甚至有过放弃的想法,但终于坚持了下来。

我明白了要设计一个成功的电路,除了有创新能力之外,必须要有扎实的知识基础,要熟练地掌握课本上的知识,只有这样才能对试验中出现的问题进行分析解决。

在整个电路的设计过程中,花费时间最多的方案设定,很多就属于那种想法很好但是要实现非常困难的设计以及超出能力范围的。

开始的时候非常着急,但是当选好了方案后,小组成员的干劲就起来了。

同时通过这次对数字秒表的设计与制作,让我了解了设计电路的程序,也让我了解了关于电子时钟的原理与设计理念。

在此次的电子时钟设计过程中,更进一步地熟悉了SPCE061A单片机芯片的结构及工作原理,提高了自己的自学能力以及团队合作的能力,这

对今后的学习生活有很大的帮助。

到实验室连接电路,调试机器也使我受益匪浅。

时下大学生普遍缺陷,就是动手能力差,这次连接电路锻炼了我的动手能力

虽然最终的成果不太理想,有些遗憾,但是这也历练了我的承受能力,毕竟在今后走出校园后的生活不会是一帆风顺的。

这样使我们有了类似的经验,在遇到这种情况也不至于无所头绪。

总体来说,通过这次课程设计学习,让我单片机的许多课外知识都有了大概的了解,也学会了实验箱的使用,这对以后的找工作也是一个优势。

这次课程设计学习也是对平时理论学习的一个检验。

更重要的是培养了我对学习的兴趣,开拓了自己的眼界,为以后的学习打下了好的开端,我受益匪浅。

参考文献

1.李晓白凌阳16位单片机C语言开发,北京航空航天大学出版社2006

2.康华光电子技术基础,华中科技大学电子技术课程组2005

3.李广第单片机基础,北京航空航天大学出版社

4.朱兆优等.单片机原理与应用.北京电子工业出版社.

5.何立民•单片机应用系统设计[M]•北京:

北京航空航天大学出版社,1993.

6.楼然笛•单片机开发[M]•北京:

人民邮电出版社,1994.

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

当前位置:首页 > 初中教育 > 语文

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

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