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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2552|回復: 0
打印 上一主題 下一主題
收起左側

STC12 1T單片機讀取DS18B20并數碼管顯示 源代碼

[復制鏈接]
跳轉到指定樓層
樓主
以前一直用STC89單片機讀取DS18B20,這次換了1T單片機,以為只是改下延時就行了,誰知一直都讀不出來,搜了個1T讀取DS18B20的代碼,帶進去一測試OK!代碼放出來:






單片機源程序如下:
  1. /***************************************************************************
  2. 標題:        STC12 溫感實驗
  3. 效果:        讀取溫度值數碼管顯示帶小數顯示   
  4. 工作于:LY5A-L2A開發板
  5. 作者:        林洋電子-單片機

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

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

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

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

  22. //函數聲明:
  23. void display(void);//顯示函數,顯示緩沖區內容

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

  25. //主函數,C語言的入口函數:
  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;          //得到真實十進制溫度值,因為DS18B20
  36.             //可以精確到0.0625度,所以讀回數據的最低位代表的是0.0625度。
  37.                                        
  38.             ltemp = tt * 10 + 0.5;           //放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。
  39.             if(ltemp < 0)                 //判斷第一位顯示整數還是負號
  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;                //顯示溫度個位值
  54.             ly_dis[3] = ltemp % 10;                //顯示小數點后一位
  55.         }
  56.                                        
  57.         i++;
  58.         if(i == 800)
  59.             i = 0;
  60.         display();        //調用顯示
  61.                                 Delay(150);
  62.     }
  63. }

  64. //顯示函數,參數為顯示內容
  65. void display()
  66. {
  67.     P0 = 0XFF;                        //
  68.     switch(l_posit)
  69.     {
  70.         case 0:                //選擇千位數碼管,關閉其它位
  71.             SMG_q = 0;
  72.             SMG_b = 1;
  73.             SMG_s = 1;
  74.             SMG_g = 1;
  75.             P0 = table[ly_dis[0]];        //輸出顯示內容
  76.             break;
  77.         case 1:                //選擇百位數碼管,關閉其它位
  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:                //選擇十位數碼管,關閉其它位
  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:                //選擇個位數碼管,關閉其它位
  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++;                //每調用一次將輪流顯示一位
  103.     if(l_posit > 3)
  104.         l_posit = 0;
  105. }

  106. //延時子函數,短暫延時

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

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



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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