久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

如何使液晶屏顯示小數(shù)點(diǎn)后兩位?附單片機(jī)代碼

查看數(shù): 7038 | 評論數(shù): 15 | 收藏 1
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2021-4-22 16:40

正文摘要:

這是溫度檢測上下限可調(diào)keil的程序,現(xiàn)在是液晶屏顯示后三位,怎么只讓液晶屏顯示小數(shù)點(diǎn)后兩位,求大神解答

回復(fù)

ID:137736 發(fā)表于 2022-9-18 10:50
先乘上100,將浮點(diǎn)數(shù)強(qiáng)制轉(zhuǎn)換成int類型,然后才能取余,分離每位數(shù),否則錯誤。顯示時(shí)中間加上小數(shù)點(diǎn)。末尾數(shù)字跳動時(shí)可以用平均值濾波。
ID:137736 發(fā)表于 2022-9-18 10:46
先乘上100,注意要轉(zhuǎn)換成int類型,否則取余錯誤。
ID:905171 發(fā)表于 2021-4-23 12:06
void xianshi1()
{
        uint8 i;
        long a;
        a=tmp*100;
        temp[8]=0x30+a/10000;
        temp[9]=0x30+a/1000%10;
        temp[11]=0x30+a/100%10;
        temp[12]=0x2e;
        temp[13]=0x30+a/10%10;
        temp[14]=0x30+a%10;
        lcd_order(0x80+0x40);
        for(i = 0;i<16;i++)
                lcd_data(temp[i]);      
}
ID:905171 發(fā)表于 2021-4-23 12:04
本帖最后由 真皮沙發(fā) 于 2021-4-23 13:25 編輯

小數(shù)乘100化整數(shù),再顯示,中間加小數(shù)點(diǎn)
ID:390416 發(fā)表于 2021-4-23 09:47
ID:585428 發(fā)表于 2021-4-23 07:53
沒看你的代碼。但是我分享下思路,溫度讀出來以后,將溫度*100,比如21.12*100=2112。然后你可以取余將21和12分別用÷和%的方法提取出來放在數(shù)組內(nèi),然后,顯示的時(shí)候,你顯示21然后顯示一個小數(shù)點(diǎn),然后顯示12。只要你溫度傳感器精度夠,想顯示幾位小數(shù)都沒問題。
ID:89515 發(fā)表于 2021-4-23 07:50
你圖片的分解方法就很好啊,只要溫度不大于100,直接將第三位小數(shù)緩存不要就行了
ID:213173 發(fā)表于 2021-4-23 05:45
鶴見川 發(fā)表于 2021-4-22 22:29
參考了您的但是改出來還是亂碼我懵了



ID:160500 發(fā)表于 2021-4-22 22:30
好好看看ds18b20的datasheet就明白了
ID:819671 發(fā)表于 2021-4-22 22:29
wulin 發(fā)表于 2021-4-22 22:17
給你一個ds18b20+LCD1602顯示2位小數(shù)的示例參考,但在實(shí)踐中顯示1位小數(shù)足以,末位小數(shù)頻繁變化看的不太 ...

參考了您的但是改出來還是亂碼我懵了
ID:819671 發(fā)表于 2021-4-22 22:24
wulin 發(fā)表于 2021-4-22 22:17
給你一個ds18b20+LCD1602顯示2位小數(shù)的示例參考,但在實(shí)踐中顯示1位小數(shù)足以,末位小數(shù)頻繁變化看的不太 ...

我們老大強(qiáng)制要后兩位小數(shù)顯示 請問這個程序能更改成顯示兩位嗎求大佬幫助 我自己改改出來顯示亂碼
ID:213173 發(fā)表于 2021-4-22 22:17
鶴見川 發(fā)表于 2021-4-22 18:55
我自己改成這樣好像也不對是亂碼請大神幫忙解決

給你一個ds18b20+LCD1602顯示2位小數(shù)的示例參考,但在實(shí)踐中顯示1位小數(shù)足以,末位小數(shù)頻繁變化看的不太舒服。
ds18b20溫度LCD顯示 仿真.zip (106.94 KB, 下載次數(shù): 51)

評分

參與人數(shù) 1黑幣 +5 收起 理由
鶴見川 + 5

查看全部評分

