1. 51单片机C语言里 怎样将16进制 直接化成 10进制
我这儿有一个进制转换的程序,你可以参考一下:
#include<stdio.h>
#include<math.h>
#include<string.h>
int count=0;
void *tentoBOH(int a,int n)
{
int t,i=0,j,str[50],*p;
char str1[50],*q,temp;
while(a!=0)
{
t=a%n;
if(n==16)
{
if(t<=9&&t>=0)str1[i++]=(char)('0'+t);
if(t>9&&t<16)str1[i++]=(char)('A'-10+t);
}
else
str[i++]=t;
a=a/n;
count++;
}
for(i=0,j=count-1;i<count/2;i++,j--)
{
t=str[i];
str[i]=str[j];
str[j]=t;
temp=str1[i];
str1[i]=str1[j];
str1[j]=temp;
}
if(n==16)
return q=str1;
else
return p=str;
}
int BOHtoTen(char str[],int n)
{
int len,i,a=0;
char t;
len=(int)strlen(str);
for(i=0;i<len/2;i++)
{
t=str[i];
str[i]=str[len-1-i];
str[len-1-i]=t;
}
i=0;
while(str[i]!='\0')
{
if(str[i]>='0'&&str[i]<='9')
a+=(str[i]-'0')*(int)pow(n,i);
if(str[i]>='a'&&str[i]<='f')
a+=(str[i]-'a'+10)*(int)pow(n,i);
if(str[i]>='A'&&str[i]<='F')
a+=(str[i]-'A'+10)*(int)pow(n,i);
i++;
}
return a;
}
void main()
{
int a,i,n,m,*p;
char *q,str[20];
printf("请输入一个十进制数a= ");
scanf("%d",&a);
printf("请输入一个进制数n= ");
scanf("%d",&n);
if(n==16)q=tentoBOH(a,n);
else p=tentoBOH(a,n);
printf("输出正整数%d的%d进制为:",a,n);
if(n==16)
for(i=0;i<count;i++)
printf("%c",*(q+i));
else
for(i=0;i<count;i++)
printf("%d",*(p+i));
printf("\n请输入字符串str= ");
scanf("%s",str);
printf("\n请输入该字符串的进制m= ");
scanf("%d",&m);
printf("\n该%d进制数%s转换成十进制数为:%d\n",m,str,BOHtoTen(str,m));
}
2. 单片机程序中十进制转换成十六进制
display_number((bValue & 0xf0) >> 4
右移四位
其实就是 除以16
所以是的
左移1位 乘以2 右移1位 除以2
3. 51单片机10进制转16进制
十进制还是十六进制只是一个表述当时,你直接赋值就行。比如十进制K1=11;十六进制的话就是K=20x0b;这样K1=K2,不用转换的
4. 关于51单片机字符串转换成16进制
首先判断是数字还是字母,如果是数字,那么减0x30(0的ASCII),如果是字母,那么减0x41(A的ASCII),减完后,将两个数组合起来就可以了,第一个数放高四位,第二个数放低四位。
5. 单片机C语言中小数的十六进制数怎么表示
浮点数没有16进制的表达方式,只有整数类型有。
整型常量有3种表示方式:
①十进制整数。例如,123、一456、0。
②八进制整数。以0开头的整数是八进制数。例如,0123表示8进制数123<8),等于十进制数83。
③十六进制整数。以ox或0x开头的整数是十六进制数。例如,0x1.23或0Xl 23表示十六进制数123…),等于十进制数291。
如果在整型常量后面加上字母u或u,则表示无符号整数(unsigned int)。例如,123U或123u是unsigned int型的。如果在整型常量后面加上一个字母L或l,则表示长整数(10ngint)。例如,123[.或123l是long int型的。
6. 单片机IO口十六进制问题
单片机IO口十六进制 比如
P2=0x01 对应 P2^0=1
P2=0x02 对应 P2^1=1
P2=0x04 对应 P2^2=1
P2=0x08 对应 P2^3=1
P2=0x10 对应 P2^4=1
P2=0x20 对应 P2^5=1
P2=0x40 对应 P2^6=1
P2=0x80 对应 P2^7=1
P2=0x11 对应 P2^4=1 与 P2^0=1
P2=0xff 对应 P2^7=1 与 P2^6=1、P2^5=1、P2^4=1、P2^3=1、P2^2=1、P2^1=1、P2^0=1
7. 怎么将单片机发来的数据变为16进制
题意不明,不知道您想问的意思。
比如:
何为“发来的”数据?通过什么途径“发来”?按照什么格式“发来”?这里就有千差万别的不同,您的问题是哪一种?
还有:
“变为16进制”是用来显示或打印?还是数据存储?
如果是显示或打印,则取决于您的程序语言。例如C语言的printf函数中的格式符%X,就是16进制格式显示或打印的。
如果是数据存储,那就糊涂了。因为数据存储归根结底只能是二进制,所谓“按其它进制存储”,只不过是一种代表方式而已。例如“按十进制存储”就有BDC码形式和ASCII码的字符串形式等等,但这些形式其实只是用几个二进制位代表一个十进制位而已,归根结底仍是以二进制位为基础的存储形式。
而16进制和十进制不同。十进制与二进制之间的对应关系并不直接,所以需要规定一定的“代表”方式。而16进制与二进制之间的对应关系非常直接,所以不需要特别规定如何“代表”十六进制的一个位,直接按二进制原封不动存放,在各种内存观察的工具中就可以直接看到十六进制形式了。例如DOS下的DEBUG,就是如此。所以说“按16进制存放”的概念是毫无意义的概念。
8. 单片机十六进制如何转成二进制数
单片机十六进制和二进制数,不用转换,计算机内的数据都是以二进制保存的。几进制数,只是以不同的方式来显示。本质上是一样的。
如果一定要转换,具体参考如下:
unsigned char num; //定义一个8位数
if(num&(1<<n))
...;//num 的第N位是1
else
...;//num 的第N位是0
当然可以放在一个循环里面;
for(unsigned char i=0;i<8;i++) {
if(num&(1<<n))
...;//num 的第N位是1
else
...;//num 的第N位是0
}
9. 51单片机16进制编程
如果是ASCII码表内的符号值,那么ASCII值本身就可以认为是 16进制的(因为进制只是给人看的,单片机只有2进制,没有ASCII 和 Hex 之分),但如果是Hex值,经过ASCII发送后,需要接收解出数值,那么可以用这个函数:
uchar ASCII_ToHex(uchar ascii_data) //ASCII 转 Hex 函数
{
uchar hex_data=0; //定义 Hex变量存储转换结果
if(ascii_data>='0' && ascii_data<='9') hex_data=ascii_data-'0'; //若 转换内容为 字符'0-9',则转成对应数字0-9
else if(ascii_data>='a' && ascii_data<='f') hex_data=ascii_data-'a'+10; //若 转换内容为 字符'a-f',则转成数字10-15
else if(ascii_data>='A' && ascii_data<='F') hex_data=ascii_data-'A'+10; //若 转换内容为 字符'A-F',则转成数字10-15
return hex_data; //返回转换结果,非以上字符,不在Hex(0-F)范围内,默认0
}//