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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2983|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)讀取ds18b20數(shù)碼管顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:272887 發(fā)表于 2018-1-7 20:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
ds1820是簡易的溫度傳感器,簡單易用,下面給我大家分享一下,ds18b20的簡易程序

  1. #include<reg52.H>                                 //單片機(jī)頭文件
  2. GetTemp();                                                                   //聲明引用外部函數(shù)
  3. externunsigned int  idata Temperature;                   // 聲明引用外部變量
  4. voiddelay(unsigned int i);
  5. sbit    LS138A=P2^2;       //管腳定義
  6. sbit    LS138B=P2^3;
  7. sbit    LS138C=P2^4;
  8. sbit    EN573= P1^3;
  9. //此表為 LED 的字模, 共陰數(shù)碼管 “01234567899 –”
  10. unsignedchar code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
  11. unsignedlong  LedOut[5],LedNumVal;
  12. voidsystem_Ini()                //初始化定時器函數(shù),定時一段時間后,重新讀取溫度值
  13. {
  14.     TMOD= 0x11;
  15.     TH1 = 0xD8;    //10
  16.     TL1 = 0xF0;   
  17.        IE = 0x8A;     
  18.     TR1 = 1;
  19. }
  20. main()
  21. {
  22.        unsigned char i;
  23.        EN573=0;
  24.        system_Ini();
  25.     while(1)
  26.    {      
  27.         GetTemp();             //獲取溫度函數(shù),這個函數(shù)再Temp.c 文件中,
  28.        /********以下將讀18b20的數(shù)據(jù)送到LED數(shù)碼管顯示*************/
  29.        LedNumVal=Temperature;      //把實際溫度送到LedNumVal變量中
  30.         LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
  31.       LedOut[1]=Disp_Tab[LedNumVal%1000/100];
  32.       LedOut[2]=Disp_Tab[LedNumVal%100/10];   //十位
  33.       LedOut[3]=Disp_Tab[LedNumVal%10];    //個位
  34.         
  35.     for(i=0; i<4; i++)
  36.          {         
  37.                P0 = LedOut ;
  38.                                              
  39.               switch(i)                              
  40.          {                 //138譯碼
  41.                      case 0:LS138A=0; LS138B=0;LS138C=0; break;         
  42.             case 1:LS138A=1; LS138B=0;LS138C=0; break;                 
  43.             case 2:LS138A=0; LS138B=1;LS138C=0; break;
  44.             case 3:LS138A=1; LS138B=1;LS138C=0; break;
  45.          }
  46.                
  47.               delay(100);
  48.          }
  49.         P0 = 0;  
  50.   
  51.     }
  52. }
  53. //延時程序
  54. voiddelay(unsigned int i)
  55. {
  56.     char j;
  57.     for(i; i > 0; i--)
  58.         for(j = 200; j > 0; j--);
  59. }
  60. Temp.c文件
  61. /*************************此部分為18B20的驅(qū)動程序*********/
  62. #include <reg52.H>        
  63. #include <intrins.h>
  64. sbit   D18B20=P1^7;
  65. #define NOP()   _nop_()   /* 定義空指令 */
  66. #define _Nop()  _nop_()   /*定義空指令*/
  67. void TempDelay (unsigned int idata us);
  68. void Init18b20 (void);                  //18B20初始化復(fù)位
  69. void WriteByte (unsigned char idatawr);  //單字節(jié)寫入函數(shù)
  70. void read_bytes (unsigned char idata j);   // 讀出一單字節(jié)函數(shù)
  71. unsigned char CRC (unsigned char j);    // CRC 校驗函數(shù)
  72. void GemTemp (void);
  73. void Config18b20 (void);             //配置18B20函數(shù)
  74. void ReadID (void);                 //讀取器件序列號函數(shù)
  75. void TemperatuerResult(void);         //讀取溫度函數(shù)
  76. bit flag;
  77. unsigned int  idata Temperature;
  78. unsigned char idata temp_buff[9]; //存儲讀取的字節(jié),readscratchpad為9字節(jié),readrom ID為8字節(jié)
  79. unsigned char idata id_buff[8];   //定義器件ID值變量
  80. unsigned char idata *p,TIM;
  81. unsigned char idata crc_data;
  82. unsigned char code CrcTable [256]={
  83. 0, 94, 188,  226,  97, 63,  221,  131, 194,  156,  126, 32,  163,  253, 31,  65,
  84. 157, 195,  33,  127, 252,  162,  64, 30,  95,  1, 227,  189,  62, 96,  130,  220,
  85. 35, 125,  159,  193, 66,  28,  254, 160,  225,  191, 93,  3,  128, 222,  60,  98,
  86. 190, 224,  2,  92, 223,  129,  99, 61,  124,  34, 192,  158,  29, 67,  161,  255,
  87. 70, 24,  250,  164, 39,  121,  155, 197,  132,  218, 56,  102,  229, 187,  89,  7,
  88. 219, 133, 103,  57,  186, 228,  6,  88, 25,  71,  165, 251,  120,  38, 196,  154,
  89. 101, 59, 217,  135,  4, 90,  184,  230, 167,  249,  27, 69,  198,  152, 122,  36,
  90. 248, 166, 68,  26,  153, 199,  37,  123, 58,  100,  134, 216,  91,  5, 231,  185,
  91. 140, 210, 48,  110,  237, 179,  81,  15, 78,  16,  242, 172,  47,  113, 147,  205,
  92. 17, 79,  173,  243, 112,  46,  204, 146,  211,  141, 111,  49,  178, 236,  14,  80, 175, 241, 19,  77,  206, 144,  114,  44, 109,  51,  209, 143,  12,  82, 176,  238,50,  108, 142,  208,  83, 13,  239,  177, 240,  174,  76, 18,  145,  207, 45,  115,202,  148, 118, 40,  171,  245, 23,  73,  8, 86,  180,  234, 105,  55,  213, 139,87, 9,  235,  181, 54,  104,  138, 212,  149,  203, 41,  119,  244, 170,  72,  22,233, 183,  85,  11,  136,  214, 52,  106,  43, 117,  151,  201, 74,  20,  246, 168,116,  42,  200, 150,  21,  75, 169,  247,  182, 232,  10,  84, 215,  137,  107, 53}; //CRC校驗查詢表
  93. /************************************************************
  94. *Function:延時處理
  95. *parameter:
  96. *Return:
  97. *Modify:
  98. *************************************************************/
  99. voidTempDelay (unsigned int idata us)
  100. {
  101.        while(us--);
  102. }
  103. /************************************************************
  104. *Function:18B20初始化
  105. *parameter:
  106. *Return:
  107. *Modify:
  108. *************************************************************/
  109. voidInit18b20 (void)
  110. {
  111.        D18B20=1;
  112.        _nop_();
  113.        D18B20=0;
  114.        TempDelay(530);   //delay 530 uS
  115.        _nop_();
  116.        D18B20=1;
  117.        TempDelay(100);   //
  118.        _nop_();
  119.        _nop_();
  120.        _nop_();
  121.       
  122.        if(D18B20==0)
  123.               flag = 1;   //DS18B20響應(yīng),初始化完成
  124.        else
  125.               flag = 0;    //DS18B20初始化失敗
  126.        TempDelay(200);      
  127.        _nop_();
  128.        _nop_();
  129.        D18B20= 1;
  130. }
  131. /************************************************************
  132. *Function:向18B20寫入一個字節(jié)
  133. *parameter:
  134. *Return:
  135. *Modify:
  136. *************************************************************/
  137. voidWriteByte (unsigned char idata wr)  //單字節(jié)寫入
  138. {
  139.        unsigned char idata i;
  140.        for (i=0;i<8;i++)
  141.        {
  142.               D18B20 = 0;
  143.               _nop_();
  144.               D18B20=wr&0x01;
  145.               TempDelay(3);   //delay 45 uS //5
  146.               _nop_();
  147.               _nop_();
  148.               D18B20=1;
  149.               wr >>= 1;
  150.        }
  151. }
  152. /************************************************************
  153. *Function:讀18B20的一個字節(jié)
  154. *parameter:
  155. *Return:
  156. *Modify:
  157. *************************************************************/
  158. unsignedchar ReadByte (void)     //讀取單字節(jié)
  159. {
  160.        unsigned char idata i,u=0;
  161.        for(i=0;i<8;i++)
  162.        {
  163.               D18B20 = 0;
  164.               u >>= 1;
  165.               D18B20 = 1;
  166.               if(D18B20==1)
  167.               u |= 0x80;
  168.               TempDelay (2);
  169.               _nop_();
  170.        }
  171.        return(u);
  172. }
  173. /************************************************************
  174. *Function:讀18B20多個字節(jié),讀取j 個字節(jié)
  175. *parameter: j
  176. *Return:
  177. *Modify:
  178. *************************************************************/
  179. voidread_bytes (unsigned char idata j)
  180. {
  181.         unsigned char idata i;
  182.         for(i=0;i<j;i++)
  183.         {
  184.                *p = ReadByte();
  185.                p++;
  186.         }
  187. }
  188. /************************************************************
  189. *Function:CRC校驗
  190. *parameter:
  191. *Return:
  192. *Modify:
  193. *************************************************************/
  194. unsignedchar CRC (unsigned char j)
  195. {
  196.      unsignedchar idata i,crc_data=0;
  197.       for(i=0;i<j;i++)  //查表校驗
  198.            crc_data= CrcTable[crc_data^temp_buff];
  199.     return (crc_data);
  200. }
  201. /************************************************************
  202. *Function:讀取溫度
  203. *parameter:
  204. *Return:
  205. *Modify:
  206. *************************************************************/
  207. voidGemTemp (void)
  208. {
  209.    read_bytes (9);
  210.    if (CRC(9)==0) //校驗正確
  211.    {
  212.           Temperature = temp_buff[1]*0x100 + temp_buff[0];
  213. //        Temperature *= 0.625;
  214.               Temperature /= 16;
  215.               TempDelay(1);
  216.     }
  217. }
  218. /************************************************************
  219. *Function:內(nèi)部配置
  220. *parameter:
  221. *Return:
  222. *Modify:
  223. *************************************************************/
  224. voidConfig18b20 (void)  //重新配置報警限定值和分辨率
  225. {
  226.      Init18b20();      //復(fù)位18B20
  227.      WriteByte(0xcc);  //skiprom   如果總線上只有一個18B20,就可使用此命令,
  228.      WriteByte(0x4e);  //0x4e 這個指令時接下來向DS18B20寫三個字節(jié)數(shù)據(jù),分別是:
  229.                      //寫暫存器第2、3和4字節(jié)的數(shù)據(jù)(即TH,TL和配置寄存器)
  230.      WriteByte(0x19);  //上限
  231.      WriteByte(0x1a);  //下限
  232.      WriteByte(0x7f);     //set 12bit (0.125) 轉(zhuǎn)換精度
  233.      Init18b20();
  234.      WriteByte(0xcc);  //skiprom
  235.      WriteByte(0x48);  //保存設(shè)定值,將暫存器中的TH,TL和配置字節(jié)
  236. //復(fù)制到EPPROM中
  237.      Init18b20();
  238.      WriteByte(0xcc); //skip rom
  239.      WriteByte(0xb8); //回調(diào)設(shè)定值,將TH,TL和配置字節(jié)從EPPROM讀回至?xí)捍嫫髦?br />
  240. }
  241. /************************************************************
  242. *Function:讀18B20ID
  243. *parameter:
  244. *Return:
  245. *Modify:
  246. *************************************************************/
  247. voidReadID (void)//讀取器件id
  248. {
  249.        Init18b20();
  250.        WriteByte(0x33);  //read rom 指令
  251.        read_bytes(8);    //讀取器件ID指令
  252. }
  253. /************************************************************
  254. *Function:讀取18B20溫度值
  255. 說明一下:我們再例程里只讀取溫度值,其他功能暫時不演示,其他功能只需要添加就可以
  256.   現(xiàn)在我們將其他代碼屏蔽掉,如果需要恢復(fù)相應(yīng)功能即可。
  257. *************************************************************/
  258. voidTemperatuerResult(void)
  259. {
  260. //   p = id_buff;
  261. //   ReadID();
  262.       Config18b20();
  263.        Init18b20 ();
  264.        WriteByte(0xcc);   //skip rom
  265.        //WriteByte(0x44);   //Temperature convert
  266.        TempDelay(7000)   ;
  267.        Init18b20 ();
  268.        WriteByte(0xcc);   //skip rom
  269.        WriteByte(0xbe);   //read Temperature
  270.        p = temp_buff;
  271.        GemTemp();
  272. }
  273. voidGetTemp()     //
  274. {      
  275.      if(TIM==100) //每隔 1000ms讀取溫度
  276.        { TIM=0;
  277.          TemperatuerResult();
  278.        }
  279. }
  280. /*************************************
  281. [t1 (10ms)中斷]中斷,初始化函數(shù)在TemMain.c文件中                                                                                                                                                                                                                                                                                          
  282. *************************************/
  283. voidT1zd(void) interrupt 3
  284. {
  285.    TH1 = 0xD8;    //10
  286.    TL1 = 0xF0;
  287.    TIM++;
  288. }

