void datapros()//数据处理
{
DS1302ReadTime();
DisplayData[0] = smgduan[TINE[2]&0x30]; //时 问:取“时”的十位为什么不能
和取“时”的个位一样用与上一个16进制数的方法
DisplayData[1] = smgduan[TINE[2]&0x0f];
DisplayData[2] = 0x40;
DisplayData[3] = smgduan[TINE[1]/16]; //分
DisplayData[4] = smgduan[TINE[1]&0x0f];
DisplayData[5] = 0x40;
DisplayData[6] = smgduan[TINE[0]/16]; //秒
DisplayData[7] = smgduan[TINE[0]&0x0f];
}
这是DS1302时钟的数据处理函数,这里对“时”的取位,为什么取“时”的十位不能用和取“时”的个位一样的方法?
时的十位只会取到0,1,2 这3种数值,所以用0x30相与就“够”了,这么做是为了做到冗余,当然也可以和0xf0相与,如果时的十位是正确的,效果和0x30相与是一样的。
这是我给“时”的十位与上0x30后的数码管显示,我时间设置的是22-41-00也即是22点41分,他的显示是错的
这是我“时”的十位除上16后的数码管显示,时间设置的是22-41-00也即是22点41分。