51单片机DS1302

一、DS1302概述

DALLAS公司推出的高性能、低功耗的实时时钟

采用SPI三线接口与MCU进行同步通信,并可采用突发方式一次传送多个字节的时钟参数和RAM数据。附加31字节的静态RAM。

简单来说,DS1302可以理解为一个电子手表,里面带有一个31字节的RAM内存。

在DS1302中有两块存储器:日历时钟寄存器静态RAM存储器。前者用于记录实时时间,后者用于记录其他数据

二、电路图

三、日历时钟寄存器

控制字格式:

整体代码:

#include "reg52.h"
#include "ds1302.h"
#include "smg.h"


//首先是ds1302的读写地址,再定义一个时间的数组
unsigned char Write_ds1302_adrr[7] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char Read_ds1302_adrr[7] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
//20年4月18日,周六,23点59分24秒 
unsigned char Time[7] = {0x24,0x59,0x23,0x18,0x04,0x06,0x20};

void DS1302_Config()   //初始化DS1302,写它的每一位
{
	char i;
	Write_Ds1302_Byte(0x8e,0x00);  
    //第八个地址是一个写保护位,0可以写,1不可以写
	for(i=0;i<7;i++)
	{
		Write_Ds1302_Byte( Write_ds1302_adrr[i],Time[i]); 
     //第一个参数是往哪个地址去写,第二个参数是写什么内容
	}
	Write_Ds1302_Byte(0x8e,0x80);  //写完之后,给它关闭
}

void Read_Ds1302_Timer()  //读是不需要写它的保护,只有写需要
{
	char i;
	for(i=0;i<7;i++)
	{
	    Time[i] = Read_Ds1302_Byte(Read_ds1302_adrr[i]);   
                              //参数是写到哪个地址
	}
}

void Dispaly_Ds1302()
{
	displaysmg_bit(0,smgnodot_ca[Time[2]/16]);
	delaysmg(100);
	displaysmg_bit(1,smgnodot_ca[Time[2]%16]);
	delaysmg(100);
	displaysmg_bit(2,0xbf);
	delaysmg(100);
	displaysmg_bit(3,smgnodot_ca[Time[1]/16]);
	delaysmg(100);
	displaysmg_bit(4,smgnodot_ca[Time[1]%16]);
	delaysmg(100);
	
	displaysmg_bit(5,0xbf);
	delaysmg(100);
	
	
	displaysmg_bit(6,smgnodot_ca[Time[0]/16]);
	delaysmg(100);
	displaysmg_bit(7,smgnodot_ca[Time[0]%16]);
	delaysmg(100);
	display_all(0xff);
	
}
	

void main()
{
	DS1302_Config();
	while (1)
	{
		Read_Ds1302_Timer();
		Dispaly_Ds1302();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值