蓝桥杯-ds1302使用(小白专享)

 本文参考该博主而写,这位博主大大写的十分详细,大家有兴趣可以去参考

蓝桥杯单片机第三届国赛题目-门禁系统_WillPower-CSDN博客_第三届蓝桥杯国赛https://willpower.blog.csdn.net/article/details/117233039

我之所以再 画蛇添足 写这个是因为我想记录一下我作为小白视角如何去使用


很多同学刚开始写的时候,看到ds1302参数手册一定都是晕的,不知道怎么写,怎么办!其实我也是,我在写这篇文章的时候,依旧搞不清楚!!!但是,这不影响我参加比赛(除非规则改了),正常来说,我们能写出来就行,不用搞原理!!!如果你也是这种心态,那么就继续看下去叭。如果不是,请看上面的博客!!!

强调!有了这篇文章,你不需要再看 ds1302介绍!!!你已经可以进行时间的存放读取数据了!!!

关于这个这个传感器,我们分为两部分进行学习!

(1)改官方驱动

(2)写自己驱动

(3)串口验证

(1)改官方驱动

官方提供了三个驱动文件,我们只需要修改其中一个,也就是下面这个函数

unsigned char Read_Ds1302_Byte ( unsigned char address )

 我们可以看到,修改驱动也就是直接删除原驱动的文件就行,其他部分不做改变!!

(2)写自己驱动

这里的驱动也很简单,因为不长,这边建议直接理解背下来!!!

代码已经放在下面!!,我会稍微解释一下,方便你理解记忆!!!

void DS1302_init(uchar _h, uchar _m, uchar _s){
	uchar i;
	_h = (_h/10%10 << 4) | _h%10;
	_m = (_m/10%10 << 4) | _m%10;
	_s = (_s/10%10 << 4) | _s%10;
	Write_Ds1302_Byte(0x8e, 0);
	RST=0;	_nop_();
	SCK=0;	_nop_();
	RST=1; 	_nop_();
	Write_Ds1302(0xbe);
	Write_Ds1302(_s);	
	Write_Ds1302(_m);	
	Write_Ds1302(_h);	
	for(i = 0; i < 5; i++){
		Write_Ds1302(0);	
	}
	RST=0;
	Write_Ds1302_Byte(0x8e, 0x80);
}

 初始化函数代码解读:

1:定义循环变量 i

2:分别对 h小时,m分钟,s秒进行运算转换(把10位左移四位 和 个位 或运算)

3:打开写入功能(0x8e,0)

4:接下来三行直接复制修改官方驱动蓝1框

5:接下来三行写入 秒,分,时

6:写入0xbe直接背住!!!

6:接下来 for 循环是对 日,周,月等写入

7:RST=0复位

8:关闭写入功能(0x8e,0x80)

简单总结:(1)对写入数据进行格式转换

                   (2)开启写入

                   (3)模板1

                   (4)0xbe

                   (5)写入数据:3个单独写,5个循环

                   (6)RST=0+关闭写入

void DS1302_Read(){
		Write_Ds1302_Byte(0x8e, 0);
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1;	_nop_();
 	Write_Ds1302(0xbf);
  time[0] = Read();
		time[1] = Read();
		time[2] = Read();
		time[0] = (time[0] >> 4)*10 + (time[0] & 0x0f);
		time[1] = (time[1] >> 4)*10 + (time[1] & 0x0f);
		time[2] = (time[2] >> 4)*10 + (time[2] & 0x0f);
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
		SCK=1;	_nop_();
		SDA=0;	_nop_();
		SDA=1;	_nop_();
		Write_Ds1302_Byte(0x8e, 0x80);
}

 读取函数代码解读:

1.打开写入功能(0x8e,0)

2:接下来三行直接复制修改官方驱动蓝1框

3:写入0xbf直接背住!!!

4:数组前三位依次读取read函数

5:发该数组三位先截取高位后变换加上低位

6:接下来三行直接复制修改官方驱动蓝2框

7:关闭写入功能(0x8e,0x80)

简单总结:(1)开启写入

                   (2)模板1

                   (3)0xbf

                   (4)读取数据+格式转换

                   (5)模板2

                   (6)关闭写入

 注意事项:(1)这里是BCD码,我们的高位是十位,低位是个位

(3)串口验证

这里的话,就是把读取的数据放到串口上进行打印,方便我们在测试的时候用!

 使用:bu格式进行打印输出

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值