ds1302.c

来自「KeilC环境下」· C语言 代码 · 共 108 行

C
108
字号
#include "reg51.h"
#include "type.h"

void write_byte(uchar byte);
uchar read_byte(void);
void write_1302(uchar addr,uchar da);
uchar read_1302(uchar addr);

sbit d_rst=	P2^2;
sbit d_scl=	P3^6;
sbit d_io = P3^7;

sbit ACC0=ACC^0;
sbit ACC7=ACC^7; 

uchar cur_time[7];

//写字节(上升沿)
void write_byte(uchar byte)
{
	uchar i;
	ACC=byte;
	for(i=8;i>0;i--)
	{	
		d_io=ACC0;
		d_scl=0;
		d_scl=1;
		ACC=ACC>>1;
	}
}

//读字节(下降沿)
uchar read_byte(void)
{
	char i;
	for(i=8;i>0;i--)
	{
		ACC=ACC>>1;
		d_scl=1;
		d_scl=0;
		ACC7=d_io;
	}
	return (ACC);
}

//写数据(先地址,后数据)
void write_1302(uchar addr,uchar da)
{
	d_rst=0;
	d_scl=0;
	d_rst=1;
	write_byte(addr);
	write_byte(da);
	d_rst=0;
	d_scl=1;
}

//读数据
uchar read_1302(uchar addr)
{	
	uchar temp;
	d_rst=0;
	d_scl=0;
	d_rst=1;
	write_byte(addr);
	temp=read_byte();
	d_rst=0;
	d_scl=1;
	
	return (temp);
}

//设置时间初值
void set_time(uchar *pda)
{	
	uchar i;
	uchar add=0x80;
	write_1302(0x8e,0x00);	//将控制寄存器设为0x00,
						 	//最高位WP=0可写
	for(i=7;i>0;i--)		//将7个时间初值写入对应寄存器
	{
		write_1302(add,*pda);
		pda++;
		add+=2;
	}
	
	write_1302(0x8e,0x80);	//写保护,WP=0
}

//读取时间值
void get_time(void)
{
	uchar i;
	uchar add=0x81;
	for(i=0;i<7;i++)
	{
		cur_time[i]=read_1302(add);							 
		add+=2;
		
	}
}






⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?