两天速成蓝桥杯之时钟芯片DS1302(6)

前言

DS1302作为时钟芯片,感觉是省赛的基础元件的使用的最后一个了,感觉可能比较复杂,但是其实也没多复杂,这里的代码是参考我朋友的,也没来得及仔细研究。这里就全当给大家参考了。

代码详解

其实我倒是遇见过,这个读出来全是165的,原因是因为板子的芯片没插牢,所以导致了这种现象。

/*
  程序说明: DS1302驱动程序
  软件环境: Keil uVision 4.10 
  硬件环境: CT107单片机综合实训平台 8051,12MHz
  日    期: 2011-8-9
*/

#include <STC15F2K60S2.H>
#include <intrins.h>
#include "ds1302.h"

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

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

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

void setsfm(unsigned char shi, unsigned char fen, unsigned char miao, unsigned char ri, unsigned char yue, unsigned char zhou, unsigned char nian)
{
	Write_Ds1302_Byte(0x8e, 0);
	Write_Ds1302_Byte(0x80, miao / 10 * 16 + miao % 10);
	Write_Ds1302_Byte(0x82, fen / 10 * 16 + fen % 10);
	Write_Ds1302_Byte(0x84, shi / 10 * 16 + shi % 10);
	Write_Ds1302_Byte(0x86, ri / 10 * 16 + ri % 10);
	Write_Ds1302_Byte(0x88, yue / 10 * 16 + yue % 10);
	Write_Ds1302_Byte(0x8a, zhou / 10 * 16 + zhou % 10);
	Write_Ds1302_Byte(0x8c, nian / 10 * 16 + nian % 10);
	Write_Ds1302_Byte(0x8e, 0x80);
}
unsigned char getshi()
{
	unsigned char a = Read_Ds1302_Byte(0x85);
	return a / 16 * 10 + a % 16;
}
unsigned char getfen()
{
	unsigned char a = Read_Ds1302_Byte(0x83);
	return a / 16 * 10 + a % 16;
}
unsigned char getmiao()
{
	unsigned char a = Read_Ds1302_Byte(0x81);
	return a / 16 * 10 + a % 16;
}
unsigned char getri()
{
	unsigned char a = Read_Ds1302_Byte(0x87);
	return a / 16 * 10 + a % 16;
}
unsigned char getyue()
{
	unsigned char a = Read_Ds1302_Byte(0x89);
	return a / 16 * 10 + a % 16;
}
unsigned char getzhou()
{
	unsigned char a = Read_Ds1302_Byte(0x8B);
	return a / 16 * 10 + a % 16;
}
unsigned char getnian()
{
	unsigned char a = Read_Ds1302_Byte(0x8D);
	return a / 16 * 10 + a % 16;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值