蓝桥杯单片机——Ds1302时间开始与暂停

首先说明一下ds1302时间,开始与暂停的原理:

只要让“秒寄存器”的最高位为1,时钟就会暂停计时。

同理只要让“秒寄存器”的最高位为0,时钟就会开始计时

时间暂停:

这里我用的是按键去控制

    if(key_get==7)//时间暂停
	{
		uchar temp;
		Write_Ds1302_Byte(0x8e,0x00);
		temp=Read_Ds1302_Byte(0x81);
		Write_Ds1302_Byte(0x80,temp|0x80);//将最高位为1
		Write_Ds1302_Byte(0x8e,0x80);
		time_stat=1;
	}

时间开始:

	if(key_get==6)//时间开始
	{
		uchar temp;
		Write_Ds1302_Byte(0x8e,0x00);
		temp=Read_Ds1302_Byte(0x81);
		Write_Ds1302_Byte(0x80,temp&0x7f);//将最高位置位0
		Write_Ds1302_Byte(0x8e,0x80);
		time_stat=0;
	}

做完以上操作可能很多小伙伴还有一个疑惑就是按下暂停键之后,你的数码管的秒位的十位数上会显示一个8,其实这个是正常的现象,因为通过读代码来看,我们写进去的就是8.所以毫无疑问显示的也是8。

那么怎么来解决这个问题呢,请继续往下看我的代码:

我在时间读取出来的数字上面动了一点手脚,emmmm,定义应该都能理解吧,时,分,秒,我在上面设置了一个标志位,就是我在按下暂停按键的时候,我的那个time_stat就被赋值为1,否则为0;下面的代码就为显示为8做了一个解决方法,就是在显示下面动手脚,但是实际上读出来的还是8,因为只有在最高位为1的时候,才能暂停,所以我们不能去改变它的内部,但是显示什么数是我们可以改变的。而且因为这个是60秒之后就为0,所以不用担心会改变原来的数值,不可能秒能够到8的。

void Time_read()
{
	h1=Read_Ds1302_Byte(0x85);
	f1=Read_Ds1302_Byte(0x83);
	s1=Read_Ds1302_Byte(0x81);
	if(time_stat==1)//如果时间暂停则让数码管显示的值那个最高位去掉
	{
		s1=s1&0x7f;
	}
	h1=(h1/16)*10+h1%16;
	f1=(f1/16)*10+f1%16;
	s1=(s1/16)*10+s1%16;
}

经过以上修改,你的ds1302就能够实现暂停与启动啦!

如果你看完以上解析还没有解决你的问题,那么也可以私信我,关注我,后面还会有更多分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值