基于单片机的电子时钟讲解.docx
- 文档编号:26163186
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:27
- 大小:187.77KB
基于单片机的电子时钟讲解.docx
《基于单片机的电子时钟讲解.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子时钟讲解.docx(27页珍藏版)》请在冰豆网上搜索。
基于单片机的电子时钟讲解
专业设计报告
题目:
基于单片机的电子时钟
系别
班级
姓名
学号
指导教师
2011年11月
摘要
本设计主要为实现一款可正常显示时间、日期与温度,并且能够通过简单的按键进行调整的电子时钟。
该时钟以AT89C52芯片为核心,1602LCD为显示器,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能,并使用18B20芯片作为温度传感器。
关键词:
电子时钟;18B20;AT89C52;DS1302;
一、绪论············································1
1.1多功能电子时钟研究的背景和意义···················1
1.2电子时钟的功能··································1
二、方案设计·······································2
2.1方案比对与论证···································2
2.2主要芯片简介·····································3
2.2.1微处理器选择···································3
2.2.2DS1302简介····································5
2.2.3DS1302引脚说明································6
2.2.4DS18B20简介···································7
2.2.5DS18B20引脚说明·······························8
2.3电子时钟硬件电路设计·····························9
2.4电子时钟软件设计································10
2.4.1软件流程图····································10
2.4.2proteus仿真图································11
四、附录············································12
(一)源程序语言····································12
(二)参考文献·······································23
一、绪论
时间是人类生活必不可少的重要元素,如果没有时间的概念,社会的发展将会受到很大影响。
人类一直在尝试量度时间,从古代的水漏、十二天干地支,到后来的机械钟表以及当今的石英钟,都充分显现出了时间的重要,同时计时工具的变化以及计时准确率的提高也代表着科技的进步。
致力于计时器的研究和充分发挥时钟的作用,将有着重要的意义。
电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有拥有时钟精确、体积小、界面友好、可扩展性能强等特点,走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。
随着人们生活环境的不断改善和美化,在许多场合可以看到数字电子钟。
1.1多功能电子时钟研究的背景和意义
近代电子技术获得了飞速的发展。
在其推动下,现代电子产品几乎渗透到了社会的各个领域,有力的推动和提高了社会生产力的发展与信息化程度,同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快。
时间的计量与利用对人类生活有重要的意义,工作的忙碌和繁杂的容易使人忘记当前的时间,然而遇到重大事情的时候,忘记时间,就会给自己或他人造成很大麻烦。
平时我们要求上班准时,约会或召开会议必然要提及时间;火车要准点到达,航班要准点起飞;工业生产中,很多环节都需要用时间来确定工序替换时刻。
所以说能随时准确的知道时间并利用时间,是我们生活和工作中必不可少的。
电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、0按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
1.2电子时钟的功能
电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。
当今市场上的电子时钟品类繁多,外形小巧别致。
也有体型较大的,诸如公共场所的大型电子报时器等。
电子时钟首先是数字化了的时间显示或报时器,在此基础上,人们可以根据不同场合的要求,在时钟上加置其他功能,比如定时闹铃,万年历,环境温度、湿度检测,环境空气质量检测,USB扩展口功能等。
本设计电子时钟主要功能与特点为:
1、具有年、月、日显示和手动校对功能;
2、具有温度显示功能;
3、24小时制
二、方案设计
2.1方案比对与论证
1、电子时钟方案
考虑单片机货源充足、价格低廉,可软硬件结合使用,能够较方便的实现系统的多功能性,故采用单片机作为本设计的硬件基础。
此时对于计时芯片的选择有两种思路:
1,用单片机定时器来做,其优点是外围电路简单,只需要一个单片机最小系统,和一个显示模块;缺点是:
定时不是很准确,计时误差较大,并且程序的编写较繁琐,2,采用DS1302时钟芯片计时,优点是:
定时准确,误差很小,在有备用电池的情况下,即使单片机掉电,也可以维持很长时间,程序编写相对简单。
缺点是:
外围电路比前者相对复杂一点。
本设计中,采用误差小精度高的DS1302时钟芯片计时。
2、显示器方案
采用LCD1602显示器,其特点为显示字母和数字方便,而且成本较低
3、温度传感器方案
方案一:
采用数字式温度传感器DS18B20
此类传感器为数字式传感器,仅需要一条数据线进行数据传输,可以去除A/D模块,
方案二:
用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。
此设计方案需用A/D转换电路,而且热敏电阻的感温特性曲线并不是严格线性的,所以误差较大。
故本设计中采用DS18BB20数字式传感器
2.2主要芯片简介
2.2.1AT89C52简介
目前在单片机系统中,应用比较广泛的微处理器芯片主要为8XC5X系列单片机。
该系列单片机均采用标准MCS-52内核,硬件资源相互兼容,品类齐全,功能完善,性能稳定,体积小,价格低廉,货源充足,调试和编程方便,所以应用极为广泛。
比较常用的有AT89C52单片机,AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
本设计中,采用AT89C52作为微处理器。
AT89C2051提供以下标准功能:
2K字节闪速存储器,128字节RAM,15根I/O口,两个16位定时器,一个五向量两级中断结构,一个全双工串行口,一个精密模拟比较器以及两种可选的软件节电工作方式。
空闲方停止CPU工作但允许RAM、定时器/计数器、串行工作口和中断系统继续工作。
掉电方式保存RAM内容但振荡器停止工作并禁止有其它部件的工作到下一个硬件复位。
AT89C52具有以下主要性能:
1、兼容MCS51指令系统
2、8k可反复擦写(大于1000次)FlashROM;
3、32个双向I/O口;
4、256x8bit内部RAM;
5、3个16位可编程定时/计数器中断;
6、时钟频率0-24MHz;
7、2个串行中断,可编程UART串行通道;
8、2个外部中断源,共8个中断源;
9、2个读写中断口线,3级加密位;
10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;
11、有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。
此外,AT89C52是用静态逻辑来设计的,其工作频率可下降到0Hz,并提供两种可用软件来选择的省电方式——空闲方式(IdleMode)和掉电方式(PowerDownMode)。
在空闲方式中,CPU停止工作,而RAM、定时器/计数器、串行口和中断系统都继续工作。
在掉电方式中,片内振荡器停止工作,由于时钟被“冻结”,使一切功能都暂停,只保存片内RAM中的内容,直到下一次硬件复位为止。
图2.1AT89C2051芯片PDIP封装引脚图
AT89C52为适应不同的产品需求,采用PDIP、TQFP、PLCC三种封装形式,本系统采用双列直插PDIP封装形式。
2.2.2DS1302简介
DS1302是美国DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行。
实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可以自动调整,时钟操作可通过AM/PM只是决定采用24或12小时格式。
DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:
(1)RES(复位),
(2)I/O(数据线),(3)SCLK(串行时钟)。
时钟/RAM的读/写数据以一个字节或者多达31字节的字符组方式通信。
DS1302工作时功耗很低,保持数据和时钟信息时功率小鱼1mW。
DS1302是由DS1202改进而来,增加了以下的特性:
双电源管教用于主电源和辈分电源供应,Vcc1为可编程涓流充电电源,附加七个字节存储器。
他广泛应用于电话、传真、便携式仪器以及电池供电的仪器仪表等产品领域。
下面将主要的性能治标作一综合:
(1)实时时钟具有能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力,还有闰年调整的能力。
(2)31
8位暂存数据存储RAM
(3)串行I/O口方式使得管脚数量最少
(4)宽范围工作电压:
2.0~5.5V
(5)工作电流:
2.0V是,小于300nA
(6)读/写时钟或RAM数据时,有两种传送方式:
单字节传送和多字节传送
(7)8脚DIP封装或可选的8脚SOIC封装(根据表面装配)
(8)简单三线接口
(9)与TTL兼容(Vcc=5V)
(10)可选工业级温度范围:
-40℃~+85℃
(11)在DS1202基础上增加的特性:
对Vcc1有可选的涓流充电能力;双电源管用于主电源和备份电源供应;备份电源管脚可由电池或大容量电容输入;附加的7字节暂存存储器
2.2.3DS1302引脚说明
图2.2DS1302芯片引脚图
其他引脚功能参照表2.1。
表2.1DS1302引脚功能说明
引脚号
名称
功能
1
VCC1
备份电源输入
2
X1
32.768KHz晶振输入
3
X2
32.768KHz晶振输出
4
GND
地
5
RST
控制移位寄存器/复位
6
I/O
数据输入/输出
7
SCLK
串行时钟
8
VCC2
主电源输入
2.2.4DS18B20简介
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
主要根据应用场合的不同而改变其外观。
封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。
耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
技术性能描述
①、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
②、测温范围-55℃~+125℃,固有测温分辨率0.5℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源:
3~5V/DC
⑤、在使用中不需要任何外围元件
⑥、测量结果以9~12位数字量方式串行传送
⑦、不锈钢保护管直径Φ6
⑧、适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温
⑨、标准安装螺纹M10X1,M12X1.5,G1/2”任选
⑩、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
2.2.5DS18B20引脚说明
DS18B20
123
DQ
图2.3DS18B20芯片引脚图
其引脚功能参照表2.2
序号
名称
引脚功能描述
1
GND
地信号
2
DQ
数据输入/输出引脚。
开漏单总线接口引脚。
当被用在寄生电源下,也可以向器件提供电源。
3
VDD
可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
表2.2DS18B20芯片引脚说明
2.3电子时钟硬件电路设计
电子时钟主要要包括时钟电路、温度传感器指示电路、时间显示电路、等几部分。
硬件电路框图参照图2.3。
该系统使用AT89C52单片机作为核心,通过读取时钟日历芯片DS1302数据,完成此电子时钟的主要功能——时钟,通过读取温度传感器DS18B20芯片显示完成电子钟的温度测量功能,再以LM1601作为显示屏,分成两行,第一行显示日期,第二行恒显示时、分、秒,通过按键的切换,可以由时钟界面切换到温度显示界面,同时,按键还可以实现时间的调整功能。
DS18B20
AT89C52
DS1302
按键
LM1601
图2.3多功能电子时钟硬件系统框图
图2.4系统时钟电路
2.4电子时钟软件设计
2.4.1软件流程图
2.4.2Proteus仿真图
图4.1数字钟仿真图
四、附录
(一)源程序语言
C语言编写:
//使用uchar数,否则出错
//请注意intuintcharuchar的用法。
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineportP0
staticunsignedcharbuf[3];//存储转换后温度的高8位与低8位
staticunsignedcharbuf1[3];
unsignedchartemper_value;//存储转化后温度的结果值
ucharnum[]="0123456789";
sbitMODE=P1^2;//显示温度和显示时间相互切换
sbitADD=P1^3;//给日期加一
sbitMIN=P1^4;//给日期减一
//-----------18B20---------
//端口定义及开辟相应的存储单元
sbitDQ=P2^3;//DS18B20单总线接入点
bitflag;//检测芯片是否存在的标志位
bitsignal;//温度符号标志位
sbitb=P1^0;//芯片存在P1.0置0点亮LED灯
sbitc=P1^1;//芯片不存在P1.1置0点亮LED灯
unsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
//8段数码管0~9数字的共阳显示代码
//延时函数
voiddelay_1(unsignedchari)
{
while(--i);
}
//1302初始化函数
reset_signal()
{
DQ=1;
_nop_();
DQ=0;//主机发送复位脉冲至少持续480uS
delay_1(250);//480uS~960uS之间
DQ=1;
delay_1(20);//延时至少16uS
flag=DQ;//DS18B20等待16uS后发送存在脉冲(低电平)持续60uS~240uS
if(flag==0)//若flag=0则表示存在
{
b=0;//P1.0亮
delay_1(90);//延时60uS~240uS之间
}
elsec=0;//不存在则P1.1亮
DQ=1;
}
//写入将要执行操作的命令
voidw_order(unsignedcharcmd)
{
unsignedchari;
for(i=0;i<8;i++)
{
if(cmd&(0x01<
{
DQ=0;//主机将数据线拉至低电平产生写时间片
_nop_();//最好是拉至低电平后就释放(但延时至少1uS以上),这样才能在15uS内恢复到高电平
_nop_();//15uS内必须拉至高电平(因为DS18B20在15uS~60uS之间对数据线进行采样)
DQ=1;
delay_1(28);//延时60uS(因为一个写周期至少延时60uS)
}
else//写0
{
DQ=0;//主机将数据线拉至低电平产生写时间片
delay_1(40);//延时60uS以上(因为一个写周期至少延时60uS)
DQ=1;
_nop_();//恢复延时(因为个写周期之间至少有1uS的恢复时间)
_nop_();
_nop_();
_nop_();
}
}
}
//读出转换后的温度结果存入buf1中
voidr_data()
{
unsignedinti,j;
for(j=0;j<2;j++)
{
buf[j]=0;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;//主机将数据线拉至低电平产生读时间片
_nop_();//最好是拉至低电平后就释放(但延时至少1uS以上),这样才能在15uS内恢复到高电平
_nop_();//15uS内必须驱动至高电平(因为DS18B20输出数据在读时间片下降沿后15uS有效)
DQ=1;
_nop_();
if(DQ)//提高总线后马上读取
{
buf[j]|=(1<
}
else
{
buf[j]&=~(1<
}
delay_1(28);//每个读周期至少持续60uS
DQ=1;
_nop_();//恢复延时(因为个读周期之间至少有1uS的恢复时间)
}
}
}
//获得当前的温度值
voidget_temper_value()
{
DQ=1;
reset_signal();//初始化,检测是否存在DS18B20
if(flag==0)
{
w_order(0xcc);//跳过ROM
w_order(0x44);//启动温度变换
reset_signal();//复位
w_order(0xcc);//跳过ROM
w_order(0xbe);//准备读暂存器
r_data();//读暂存器中温度变化的结果
}
}
voidConversion()//将二进制数转入十进制中
{
signal=(buf[1]&0xf8);//检温度测是正还是负
buf1[2]=0;//温度的符号位
if(signal)
{
buf[0]=~buf[0];
buf[1]=~buf[1];
buf1[2]=10;
}
buf[0]=(buf[0]>>4);//将温度转换结果的低8位的高4位移入低4位
//这里我们抛弃了温度转换结果的第四位(小数部分,因为我们不需要那么准确)
buf[0]=(buf[0]&0x0f);//保留低4位并存入buf[0]中
buf[1]=(buf[1]<<4);//将温度转换结果的高8位的低4位移入高4位
buf[1]=(buf[1]&0xf0);//保留高4位并存入buf[1]中
temper_value=(buf[0]|buf[1]);//将buf[0]与buf[1]相或得温度转换结果存入temper_value中
if(signal)
{temper_value++;}//为负时取反加1
buf1[0]=temper_value%10;//将个位保存在buf1[0]中
buf1[1]=temper_value/10;//将十位保存在buf1[1]中
}
//-----------1302-------------
sbitrst=P3^0;//ds1302
sbitsclk=P3^1;//时钟
sbitio=P3^2;//数据口
sbith=P3^6;//小时
sbitm=P3^7;//分钟
sbite=P2^2;//使能
sbitrw=P2^1;//读写
sbitrs=P2^0;//数据/命令
sbitbusy=P0^7;//检测忙
inthour=23,minute=51;
//-----发送一个字节(8位)------用于传输首地址或者具体时钟起始日期时间或者用于初始化芯片
voidsend(uchardt)
{
uchari;
for(i=0;i<8;i++)
{
sclk=0;
io=dt&0x01;//取第一位
dt>>=1;//左移一位
sclk=1;//上升沿有效
}
}
//------写地址、数据--------
voidwrite(ucharaddr,uchardat)
{
rst=0;sclk=0;rst=1;
send(addr);//发送地址
send(dat);//发送数据
rst=1;
}
//---读取8位----用于从1302中读取具体的时间参数,以便显示在1602
ucharreceive()
{
uchari;
uchardat=0;
//循环8次
for(i=0;i<8;i++)
{
sclk=1;
dat>>=1;
sclk=0;//下降沿读取
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子 时钟 讲解