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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5818|回復: 4
打印 上一主題 下一主題
收起左側

單片機DS18B20溫度上下限報警源代碼和Proteus仿真原理圖

[復制鏈接]
跳轉到指定樓層
樓主
51單片機DS18B20溫度上下限報警的仿真原理圖,用74ls245驅動數碼管顯示(proteus仿真工程文件可到本帖附件下載):



51單片機DS18B20溫度上下限報警源代碼:

  1. #include<reg51.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int


  5. sbit DIO=P1^7;

  6. uchar data dis_buf[6];   //顯示緩沖區           
  7. uchar code table[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //顯示的代碼表
  8.            0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};



  9. void dl_1ms( )                  //延時1ms
  10. {  data unsigned int d;
  11.    for(d=0;d<120;d++);
  12. }

  13. void display( )                 //顯示函數
  14. {  data uchar bitcode, i;
  15.    bitcode=0xfe;
  16.    for(i=0;i<6;i++)
  17.    {  P2=table[dis_buf[i]];
  18.       P3=bitcode;
  19.       dl_1ms( );
  20.       P3=0xff;
  21.       bitcode=bitcode<<1;
  22.       bitcode=bitcode|0x01;
  23.    }
  24. }

  25. void delay_5us(uchar y)             //(2.17*y+5)微妙延時
  26. {  while(--y);
  27. }

  28. void delay()                        //延時1000ms              
  29. {  uchar i;
  30.    for(i=0;i<140;i++)
  31.    {  display();
  32.    }
  33. }


  34. void OneWireWByte(uchar x)          //向總線寫一個字節x
  35. {  uchar i;
  36.    for(i=0;i<8;i++)
  37.    { DIO=0;                         //拉低總線
  38.      _nop_();                       //要求大于1微妙,但不超過15微妙
  39.      _nop_();
  40.     if(0x01&x)
  41.     { DIO=1;                        //如果最低位為1,則將總線拉高
  42.     }
  43.     delay_5us(30);                  //延時60--120微妙
  44.     DIO=1;                          //釋放總線
  45.     _nop_();                        //要求大于1微妙
  46.     x=x>>1;                         //移位,準備發送下一位
  47.   }
  48. }

  49. uchar OneWireRByte(void)            //從一總線上讀一個字節,返回讀到的內容
  50. {  uchar i,j;
  51.    j=0;
  52.    for(i=0;i<8;i++)
  53.    {  j=j>>1;
  54.       DIO=0;                        //拉低總線
  55.       _nop_();                      //要求大于1微妙,但不超過15微妙
  56.       _nop_();
  57.       DIO=1;                        //釋放總線
  58.       _nop_();
  59.       _nop_();
  60.      if(DIO==1)                     //如果搞電平
  61.      {  j=j|0X80;
  62.      }
  63.      delay_5us(30);                 //延時60--120微妙
  64.      DIO=1;                         //釋放總線
  65.      _nop_();                       //要求大于1微妙
  66.    }
  67.    return j;
  68. }

  69. void DS18B20_int(void)              //初始化DS18B20
  70. {  DIO=0;
  71.    delay_5us(255);                  // 延時480--960微妙
  72.    DIO=1;                            //釋放總線
  73.    delay_5us(30);                   //延時60--120微妙
  74.    if(DIO==0)
  75.    {  delay_5us(200);               //要求釋放總線后480微妙內結束復位
  76.       DIO=1;                        //釋放總線
  77.       OneWireWByte(0xcc);           //發送Skip ROM命令
  78.       OneWireWByte(0x4e);           //發送寫暫存RAM命令
  79.       OneWireWByte(0x00);           //溫度報警上限設為0
  80.       OneWireWByte(0x00);           //溫度報警下限設為0
  81.       OneWireWByte(0x7f);           //將DS18B20設為12位,精度為0.25
  82.       DIO=0;
  83.       delay_5us(255);               // 延時480--960微妙
  84.       DIO=1;                         //釋放總線
  85.       delay_5us(240);               //要求釋放總線后480微妙內結束復位
  86.       DIO=1;                         //釋放總線
  87.    }
  88. }


  89. uint DS18B20_readtemp()             //讀DS18B20的溫度值
  90. {  uint temp;
  91.    uchar DS18B20_temp[2];           //溫度數據
  92.    DIO=0;
  93.    delay_5us(255);                  // 延時480--960微妙
  94.    DIO=1;                            //釋放總線
  95.    delay_5us(30);                    //延時60--120微妙
  96.    if(DIO==0)
  97.    {  delay_5us(200);               //要求釋放總線后480微妙內結束復位
  98.       DIO=1;
  99.       OneWireWByte(0xcc);           //發送Skip ROM命令
  100.       OneWireWByte(0x44);           //發送溫度轉換命令
  101.       DIO=1;
  102.       delay( );                     //延時1000ms
  103.       DIO=0;
  104.       delay_5us(255);               // 延時480--960微妙
  105.       DIO=1;
  106.       delay_5us(30);                 //延時60--120微妙
  107.       if(DIO==0)
  108.       {  delay_5us(200);            //要求釋放總線后480微妙內結束復位
  109.          DIO=1;
  110.          OneWireWByte(0xcc);        //發送Skip ROM命令
  111.          OneWireWByte(0xbe);        //發送讀暫存RAM命令
  112.          DS18B20_temp[0]=OneWireRByte();  //讀溫度的低字節
  113.          DS18B20_temp[1]=OneWireRByte();  //讀溫度的高字節
  114.          temp=256*DS18B20_temp[1]+DS18B20_temp[0];
  115.          temp=temp/16;
  116.          DIO=0;
  117.          delay_5us(255);            //// 延時480--960微妙
  118.          DIO=1;
  119.          delay_5us(240);            //要求釋放總線后480微妙內結束復位
  120.          DIO=1;
  121.       }
  122.       return temp;
  123.     }
  124. }


  125. void  main( )                   //主函數
  126. {  uint temp;
  127.    DS18B20_int();
  128.    dis_buf[0]=16; dis_buf[1]=16;
  129.    dis_buf[2]=0;  dis_buf[3]=0;
  130.    dis_buf[4]=0;  dis_buf[5]=0;
  131.    display( );

  132.    while(1)
  133.    {  temp=DS18B20_readtemp();
  134.       dis_buf[2]=temp/1000;
  135.       dis_buf[3]=(temp%1000)/100;

復制代碼



該系列源碼包含有很多非常經典,代碼風格十分規范,而且注釋詳細的單片機例程,還帶仿真,對于MCU學習特別是初學者是很有幫助的,全部源碼下載(共幾十個項目):http://www.zg4o1577.cn/bbs/dpj-80575-1.html

本例程下載(含proteus仿真工程文件與源碼):
單片機DS18B20溫度上下限報警.rar (54.79 KB, 下載次數: 63)


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

使用道具 舉報

沙發
ID:170906 發表于 2017-4-10 13:08 | 只看該作者
程序無法仿真。
回復

使用道具 舉報

板凳
ID:194103 發表于 2017-4-27 10:48 | 只看該作者
怎么下載?
回復

使用道具 舉報

地板
ID:77498 發表于 2017-5-3 19:26 | 只看該作者
沒有黑色錢下載
回復

使用道具 舉報

5#
ID:594086 發表于 2021-5-2 11:49 | 只看該作者
程序沒有上下限報警功能
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜影院在线观看视频 | 日韩1区2区 | 国产精品毛片一区二区三区 | 精品一区二区三区电影 | 在线日韩 | 秋霞电影一区二区 | 久久99精品久久久久久琪琪 | 亚洲国产中文字幕 | 亚洲黄色高清视频 | 欧美一区二区三区在线 | 九九九视频精品 | 久久黄色网 | 91精品国产日韩91久久久久久 | 狠狠亚洲| 国产一区欧美 | 亚洲精品九九 | 久久久久久久国产精品视频 | www.亚洲区 | 欧美操操操 | 一本岛道一二三不卡区 | 国产在线看片 | www.99热这里只有精品 | 亚洲一二三区精品 | 欧美一级精品片在线看 | 欧美精品被 | 国产精品久久久久久婷婷天堂 | 在线 丝袜 欧美 日韩 制服 | 蜜桃视频一区二区三区 | 日本午夜免费福利视频 | 国内精品久久久久久久影视简单 | 中文字幕av网 | 亚洲国产情侣自拍 | 欧美日韩一区二区电影 | 久久久久久免费看 | 亚洲欧美激情国产综合久久久 | 日韩精品一区二区三区在线观看 | 国产 亚洲 网红 主播 | 日韩在线观看一区二区三区 | 久久久久久国产精品免费免费狐狸 | 99免费| 欧美日韩国产精品一区二区 |