找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3840|回復: 1
收起左側(cè)

DS18B20溫度顯示仿真 程序 中文資料

[復制鏈接]
ID:118329 發(fā)表于 2016-5-11 14:26 | 顯示全部樓層 |閱讀模式
DS18B20溫度顯示仿真

0.png

下載所有資料包含中文資料: 溫度顯示.rar (156.57 KB, 下載次數(shù): 16)

DS18B20溫度顯示仿真圖:
0.png

  1. #include <reg52.h>
  2. #include "typedef.h"
  3. #include "device_init.h"
  4. #include "ds18b20.h"

  5. code u8 float_tab[16] = {0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//小數(shù)表
  6. code u8 DisCode[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xff, 0xbf};

  7. u8 DisNum[4] = {0x0a, 0x0a, 0x00, 0x00};
  8. u8 DisPosition = 0;

  9. /************************************************
  10. * 函數(shù)名稱:dynamic_display
  11. * 輸    入:
  12. * 輸    出:
  13. * 功能描述:
  14. *************************************************/
  15. void dynamic_display(void)
  16. {
  17.         static u8 DisPinOn = 0x01;

  18.         DisPinOn <<= 1;
  19.         if(DisPinOn == 0x10)
  20.         {
  21.                 DisPosition = 0;
  22.                 DisPinOn = 0x01;
  23.         }
  24.         DIS_DAT = 0xff;
  25.         DIS_POS = DisPinOn;
  26.         DIS_DAT = DisCode[DisNum[DisPosition++]];
  27.         if(DisPinOn == 0x04)
  28.                 DIS_DAT &= 0x7f;
  29. }
  30. /************************************************
  31. * 函數(shù)名稱:set_temp_data
  32. * 輸    入:
  33. * 輸    出:
  34. * 功能描述:
  35. *************************************************/
  36. void set_temp_data(void)
  37. {
  38.         u16 TempData;
  39.         float Temp;
  40.         u8 Negative;
  41.         s8 i;

  42.         TempData = ds18b20_get_temp();                //度溫度數(shù)據(jù)


  43.         /* 小于零 */
  44.         if(TempData & 0xf000)
  45.         {
  46.                 TempData = ~TempData + 1;
  47.                 TempData &= 0x0fff;
  48.                 Negative = 1;
  49.         }
  50.         /* 大于零 */
  51.         else
  52.         {
  53.                 Negative = 0;
  54.         }

  55.         Temp = (TempData >> 4) * 10;                //溫度讀數(shù)乘以精度(0.0625),顯示小數(shù)點一位,所以乘以10
  56.         Temp = Temp + float_tab[(TempData & 0x000f)] + 0.5;        //加上小數(shù)部分,四舍五入所以加0.5
  57.         TempData = Temp;

  58.         for(i=3; i>=0; i--)
  59.         {
  60.                 DisNum[i] = TempData % 10;
  61.                 TempData /= 10;
  62.         }

  63.         for(i=0; i<2; i++)
  64.         {
  65.                 if(DisNum[i] != 0)
  66.                 {
  67.                         break;
  68.                 }
  69.                 else
  70.                 {
  71.                         DisNum[i] = 0x0a;                        //前面為0不顯示
  72.                 }
  73.         }
  74.         /*  顯示負號 */
  75.         if(Negative == 1)
  76.         {
  77.                 for(i=2; i>=0; i--)
  78.                 {
  79.                         if(DisNum[i] == 0x0a)
  80.                         {
  81.                                 DisNum[i] = 0x0b;                //'-'
  82.                                 break;
  83.                         }
  84.                 }
  85.         }
  86. }
復制代碼


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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