当前位置:文档之家› 电子日历时钟设计

电子日历时钟设计

delaynus(2); //稍微等待,使硬件做好准备
Write1302(Cmd); //写入命令字
Write1302(dat); //写数据
SCLK=1; //将时钟电平置于已知状态
RST=0; //禁止数据传递
}
/*****************************************************
2.2.2
系统的组成与工作原理:
系统由单片机AT89C52,串行日历时钟片DS1302,液晶显示模组LCD1602。
DS1302的CLOCK与AT89C52的P1.6相连,RST与P1.5相连,IO与P1.7相连。
LCD1602的D0~D7与AT89C51的P0.0~P.7相连,并接上拉电阻,RS与P2.0相连,RW与P2.1相连,E与P2.2相连。
秒寄存器中的CH位为时钟暂停位,当为1时,时钟暂停,为0时,时钟开始启动。
写保护寄存器中的WP为写保护位,WP=1时,写保护,当WP=0时,未写保护,当对日历、时钟寄存器或片内RAM进行写时,WP应清零,当对日历、时钟寄存器或片内RAM进行读时,WP一般置1.
慢充电寄存器的TCS位为控制慢充电的选择,当它为1010时才能是慢充电工作。DS为二极管选择位。DS为01选择一个二极管,DS为10选择两个二极管,DS为11或00充电器被禁止,与TCS无关。RS用于选择连接在Vcc2与Vcc1之间的电阻,RS为00,充电器被禁止,与TCS无关。
SCLK=0; //拉低SCLK,形成脉冲下降沿
delaynus(2); //稍微等待
}
return dat; //将读出的数据返回
}
/*****************************************************
函数功能:根据命令字,从1302读取一个字节数据
入口参数:Cmd
以下是对液晶模块的操作程序
*******************************************************************************/
sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚
sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚
1
通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。
2
2.1
图3.1 电路原理图
2
2.2.1 MCS51
XXAT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read OnlyMemory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
DS1302是DALLAS公司拖出的涓流充电时钟芯片,内含有一个实时时钟/日历和31个季节静态RAM,通过简单地串行接口与单片机进行通信,实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24小时或12小时格式,DS1302与单片机之间能简单地采用同步串行方式进行通信,仅需用到RES复位、I/O数据线、SCLK串行时钟3个口线。对时钟、RAM的读/写,可以改用单字节方式或多达31个字节的字符组方式。DS1302工作时功耗很低,保持数据和时钟信息是功率小于1mW。DS1302广泛应用于电话传真、便携式仪器及电池供电的仪器仪表等产品领域中。
函数功能:延时若干毫秒
入口参数:n
***************************************************/
void delaynms(unsigned char n)
delaynus(2); //稍微等待,使硬件做好准备
for(i=0;i<8;i++) //连续写8个二进制位数据
{
DATA=dat&0x01; //取出dat的第0位数据写入1302
delaynus(2); //稍微等待,使硬件做好准备
SCLK=1; //上升沿写入数据
delaynus(2); //稍微等待,使硬件做好准备
RT-1602 字符型液晶模块是以两行16个子的5*7点阵吐信来显示字符的液晶显示器。
DS1302有8个引脚:
X1、X2:32.768kHz晶振介入引脚。
GND:地。
RST:复位引脚,低电平有效。
I/O:数据输入/ห้องสมุดไป่ตู้出引脚,具有三态功能。
SCLK:串行时钟输入引脚。
Vcc1:工作电源引脚。
Vcc2:备用电源引脚。
DS1302有一个控制寄存器,12个日历,时钟寄存器和31个RAM。
控制寄存器
控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回到高电平后写入的第一个字就为控制命令。它用于对DS1302读写过程进行控制,它的格式如下:
表2.1 控制寄存器的格式
D7 D6 D5 D4 D3 D2 D1 D0
SCLK=0; //重新拉低SCLK,形成脉冲
dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位
}
}
/*****************************************************
函数功能:根据命令字,向1302写一个字节数据
入口参数:Cmd,储存命令字;dat,储存待写的数据
函数功能:向1302写一个字节数据
入口参数:x
***************************************************/
void Write1302(unsigned char dat)
{
unsigned char i;
SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备
sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚
sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚
/*****************************************************
函数功能:延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
sbit RST=P1^5; //位定义1302芯片的接口,复位端口定义在P1.5引脚
sbit SCLK=P1^6; //位定义1302芯片的接口,时钟输出端口定义在P1.6引脚
/*****************************************************
函数功能:延时若干微秒
函数功能:从1302读一个字节数据
入口参数:x
***************************************************/
unsigned char Read1302(void)
{
unsigned char i,dat;
delaynus(2); //稍微等待,使硬件做好准备
***************************************************/
unsigned char ReadSet1302(unsigned char Cmd)
{
unsigned char dat;
RST=0; //拉低RST
SCLK=0; //确保写数居前SCLK被拉低
第七~14脚:D0~D7,为8位双向数据线。
第15脚:BLA,背光源正极。
第16脚:BLK,背光源负极。
3
3
图4.1 程序流程图
3.2
#include<reg51.h> //包含单片机寄存器的头文件
#include<intrins.h> //包含_nop_()函数定义的头文件
/***********************************************************************
2
RT-1602采用表中的16 脚接口:
第一脚:Vss,电源地。
第二脚:VDD,+5V电源。
第三脚:VL,液晶显示偏压信号。
第四脚:RS,数据/命令选择端,高电平时选择数据寄存器,低电平时选择指令寄存器。
第五脚:R/W,读/写选择端。
第六脚:E,使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
入口参数:n
***************************************************/
void delaynus(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
;
}
/*****************************************************
for(i=0;i<8;i++) //连续读8个二进制位数据
{
dat>>=1; //将dat的各数据位右移1位,因为先读出的是字节的最低位
相关主题