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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機讀取DS18B20 rom源程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:273434 發(fā)表于 2020-3-25 23:23 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
最近搞了兩天18b20單總線掛多個,發(fā)現(xiàn)很少能用的,終于弄了個可以用的,讀取顯示到1602,每兩位一起,從右往左,希望給迷途的人一點方向!

單片機源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. /********************************************************************/
  5. sbit DQ = P1^3;                                //溫度傳感器信號線
  6. sbit rs = P2^4;                                //LCD數(shù)據(jù)/命令選擇端(H/L)位聲明
  7. sbit rw = P2^5;                                //LCD讀寫控制,寫為0,讀為1
  8. sbit lcden = P2^6;                        //LCD使能信號端位聲明
  9. /********************************************************************/
  10. //uint temp;                                //定義整型的溫度數(shù)據(jù)
  11. //float f_temp;                                //定義浮點型的溫度數(shù)據(jù)
  12. //uint warn_11 = 270;                        //定義溫度設定值,是溫度值乘以10后的結(jié)果
  13. //uint warn_12 = 250;                        //定義溫度下限值
  14. //uint warn_h1 = 300;                        //定義溫度上限值
  15. /********************************************************************/
  16. void  delay(uint z);                                //延時函數(shù)
  17. void  DS18B20_Reset(void);                        //DQ18B20復位,初始化函數(shù)
  18. bit   DS18B20_Readbit(void);                //讀1位數(shù)據(jù)函數(shù)
  19. uchar DS18B20_ReadByte(void);                //讀1個字節(jié)數(shù)據(jù)函數(shù)
  20. void  DS18B20_WriteByte(uchar dat);        //向DQ18B20寫一個字節(jié)數(shù)據(jù)函數(shù)
  21. void  LCD_WriteCom(uchar com);                //1602液晶命令寫入函數(shù)
  22. void  LCD_WriteData(uchar dat);                //1602液晶數(shù)據(jù)寫入函數(shù)
  23. void  LCD_Init();                                        //LCD初始化函數(shù)
  24. void  Display18B20Rom(char Rom);        //顯示18B20序列號函數(shù)
  25. /**********************************************/
  26. /*        主函數(shù)                                                                 */
  27. /**********************************************/
  28. void main()
  29. {        uchar a,b,c,d,e,f,g,h;
  30.         LCD_Init();
  31.                 rw = 0;
  32.         DS18B20_Reset();
  33.         delay(1);
  34.         DS18B20_WriteByte(0x33);
  35.         delay(1);
  36.         a = DS18B20_ReadByte();
  37.         b = DS18B20_ReadByte();
  38.         c = DS18B20_ReadByte();
  39.         d = DS18B20_ReadByte();
  40.         e = DS18B20_ReadByte();
  41.         f = DS18B20_ReadByte();
  42.         g = DS18B20_ReadByte();
  43.         h = DS18B20_ReadByte();
  44.         LCD_WriteCom(0x80+0x40);
  45.         Display18B20Rom(h);
  46.         Display18B20Rom(g);
  47.         Display18B20Rom(f);
  48.         Display18B20Rom(e);
  49.         Display18B20Rom(d);
  50.         Display18B20Rom(c);
  51.         Display18B20Rom(b);
  52.         Display18B20Rom(a);
  53.         while(1);
  54. }
  55. /***************************************************/
  56. /*         延時函數(shù):void delay()                                                             */
  57. /*         功能:延時函數(shù)                                                                           */
  58. /***************************************************/
  59. void delay(uint z)//延時函數(shù)
  60. {
  61.         uint x,y;
  62.         for( x = z; x > 0; x-- )
  63.                 for( y = 110; y > 0; y-- );
  64. }
  65. /***************************************************/
  66. /*         DS18B20函數(shù):void DS18B20_Reset()                                     */
  67. /*         功能:復位18B20                                                                           */
  68. /***************************************************/
  69. void DS18B20_Reset(void)//DQ18B20復位,初始化函數(shù)
  70. {
  71.         uint i;
  72.         DQ = 0;
  73.         i = 103;
  74.         while( i > 0 ) i--;
  75.         DQ = 1;
  76.         i = 4;
  77.         while( i > 0 ) i--;
  78. }
  79. /***************************************************/
  80. /*         DS18B20函數(shù):void DS18B20_Readbit()                                  */
  81. /*         功能:讀1個字節(jié)數(shù)據(jù)函數(shù)                                                              */
  82. /***************************************************/
  83. bit DS18B20_Readbit(void)   //讀1位數(shù)據(jù)函數(shù)
  84. {
  85.         uint i;
  86.         bit dat;
  87.         DQ = 0;
  88.         i++;                 //i++起延時作用
  89.         DQ = 1;
  90.         i++;
  91.         i++;
  92.         dat = DQ;
  93.         i = 8;
  94.         while( i > 0 )i--;
  95.         return( dat );
  96. }
  97. /***************************************************/
  98. /*         DS18B20函數(shù):void DS18B20_ReadByte()                               */
  99. /*         功能:讀1個字節(jié)數(shù)據(jù)函數(shù)                                                              */
  100. /***************************************************/
  101. uchar DS18B20_ReadByte(void)        //讀1個字節(jié)數(shù)據(jù)函數(shù)
  102. {
  103.         uchar i,j,dat;
  104.         dat = 0;
  105.         for( i = 1; i <= 8; i++ )
  106.         {
  107.                 j = DS18B20_Readbit();
  108.                 dat = ( j << 7 ) | ( dat >> 1 );
  109.         }
  110.         return(dat);
  111. }
  112. /***************************************************/
  113. /*         DS18B20函數(shù):void DS18B20_WriteByte()                             */
  114. /*         功能:向DQ18B20寫一個字節(jié)數(shù)據(jù)函數(shù)                                            */
  115. /***************************************************/
  116. void DS18B20_WriteByte(uchar dat)        //向DQ18B20寫一個字節(jié)數(shù)據(jù)函數(shù)
  117. {
  118.         uint i;
  119.         uchar j;
  120.         bit testb;
  121.         for( j=1; j<=8; j++)
  122.         {
  123.                 testb = dat&0x01;
  124.                 dat= dat>>1;
  125.                 if(testb)        //寫1
  126.                 {
  127.                         DQ = 0;
  128.                         i++;i++;
  129.                         DQ = 1;
  130.                         i = 8;while(i>0)i--;
  131.                 }
  132.                 else
  133.                 {
  134.                         DQ = 0;        //寫0
  135.                         i = 8;while(i>0)i--;
  136.                         DQ = 1;
  137.                         i++;i++;
  138.                 }
  139.         }
  140. }
  141. /***********************************************/
  142. /*  LCD函數(shù):void LCD_WriteCom()                                        */
  143. /*  功能:向LCD寫入命令                                                             */
  144. /***********************************************/
  145. void LCD_WriteCom(uchar com)
  146. {
  147.         rs = 0;
  148.                 rw = 0;
  149.         P0 = com;
  150.         delay(5);
  151.         lcden = 0;
  152.         delay(5);
  153.         lcden = 1;
  154.         delay(5);
  155.         lcden = 0;
  156. }
  157. /***********************************************/
  158. /*  LCD函數(shù):void LCD_WriteData(uchar dat)                             */
  159. /*  功能:向LCD寫入數(shù)據(jù)                                                             */
  160. /***********************************************/
  161. void LCD_WriteData(uchar dat)
  162. {
  163.         rs = 1;                                //選擇LCD為寫入數(shù)據(jù)狀態(tài)
  164.                 rw = 0;
  165.         lcden = 0;
  166.         P0 = dat;                            //將待寫入數(shù)據(jù)放到總線上
  167.         delay(5);                           
  168.         lcden = 1;                                //給LCD使能端一個脈沖                          
  169.         delay(5);                                //信號將之前放到總線上
  170.         lcden = 0;                                //的數(shù)據(jù)寫入LCD
  171.         delay(5);
  172. }
  173. /***********************************************/
  174. /*  LCD函數(shù):void LCD_Init()                                                             */
  175. /*  功能:初始化LCD,設定LCD的初始狀態(tài)                                 */
  176. /***********************************************/
  177. void LCD_Init()
  178. {        
  179.         LCD_WriteCom(0x38);                //LCD顯示模式設定
  180.         delay(15);
  181.         LCD_WriteCom(0x08);                //關(guān)閉LCD顯示
  182.         delay(3);
  183.         LCD_WriteCom(0x01);                //LCD顯示清屏
  184.         delay(3);
  185.         LCD_WriteCom(0x06);                //設定光標地址指針為自動加1
  186.         delay(3);
  187.         LCD_WriteCom(0x0c);                //打開LCD顯示,但不顯示光標
  188. }
  189. /**********************************************/
  190. /*                                                                                           */
  191. /*        顯示18B20序列號                                                           */
  192. /*                                                                                       */
  193. /**********************************************/
  194. void Display18B20Rom(char Rom)
  195. {
  196.          uchar h,l;
  197.          l = Rom & 0x0f;            //取低4位
  198.          h = Rom & 0xf0;                //取高4位  
  199.          h >>= 4;
  200.          if( ( h >= 0x00 )&&( h <= 0x09 ) )
  201.                   LCD_WriteData(h+0x30);               //取ASCII碼
  202.          else  
  203.                   LCD_WriteData(h+0x37);               //取ASCII碼
  204.          if( ( l >= 0x00 )&&( l <= 0x09 ) )
  205.                   LCD_WriteData(l+0x30);               //取ASCII碼
  206.          else  
  207.                   LCD_WriteData(l+0x37);               //取ASCII碼         
  208. }
