单片机浮点数输入显示程序
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;}
相关文章推荐
- C primer plus 第七章 练习9: 编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。
- 12864液晶采用单片机内部显示缓冲的程序
- 在μPD78F0485单片机实验盒上编写程序实现在LCD上显示日历功能
- 汇编程序:输入一个数并显示出现
- 继承与派生,编写一个学生和教师数据输入和显示程序
- 20171207编写一个程序,只接受正整数的输入,然后显示所有小于或等于该数的素数。
- 凌阳61单片机使用7段数码管显示数字时钟的程序
- 编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得的结果。在用户非数字的输入之前程序循环处理输入值。
- 编写了一个服务器端的程序实现在客户端输入字符然后在控制台上显示,直到输入"END"为止,让你写出客户端的程序;
- 编写一个求n个数的平均值及最小值的程序。要求:程序执行时,用户先由键盘输入n的值,之后输入n个数,最后,程序显示平均值和最小值。
- 1.编程实现“油耗计算机程序”。要求:输入加油金额、公里数、汽油价格,单击“计算”按钮,显示百公里油耗。界面如图:
- 单片机练习 - 带中文字库12864LCD显示程序
- 1, 编写程序,当用户在文本框中输入内容之后,单机不同的按钮,能够把文半框中的内容粘贴到文本区中。“重置”按钮实现将文本框和文本区中的内容清空。界面上的文本区只能显示内容,不能让用户输入文本。运行结果
- 第4章 处理用户输入与显示数据------------(读取参数、读取程序名称、测试参数)
- (单片机)显示温湿度程序
- 51 单片机 C 语言编程:矩阵键盘输入,显示在数码管
- 根据输入显示一个人的出生日期(我的第二个python程序)
- 用C++写一个日历程序,要求输入年份,显示全年的日历
- 1.编写程序:“猫”读入指定文件然后显示;“鼠”读入键盘输入然后写到文件。
- 编写一个学生和教师数据输入和显示程序