復(fù)制代碼

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

使用道具 舉報

沙發(fā)
ID:151845 發(fā)表于 2018-6-11 14:44 | 只看該作者
謝謝樓主啊
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美国产视频 | 亚洲一级毛片 | 亚洲福利视频一区二区 | 中文字幕 视频一区 | 欧美色综合天天久久综合精品 | 91精品久久久久久综合五月天 | 欧美日韩在线免费 | 成人国产午夜在线观看 | 蜜桃精品视频在线 | 高清黄色| 欧美成人精品二区三区99精品 | 91九色在线观看 | 国产亚洲黄色片 | 欧美综合久久久 | 亚洲成人免费观看 | 成人亚洲综合 | 亚洲性视频网站 | 日韩国产在线 | 久久精品国产一区二区电影 | 99国内精品 | 精品久久久一区二区 | 亚洲天天干| 久久99这里只有精品 | 亚洲精品久久久久久久久久久久久 | 国产精品久久久久久一级毛片 | 国产福利视频 | 婷婷桃色网 | 福利影院在线看 | 一区二区三区四区免费视频 | 欧美久久久网站 | 日本黄视频在线观看 | 视频一区在线观看 | 天天天天天天操 | 成人激情视频免费在线观看 | 午夜av成人| av色站 | 亚洲人va欧美va人人爽 | 爱爱免费视频网站 | www.日日干| 国产免费自拍 | 在线日韩欧美 |