用C语言写啊
C语言的INT型就是16位的,不用转换
unsigned int a=12345;
for(i=0;i<5;i++)
{
//先从个位开始显示
display(i,a%10);//假设在第i位显示一个数的函数是display(i,什么);
a/=10;
}
我的想法是提取出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位二进制数/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,明白我的意思了没?只是在这里最后的结果可能不是太准确,思路告诉你了,加油吧!
参考一下我的这个子程序吧.
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