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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4383|回復(fù): 3
上一主題 下一主題
收起左側(cè)

基于51單片機ds18b20仿真+詳細(xì)注釋的代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:267001 發(fā)表于 2017-12-26 11:58 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
基于51單片機 18b20仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下(帶有詳細(xì)的注釋):
  1. #include<reg51.h>
  2. #include<lcd1602.h>
  3. #include<18b20.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. bit flag1s = 0;          //1s定時標(biāo)志
  7. unsigned char T0RH = 0;  //T0重載值的高字節(jié)
  8. unsigned char T0RL = 0;  //T0重載值的低字節(jié)

  9. void ConfigTimer0(unsigned int ms);
  10. unsigned char IntToString(unsigned char *str, int dat);
  11. extern bit Start18B20();
  12. extern bit Get18B20Temp(int *temp);
  13. extern void InitLcd1602();
  14. extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);

  15. void main()
  16. {
  17.     bit res;
  18.     int temp;        //讀取到的當(dāng)前溫度值
  19.     int intT, decT;  //溫度值的整數(shù)和小數(shù)部分
  20.     unsigned char len;
  21.     unsigned char str[12];

  22.     EA = 1;            //開總中斷
  23.     ConfigTimer0(10);  //T0定時10ms
  24.     Start18B20();      //啟動DS18B20
  25.     InitLcd1602();     //初始化液晶
  26.    
  27.     while (1)
  28.     {
  29.         if (flag1s)  //每秒更新一次溫度
  30.         {
  31.             flag1s = 0;
  32.             res = Get18B20Temp(&temp);  //讀取當(dāng)前溫度
  33.             if (res)                    //讀取成功時,刷新當(dāng)前溫度顯示
  34.             {
  35.                 intT = temp >> 4;             //分離出溫度值整數(shù)部分
  36.                 decT = temp & 0xF;            //分離出溫度值小數(shù)部分
  37.                 len = IntToString(str, intT); //整數(shù)部分轉(zhuǎn)換為字符串
  38.                 str[len++] = '.';             //添加小數(shù)點
  39.                 decT = (decT*10) / 16;        //二進制的小數(shù)部分轉(zhuǎn)換為1位十進制位
  40.                 str[len++] = decT + '0';      //十進制小數(shù)位再轉(zhuǎn)換為ASCII字符
  41.                 while (len < 6)               //用空格補齊到6個字符長度
  42.                 {
  43.                     str[len++] = ' ';
  44.                 }
  45.                 str[len] = '\0';              //添加字符串結(jié)束符
  46.                 LcdShowStr(0, 0, str);        //顯示到液晶屏上
  47.             }
  48.             else                        //讀取失敗時,提示錯誤信息
  49.             {
  50.                 LcdShowStr(0, 0, "error!");
  51.             }
  52.             Start18B20();               //重新啟動下一次轉(zhuǎn)換
  53.         }
  54.     }
  55. }
  56. /* 整型數(shù)轉(zhuǎn)換為字符串,str-字符串指針,dat-待轉(zhuǎn)換數(shù),返回值-字符串長度 */
  57. unsigned char IntToString(unsigned char *str, int dat)
  58. {
  59.     signed char i = 0;
  60.     unsigned char len = 0;
  61.     unsigned char buf[6];
  62.    
  63.     if (dat < 0)  //如果為負(fù)數(shù),首先取絕對值,并在指針上添加負(fù)號
  64.     {
  65.         dat = -dat;
  66.         *str++ = '-';
  67.         len++;
  68.     }
  69.     do {          //先轉(zhuǎn)換為低位在前的十進制數(shù)組
  70.         buf[i++] = dat % 10;
  71.         dat /= 10;
  72.     } while (dat > 0);
  73.     len += i;     //i最后的值就是有效字符的個數(shù)
  74.     while (i-- > 0)   //將數(shù)組值轉(zhuǎn)換為ASCII碼反向拷貝到接收指針上
  75.     {
  76.         *str++ = buf[i] + '0';
  77.     }
  78.     *str = '\0';  //添加字符串結(jié)束符
  79.    
  80.     return len;   //返回字符串長度
  81. }
  82. /* 配置并啟動T0,ms-T0定時時間 */
  83. void ConfigTimer0(unsigned int ms)
  84. {
  85.     unsigned long tmp;  //臨時變量
  86.    
  87.     tmp = 11059200 / 12;      //定時器計數(shù)頻率
  88.     tmp = (tmp * ms) / 1000;  //計算所需的計數(shù)值
  89.     tmp = 65536 - tmp;        //計算定時器重載值
  90.     tmp = tmp + 2;            //補償中斷響應(yīng)延時造成的誤差
  91.     T0RH = (unsigned char)(tmp>>8);  //定時器重載值拆分為高低字節(jié)
  92.     T0RL = (unsigned char)tmp;
  93.     TMOD &= 0xF0;   //清零T0的控制位
  94.     TMOD |= 0x01;   //配置T0為模式1
  95.     TH0 = T0RH;     //加載T0重載值
  96.     TL0 = T0RL;
  97.     ET0 = 1;        //使能T0中斷
  98.     TR0 = 1;        //啟動T0
  99. }
  100. ……………………

  101. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
16.18b20.zip (99.28 KB, 下載次數(shù): 133)





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

使用道具 舉報

沙發(fā)
ID:301249 發(fā)表于 2018-9-6 00:15 | 只看該作者
附件中沒有仿真
回復(fù)

使用道具 舉報

板凳
ID:389904 發(fā)表于 2018-9-9 17:22 | 只看該作者
附件中沒有仿真
回復(fù)

使用道具 舉報

地板
ID:146834 發(fā)表于 2018-11-28 21:44 | 只看該作者
謝謝。
回復(fù)

使用道具 舉報

5#
ID:259302 發(fā)表于 2018-12-22 12:04
有病毒

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 激情综合五月 | 亚洲欧洲在线视频 | 精品9999| 自拍视频精品 | 二区在线视频 | 欧美精品一区二区三区在线播放 | 午夜精品久久久久久久久久久久久 | 亚洲精品一区在线 | 国产精品日韩在线 | 国产中文字幕网 | 国产一级特黄aaa大片评分 | 国产二区在线播放 | 久久九精品 | 一级一片在线观看 | 日本不卡一区 | 在线免费观看毛片 | 成人免费观看男女羞羞视频 | 亚洲国产精品人人爽夜夜爽 | 精品1区2区3区 | 81精品国产乱码久久久久久 | 7777精品伊人久久精品影视 | 精品国产乱码一区二区三区 | 中文字幕亚洲欧美 | 欧美视频区 | 成人在线观看免费观看 | 日韩三级一区 | 中文字幕国产 | 欧美一区二区三区 | 欧美性生活一区二区三区 | 久久久久久久久久久久久9999 | 亚洲iv一区二区三区 | 国产精品视频在线播放 | 偷拍自拍第一页 | 宅男伊人 | 成年人网站免费 | 成人午夜电影网 | 国产专区在线 | 国产精品五区 | 国产高清在线精品 | 亚洲3p| 黄色一级免费 |