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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4422|回復: 3
上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
基于51單片機 18b20仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下(帶有詳細的注釋):
  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定時標志
  7. unsigned char T0RH = 0;  //T0重載值的高字節
  8. unsigned char T0RL = 0;  //T0重載值的低字節

  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;        //讀取到的當前溫度值
  19.     int intT, decT;  //溫度值的整數和小數部分
  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);  //讀取當前溫度
  33.             if (res)                    //讀取成功時,刷新當前溫度顯示
  34.             {
  35.                 intT = temp >> 4;             //分離出溫度值整數部分
  36.                 decT = temp & 0xF;            //分離出溫度值小數部分
  37.                 len = IntToString(str, intT); //整數部分轉換為字符串
  38.                 str[len++] = '.';             //添加小數點
  39.                 decT = (decT*10) / 16;        //二進制的小數部分轉換為1位十進制位
  40.                 str[len++] = decT + '0';      //十進制小數位再轉換為ASCII字符
  41.                 while (len < 6)               //用空格補齊到6個字符長度
  42.                 {
  43.                     str[len++] = ' ';
  44.                 }
  45.                 str[len] = '\0';              //添加字符串結束符
  46.                 LcdShowStr(0, 0, str);        //顯示到液晶屏上
  47.             }
  48.             else                        //讀取失敗時,提示錯誤信息
  49.             {
  50.                 LcdShowStr(0, 0, "error!");
  51.             }
  52.             Start18B20();               //重新啟動下一次轉換
  53.         }
  54.     }
  55. }
  56. /* 整型數轉換為字符串,str-字符串指針,dat-待轉換數,返回值-字符串長度 */
  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)  //如果為負數,首先取絕對值,并在指針上添加負號
  64.     {
  65.         dat = -dat;
  66.         *str++ = '-';
  67.         len++;
  68.     }
  69.     do {          //先轉換為低位在前的十進制數組
  70.         buf[i++] = dat % 10;
  71.         dat /= 10;
  72.     } while (dat > 0);
  73.     len += i;     //i最后的值就是有效字符的個數
  74.     while (i-- > 0)   //將數組值轉換為ASCII碼反向拷貝到接收指針上
  75.     {
  76.         *str++ = buf[i] + '0';
  77.     }
  78.     *str = '\0';  //添加字符串結束符
  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;      //定時器計數頻率
  88.     tmp = (tmp * ms) / 1000;  //計算所需的計數值
  89.     tmp = 65536 - tmp;        //計算定時器重載值
  90.     tmp = tmp + 2;            //補償中斷響應延時造成的誤差
  91.     T0RH = (unsigned char)(tmp>>8);  //定時器重載值拆分為高低字節
  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黑下載附件…………
復制代碼

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





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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久免费看视频 | 伊人在线视频 | 狠狠干综合 | 午夜久久久久久久 | 天天插天天爽 | 国产精品手机在线 | 黄色一级大片在线免费看国产一 | 东北少妇bbbb搡bbb搡 | 日韩精品视频免费在线观看 | 国 产 黄 色 大 片 | 视频在线一区 | 国产伦精品一区二区三区88av | 国产色视频一区二区三区qq号 | 国产日韩av在线 | 丁香六月激情 | 日日不卡av| 黄色小说网站在线观看 | 九九综合网 | 亚洲精品福利视频 | 日韩欧美中文字幕在线观看 | 成年人黄色片 | 久久av一区二区 | 国产伦精品一区二区免费 | 18在线观看免费入口 | 国产精品一区二区三区不卡 | 免费av网站在线观看 | 国产精品久久久久久久成人午夜 | 精品91| 午夜免费在线 | 97在线免费视频 | 视频一二区| 丁香婷婷在线 | 99一区二区 | 亚洲精品乱码久久久久久动漫 | 欧美激情一区二区三区 | 在线观看亚洲视频 | 日韩av在线免费看 | 成人羞羞网站 | 国产二区精品 | 国产午夜精品一区二区三区嫩草 | 黄色免费视频 |