本文共 1394 字,大约阅读时间需要 4 分钟。
1、原来关于keil的DeBug的printf用法,其实并没有像当初写那样麻烦。
只是需要 TI = 1; 再加上 stdio.h 就行了。2、unsigned long 最大可达42亿,10位。
BCD码,感觉以前没怎么在意,其实用的也最多了。
实际上就是4位二进制数构成0-9的1位十进制数,取值范围0000 ~ 1001。
eg: 十进制的12,8421BCD表示为0001 0010, 而=二进制数为18。
#include#include unsigned char buf[10];void LongToBCD(unsigned long x){ buf[0] = x % 10; buf[1] = x/10 % 10; buf[2] = x/100 % 10; buf[3] = x/1000 % 10; buf[4] = x/10000 % 10; buf[5] = x/100000 % 10; buf[6] = x/1000000 % 10; buf[7] = x/10000000 % 10; buf[8] = x/100000000 % 10; buf[9] = x/1000000000 % 10;}void main(){ unsigned long x = 1234567890; TI = 1; LongToBCD(x); while(1);}
哦,对了。。还有BCD的一个知识点,
一般时钟芯片里面的都是BCD码存储格式,要把对应的BCD码转化成ASCII只需要加上0x30或者,’0’,就可以了。格雷码是一种无权码,可靠性比有权码高!
没有权,换言之就是我们不能一下子看出来等于几了。下面为二进制和格雷码的算法转换思路。(学习一波)
#include#include unsigned long DecToGray(unsigned long x) //十进制数转换为格雷码{ return x^(x>>1);}unsigned long GrayToDec(unsigned long x) //格雷码转换为十进制数{ unsigned long y=x; while(x>>=1) { y ^= x; } return y;}void main(){ unsigned char i; unsigned long x, y; TI = 1; for(i=0; i<100; i++) { x = DecToGray(i); printf("格雷码:%ld ", x); y = GrayToDec(x); printf("十进制:%ld \n", y); } while(1);}
总结一下转换思路:
十进制数转换为格雷码,是十进制对应的二进制数右移一位后,再与自身进行异或运算。
格雷码转换为十进制数为: 格雷码不断右移,然后和自身进行异或运算直到自身右移到0。
转载地址:http://imnaf.baihongyu.com/