復制代碼

所有資料51hei提供下載:
讀取rom.zip (20.94 KB, 下載次數(shù): 24)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:720980 發(fā)表于 2020-4-2 15:16 | 只看該作者
請問樓主能上傳一下詳細的仿真么?
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久综合av| 久久这里只有精品首页 | 精品国产一区二区在线 | 国产成人一区二区三区 | 色综合色综合网色综合 | 岛国毛片在线观看 | 久久精品com| 欧美mv日韩mv国产网站91进入 | 亚洲高清在线 | 成人二区三区 | 97精品国产一区二区三区 | 亚洲一区中文字幕 | 中文字幕日韩欧美 | 成人午夜激情 | 国产精品亚洲综合 | 91视频久久 | 久久精品国产久精国产 | 黄色免费在线观看网址 | 欧美在线视频一区二区 | a级在线免费视频 | av一区二区三区四区 | 中文字幕精品一区久久久久 | 91国内精品久久 | 福利精品| 自拍偷拍一区二区三区 | 国产高清一区二区三区 | 亚洲一区 中文字幕 | 国产精品91久久久久久 | 男女视频在线观看免费 | 欧美精品一区二区三区在线播放 | 精品综合久久久 | caoporn国产精品免费公开 | 成人精品国产免费网站 | 日韩欧美中文 | 国产精品成av人在线视午夜片 | zzzwww在线看片免费 | 午夜寂寞影院列表 | 日韩视频在线免费观看 | 综合九九 | 日韩精品在线观看视频 | 女人毛片a毛片久久人人 |