蓝桥杯单片机CT107D ds1302驱动

蓝桥杯单片机CTD107 ds13020
比赛时官方提供用驱动函数,但是不能直接使用,需要修改相应的.c和.h文件,
第一步:修改包含的头文件
将.c文件包含的头文件 #include <reg52.h> 和 #include <intrins.h> 改为 #include “ds1302.h”
在.h文件添加 #include “common.h”
第二步:添加内容 写地址和读地址,初始化时间
uint8 write_addr[]={0x84,0x82,0x80}; //写时分秒
uint8 read_addr[]={0x85,0x83,0x81}; //读时分秒
uint8 time[3]={0x00,0x00,0x00}; //初始化时间
第三步:写ds1302_init() 和 ds1302_readtime()

void ds1302_init() 
{
	uint8 i;
	Write_Ds1302(0x8E, 0x00); //关掉写保护
	for(i=0;i<3;i++)
	{
		Write_Ds1302(write_addr[i], time[i]);
	}
	Write_Ds1302(0x8E, 0x80);  //打开写保护
}

void ds1302_readtime() 
{
	for(i=0;i<3;i++)
	{
		time[i]=Read_Ds1302(read_addr[i]);
	}
}

以下为完整的.h文件

#ifndef __DS1302_H
#define __DS1302_H

#include "common.h"

extern uint8 time[3];

void Write_Ds1302_Byte(unsigned  char temp);
void Write_Ds1302( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302 ( unsigned char address );

void ds1302_init();
void ds1302_readtime();

#endif

以下为完整的.c文件

#include "ds1302.h"

sbit SCK=P1^7;		
sbit SDA=P2^3;		
sbit RST = P1^3; 	

//以下为自己添加部分
uint8 write_addr[]={0x84,0x82,0x80};	
uint8 read_addr[]={0x85,0x83,0x81};	
uint8 time[3]={0x12,0x30,0x00}; 		

void ds1302_init() 
{
	uint8 i;
	Write_Ds1302(0x8E, 0x00);
	for(i=0;i<3;i++)
	{
		Write_Ds1302(write_addr[i], time[i]);
	}
	Write_Ds1302(0x8E, 0x80);
}

void ds1302_readtime() 
{
	uint8 i;
	for(i=0;i<3;i++)
	{
		time[i]=Read_Ds1302(read_addr[i]);
	}
}
//以上为自己添加部分

void Write_Ds1302_Byte(unsigned  char temp) 
{
	unsigned char i;
	for (i=0;i<8;i++)     	
	{ 
		SCK=0;
		SDA=temp&0x01;
		temp>>=1; 
		SCK=1;
	}
}   

void Write_Ds1302( unsigned char address,unsigned char dat )     
{
 	RST=0;
	_nop_();
 	SCK=0;
	_nop_();
 	RST=1;	
   	_nop_();  
 	Write_Ds1302_Byte(address);	
 	Write_Ds1302_Byte(dat);		
 	RST=0; 
}

unsigned char Read_Ds1302 ( unsigned char address )
{
 	unsigned char i,temp=0x00;
 	RST=0;
	_nop_();
 	SCK=0;
	_nop_();
 	RST=1;
	_nop_();
 	Write_Ds1302_Byte(address);
 	for (i=0;i<8;i++) 	
 	{		
		SCK=0;
		temp>>=1;	
 		if(SDA)
 		temp|=0x80;	
 		SCK=1;
	} 
 	RST=0;
	_nop_();
 	RST=0;
	SCK=0;
	_nop_();
	SCK=1;
	_nop_();
	SDA=0;
	_nop_();
	SDA=1;
	_nop_();
	return (temp);			
}

工程模板:https://download.csdn.net/download/qq_41676952/11126460

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值