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]; 个位
这样的算法 我写的不行 ,请高手写下 ,我看下我的出错在什么地方
如果用移位指令的话程序又怎么写?
展开
 我来答
hychyc_2008
推荐于2017-10-06 · TA获得超过9741个赞
知道大有可为答主
回答量:1099
采纳率:100%
帮助的人:679万
展开全部
下面举例说明万千百十个的表示方法。其实很简单,用除法取余就行。

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进制运算。你这个是十进制。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wenqing8585
推荐于2017-09-02 · TA获得超过8252个赞
知道大有可为答主
回答量:8078
采纳率:70%
帮助的人:3863万
展开全部
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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友dd47adc
2010-01-30
知道答主
回答量:26
采纳率:0%
帮助的人:23.9万
展开全部
比较简单的办法就是用/和%
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等,无法实现十进制数的运算。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式