单片机C51课程设计 16进制转为10进制 51单片机C语言里 怎样将16进制 直接化成 10进制

\u5355\u7247\u673aC51\u4e2d16\u8fdb\u5236\u8f6c10\u8fdb\u5236\u7684\u95ee\u9898

unsigned char i,m
i=hex/10;
m=hex%10;
\u5176\u4e2dhex\u4e3a\u4f60\u5b58\u653e\u5341\u516d\u8fdb\u5236\u7684\u53d8\u91cf
i\u4e3a\u5341\u8fdb\u5236\u7684\u5341\u4f4d
m\u4e3a\u5341\u8fdb\u5236\u7684\u4e2a\u4f4d \u5373\u662fshi=dd/10;ge=dd%10\u8fd9\u6837\u7b97\uff0c\u81ea\u5df1\u53ef\u4ee5\u8c03\u8bd5\u770b\u770b

\u6211\u8fd9\u513f\u6709\u4e00\u4e2a\u8fdb\u5236\u8f6c\u6362\u7684\u7a0b\u5e8f\uff0c\u4f60\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b\uff1a
#include
#include
#include
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=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("\u8bf7\u8f93\u5165\u4e00\u4e2a\u5341\u8fdb\u5236\u6570a= ");
scanf("%d",&a);
printf("\u8bf7\u8f93\u5165\u4e00\u4e2a\u8fdb\u5236\u6570n= ");
scanf("%d",&n);
if(n==16)q=tentoBOH(a,n);
else p=tentoBOH(a,n);
printf("\u8f93\u51fa\u6b63\u6574\u6570%d\u7684%d\u8fdb\u5236\u4e3a\uff1a",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\u8bf7\u8f93\u5165\u5b57\u7b26\u4e32str= ");
scanf("%s",str);
printf("\n\u8bf7\u8f93\u5165\u8be5\u5b57\u7b26\u4e32\u7684\u8fdb\u5236m= ");
scanf("%d",&m);
printf("\n\u8be5%d\u8fdb\u5236\u6570%s\u8f6c\u6362\u6210\u5341\u8fdb\u5236\u6570\u4e3a\uff1a%d\n",m,str,BOHtoTen(str,m));
}

转换当然用除10000得到万位再减去万位,同理利用上面的数得到千位,百位十位最后的余数就是个位。
抽取后四位难道不是与下0XFFFF搞定吗
延迟两秒的话可以用每次按键启动或刷新一个定时器来搞定,至于是在中断服务程序内搞还是仅仅做个标记就看情
现在情况是你能显示数字了,那么你就应该能得到输入的数字了吧。(方便起见就不用输入来触发中断了)程序主循环结构是:1、定时扫描输入I/O状态,定时的作用就是用来做防颤处理的,在间隔几毫秒的过程后,如果按键状态还是变化了,才表示实际按动过了。2、上面如果检测到有变化,则将定时器的数字清零,在这个定时器的服务程序里执行将一个标志置位。然后再执行内存中输入数字的变化,和显示的内容。3、判断是否有定时器中断触发的标志,有的话就执行将数转换成BCD码(就是转换成10进制数)的过程,并显示出来。如此就完成了。
至于定时器中断怎样搞,和汇编相比,更简单了,直接初始化定时器的特殊定时器,再在程序里定义中断服务程序就好了。我估计你的输入数字还没能整理,那样的话在上面的第2步里,的第二个操作中先将原数乘16,再加上后来添的数就OK了,显示的话直接对这个数进行处理就好了。

#include <AT89X52.H>unsigned char Get_Key;unsigned char Dis[4]={0xff,0xff,0xff,0xff}; unsigned char Seg;unsigned char Delay;unsigned int Conut;unsigned char code disp_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void scanf(void){unsigned char recode,j;P1=~(0x01<<Seg); //行扫描recode=P1>>4; //读取列 if(recode<0x0f) //判断是否有键按下 { if(++Delay>2) Delay=3; if(Delay==2) //延时去抖动 16ms { if(Conut==0) { Dis[0]=Dis[1]=Dis[2]=Dis[3]=0xff; } Conut=1000; for(j=0;j<4;j++){if(!(recode&0x01<<j))break;}//判断按键所在列 Get_Key=(Seg<<2)+(j+1); //键值 1-16 } } P1=0xf0; if(P1==0xf0) //判断按键是否松开 Delay=0;}

void InitTimer0(void) //2ms{ TMOD = 0x01; TH0 = 0xF8; TL0 = 0x30; EA = 1; ET0 = 1; TR0 = 1;}
void getdec(void){unsigned char i;unsigned int temp; for(i=0;i<4;i++) { if(Dis[3]==0xff) { Dis[3]=Dis[2]; Dis[2]=Dis[1]; Dis[1]=Dis[0]; Dis[0]=0; } } temp=Dis[3]+Dis[2]*16+Dis[1]*256+Dis[0]*4096; Dis[0]=temp/1000; Dis[1]=temp%1000/100; Dis[2]=temp%100/10; Dis[3]=temp%10; for(i=0;i<4;i++) { if(Dis[i]==0) Dis[i]=0xff; else break; }}
void Timer0Interrupt(void) interrupt 1{ TH0 = 0xF8; TL0 = 0x30; Seg=(++Seg)&0x03; P3=0x01<<Seg; //位选 if(Dis[Seg]!=0xff) P2=disp_code[Dis[Seg]]; //显示数据 else P2=0xff; scanf(); //按键扫描 if(Conut)Conut--; if(Conut==1)getdec();}
main(void){unsigned char i;InitTimer0(); while(1) { if(Get_Key) { for(i=3;i>0;i--) //显示数据移动 { Dis[i]=Dis[i-1]; } Dis[0]=Get_Key-1; Get_Key=0; } }}

扩展阅读:单片机c51毕业设计题目 ... 51单片机秒表课程设计 ... 51单片机课程毕业设计 ... 为什么不建议学单片机 ... 51单片机课程设计csdn ... 基于51单片机设计题目 ... c51单片机课程设计报告 ... 单片机简单设计作品 ... 51单片机课程设计电子琴 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网