单片机c语言求解解决方案
单片机c语言求解
下面这个程序是一个不完整的程序,我是想知道问什么我触发了swith里面的b,结果我12864上显示的不是二进制而是一个0这是怎么回事?sumsz是一个uchar型的全局变量
char *itoa(int num,char *str,int radix)
{
/* 索引表 */
char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
uint unum; /* 中间变量 */
// unum=(unsigned)num;
int i=0,j,k=0;
do
{
str[i++]=index[unum%(unsigned)radix];
unum/=radix;
}
while(unum);
str[i]='\0';
/* 将原来的“/2”改为“/2.0”,保证当num在16~255之间,radix等于16时,也能得到正确结果 */
for(j=k;j<=(i-1)/2+k;j++)
{
num=str[j];
str[j]=str[i-j-1+k];
str[i-j-1+k]=num;
}
strcpy(sumsz,str);
return str;
}
/**********************运算程序******************************/
void yuans() //运算函数
{
uchar i,j,temp1;
uchar xdata ch[30];
// uint m;
switch(sym)
{
case 'h':sprintf(sumsz,"%x",(int)number1);break; //两数相加
case 'o':sprintf(sumsz,"%o",(int)number1);break; //两数相减
case 'b':itoa((int)number1,ch,2);break; //两数相乘
case '/':number1/=number2;break; //两数相除
}
//
j=strlen(sumsz);
write_com(0x88);
for(i=0;i<j;i++) //显示结果
{
/* if(sumsz[i]=='.')
{
flag1=1;
}
if(flag==1)
{*/
//temp1=sumsz[i];
//write_data(temp1);
//delay(10);
//}
//else
temp1=sumsz[i];
write_data(temp1);
delay(10);
}
//number2=0;
}
------解决方案--------------------
这种问题可以单步找的,不知道你用的下载器支不支持单步调试的。
不行的话,用串口调试,把变量的值,发到串口助手上看。
下面这个程序是一个不完整的程序,我是想知道问什么我触发了swith里面的b,结果我12864上显示的不是二进制而是一个0这是怎么回事?sumsz是一个uchar型的全局变量
char *itoa(int num,char *str,int radix)
{
/* 索引表 */
char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
uint unum; /* 中间变量 */
// unum=(unsigned)num;
int i=0,j,k=0;
do
{
str[i++]=index[unum%(unsigned)radix];
unum/=radix;
}
while(unum);
str[i]='\0';
/* 将原来的“/2”改为“/2.0”,保证当num在16~255之间,radix等于16时,也能得到正确结果 */
for(j=k;j<=(i-1)/2+k;j++)
{
num=str[j];
str[j]=str[i-j-1+k];
str[i-j-1+k]=num;
}
strcpy(sumsz,str);
return str;
}
/**********************运算程序******************************/
void yuans() //运算函数
{
uchar i,j,temp1;
uchar xdata ch[30];
// uint m;
switch(sym)
{
case 'h':sprintf(sumsz,"%x",(int)number1);break; //两数相加
case 'o':sprintf(sumsz,"%o",(int)number1);break; //两数相减
case 'b':itoa((int)number1,ch,2);break; //两数相乘
case '/':number1/=number2;break; //两数相除
}
//
j=strlen(sumsz);
write_com(0x88);
for(i=0;i<j;i++) //显示结果
{
/* if(sumsz[i]=='.')
{
flag1=1;
}
if(flag==1)
{*/
//temp1=sumsz[i];
//write_data(temp1);
//delay(10);
//}
//else
temp1=sumsz[i];
write_data(temp1);
delay(10);
}
//number2=0;
}
------解决方案--------------------
这种问题可以单步找的,不知道你用的下载器支不支持单步调试的。
不行的话,用串口调试,把变量的值,发到串口助手上看。