C语言---BCD码在时间上与十进制的转换(DS1302)

前言

BCD码作为DS1302以及个别时间传感器的是以BCD码的形式来储存数据的,所以,显示与设置数据的时候需要代码手动进行设置。


BCD码介绍

BCD码是以十六进制方式显示为十进制的计数方式

比如:0x00~0x09,代表十进制中的1—9
0x10代表的并不是传统十六进制所代表的128,而是10,
十六进制的abcbdef在bcd码中并不存在。

代码

Sec代表秒
Min代表分钟
Hour代表小时

加法:

Sec++;					  	//按下按键秒时间增加1
if((Sec&0x0f) == 0x0a)   	//当后四位值变成10
{
	Sec = Sec&0xf0; 		//后四位归零
	Sec += 16;			    //前四位进1
	if(Sec >= 0x60)
	{
		Sec = 0x00;
		Min++;
		if((Min&0x0f)
		{
			Min= Min&0xf0; //后四位归零
			Min+= 16;
			if(Min >= 0x60)
			{
				Min = 0x00;
				Hour++;							//按下按键小时时间增加1
				if(Hour >= 0x24)				//当所得值为24
				{
					Hour = 0x00;				//全部归零
				}
				if((Hour&0x0f) == 0x0a)     	//当后四位值变成10
				{
					Hour = Hour&0xf0;			//后四位归零
					Hour += 16;					//前四位进1
				}
			}
		}
	}
}

减法

Sec--;								//按下按键分钟时间减去1
if((Sec&0x0f) == 0x0f)     			//当后四位值变成15
{
	Sec = (Sec&0xf0)|0x09;			//后四位改为9
	if(Sec == 0xf9)					//0x00-1 = 0xff 经程序变成0xf9
	{
		Sec = 0x59;
		Min--;								//按下按键分钟时间减去1
		if((Min&0x0f) == 0x0f)     			//当后四位值变成15
		{
			Min = (Min&0xf0)|0x09;			//后四位改为9
			if(Min == 0xf9)					//0x00-1 = 0xff 经程序变成0xf9
			{
				Min = 0x59;
				Hour--;							//按下按键小时时间减1
				if(Hour == 0xff)				//当所得值为-1(unsigned char)
				{
					Hour = 0x23;				//变成最大数减1(24-1)
				}
				if((Hour&0x0f) == 0x0f)   		//当后四位值变成15
				{
					Hour = (Hour&0xf0)|0x09;//后四位改为9
				}
			}
		}
	}
}
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值