51单片机怎样从一个非常大的数字里面提取个十百千万位等......
前面我定义乐个数组ucharcodetable[]={0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5...
前面我定义乐个数组
uchar code table[]={
0xC0, /*0*/
0xF9, /*1*/
0xA4, /*2*/
0xB0, /*3*/
0x99, /*4*/
0x92, /*5*/
0x82, /*6*/
0xF8, /*7*/
0x80, /*8*/
0x90, /*9*/
};
采集到一组方波是个数,用 I 表示 ,假如 I=999999
我要把相应的位用P0口送到数码管显示
程序里面的提取算法怎么写?
如当I<10的时候 P0=table[i/10]; 个位
这样的算法 我写的不行 ,请高手写下 ,我看下我的出错在什么地方
如果用移位指令的话程序又怎么写? 展开
uchar code table[]={
0xC0, /*0*/
0xF9, /*1*/
0xA4, /*2*/
0xB0, /*3*/
0x99, /*4*/
0x92, /*5*/
0x82, /*6*/
0xF8, /*7*/
0x80, /*8*/
0x90, /*9*/
};
采集到一组方波是个数,用 I 表示 ,假如 I=999999
我要把相应的位用P0口送到数码管显示
程序里面的提取算法怎么写?
如当I<10的时候 P0=table[i/10]; 个位
这样的算法 我写的不行 ,请高手写下 ,我看下我的出错在什么地方
如果用移位指令的话程序又怎么写? 展开
3个回答
展开全部
下面举例说明万千百十个的表示方法。其实很简单,用除法取余就行。
i=a/b ;//取商
i=a%b;//取余
方法很多,以下是一例:
unsigned int wan,qian,bai,shi ,ge,
wan=i/10000;//除一万取商,是万位。
qian=(i/1000)%10;//先除1000,取商,商的个位是千位,所以再除10 取余。
bai=(i%100)/10%10;//先除100,取商,商的个位是百位,所以再除10 取余。
shi=(i%100)/10;//先除100,取余,商再除10 取余。
ge==(i%10;//除10取余。
不过阁下要知道整形量最大是65535,假如你的数据达到999999,你就要定义长整形量了。
unsigned long int i=999999;
如当I<10的时候 P0=table[i/10]; 个位
这样的算法 我写的不行 ,请高手写下 ,我看下我的出错在什么地方
i/10是取商啊,怎么可能是个位呢?是十位。I<10的话,一定是0了。
移位的方法不行,移位是2进制运算。你这个是十进制。
i=a/b ;//取商
i=a%b;//取余
方法很多,以下是一例:
unsigned int wan,qian,bai,shi ,ge,
wan=i/10000;//除一万取商,是万位。
qian=(i/1000)%10;//先除1000,取商,商的个位是千位,所以再除10 取余。
bai=(i%100)/10%10;//先除100,取商,商的个位是百位,所以再除10 取余。
shi=(i%100)/10;//先除100,取余,商再除10 取余。
ge==(i%10;//除10取余。
不过阁下要知道整形量最大是65535,假如你的数据达到999999,你就要定义长整形量了。
unsigned long int i=999999;
如当I<10的时候 P0=table[i/10]; 个位
这样的算法 我写的不行 ,请高手写下 ,我看下我的出错在什么地方
i/10是取商啊,怎么可能是个位呢?是十位。I<10的话,一定是0了。
移位的方法不行,移位是2进制运算。你这个是十进制。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
51单片机支持用C语言,所以我使用C语言写一种提取的方法:
unsigned int number; /* 代表那个非常大的数字 */
unsigned char ge,shi,bai,qian,wan; /* 代表提取结果:个,十,百,千,万 */
ge = (unsigned char)(number%10);
shi = (unsigned char)((number/10)%10);
bai = (unsigned char)((number/100)%10);
qian = (unsigned char)((number/1000)%10);
wan = (unsigned char)((number/10000)%10);
unsigned int number; /* 代表那个非常大的数字 */
unsigned char ge,shi,bai,qian,wan; /* 代表提取结果:个,十,百,千,万 */
ge = (unsigned char)(number%10);
shi = (unsigned char)((number/10)%10);
bai = (unsigned char)((number/100)%10);
qian = (unsigned char)((number/1000)%10);
wan = (unsigned char)((number/10000)%10);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
比较简单的办法就是用/和%
shiwan=I/100000;
wan=I%100000/10000;
qian=I%10000/1000;
bai=I%1000/100;
shi=I%100/10;
ge=I%10;
小于10的时候,可以写成 P0=table[I%10];
移位指令只能是除以2,4,8,16等,无法实现十进制数的运算。
shiwan=I/100000;
wan=I%100000/10000;
qian=I%10000/1000;
bai=I%1000/100;
shi=I%100/10;
ge=I%10;
小于10的时候,可以写成 P0=table[I%10];
移位指令只能是除以2,4,8,16等,无法实现十进制数的运算。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询