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'''');              //回車換行
}

發佈了33 篇原創文章 · 獲贊 3 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章