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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2018|回復(fù): 0
收起左側(cè)

DS18B20驅(qū)動程序

[復(fù)制鏈接]
ID:177272 發(fā)表于 2017-3-21 16:53 | 顯示全部樓層 |閱讀模式
微信截圖.png

  1. #include<reg52.h>
  2. code unsigned char seg7code[11]={0x3f,0x06,0x5b,0x4f,0x66,
  3.                                  0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //顯示段碼
  4. void Delay(unsigned int tc)     //顯示延時程序
  5. {while( tc != 0 )
  6. {unsigned int i;
  7.   for(i=0; i<100; i++);
  8.   tc--;}
  9. }
  10. sbit TMDAT =P3^1; //DS18B20的數(shù)據(jù)輸入/輸出腳DQ,根據(jù)情況設(shè)定
  11. unsigned int sdata;//測量到的溫度的整數(shù)部分
  12. unsigned char xiaoshu1;//小數(shù)第一位
  13. unsigned char xiaoshu2;//小數(shù)第二位
  14. unsigned char xiaoshu;//兩位小數(shù)
  15. bit  fg=1;        //溫度正負(fù)標(biāo)志
  16. void dmsec (unsigned int count)       //延時部分
  17. {   
  18. unsigned char i;
  19. while(count--)
  20. {for(i=0;i<115;i++);}
  21. }         
  22. void tmreset (void)       //發(fā)送復(fù)位
  23. {                              
  24. unsigned char i;
  25. TMDAT=0;   for(i=0;i<103;i++);   
  26. TMDAT = 1; for(i=0;i<4;i++);      
  27. }         
  28. bit tmrbit (void)       //讀一位//
  29. {                           
  30.   unsigned int i;      
  31.   bit dat;      
  32.   TMDAT = 0;
  33.   i++;      
  34.   TMDAT = 1;
  35.   i++; i++;  //微量延時   //
  36.   dat = TMDAT;     
  37. for(i=0;i<8;i++);
  38.   return (dat);      
  39. }         
  40. unsigned char tmrbyte (void)        //讀一個字節(jié)
  41.   {                 
  42.   unsigned char i,j,dat;      
  43.   dat = 0;      
  44.   for (i=1;i<=8;i++)      
  45.   { j = tmrbit();  dat = (j << 7) | (dat >> 1); }         
  46.    return (dat);   
  47. }         
  48. void tmwbyte (unsigned char dat)     //寫一個字節(jié)
  49. {                       
  50.   unsigned char j,i;      
  51.   bit testb;      
  52.   for (j=1;j<=8;j++)      
  53.   { testb = dat & 0x01;     
  54.    dat = dat >> 1;      
  55.    if (testb)     
  56.    {   TMDAT = 0;         //寫0  
  57.      i++; i++;                              
  58.     TMDAT = 1;   
  59.     for(i=0;i<8;i++); }

  60.    else      
  61.   {  TMDAT = 0;         //寫0
  62.      for(i=0;i<8;i++);
  63.   TMDAT = 1;     
  64.      i++; i++;}                              
  65. }        
  66. }  
  67. void tmstart (void)       //發(fā)送ds1820 開始轉(zhuǎn)換
  68.   {  tmreset();  //復(fù)位     
  69.   dmsec(1);  //延時   
  70.   tmwbyte(0xcc);  //跳過序列號命令   
  71.   tmwbyte(0x44);  //發(fā)轉(zhuǎn)換命令 44H,
  72.   }         
  73. void tmrtemp (void)       //讀取溫度
  74.     {                          
  75.   unsigned char a,b;
  76.   tmreset ();  //復(fù)位     
  77.   dmsec (1);  //延時     
  78.   tmwbyte (0xcc);  //跳過序列號命令   
  79.   tmwbyte (0xbe);  //發(fā)送讀取命令     
  80.   a = tmrbyte ();  //讀取低位溫度   
  81.   b = tmrbyte ();   //讀取高位溫度           
  82.   if(b>0x7f)      //最高位為1時溫度是負(fù)
  83.   {a=~a;   b=~b+1;       //補碼轉(zhuǎn)換,取反加一
  84.    fg=0;      //讀取溫度為負(fù)時fg=0
  85.        }
  86.   sdata = a/16+b*16;      //整數(shù)部分
  87.   xiaoshu1 = (a&0x0f)*10/16; //小數(shù)第一位
  88.   xiaoshu2 = (a&0x0f)*100/16%10;//小數(shù)第二位
  89.   xiaoshu=xiaoshu1*10+xiaoshu2; //小數(shù)兩位
  90. }  
  91. void DS18B20PRO(void)         
  92. {  tmstart();      
  93.   //dmsec(5);  //如果是不斷地讀取的話可以不延時 //
  94.   tmrtemp();  //讀取溫度,執(zhí)行完畢溫度將存于TMP中 //
  95. }           
  96. void Led()
  97. {
  98.    if(fg==1)   //溫度為正時顯示的數(shù)據(jù)
  99.    {   P2=P2&0xef;
  100.     P0=seg7code[sdata/10];           //輸出十位數(shù)
  101.     Delay(8); P2=P2|0xf0; P2=P2&0xdf;  
  102.     P0=seg7code[sdata%10]|0x80; //輸出個位和小數(shù)點
  103.     Delay(8); P2=P2|0xf0; P2=P2&0xbf;
  104.     P0=seg7code[xiaoshu1];   //輸出小數(shù)點后第一位
  105.     Delay(8); P2=P2|0xf0; P2=P2&0x7f;
  106.     P0=seg7code[xiaoshu2];       //輸出小數(shù)點后第二位
  107.     Delay(4); P2=P2|0xf0;
  108.    }
  109.    if(fg==0)  //溫度為負(fù)時顯示的數(shù)據(jù)
  110.    {   P2=P2&0xef;
  111.     P0=seg7code[11];           //負(fù)號
  112.     Delay(8); P2=P2|0xf0; P2=P2&0xdf;  
  113.     P0=seg7code[sdata/10]|0x80; //輸出十位數(shù)
  114.     Delay(8); P2=P2|0xf0; P2=P2&0xbf;
  115.     P0=seg7code[sdata%10];   //輸出個位和小數(shù)點
  116.     Delay(8); P2=P2|0xf0; P2=P2&0x7f;
  117.     P0=seg7code[xiaoshu1];       //輸出小數(shù)點后第一位
  118.     Delay(4); P2=P2|0xf0;
  119.    }
  120. }
  121. main()
  122. {fg=1;
  123. while(1)
  124. {
  125.   DS18B20PRO();
  126.   Led();
  127. }
  128. }

復(fù)制代碼
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区二区三区在线 | 97av视频| 午夜网 | 日本电影网站 | 亚洲精品99| 中文字幕亚洲一区二区三区 | 96久久久久久 | 午夜精品久久久久久久星辰影院 | 欧美91| 国产yw851.c免费观看网站 | 99久久久久久99国产精品免 | 欧美2区 | 欧美一区二区三区视频在线播放 | 四虎最新视频 | 亚洲国产一区二区视频 | 成人一区av| 看a网站 | 免费一级黄色 | 99热.com | 欧美在线小视频 | 国产一区三区在线 | 欧美综合一区二区三区 | 欧美高清视频一区 | 毛片在线看看 | 日本特黄a级高清免费大片 特黄色一级毛片 | 国产一区二区久久 | 久久久久久久久久久久久久国产 | 国产精品一区视频 | 精品国产视频 | 完全免费在线视频 | 欧美日韩在线观看视频 | 亚洲一级黄色 | 中文字幕日韩一区 | 国产偷久久一级精品60部 | av片网 | 国产区在线观看 | 色一情一乱一伦一区二区三区 | 伊人免费在线 | 午夜视频在线观看网站 | 国产精品一区二区视频 | 五月天国产在线 |