单片机电子时钟.docx
- 文档编号:20135885
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:20
- 大小:219.73KB
单片机电子时钟.docx
《单片机电子时钟.docx》由会员分享,可在线阅读,更多相关《单片机电子时钟.docx(20页珍藏版)》请在冰豆网上搜索。
单片机电子时钟
课题一电子时钟
目录
1课程设计要求..................................................2
2课程设计分析设计..............................................3
2.1课程设计方案.............................................3
2.2主要元器件介绍...........................................3
2.2.1AT89C52芯片的介绍.......................................2
2.2.2DS130...................................................7
3系统硬件设计..................................................8
3.1晶振电路..................................................8
3.2复位电路..................................................9
3.3按键电路.................................................10
3.4.LED数码管显示接口电路的设计...........................11
3.5蜂鸣器....................................................12
4软件流程图...................................................13
5程序的源代码清单.............................................14
6调试运行结果及分析...........................................14
7课程设计总结.................................................15
8参考文献.....................................................16
附录:
程序源代码清单............................................17
1.课程设计要求
请设计一个基于单片机的电子时钟,画出硬件电路图、编写相应的软件,完成电子时钟的任务,并进行proteus仿真。
该控制任务应该完成下列功能:
1.掌握AT89C52实验开发系统中的实验模块原理。
2.综合运用实验模块,用89C52开发设计具有一定功能的单片机控制系统,进行软、硬件设计及调试。
3.写出完整的设计任务书:
摘要、目录、正文、结论、参考文献、附录。
4.时间以24小时为一个周期;电子钟的格式为:
**时**分**秒,由左向右分别为:
时、分、秒。
完成显示由秒由00一直加1至59,再恢复为00;分由00一直加1至59,再恢复00;时由00一直加1到23,再恢复00。
5.为了保证计时的稳定及准确须计时采用时钟芯片1302
6.设计电子时钟原理图,学习用PROTEL画出该原理图,并用proteus进行仿真;设计和绘制软件流程图,用C语言进行程序编写;进行调试。
2.课程设计分析设计
2.1课程设计方案
AT89C52的P0口和P2口外接由6个LED数码管(LED7~LED0)构成的显示器,用P0口作LED的段码输出口,P2口作LCD的位控输出线,P1口外接三个按键S1、S2、S3构成键盘电路。
简易电子钟的功能不复杂,采用其现有的I/O便可完成。
按照系统设计功能的要求,确定系统由3个模块组成:
按键电路、复位电路、晶振电路、电源、显示电路、主控电路。
数字电子钟总体电路结构框图如下图所
图2.1硬件框图
2.2主要元器件的介绍
2.2.1AT89C52芯片的介绍
AT89C52是本设计最核心的软件,它是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8kbytes的可反复摖写的Flash只读程序存储器和256bytes的随机存取数据存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器和Flash存储单元,功能强大。
AT9C52单片机适用于许多较为复杂的控制应用场合。
2.2AT89C52管脚图
AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。
Flash编程或校验时,P2亦接收高位地址和一些控制信号。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表1所示:
P3口各位的第二功能
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
2.2.2DS1302
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc>2.0V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),后面有详细说明。
SCLK为时钟输入端。
下图为DS1302的引脚功能图:
3.系统硬件设计
采用AT89C52芯片作为硬件核心,以AT89C52最小系统为基础。
时钟电路由高精度低功耗的DS1302提供,输入部分采用四个独立式按键S1、S2、S3。
显示部分为6个LED数码管。
其详细线路连接如下图。
3.1晶振电路
每个单片机系统里都有晶振,全程是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。
晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。
高级的精度更高。
有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。
晶振的作用是为系统提供基本的时钟信号。
通常一个系统共用一个晶振,便于各部分保持同步。
3.2复位电路
为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。
一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。
由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。
复位电路工作原理如右图所示,VCC上电时,C充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。
工作期间,按下S,C放电。
S松手,C又充电,在10K电阻上出现电压,使得单片机复位。
几个毫秒后,单片机进入工作状态。
3.3按键电路
为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正数码管上显示的时间.用户可以通过按键来实现计时中断,当需要调整时间时按下按键A进入调试状态,B按键为上调(+)C按键为下调(-)可以依次对秒、分、时进行调整。
3.4LED数码管显示接口电路的设计
在液晶显示屏占领了一定地位时,数码管仍具有其不可磨灭的光芒。
其具有低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,精确可靠,操作简单。
数码管采用BCD编码显示数字,程序编译容易,资源占用较少。
故选择了数码管。
数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。
实验中通过控制各个LED的亮灭来显示数字。
3.5蜂鸣器
该电路采用晶体管Q7来驱动蜂鸣器,BUZZER与P3.0口相连,当P3.0口输出高电平时,蜂鸣器不响;当P3.0输出低电平时,蜂鸣器发出响声。
控制P3.0口输出高、低电平的时间变化频率,可以改变蜂鸣器发出声音。
4.软件流程图
5程序的源代码清单
源代码见附录。
6调试运行结果及分析
软件调试:
打开软件建立NewProject,打开一个新项目,保存此项目,输入工程文件名后,并保存工程文件的目录。
为项目文件选择一个目标器件,即AT89C52。
上述设置好以后,创建源程序文件代码并保存。
把源文件添加的项目中,用鼠标指在目标工作区,选择需要添加到项目的文件。
开始编译。
调试结果总体比较满意,基本上实现了本次课程设计的基本要求。
但是在一些地方还是不太理想。
比如在DS1302器件上使用不同的上拉电阻,会导致数码管显示的时间走得或快或慢,时间不准。
在进行调试的时候,发现数码管与单片机之间用分线的形式连接三极管及电阻,数码管不会显示,而用总线则没有问题。
调试结果如下图。
7.课程设计总结
本次课程从基本方案的制定,再到硬件电路的选择,到制作电路完成,最后进行程序调试。
在此期间我遇到很多困难,尤其是在做仿真时结果经常出不来。
经过仔细检查,仿真线路是没有错的,可结果就是不行。
这说明了可能是仿真软件的。
经过一次又一次品尝到了解决问题的喜悦,最终提前完成了要求的全部功能,并在空闲的时间里加入了一些创新的部分。
在此次课程设计中我发现了自己知识的不足,通过一周的学习、实践,我学到了很多东西。
通过此次课程设计的教学实践,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。
初步掌握简单单片机应用系统的设计、制作、调试的方法。
提高动手实践能力。
通过这次对数字时钟的设计,让我系统的了解和学会应用单片机C语言来对所需实现的功能进行编程。
我会在以后的学习生活中弥补我所缺少的知识。
本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。
在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。
8参考文献
倪晓军,单片机原理与接口技术教程,清华大学出版社,2009年.
王昊天,李海涛,王志强等.《PIC单片机原理与应用》.机械工业出版社,2010.
李群芳,单片机微型计算机与接口技术.2版.北京:
电子工业出版社,2005.
刘守义,王静霞,单片机应用技术,西安电子科技大学出版社,2002.
崔凤波.《数字电子技术》.大连理工大学出版社,2007.7.
附录
主要源代码如下:
#include"reg51.h"
#include
sbitDS1302_CLK=P3^6;
sbitDS1302_IO=P3^5;
sbitDS1302_RST=P3^7;
sbits1=P1^2;
sbits2=P1^5;
sbits3=P1^7;
chardisp1,disp2,disp3,disp4,disp5,disp6,tiao,tt,flag;
Unsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsignedcharsecond,minute,hour,week,day,month,year;//秒、分、时、
Unsignedchartime[]={0x06,0x03,0x14,0x03,0x72,0x00,0x00,0x12,0x06,0x06/*,14,32,55*/};//初始时间数组
voiddelay1(void)
{
intk;
for(k=0;k<400;k++);
}
voiddisplay(void)
{
disp2=second/16;
disp1=second%16;
disp4=minute/16;
disp3=minute%16;
disp6=hour/16;
disp5=hour%16;
P2=0x01;
P0=tab[disp6];
delay1();
P2=0x02;
P0=tab[disp5];
delay1();
P2=0x04;
P0=tab[disp4];
delay1();
P2=0x08;
P0=tab[disp3];
delay1();
P2=0x10;
P0=tab[disp2];
delay1();
P2=0x20;
P0=tab[disp1];
delay1();
}
voidInputByte(unsignedcharbyte1)
{
chari;
for(i=8;i>0;i--)
{
DS1302_IO=(bit)(byte1&0x01);
DS1302_CLK=1;
_nop_();
DS1302_CLK=0;
byte1>>=1;
}
return;
}
unsignedcharoutputbyte(void)
{
unsignedchari;
unsigneducdat=0;
for(i=8;i>0;i--)
{
DS1302_IO=1;
ucdat>>=1;
if(DS1302_IO)ucdat|=0x80;
DS1302_CLK=1;
_nop_();
DS1302_CLK=0;
}
return(ucdat);
}
voidwrite_ds1302(unsignedcharaddr,unsignedcharTDat)
{
DS1302_RST=0;
_nop_();
DS1302_CLK=0;
_nop_();
DS1302_RST=1;
InputByte(addr);
_nop_();
InputByte(TDat);
DS1302_CLK=1;
_nop_();
DS1302_RST=0;
}
unsignedcharread_ds1302(unsignedcharaddr)
{
unsignedchartimedata;
DS1302_RST=0;
_nop_();
DS1302_CLK=0;
_nop_();
DS1302_RST=1;
InputByte(addr);
timedata=OutputByte();
DS1302_CLK=1;
_nop_();
DS1302_RST=0;
return(timedata);
}
voidinitial_ds1302()
{
write_ds1302(0x8e,0x00);//写保护寄存器,在对时钟或RAM写前WP一定要为0
write_ds1302(0x84,time[7]);//时
write_ds1302(0x82,time[6]);//分
write_ds1302(0x80,time[5]);//秒
write_ds1302(0x8e,0x80);//写保护寄存器//写
}
voidread_time()
{
second=read_ds1302(0x81);//秒寄存器
minute=read_ds1302(0x83);//分
hour=read_ds1302(0x85);//时
}
voidkey()
{
tt=0;
flag=0;
tiao=0;
while(s1==0||tt==1)//判断调节按钮是否按下
{
tt=1;
if(flag==0){tiao++;flag=1;}
if(tiao==1)
{
while(s1==0);
display();
if(s2==0)
{while(s2==0);write_ds1302(0x80,++second);}
if(s3==0)
{while(s3==0);write_ds1302(0x80,--second);}//调秒
if(s1==0)flag=0;}
if(tiao==2)
{
while(s1==0);
display();
if(s2==0)
{while(s2==0);write_ds1302(0x82,++minute);}
if(s3==0)
{while(s3==0);write_ds1302(0x82,--minute);}//调秒
if(s1==0)flag=0;
}
if(tiao==3)
{
while(s1==0);
display();
if(s2==0)
{while(s2==0);write_ds1302(0x84,++hour);}
if(s3==0)
{while(s3==0);write_ds1302(0x84,--hour);}//调秒
if(s1==0)flag=0;
}
if(tiao==4)tt=0;
}
}
voidmain(void)
{
inti=10;
initial_ds1302();//初始化DS1302
while
(1)
{
read_time();//读取时间
display();//显示时间
key();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电子 时钟