//寫串口終端函數---將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',因爲string從0開始最後一個元素下腳碼=字符數組長度-1
if(lastIndex<0)
return -1;
if( string[lastIndex]=='h' || string[lastIndex]=='H' ) //hex:16進制
{
base=16; //如果末尾爲H h則爲16進制
string[lastIndex]=0; //最後的符號H或h
用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,比較string2與string,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''''); //回車換行
}