1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標(biāo)題: STC12 1T單片機(jī)讀取DS18B20并數(shù)碼管顯示 源代碼 [打印本頁]

作者: gongzhu    時(shí)間: 2019-12-20 18:19
標(biāo)題: STC12 1T單片機(jī)讀取DS18B20并數(shù)碼管顯示 源代碼
以前一直用STC89單片機(jī)讀取DS18B20,這次換了1T單片機(jī),以為只是改下延時(shí)就行了,誰知一直都讀不出來,搜了個(gè)1T讀取DS18B20的代碼,帶進(jìn)去一測試OK!代碼放出來:






單片機(jī)源程序如下:
  1. /***************************************************************************
  2. 標(biāo)題:        STC12 溫感實(shí)驗(yàn)
  3. 效果:        讀取溫度值數(shù)碼管顯示帶小數(shù)顯示   
  4. 工作于:LY5A-L2A開發(fā)板
  5. 作者:        林洋電子-單片機(jī)

  6. 說明:        板使用12M晶振
  7. ******************************************************************************/

  8. //頭文件:
  9. #include <reg51.h>
  10. #include "ds18b20.h"        //引入DS18B20頭文件

  11. //變量定義:
  12. unsigned char ly_dis[4];//定義顯示緩沖區(qū)
  13. code unsigned char table[] =
  14. {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
  15. //表:共陽數(shù)碼管 0-9
  16. unsigned char l_posit = 0;        //顯示位置

  17. //引腳定義:
  18. sbit SMG_q = P1 ^ 0;        //定義數(shù)碼管陽級控制腳(千位)
  19. sbit SMG_b = P1 ^ 1;        //定義數(shù)碼管陽級控制腳(百位)
  20. sbit SMG_s = P1 ^ 2;        //定義數(shù)碼管陽級控制腳(十位)
  21. sbit SMG_g = P1 ^ 3;        //定義數(shù)碼管陽級控制腳(個(gè)位)

  22. //函數(shù)聲明:
  23. void display(void);//顯示函數(shù),顯示緩沖區(qū)內(nèi)容

  24. void Delay(unsigned t); //延時(shí)函數(shù)

  25. //主函數(shù),C語言的入口函數(shù):
  26. void main()
  27. {
  28.     unsigned int i = 0;
  29.     float tt;
  30.     int ltemp;
  31.     while(1)
  32.     {
  33.         if(i == 10)
  34.         {
  35.             tt = ReadTemp() * 0.0625;          //得到真實(shí)十進(jìn)制溫度值,因?yàn)镈S18B20
  36.             //可以精確到0.0625度,所以讀回?cái)?shù)據(jù)的最低位代表的是0.0625度。
  37.                                        
  38.             ltemp = tt * 10 + 0.5;           //放大十倍,這樣做的目的將小數(shù)點(diǎn)后第一位也轉(zhuǎn)換為可顯示數(shù)字,同時(shí)進(jìn)行一個(gè)四舍五入操作。
  39.             if(ltemp < 0)                 //判斷第一位顯示整數(shù)還是負(fù)號
  40.             {
  41.                 ly_dis[0] = 0xbf;
  42.                 ltemp = 0 - ltemp;
  43.             }
  44.             else
  45.                 ly_dis[0] = ltemp / 1000; //顯示百位值
  46.                                                
  47.             if(ly_dis[0] == 0)
  48.                 ly_dis[0] = 0xff;
  49.                                                
  50.             ltemp = ltemp % 1000;
  51.             ly_dis[1] = ltemp / 100;        //顯示溫度十位值
  52.             ltemp = ltemp % 100;
  53.             ly_dis[2] = ltemp / 10;                //顯示溫度個(gè)位值
  54.             ly_dis[3] = ltemp % 10;                //顯示小數(shù)點(diǎn)后一位
  55.         }
  56.                                        
  57.         i++;
  58.         if(i == 800)
  59.             i = 0;
  60.         display();        //調(diào)用顯示
  61.                                 Delay(150);
  62.     }
  63. }

  64. //顯示函數(shù),參數(shù)為顯示內(nèi)容
  65. void display()
  66. {
  67.     P0 = 0XFF;                        //
  68.     switch(l_posit)
  69.     {
  70.         case 0:                //選擇千位數(shù)碼管,關(guān)閉其它位
  71.             SMG_q = 0;
  72.             SMG_b = 1;
  73.             SMG_s = 1;
  74.             SMG_g = 1;
  75.             P0 = table[ly_dis[0]];        //輸出顯示內(nèi)容
  76.             break;
  77.         case 1:                //選擇百位數(shù)碼管,關(guān)閉其它位
  78.             SMG_q = 1;
  79.             SMG_b = 0;
  80.             SMG_s = 1;
  81.             SMG_g = 1;
  82.             P0 = table[ly_dis[1]];
  83.             //Delay(4);
  84.             break;
  85.         case 2:                //選擇十位數(shù)碼管,關(guān)閉其它位
  86.             SMG_q = 1;
  87.             SMG_b = 1;
  88.             SMG_s = 0;
  89.             SMG_g = 1;
  90.             P0 = table[ly_dis[2]] & 0x7f;
  91.            //Delay(3);
  92.             break;
  93.         case 3:                //選擇個(gè)位數(shù)碼管,關(guān)閉其它位
  94.             SMG_q = 1;
  95.             SMG_b = 1;
  96.             SMG_s = 1;
  97.             SMG_g = 0;
  98.             P0 = table[ly_dis[3]];
  99.             //Delay(2);
  100.             break;
  101.     }
  102.     l_posit++;                //每調(diào)用一次將輪流顯示一位
  103.     if(l_posit > 3)
  104.         l_posit = 0;
  105. }

  106. //延時(shí)子函數(shù),短暫延時(shí)

  107. void Delay(unsigned time) //延時(shí)函數(shù)
  108. {
  109.     unsigned int i;                             //決定延時(shí)時(shí)間長短
  110.     while(time--)
  111.     {
  112.         i = 10;
  113.         while(i--);
  114.     }
  115. }
復(fù)制代碼

所有資料51hei提供下載:
DS18B20.rar (25.08 KB, 下載次數(shù): 43)








歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1