AT89S51 8位单片机 如何处理16位二进制数
具体要求是将16位二进制数转化为五位十进制数然后显示在五位八段码上提供给我一个思路或者说明这样到底能不能做各位你们的答案都是在已经将二进制成功转化为十进制的前提上提出来的...
具体要求是将16位二进制数转化为五位十进制数 然后显示在五位八段码上
提供给我一个思路 或者说明这样到底能不能做
各位 你们的答案都是在已经将二进制成功转化为十进制的前提上提出来的 而我想问的就是这个 你们却都避而不答 问题在于累加器A只能计算8位二进制数 而我要处理的数字是16位的二进制数 我不会的在这里 展开
提供给我一个思路 或者说明这样到底能不能做
各位 你们的答案都是在已经将二进制成功转化为十进制的前提上提出来的 而我想问的就是这个 你们却都避而不答 问题在于累加器A只能计算8位二进制数 而我要处理的数字是16位的二进制数 我不会的在这里 展开
4个回答
展开全部
我的想法是提取出5位数中的各个位。例如变量temp=65535,万位=temp/10000;千位=(temp/1000)%10,百位=(temp/100)%10,十位=(temp/10)%10,各位=temp%10。
然后将各个位送到数码管显示函数。
补充个:
楼主的意思是这个16位二进制数不是内部定义,而是从其他器件分两次接收到的吗?如果是的话,可以这样子做。
typedef union
{
unsigned int hex;
unsigned char octal[2];
} CONVERT;
CONVERT example;
把接收到的两个8位二进制数分别存入example.octal[0]、example.octal[1]。然后用example.hex这个完整的16位二进制数来求得对应的十进制数的各个位。只是这样子做需要注意存储格式,即大端和小端。
呵呵,如果我的猜测是错的话,那我也只能说是江郎才尽了。
然后将各个位送到数码管显示函数。
补充个:
楼主的意思是这个16位二进制数不是内部定义,而是从其他器件分两次接收到的吗?如果是的话,可以这样子做。
typedef union
{
unsigned int hex;
unsigned char octal[2];
} CONVERT;
CONVERT example;
把接收到的两个8位二进制数分别存入example.octal[0]、example.octal[1]。然后用example.hex这个完整的16位二进制数来求得对应的十进制数的各个位。只是这样子做需要注意存储格式,即大端和小端。
呵呵,如果我的猜测是错的话,那我也只能说是江郎才尽了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
万位数=16位二进制数/10000;
千位数=16位二进制数%10000*10/10000;
百位数=16位二进制数%10000*10%10000*10/10000;
十位数=16位二进制数%10000*10%10000*10%10000*10/10000;
个位数=16位二进制数%10000*10%10000*10%10000*10%10000*10/10000;
剩下的显示应该就不用说了吧,根据你的电路调数组里的值就行了
你用的是汇编啊,头大!那就分开除啊,例如100/10=(50+50)/10=50/10+50/10,明白我的意思了没?只是在这里最后的结果可能不是太准确,思路告诉你了,加油吧!
千位数=16位二进制数%10000*10/10000;
百位数=16位二进制数%10000*10%10000*10/10000;
十位数=16位二进制数%10000*10%10000*10%10000*10/10000;
个位数=16位二进制数%10000*10%10000*10%10000*10%10000*10/10000;
剩下的显示应该就不用说了吧,根据你的电路调数组里的值就行了
你用的是汇编啊,头大!那就分开除啊,例如100/10=(50+50)/10=50/10+50/10,明白我的意思了没?只是在这里最后的结果可能不是太准确,思路告诉你了,加油吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考一下我的这个子程序吧.
adjusttobcd: mov a,voll ;adjust hex data(volh and voll) to decimal data
mov b,#100
div ab
add a,volh
mov volh,a
jnc adjustcarry1
inc volint
inc volint
mov a,#56
add a,volh
mov volh,a
adjustcarry1: MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
mov voll,a
mov a,volh
mov b,#100
div ab
add a,volint
mov volint,a
mov a,#10
xch a,b
div ab
swap a
orl a,b
mov volh,a
RET
adjusttobcd: mov a,voll ;adjust hex data(volh and voll) to decimal data
mov b,#100
div ab
add a,volh
mov volh,a
jnc adjustcarry1
inc volint
inc volint
mov a,#56
add a,volh
mov volh,a
adjustcarry1: MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
mov voll,a
mov a,volh
mov b,#100
div ab
add a,volint
mov volint,a
mov a,#10
xch a,b
div ab
swap a
orl a,b
mov volh,a
RET
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询