Chinaunix首页 | 论坛 | 博客
  • 博客访问: 973833
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类:

2009-10-11 19:00:40

//写串口终端函数---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]))
           |           {
           |               if(isupper(string[i]))
           |                       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'''');              //回车换行
}
阅读(1011) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~