震惊!某萌新竟然怀疑正点原子的板子有问题!原子哥竟然...

2019-08-20 16:12发布

int main(void)
{         
        u8 x=0;
           int key_up=1;
        float fu1=0;
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        KEY_Init();                 //初始化与按键连接的硬件接口
        LED_Init();                             //LED端口初始化
        LCD_Init();
       

                while(1)
                        {                 
                        if(key_up&&KEY1==0)
                   {                                               
                            delay_ms(200);
          key_up        =0;               
                                  LED1=!LED1;
                                  fu1+=0.1;
                                         LCD_ShowNum(80,200,fu1*10,16,16);
                         }
                         key_up=1;
                 }
代码如上,特地新建了个工程又尝试了一下,问题是当按key1键,使显示数字到达23时,再按一次,依旧是23,再按一次就是24了,然而当我调用这个fu1变量时,其值(例如显示的是27,调用的时候内部真正的却是28),换成int就没有这个问题,但换成double的会更离谱,真心搞了一下午,尝试了各种方法,终于发现是这一块的问题,心好累,求助原子哥!!!求助各位前人!!!


       
         }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
时冢不是泽
1楼-- · 2019-08-21 11:26
augustedward 发表于 2017-4-25 18:46
这个是计算机精度问题,float,double本来就是近似值,没什么奇怪的,显示时又只显示整数。

噢噢,谢谢给了些启发,虽然我觉得你没具体说出问题,应该是显示那里乘10出了些问题,可能和你说的精度有关,今晚回去试试。
d1z1y2
2楼-- · 2019-08-21 12:05
一般应用中通常都是转成整形处理
lygxnb
3楼-- · 2019-08-21 13:29
明天来UC震惊部报道
时冢不是泽
4楼-- · 2019-08-21 13:56
 精彩回答 2  元偷偷看……
小陀螺爱炒蛋
5楼-- · 2019-08-21 17:24
UC小编转行了??

一周热门 更多>