点击链接获取Keil源码与Project Backups仿真图:
https://download.csdn.net/download/qq_64505944/87708258
源码获取
主要内容:
电子万年历系统以实时时钟芯片DS1302和AT89C52单片机为主要研究对象,着重进行51单片机控制系统的设计研究和如何读取DS1302内部时钟信息的研究。以及运用18B20进行实时温度检测。主要内容包括:实时温度显示;年月日星期时分秒显示;年月日星期时分秒调整;闹钟定时小时分钟和秒。
基本要求:
1.电子万年历电路设计图;
2.电子万年历设计源程序;
2、keil运行源程序;
3、protus中仿真;
4、运行结果分析。
主要参考资料:
[1]余锡存,曹国华,单片机原理及接口技术.西安:西安电子科技大学出版社,2000
[2]郭天祥,新概念51单片机c语言教程。北京:电子工业出版社,2009
[3]杨拴科,模拟电子技术基础.北京:高等教育出版社,2003。
[4]李光才,楼然笛.单片机课程设计实例指导.北京:北京航空航天大学出版社,2004。
[5]杨立民,单片机技术及应用.西安:西安电子科技大学出版社,1997。
完 成 期 限:12 月 11 日 - 12 月 26 日
指导教师签名:
课程负责人签名:
摘要
基于单片机的定时和控制装置在许多行业有着广泛的应用,而数字钟是其中最基本的,也是最具有代表性的一个例子。
在基于单片机系统的数字钟电路中,除了基本的单片机系统和外围电路外,还需要外部的控制和显示装置。本电路主要以单片机AT89S52为核心而设计的,通过单片机对信息的分析与处理,控制外围设备。系统由复位模块、时钟模块、温度模块、音乐模块、光识模块及显示模块共六个模块组成,后来在时钟模块的基础上又加载了日历、星期的模块。
本设计以单片机AT89S52为切入点,通过使用AT89S52的内部的可编程定时器/计数器,结合对外接晶振的调节来确定一个合适的振荡周期,从而确定出内部的机器周期。再通过对内部中断程序的设置来设计出时钟程序,即设计出了电子时钟的核心。然后在核心电路的基础上设计出了相应的扩展电路,使本设计更加实用。
关键词:单片机;数码显示;温度传感器
目录
第一章概述 1
1.1实时时钟研究的背景及意义 1
1.2系统设计实现的目标 1
1.3系统的总体设计 1
第二章硬件电路设计 3
2.1单片机最小系统 3
2.2时钟芯片电路 3
2.31602LCD的电路连接 4
2.4蜂鸣器闹铃电路 5
2.5按键调整电路 5
2.6电源模块 6
第三章软件部分设计 7
3.1主程序流程图的设计 7
3.2DS1302读写程序设计 7
3.3温度程序设计 10
第四章系统调试 12
4.1系统的模块组成 12
4.2系统软件调试与仿真 12
总结 14
参考文献 15
第一章概述
1.1实时时钟研究的背景及意义
在现实我们生活中每个人都可能有自己的时钟,光阴在永不停息的流逝,有了时钟人们就能随着时间有计划的过着每一天。然而现在绝大部分的时钟有的需要不断地跟换电池,有些时钟需要外接电源,如果一旦电池没电或者外接电源无法供电,时钟就会停止计时了。而美国DALLAS公司的新型时钟日历芯片DS1302就能解决这一问题。该器件能提供实时时钟(RTC)/日历、定时闹钟。少于31天的月份,月末日期可自动调整,其中包括闰年补偿。该器件还可以工作于24小时货代/PM指示的12小时格式。一个精密的温度补偿电路用来监视Vcc的状态。
本时钟还具有环保、走时无噪音、低功耗等非实时时钟不具有的功能。该实时时钟不但可以作为家用,而且更可以在公共场合使用,如车站、码头、商场等场所。
1.2系统设计实现的目标
电子万年历系统是以实时时钟芯片DS1302和AT89C52单片机为主要研究对象,着重进行51单片机控制系统的设计研究和如何读取DS1302内部时钟信息的研究。以及运用18B20进行实时温度检测。主要内容包括:
1.实时温度显示;
2.年月日星期时分秒显示;
3.年月日星期时分秒调整;
4.闹钟定时小时分钟和秒;
1.3系统的总体设计
采用AT89C52作为主控单片机,时钟模块选用DS1302作为时钟芯片,温度模块选用DS18B20作为温度传感器,显示模块选用LCD1602,设置部分选用按键电路。
AT89C52与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
DS1302实时时钟芯片功能丰富,可以用来直接代替IBMPC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。由于DS1302能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS1302中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久;对于一天内的时间记录,有12小时制和24小时制两种模式。用户还可对DS1302进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。
DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置。DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。采用一线通信接口。
该系统的系统框图如图1.1示:
图1.1系统框图
第二章硬件电路设计
2.1单片机最小系统
本系统以AT89C52单片机为核心,本系统选用11.0592MHZ的晶振,,使得单片机有合理的运行速度。起振电容30pF对振荡器的频率高低、振荡器的稳定性和起振的快速性影响较合适,复位电路为按键高电平复位。
AT89C52单片机最小系统电路设计如图2.1所示。
图2.1单片机最小系统
2.2时钟芯片电路
时钟芯片DS1302,其引脚分布图2.2所示
图2.2时钟引脚分布
MOT(1脚):总线时序模式选择脚。接高电平,选择MOTOROLA总线时;序;接低电平或悬空,择选择INTEL总线时序。
NC(2,3,16,20,21,22脚):悬空脚。
AD0AD7(411脚):地址/地址数据复用总线引脚。
CS(13脚):片选脚,低电平有效。
AS(14脚):地址锁存输入脚。下降沿时,地址被锁存,紧接着的上升沿来时地址被清除。
R/W(15脚):读/写输入脚。在选择MOTOROLA总线时序模式时,此引脚用于指示当前的读写周期,高电平指示当前为读周期,低电平指示当前为写周期;选择INTEL中线时序模式时,此引脚为低电平有效的输入脚,相当于通用RAM的写使能信号(/WE)
DS(17脚):选择MOTOROLA总线时序模式时,此引脚为数据锁存脚;选择INTEL总线时序模式时,此引脚为读输入脚,低电平有效,相当于典型的内存的输出使能信号(/OE)
RESET(18脚):复位脚,低电平有效,复位不会影响到时钟、日历和RAM。
IRQ(19脚):中断申请输出脚,低电平有效,可作为微处理器的中断输入。
SQW(23脚):方波信号输出脚。可通过设置寄存器位SQWE关断此信号输出,此信号的输出频率也可通过对芯片内部的寄存器编程予以改变。
VCC(24脚):+5v电源端。
2.31602LCD的电路连接
液晶5端为读/写选择端,因为我们不从液晶中读取数据,只向其写入命令和显示数据,因此此端始终选择为写状态,即低电平接地。液晶6端为使能信号,是操作时必须的信号。其电路如图2.3所示:
图2.31602的电路连接
2.4蜂鸣器闹铃电路
当单片机给蜂鸣器一个低电平时,三极管导通驱动蜂鸣器发出声音作为定时闹铃,其电路图如图2.4所示:
图2.4蜂鸣器连接电路
2.5按键调整电路
系统四个独立键盘均采用查询方式,S2用于设置年、月、日、时、分、秒、星期的数值加,以及闹钟开,S3用于设置年、月、日、时、分、秒、星期的数值减以及闹钟关,s1用于具体设置时钟位的切换,s4键用于设置闹钟。其电路图如2.5所示:
图2.5按键电路连接
2.6电源模块
电子钟的电源为5伏直流电源,本设计中我使用的是5V的充电模块,电源模块的原理图如图2.6所示:
图2.6电源模块
第三章软件部分设计
3.1主程序流程图的设计
主程序流程图如图3.1:
图3.1主程序流程图
3.2DS1302读写程序设计
本系统的时间读取主要来源于单片机对DS1302的操作,在硬件上时钟芯片DS1302与单片机的连接需要三条线,即SCLK(7)、I/O(6)、RST(5),具体连接图见系统硬件设计原理图。读取写程序设计如下:
函数名:RTInputByte()
功能:实时时钟写入一字节
说明:往DS1302写入1Byte数据(内部函数)
入口参数:d写入的数据
返回值:无
voidRTInputByte(uchard)
{
uchari;
ACC=d;
for(i=8;i>0;i--)
{
T_IO=ACC0;/*相当于汇编中的RRC*/
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}函数名:RTOutputByte()
功能:实时时钟读取一字节
说明:从DS1302读取1Byte数据(内部函数)
入口参数:无
返回值:ACC
ucharRTOutputByte(void)
{
uchari;
for(i=8;i>0;i--)
{
ACC=ACC>>1;/*相当于汇编中的RRC*/
ACC7=T_IO;
T_CLK=1;
T_CLK=0;
}
return(ACC);
}
函数名:W1302()
功能:往DS1302写入数据
说明:先写地址,后写命令/数据(内部函数)
调用:RTInputByte(),RTOutputByte()
入口参数:ucAddr:DS1302地址,ucData:要写的数据
返回值:无
voidW1302(ucharucAddr,ucharucDa)
{
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(ucAddr);/*地址,命令*/
RTInputByte(ucDa);/*写1Byte数据*/
T_CLK=1;
T_RST=0;
}
函数名:R1302()
功能:读取DS1302某地址的数据
说明:先写地址,后读命令/数据(内部函数)
调用:RTInputByte(),RTOutputByte()
入口参数:ucAddr:DS1302地址
返回值:ucData:读取的数据
ucharR1302(ucharucAddr)
{
ucharucData;
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(ucAddr);/*地址,命令*/
ucData=RTOutputByte();/*读1Byte数据*/
T_CLK=1;
T_RST=0;
return(ucData);
}
DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。
3.3温度程序设计
单总线上最基本的操作有初始化、写和读3种,所有其它的操作都由这3种基本操作组合而成,初始化用于对总线上的器件进行状态复位,写用于主节点向总线上写入一位数据,读用于主节点从总线上读取一位数据。在这3种操作中,只有写操作是单向的,初始化操作和读操作都是双向的。具体程序设计如下:
byteow_reset(void)
{
bytepresence;
DQ=0;//拉低总线
delay(29);//保持480us
DQ=1;//释放总线
delay(3);//等待回复
presence=DQ;//读取信号
delay(25);//等待结束信号
return(presence);//返回0:正常1:不存在
}
//从1-wire总线上读取一个字节
byteread_byte(void)
{
bytei;
bytevalue=0;
for(i=8;i>0;i--)
{
value>>=1;
DQ=0;
DQ=1;
delay(1);
if(DQ)value|=0x80;
delay(6);
}
return(value);
}
//向1-WIRE总线上写一个字节
voidwrite_byte(charval)
{
bytei;
for(i=8;i>0;i--)//一次写一位
{
DQ=0;//
DQ=val&0x01;
delay(5);//
DQ=1;
val=val/2;
}
delay(5);
}
第四章系统调试
4.1系统的模块组成
本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。系统的核心采用的是STC89C52单片机;数据显示模块采用的是LCD液晶显示;
温度采集模块用的是DS18B20温度传感器,该传感器所采用的是单总线传输,内部带有A/D转换,用起来非常方便;时间处理模块用的是DS1302时钟芯片,可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能;调整设置模块共包括四个按键:模式选择键、功能选择键、调整加按键、调整减按键。
4.2系统软件调试与仿真
通过编写出程序,然后在仿真原理图中检查单片机和液晶屏等器件是否能够正常显示。通过KeiluVision4软件的使用来编译程序的,确保了程序的正确性及程序所设计的功能能够顺利的实现。如图4.1程序运行图:
图4.1程序运行图
通过软件的调试,接着在Proteus仿真软件里进行仿真。按原理图的设计在ISIS软件中连接好电路。接好后装入HEX文件后,单击仿真运行工具栏上的“运行”,在ISIS的编辑窗口中可以看到单片机应用系统的仿真运行效果。其中,红色方块代表高电平,蓝色方块代表低电平。如图4.2仿真效果图
图4.2仿真效果图
总结
电子万年历系统设计中使用到了AT89C52和1602液晶显示屏。在设计过程中我通过在网上和图书馆查阅资料,收集了关于单片机和液晶显示方面的资料,通过对这些资料的学习,我了解了单片机的基本结构,使用和单片机在生活和生产中所发挥的作用;液晶显示的原理和使用。除了让我回顾以前学过的知识外,也使我学习到了新的东西。
设计完成的主要工作和任务如下:对设计方案的理论研究,单片机的合理选型,硬件电路的设计,电路板的制作,元器件的焊接,软件的编写和调试以及毕业论文的制作。
通过这次设计我有以下几个方面的收获:
(1)学习与掌握了单片机的基本原理及其各种应用,对它的各种硬件接口与软件设计方法有较深入的认识。
(2)对液晶显示有了一定的认识,能够初步掌握液晶显示的原理。
(3)通过对电路原理图、pcb图的绘制,电路板的制作掌握了对AltiumDesignerWinter09。
(4)本设计重点在于软件的设计,因此在设计过程中使自己学到的C语言知识得到了巩固,同时提高了解决实际问题的能力。