Uart_GetString / Uart_GetIntNum / WrUart / atoi / isalpha

//写串口终端函数---ARM内核接收到的字母回写到终端里
void WrUart(unsigned char WriteData)
{
 if(WriteData=='/r')       //
如果是换行符,则回车
 {
     while(!(rUTRSTAT0 & 0x2));     //rUTRSTAT0[1]=0(The buffer register is not empty)
原地等待

     Delay(10);        //
延时,超级终端显示速度慢
     rUTXH0 = '/n';
 }
 while(!(rUTRSTAT0 & 0x2));         //rUTRSTAT0[1]=1(Tx buffer empty)
向下执行

 Delay(10);
 rUTXH0 = WriteData;                 //
将向终端写入的WriteData回显到终端
}

 

*************************************

//函数功能将串口接收到的字符串根据形式(进制)转换为int数据返回

*************************************


int Uart_GetIntNum(void)
{
    char str[30];     
    char *string=str;   //
定义指向str数组的指针
    int base=10;
    int minus=0;
    int lastIndex;
    int result=0;
    int i;
   
    Uart_GetString(string);  //
接收定符串
   
    if(string[0]=='-')     //
判断输入数是否为负数

    {
        minus=1;        
        string++;
    }
   
    if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))   //
判断是否是十六进制数
    {
 base=16;
 string+=2;       //0x两个字符移动两位
    }
   
    lastIndex=strlen(string)-1;    //
最后一个索引不包含'/0',因为string0开始最后一个元素下脚码=字符数组长度-1

 

if(lastIndex<0)
        return -1;

    if( string[lastIndex]=='h' || string[lastIndex]=='H' )  //hex16进制
    {
          base=16;                  //
如果末尾为H h则为16进制
          string[lastIndex]=0;  //
最后的符号Hh 0代替
          lastIndex--
    }                                                                                                         //
str指向的字符串转换成一个整数值

    if(base==10)        // 如果输入的是10进制                                        int atoi (const char *str)
    {                                                                                                         {    
         result=atoi(string);    //
将字符串string每个元素都转换成整数值                   int i,j=0;
         result=minus ? (-1*result):result;   //minus表示负,将结果转换为正 
        for(i=0;str[i]!='/0';i++)
    }                                                                                                                     {
    else     //
如果输入的不是10进制                                                                              j=j*10+(str[i]-'0');
    {                                                                                                                      }
          for(i=0;i<=lastIndex;i++)                                                                         return j;
          {    

           |      _________________                                                                                                  }
           |       if(isalpha(string[i]))    //当string[i]为英文字母a-z或A-Z时返回非零值,否则返回零
           |           {
           |               if(isupper(string[i])) //当string[i]为大写英文字母(A-Z)时返回非零值,否则返回零
           |                       result=(result<<4)+string[i]-'A'+10;
           |               else
           |                       result=(result<<4)+string[i]-'a'+10;
           |           }

           |
           |        else
           |           {
           |               result=(result<<4)+string[i]-'0';
           |           }

           |        -------------------------                  

           }
           result=minus ? (-1*result):result;
    }
    return result;
}     //
}与函数定义配对

 

 

************************************

void Uart_GetString(char *string)    //该函数具有回送功能
{
    char *string2 = string;
    char c;   //c
为输入的数字

    while((c = Uart_Getch())!=''''/r'''')

    {          //如果不是回车//

        if(c==''''/b'''')                          

        {     //如果是退格//
            if( (int)string2 < (int)string )    //
刚开始时string2=string设为=0x40,比较string2string,if()不成立执行else srting++
            {                                              //
string=0x41(string2=0x40),此时若c='/b'再比较if条件成立,实现退格。
                Uart_Printf("/b /b");
                string--;
            }
        }
        else       //
如果 c !='/r'!='/b'   //

        {
            *string++ = c;
            Uart_SendByte(c);
        }
    }
    *string=''''/0''
    Uart_SendByte(''''/n'''');              //回车换行
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值