如何在avr中存储十进制格式的数字

时间:2013-08-29 08:46:58

标签: c calculator avr atmega

我正在尝试使用ATMega8中的键盘输入小数值 直到现在我只能输入整数值 代码如下:

switch (keyCode)            
{

    case (0xee): 
            keyPressed="1";
            b=1;
            a=a*10+b; 
            break;
    case (0xed): 
            keyPressed="4";
            b=4;
            a=a*10+b; 
            break;
    case (0xeb): k
            keyPressed="7";
            b=7;
            a=a*10+b; 
            break;

    case (0xde): 
            keyPressed="2";
            b=2;
            a=a*10+b; 
            break;
    case (0xdd): 
            keyPressed="5";
            b=5;
            a=a*10+b; 
            break;
    case (0xdb): 
            keyPressed="8";
            b=8;
            a=a*10+b; 
            break;
    case (0xd7): 
            keyPressed="0";
            b=0;
            a=a*10+b; 
            break;
    case (0xbe): 
            keyPressed="3";
            b=3;
            a=a*10+b; 
            break;
    case (0xbd): 
            keyPressed="6";
            b=6;
            a=a*10+b; 
            break;
    case (0xbb): 
            keyPressed="9";
            b=9;
            a=a*10+b;
}       

使用上面的代码,我可以在寄存器a

中存储一个整数
case (0xe7): keyPressed=".";

以上情况是“。”的keyCode。按“”后我想要。在键盘上它存储按整数a

中按下的所有键

1 个答案:

答案 0 :(得分:1)

它基本的高中数学,你需要代表10的幂数。

Example - 
138.25 = (1 * 10^2) + (3 * 10^1) + (8 * 10^0) +         // integer part
         (2 * 10^-1) + (5 * 10^-2)                      // Float part

我不会给你完整的代码,但你可以使用这个想法

if (decimal)
{
    a = a + b / (10 ^ pow);
}
else
{
    a = a * 10 + b
}

pow是十进制数字 - 在上面的示例中(138.25),pow 2为1,而pow为5为2。 因此,您需要维护pow

的计数器