ID:819671 發(fā)表于 2021-4-22 21:40
沒人嗎
ID:819671 發(fā)表于 2021-4-22 18:50
  1. #include<reg52.h>
  2. #include"stdio.h"

  3. typedef unsigned char uint8;
  4. typedef unsigned int uint16;

  5. /***************************************************/

  6. sbit RS =P2^6;       //LCD1602的數(shù)據(jù)命令選擇
  7. sbit RW = P2^5;
  8. sbit EN_LCD =P2^7;   //LCD1602的使能信號

  9. sbit BUZZER = P1^5;

  10. sbit K1          = P3^0;        //右
  11. sbit K2   =        P3^1;        //加
  12. sbit K3   = P3^2;        //減


  13. /****************DS18B20引腳**********************/
  14. sbit DS18B20 = P3^7;  //DS18B20數(shù)據(jù)端
  15. /***********************************************************/
  16. /******************************************************/

  17. void delay(uint16 time);        // 延時(shí)函數(shù)(6us單位)               
  18. void lcd_ini();                         // LCD1602的初始化
  19. void lcd_order(uint8 date);                // 向LCD1602的寫1個指令
  20. void lcd_data(uint8 date);                // 向LCD1602的寫1個指令

  21. void xie1602(uint8 add,uint8 daa); //寫數(shù)據(jù)

  22. void xianshi1();//顯示溫度

  23. uint8 ds18_ini();        //ds18B20初使化函數(shù)
  24. void ds18_write(uint8 date);   //功能向DS18B20中寫入一個數(shù)據(jù)
  25. uint8 ds18_read();                           //功能從DS18B20中讀出一個數(shù)據(jù)并返回。
  26. void ds18_check();                           //起動DS18B20行進(jìn)溫度采集,并返回當(dāng)前溫度(tmp)
  27. void xiugai();                 //修改報(bào)警范圍

  28. long  tmp=0;      //儲存溫度值
  29. long  t_h=37, t_l=10;          // 溫度的上限和下限


  30. bit tmp_hb = 0;  tmp_lb = 0;     //溫度上下限調(diào)節(jié)指示變量

  31. void panduan();                   //判斷報(bào)警
  32. uint8 hodometer[]= "  H:00   L: 00  ";
  33. uint8 temp[]=           "  wendu:00.00   ";
  34. uint16 ji = 0;
  35. uint8 ku=0;         //biaozhiwei

  36. void main()
  37. {
  38.         lcd_ini();
  39.         ds18_ini();        //ds18B20初使化
  40.            ds18_write(0xcc);  //跳過序列號
  41.            ds18_write(0x44);  //啟動溫度轉(zhuǎn)換
  42.          xie1602(4,t_h);
  43.          xie1602(12,t_l);
  44.         while(1)
  45.         {
  46.                 ds18_check();  //從DS18B20中讀出溫度
  47.                 xianshi1();
  48.                 xiugai();
  49.                 panduan();               
  50.         }
  51. }

  52. void xie1602(uint8 add,uint8 daa)
  53. {
  54.         lcd_order(0x80+add);
  55.         lcd_data(0x30+daa/10);
  56.         lcd_data(0x30+daa%10);
  57. }

  58. //判斷是否在報(bào)警范圍內(nèi)
  59. void panduan()
  60. {
  61.         if(tmp<(t_l*1000)||tmp>(t_h*1000)&&t_l>=0)
  62.         {
  63.                 BUZZER = 0;
  64.                 delay(10);
  65.         }
  66.         else if(t_l<0&&tmp>(t_h*1000))
  67.         {
  68.                 BUZZER = 1;       
  69.         }
  70.         else
  71.                 BUZZER = 1;
  72. }


  73. //選擇修改的內(nèi)容
  74. void xiugai()
  75. {        uint8 jj;
  76.         uint8 i = 0;
  77.         BUZZER = 1;
  78.        
  79.         if(K1==0)
  80.         {
  81.                 while(!K1);
  82.                 while(1)
  83.                 {
  84.                         lcd_order(0x0f);  //開啟光標(biāo)顯示
  85.                         lcd_order(0x80+5);//光標(biāo)顯示位置
  86.                         if(K2 == 0)                        //判斷加按鍵按下
  87.                         {
  88.                                 while(K2 == 0);                  //等待按鍵釋放
  89.                                         t_h++;                         //溫度上限加1
  90.                                         xie1602(4,t_h);          //將溫度上限顯示出來
  91.                         }
  92.                         if(K3 == 0)                                   //判斷減按鍵按下
  93.                         {
  94.                                 while(K3 == 0);                        //等待按鍵釋放
  95.                                 if(t_h>t_l)                                //判斷 溫度上限大于溫度下限
  96.                                         t_h--;
  97.                                 xie1602(4,t_h);                         //將溫度上限顯示出來
  98.                         }
  99.                         if(K1 == 0)                           //后面的注釋類似
  100.                         {
  101.                                 while(K1 == 0);
  102.                                 while(1)
  103.                                 {
  104.                                         lcd_order(0x0f);
  105.                                         lcd_order(0x80+13);       
  106.                                         if(K2 == 0)
  107.                                         {
  108.                                                 while(K2 == 0);
  109.                                                 if(t_l<t_h&&t_l>=0)
  110.                                                 {
  111.                                                         lcd_order(0x80+11);
  112.                                                         lcd_data(' ');
  113.                                                         t_l++;
  114.                                                         xie1602(12,t_l);
  115.                                                 }
  116.                                                 else {
  117.                                                         t_l++;
  118.                                                         jj = ~t_l;
  119.                                                         xie1602(12,jj);
  120.                                                 }
  121.                                         }
  122.                                         if(K3 == 0)
  123.                                         {
  124.                                                 while(K3 == 0);
  125.                                                 if(t_l>(-50))
  126.                                                 {
  127.                                                         t_l--;
  128.                                                         if(t_l<0)
  129.                                                                 jj = ~t_l;
  130.                                                 }
  131.                                                 if(t_l>=0)
  132.                                                 {
  133.                                                         lcd_order(0x80+11);
  134.                                                         lcd_data(' ');
  135.                                                         xie1602(12,t_l);
  136.                                                 }
  137.                                                 if(t_l<0)
  138.                                                 {       
  139.                                                         xie1602(12,jj);
  140.                                                         lcd_order(0x80+11);
  141.                                                         lcd_data('-');
  142.                                                 }
  143.                                         }
  144.                                         if(K1 == 0)
  145.                                         {
  146.                                                 while(K1 == 0);
  147.                                                 goto loop;
  148.                                         }               
  149.                                 }
  150.                         }
  151.                 }                               
  152.         }
  153.         loop:BUZZER = 1;       
  154. }

  155. /**********************************************
  156. 函數(shù)名:delay
  157. 行參  :time 延時(shí)基數(shù)
  158. 功能  :用while延時(shí)
  159. ************************************************/
  160. // 延時(shí)函數(shù)(1ms單位)
  161. void delay(uint16 time)
  162. {
  163.         while(time--);
  164. }
  165. /**********************************************
  166. 函數(shù)名:lcd_ini
  167. 功能  :LCD1602的初始化
  168. ************************************************/
  169. void lcd_ini()
  170. {
  171.         uint8 i;
  172.                 RW = 0;
  173.           lcd_order(0x38);          //設(shè)置1602的顯示光標(biāo)功能
  174.           delay(100);                  
  175.           lcd_order(0x0e);          //顯示開及光標(biāo)設(shè)置
  176.           delay(100);
  177.           lcd_order(0x06);          //顯示光標(biāo)移動設(shè)置
  178.           delay(100);
  179.           lcd_order(0x01);          //顯示清屏
  180.           delay(100);
  181.           lcd_order(0x80);
  182.                   for(i = 0;i<16;i++)
  183.                         lcd_data(hodometer[i]);
  184.   }


  185. /**********************************************
  186. 函數(shù)名:lcd_order
  187. 行參  :date 要定入的指令
  188. 功能  :向LCD1602的寫1個指令
  189. ************************************************/
  190. void lcd_order(uint8 date)
  191. {
  192.   RS=0;                  //選擇寫指令  
  193.   EN_LCD=0;          //使能初使化
  194.   P0=date;          //發(fā)送指令
  195.   EN_LCD=1;          //開使能
  196.   delay(100);          //延時(shí)
  197.   EN_LCD=0;          //關(guān)使能
  198. }
  199. /**********************************************
  200. 函數(shù)名:lcd_order
  201. 行參  :date 要定入的指令
  202. 功能  :向LCD1602的寫1個指令
  203. ************************************************/
  204. void lcd_data(uint8 date)
  205. {
  206.   RS=1;                  //選擇寫數(shù)據(jù)  
  207.   EN_LCD=0;          //使能初使化
  208.   P0=date;          //發(fā)送指令
  209.   EN_LCD=1;          //開使能
  210.   delay(100);          //延時(shí)
  211.   EN_LCD=0;          //關(guān)使能
  212. }

  213. /*************************************************************
  214.                                               DS18B20
  215. **************************************************************/
  216. /****************************************
  217. 函數(shù)名:    ds18_ini
  218. 功能:      對DS18B20進(jìn)行初使化,
  219.             若DS18B20是好的則返回1
  220.                         若DS18B20是環(huán)的則返回0
  221. ****************************************/
  222. //ds18B20初使化函數(shù),可根據(jù)資料上的時(shí)序來寫
  223. uint8 ds18_ini()
  224. {
  225.   uint8 ans;
  226.   DS18B20 = 1;
  227.   delay(1);
  228.   DS18B20 = 0;
  229.   delay(100);
  230.   DS18B20 = 1;
  231.   delay(6);
  232.   ans = DS18B20;
  233.   delay(100);
  234.    if(!ans)
  235.      return 1;
  236.   else
  237.      return 0;
  238. }

  239. /**********************************
  240. 函數(shù)名:    ds18_write
  241. 函數(shù)行參:  date(向ds18b20寫入的數(shù)據(jù))
  242. 功能:      功能向DS18B20中寫入一個數(shù)據(jù)
  243. ***********************************/
  244. void ds18_write(uint8 date)
  245. {
  246.   uint8 i;
  247.   DS18B20=1;
  248.   delay(1);
  249.   for(i=0;i<8;i++)        //根據(jù)時(shí)序?qū)?shù)據(jù)從低到高一位一位發(fā)送出來
  250.        {
  251.                     DS18B20 = 0;
  252.                  if(date&0x01) //從低到高取出數(shù)據(jù)的每位
  253.                  DS18B20 = 1;
  254.                  else
  255.                  DS18B20 = 0;
  256.                  delay(10);
  257.                  DS18B20 = 1;
  258.                  date>>=1;
  259.                  delay(1);
  260.                  
  261.            }


  262. }

  263. /*************************************************
  264. 函數(shù)名:    ds18_read
  265. 函數(shù)返回值:rate(從ds18b20中讀出的數(shù)據(jù))
  266. 功能:      功能從DS18B20中讀出一個數(shù)據(jù)并返回。
  267. *************************************************/
  268. uint8 ds18_read()
  269. {
  270.   uint8 i,date = 0;
  271.   DS18B20 = 1;                  //釋放總線
  272.   delay(1);
  273.   for(i = 0;i < 8;i ++)          //根據(jù)時(shí)序?qū)?shù)據(jù)從低到高一位一位接收
  274.        {  
  275.              
  276.               DS18B20 = 0;
  277.                   date >>= 1;
  278.                   DS18B20 = 1;
  279.                   if(DS18B20)
  280.                      date |= 0x80;         //將date的一位置1
  281.                   delay(8);
  282.                   DS18B20 = 1;
  283.                   delay(1);
  284.           
  285.            }
  286.    return date;                          //返回讀出的數(shù)
  287. }
  288. /************************************************************
  289. 函數(shù)名:     ds18_check
  290. 函數(shù)返回值: tmp(當(dāng)前溫度)
  291. 功能:       起動DS18B20行進(jìn)溫度采集,并返回當(dāng)前溫度(tmp)
  292. *************************************************************/
  293. void ds18_check()
  294. {
  295.   uint8 date1,date2;
  296.   float ta;
  297.   if(ds18_ini())
  298.     {
  299.           
  300.           ds18_write(0xcc);          //跳過序列號
  301.           ds18_write(0x44);          // 啟動溫度轉(zhuǎn)換
  302.           ds18_ini();                  // 復(fù)位
  303.           ds18_write(0xcc);          //跳過序列號
  304.           ds18_write(0xbe);          // 啟動讀取溫度
  305.           date1 = ds18_read();   //讀取兩個溫度字節(jié)
  306.           date2 = ds18_read();
  307.           tmp=date2;
  308.           tmp<<=8;
  309.           tmp=tmp|date1;
  310.           ta=tmp*0.0625;
  311.           tmp=ta*1000;
  312.         }


  313. }

  314. void xianshi1()
  315. {
  316.         uint8 i;
  317.         temp[8]=0x30+tmp/10000;
  318.         temp[9]=0x30+tmp/1000%100;
  319.         temp[11]=0x30+tmp/100%100;
  320.         temp[12]=0x30+tmp/10%100;
  321.         temp[13]=0x30+tmp%10;
  322.         lcd_order(0x80+0x40);
  323.         for(i = 0;i<16;i++)
  324.                 lcd_data(temp[i]);       
  325. }
復(fù)制代碼

這是網(wǎng)友的程序 求解

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久青草婷婷精品综合日韩 | 97国产精品| 精品无码久久久久久国产 | 久久99精品国产麻豆婷婷 | 涩涩视频网站在线观看 | 日日操日日舔 | 精品一区二区三区四区视频 | 久久青青 | 色视频在线观看 | 华人黄网站大全 | 欧美精品一 | 国产欧美一级二级三级在线视频 | 成人在线观看欧美 | 另类专区成人 | 日本中文字幕一区 | 91亚洲国产 | 欧美久久久久久 | 天天综合天天 | 亚洲综合二区 | 成人午夜视频在线观看 | 欧美人人 | 国产精品毛片一区二区三区 | 四虎成人在线播放 | 爱爱视频网 | av在线二区 | 成人免费视频7777777 | 国产区在线观看 | 一级片网站视频 | 久国产视频 | 亚洲国产欧美精品 | 亚洲日韩中文字幕一区 | 欧美日韩在线不卡 | 精品国产第一区二区三区 | 国产午夜视频 | 91色视频在线观看 | 一区在线视频 | 国产美女黄色 | 伊人伊人 | 久草网站 | 欧洲性生活视频 | 国产毛片久久久久久久久春天 |