欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2736|回復: 5
收起左側

單片機超聲波液晶顯示顯示浮點數有問題,求指教

[復制鏈接]
ID:475371 發表于 2020-6-10 15:09 | 顯示全部樓層 |閱讀模式
10黑幣
本帖最后由 flytohign 于 2020-6-12 15:17 編輯

主要是 單片機主函數紅色標記處;keil運行會彈出錯誤:main.c(61): warning:  #167-D: argument of type "char *" is incompatible with parameter of type "u8 *"
                                                                LCD_ShowString(30+10*8,150,200,16,16,DistanceChar); //直接送字符顯示函數     
超聲波測距顯示不正常,顯示不正確并且數值變換太快
extern u8  TIM5CH1_CAPTURE_STA;                //輸入捕獲狀態                                                   
extern u16        TIM5CH1_CAPTURE_VAL;        //輸入捕獲值        
int main(void)
{               
         
        float Distance;
  char DistanceChar[16];
         u32 temp=0;
        delay_init();                     //延時函數初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
        uart_init(115200);         //串口初始化為115200
         LED_Init();                             //LED端口初始化
  LCD_Init();        
        Ultra_config();      //超聲波的TRIG端口,GPIOA_1  初始化
         TIM5_Cap_Init(0XFFFF,720-1);        //以1Mhz的頻率計數 ,100us
        
        POINT_COLOR=RED;                //設置字體為紅色
        LCD_ShowString(30,50,200,16,16,"ELITE STM32");
        LCD_ShowString(30,70,200,16,16,"REMOTE TEST");        
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2015/1/15");

           LCD_ShowString(30,130,200,16,16,"TIME:");        
           LCD_ShowString(30,150,200,16,16,"DISTANCE:        cm");        

           while(1)
        {
                  Ultra_start();
                 if(TIM5CH1_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿
                {
                        temp=TIM5CH1_CAPTURE_STA&0X3F;
                        temp*=65536;//溢出時間總和
                        temp+=TIM5CH1_CAPTURE_VAL;//得到總的高電平時間
                        Distance=(float)temp*170/10000;//距離計算公式:距離=高電平持續時間*聲速/2  ,單位:厘米
                                                                                                                  //即 距離= 高電平持續時間*340*100/(2*1000 000) = 高電平持續時間*170/10000
                        LCD_ShowNum(30+6*8,130,temp,3,16);        //顯示高電平時間
                        sprintf(DistanceChar,"%5.2f",Distance);  //浮點數轉換為指定格式的字符串
                        //printf("HIGH:%d us\r\n",temp);//打印總的高電平時間
                        
            LCD_ShowString(30+10*8,150,200,16,16,DistanceChar);        //直接送字符顯示函數     
                        TIM5CH1_CAPTURE_STA=0;//開啟下一次捕獲
                }
        }
}


回復

使用道具 舉報

ID:73435 發表于 2020-6-12 15:58 | 顯示全部樓層
意思是類型不一致,用一個強制類型轉換可以解決 LCD_ShowString(30+10*8,150,200,16,16,(u8 *)DistanceChar);
回復

使用道具 舉報

ID:764088 發表于 2020-6-16 10:43 | 顯示全部樓層
用debug模式,看 程序 跑到這句,前后,得 DistanceChar數是否浮點數字符串;
sprintf(DistanceChar,"%5.2f",Distance);  //浮點數轉換為指定格式的字符串

執行這句后 1)如 DistanceChar 不是相應 浮點字符串,那 查 sprintf執行條件;
如 DistanceChar 是相應 浮點字符串,那 查 后一句 執行程序是否 OK;
回復

使用道具 舉報

ID:475371 發表于 2020-6-16 12:44 | 顯示全部樓層
294479435 發表于 2020-6-12 15:58
意思是類型不一致,用一個強制類型轉換可以解決 LCD_ShowString(30+10*8,150,200,16,16,(u8 *)DistanceChar ...

可以,明白了
回復

使用道具 舉報

ID:475371 發表于 2020-6-16 12:46 | 顯示全部樓層
MikeCai 發表于 2020-6-16 10:43
用debug模式,看 程序 跑到這句,前后,得 DistanceChar數是否浮點數字符串;
sprintf(DistanceChar,"%5. ...

嗯嗯,試了,DistanceChar是浮點數轉成的字符串型,那具體怎么弄呢,你提供調試的思路不錯
回復

使用道具 舉報

ID:475371 發表于 2020-6-17 08:33 | 顯示全部樓層
問題基本解決,管理員請問下怎么給金幣幫我解決問題的人呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表