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;}
单片机浮点数输入显示程序
最新推荐文章于 2023-04-25 20:52:22 发布