本帖最后由 牛东 于 2014-11-24 15:42 编辑
/*************************************************
把十六进制数值转换成组合BCD码函数
*************************************************/
void number_to_BCD4(const unsigned char *p_ucNumber,unsigned char *p_ucBCD_bit4)
{
unsigned long ulNumberTemp=0; //4个字节
unsigned char ucTemp=0;//单字节
ulNumberTemp=p_ucNumber[3]; //把4个字节的数值合并成一个32位long类型数据,高位在数组下标大的方向,低位在数组下标小的方向
ulNumberTemp=ulNumberTemp<<8;
ulNumberTemp=ulNumberTemp+p_ucNumber[2];
ulNumberTemp=ulNumberTemp<<8;
ulNumberTemp=ulNumberTemp+p_ucNumber[1];
ulNumberTemp=ulNumberTemp<<8;
ulNumberTemp=ulNumberTemp+p_ucNumber[0];
p_ucBCD_bit4[3]=ulNumberTemp%100000000/10000000; //4个字节最大值表示:十进制为4294967295,十六进制为ffffffff,
p_ucBCD_bit4[3]=p_ucBCD_bit4[3]<<4; //前半4位存第8位组合BCD码
ucTemp=ulNumberTemp%10000000/1000000;
p_ucBCD_bit4[3]=p_ucBCD_bit4[3]+ucTemp; //后半4位存第7位组合BCD码
p_ucBCD_bit4[2]=ulNumberTemp%1000000/100000;
p_ucBCD_bit4[2]=p_ucBCD_bit4[2]<<4; //前半4位存第6位组合BCD码
ucTemp=ulNumberTemp%100000/10000;
p_ucBCD_bit4[2]=p_ucBCD_bit4[2]+ucTemp; //后半4位存第5位组合BCD码
p_ucBCD_bit4[1]=ulNumberTemp%10000/1000;
p_ucBCD_bit4[1]=p_ucBCD_bit4[1]<<4; //前半4位存第4位组合BCD码
ucTemp=ulNumberTemp%1000/100;
p_ucBCD_bit4[1]=p_ucBCD_bit4[1]+ucTemp; //后半4位存第3位组合BCD码
p_ucBCD_bit4[0]=ulNumberTemp%100/10;
p_ucBCD_bit4[0]=p_ucBCD_bit4[0]<<4; //前半4位存第2位组合BCD码
ucTemp=ulNumberTemp%10;
p_ucBCD_bit4[0]=p_ucBCD_bit4[0]+ucTemp; //后半4位存第1位组合BCD码
}
这句怎么解释啊!!!求教!!!
p_ucBCD_bit4[3]=ulNumberTemp%100000000/10000000; //4个字节最大值表示
那就无须这么麻烦
做数字钟时单片机内部的ram用不完
我是6位的
那就一位用一个ram单元
根本不需要去做什么16进制到bcd的转换
这样搞不是自己跟自己过不去嘛
一周热门 更多>