⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.c

📁 单片机项目19-电子日历(1602显示)
💻 C
字号:
/*********************************************************************************/
//ds1302驱动
//2011年5月
/*********************************************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar sec,min,hour,date,moon,year,week;
uchar time[6];
sbit ret = P1^1;
sbit scl = P3^7;
sbit sd = P1^0;
/***********************************对DS1302初始化++******************************/
void ds1302_init(void)
{
	ret = 0;
	scl = 0;
	ret = 1;
}
/*********************************对DS1302写1字节函数*****************************/
void write_ds1302_onebyte(uchar dat)	   
{
	uchar i;
	for(i = 0;i < 8;i++)
	{
		sd = dat & 0x01;
		scl = 0;
		scl = 1;
		dat = dat >> 1;
	}
}
/*********************************从DS1302读一字节函数*****************************/
uchar read_ds1302_onebyte(void)		
{
	uchar i,dat;
	for(i = 0;i < 8;i++)
	{
		scl = 1;
		dat = dat >> 1;
		scl = 0;
		if(sd)dat = dat | 0x80;
	}
	return(dat);	
}
/*****************************对DS1302的某一地址写一字节函数***********************/
void write_ds1302_add_dat(uchar add,uchar dat)
{
	ds1302_init();
	write_ds1302_onebyte(add);
	write_ds1302_onebyte(dat);
	scl = 1;
	ret = 0;
}
/*****************************从DS1302的某一地址读一字节函数***********************/
uchar read_ds1302_add(uchar add)				//读1302数据
{
	uchar dat_temp;
	ds1302_init();
	write_ds1302_onebyte(add);
	dat_temp = read_ds1302_onebyte();
	scl = 1;
	ret = 0;
	return(dat_temp);
}
/********************************8421BCD码到十进制转换*****************************/
uchar BCD_DEC_conv(uchar x)
{
	uchar dec;
	dec =  0x0f & x;
	x = x >> 4;
	dec	= dec + x * 10;
	return(dec);
}
uchar DEC_BCD_conv(uchar x)
{
	uchar bcd;
	bcd =  x % 10;
	x = x / 10;
	x = x << 4;
	bcd	= bcd | x ;
	return(bcd);
}
void get_ds1302_time(void)				//获取1302的时间数据(时、分、秒),存入time1数组中
{
	uchar d;
	d = read_ds1302_add(0x81);			//读秒
	sec = BCD_DEC_conv(d);				//得到秒	
	d = read_ds1302_add(0x83);			//读分
	min = BCD_DEC_conv(d);  			//得到分
	d = read_ds1302_add(0x85);			//读小时
	hour = BCD_DEC_conv(d);  			//得到小时
	d = read_ds1302_add(0x87);			//读日
	date = BCD_DEC_conv(d);  			//得到日
   	d = read_ds1302_add(0x89);			//读月
	moon = BCD_DEC_conv(d);  			//得到月
   	d = read_ds1302_add(0x8d);			//读年
	year = BCD_DEC_conv(d);  			//得到年
	d = read_ds1302_add(0x8b);			//读年
	week = BCD_DEC_conv(d);  			//得到年		
}

⌨️ 快捷键说明

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