您的位置:首页 > 其它

单片机浮点数输入显示程序

2008-05-19 17:07 495 查看
void InputDecimal(uchar x,uchar y,uchar uIntegerLen,uchar uDecimalLen,float * fData,unsigned int Address){  int j; uchar i; CurFlash(CurX,CurY,0); CheckData=(float)(*fData);//将原来的值写入警告窗口值 if(bKeyOK==0) return; //没有按键,返回 if(!(keyvector>=NUM0 && keyvector<=NUM9 || keyvector==PAGEDN ||      keyvector==BLANK||keyvector==DELETE  ))  return; //不是数字键,不是删除键,不是小数点,不是删除键,返回 //剩下的是数字键,小数点键,删除键,负号键  if(uEnterEdit==0)// 刚刚进入状态  {     *fData=0;   uDotOn=0;   uEnterEdit=1;   bNegativeKey=0;   CurX=x;   CurY=y;   for(i=0;i<6;i++)     KeyDecimal[i]='/0';     }   j=abs((int)*fData);   if(keyvector>=NUM0 && keyvector<=NUM9) {       if(uDotOn==0)//还没有按小数点,仍是编辑整数部分  {    uEnterEdit=2;   if(WeiShu(j)<uIntegerLen)//还没有超出范围   {    j=j*10+keyvector-48;     //uEnterEdit=2; //标志已经按了数字键    if(j>0)     uEnterEdit=3;   }  }  else if(uDotOn>=1 && uDotOn<=uDecimalLen)//编辑小数部分,且小数部分仍在范围内  {   KeyDecimal[uDotOn]=keyvector;   uDotOn++;   //uEnterEdit=2;    }  else  ;     } else if(keyvector==PAGEDN) {  //uEnterEdit=2;  if(j==0 && uDotOn==0) //只有整数部分是0并且还没有输入小数点时才能输入负号   bNegativeKey=1; } else if(keyvector==BLANK)//小数点 {    if(uDotOn==0)//只有小数点还没有输入的时候才能输入小数点  { uDotOn=1;KeyDecimal[0]='.';   if(uEnterEdit==1)    uEnterEdit=2;    }  } else if(keyvector==DELETE)//删除键 {   if(uDotOn>=1)//还有小数部分或者有小数点  {    uDotOn--;   KeyDecimal[uDotOn]='/0';      }   else//有整数部分或者还有负号   {   if(j==0)//整数部分为0   {    if(bNegativeKey==1)//还有负号    {     if(uEnterEdit>=2)//整数部分还有0      {       uEnterEdit=1;              }           else       {          bNegativeKey=0;       uEnterEdit=0;       }         }    // if(bNegativeKey==1)//还有负号   //  bNegativeKey=0;   }   else //整数部分不为0   {      j=j/10;//删除整数部分最后一位     if(j==0)      uEnterEdit=1;   }          }//有整数部分或者还有负号 }//删除键  if(bNegativeKey==1) j=j*(-1);  /***************以下为显示部分***********************/ Line(x+17, CurY-1, x+17, CurY, BLUE, BLUE);  //清理光标痕迹  for(i=0;i<=uIntegerLen+uDecimalLen+1;i++)  DispStr(x, y+i, BLUE, INDIGO, " "); i=WeiShu(j);   if(bNegativeKey==0) {    if(uDotOn==0)    {     //sprintf(dispmem, "%d", (int)(j));   //DispStr(x,y, BLUE, WHITE, dispmem);   ShowInt(x,y,WHITE,j);   CurY=y+i;    }    else    {   //sprintf(dispmem, "%d", (int)(j));   //DispStr(x,y, BLUE, WHITE, dispmem);   ShowInt(x,y,WHITE,j);   if(j==0)    {DispStr(x,y+1, BLUE, WHITE, KeyDecimal);CurY=y+1+uDotOn;}   else    {DispStr(x,y+i, BLUE, WHITE, KeyDecimal); CurY=y+i+uDotOn;}      }  } else//负数 {    if(uDotOn==0)  {   if(j==0)   {     if(uEnterEdit==2 )      {DispStr(x, y, BLUE, WHITE, "-0");CurY=y+2;}    else if (uEnterEdit==1 )     {DispStr(x, y, BLUE, WHITE, "-");CurY=y+1;}     else;     //if(uIntegerZero==0)    // {DispStr(x, y, BLUE, INDIGO, "-0");CurY=y+2;uIntegerZero=1;}    //else     // {DispStr(x, y, BLUE, INDIGO, "-");CurY=y+1;}    }    else    {       //sprintf(dispmem, "%d", (int)(j));    //DispStr(x,y, BLUE, WHITE, dispmem);    ShowInt(x,y,WHITE,j);    CurY=y+i;     }   }  else  {   if(j==0)   {    if(uEnterEdit==1 )      {DispStr(x, y, BLUE, WHITE, "-");CurY=y+1;}    else if (uEnterEdit==2 )     {DispStr(x, y, BLUE, WHITE, "-0");CurY=y+2;}     else;       DispStr(x,CurY, BLUE, WHITE, KeyDecimal);    CurY=CurY+uDotOn;   }   else   {    //sprintf(dispmem, "%d", (int)(j));    //DispStr(x,y, BLUE, WHITE, dispmem);    ShowInt(x,y,WHITE,j);        DispStr(x,y+i, BLUE, WHITE, KeyDecimal);    CurY=y+i+uDotOn;    }  }      }  j=abs(j); (* fData)=j;  i=1; while(KeyDecimal[0]=='.' && KeyDecimal[i]!='/0'&& i<=4) {    (* fData)=(* fData)+(KeyDecimal[i]-48)/pow(10,i);    i++; }     if(bNegativeKey==1)  (* fData)*=(-1);  CheckData=(float)(*fData); WriteFloatFM(fData,Address) ;  //DispStr(220,30, BLUE, INDIGO, "        "); //sprintf(dispmem, "%4.3f", (float)(* fData)); //DispStr(220,30, BLUE, INDIGO, dispmem); bKeyOK=0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  float delete
相关文章推荐