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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

溫度傳感器proteus仿真和單片機源代碼

[復制鏈接]
跳轉到指定樓層
樓主
溫度傳感器的使用,內含proteus仿真和源代碼
哪里有錯誤請大家指教。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. unsigned char code Str[]={"Temperature Now"};
  4. unsigned char code Error[]={"Error! No DS18B20"};

  5. unsigned char code Temp[]={"Value:"};
  6. unsigned char code digit[10]={"0123456789"};
  7. unsigned char code Cent[]={0xdf,"C"};

  8. sbit DQ=P3^3;

  9. sbit E=P2^4;
  10. sbit RW=P2^3;
  11. sbit RS=P2^2;
  12. sbit BF=P0^7;

  13. void delay1ms()
  14. {
  15.          unsigned char i,j;
  16.          for(i=0;i<8;i++)
  17.          for(j=0;j<40;j++)
  18.          ;
  19. }

  20. void delaynms(unsigned char n)
  21. {
  22.          unsigned char i;
  23.          for(i=0;i<n;i++)
  24.          delay1ms();
  25. }

  26. bit BusyChek(void)
  27. {
  28.          bit busy;
  29.          RS=0;//RW=P2^3;RS=P2^2;
  30.          RW=1;
  31.          E=1;
  32.          _nop_();_nop()_;_nop_();_nop()_;
  33.     busy=BF;
  34.     E=0;
  35.     return busy;
  36. }

  37. void WriteCommand(unsigned char dictate)
  38. {
  39.         while(BusyChek()==1);
  40.         RS=0;
  41.         RW=0;
  42.         E=0;
  43.         _nop_();_nop()_;
  44.         P0=dictate;
  45.         _nop_();_nop()_;_nop_();_nop()_;
  46.         E=1;
  47.         _nop_();_nop()_;_nop_();_nop()_;
  48.         E=0;
  49. }

  50. void WritePosition(unsigned char x)
  51. {
  52.          WriteCommand(x|0x80);
  53. }

  54. void WriteASCII(unsigned char y)
  55. {
  56.          while(BusyChek()==1);
  57.         RS=1;
  58.         RW=0;
  59.         E=0;
  60.         P0=y;
  61.         _nop_();_nop()_;_nop_();_nop()_;
  62.         E=1;
  63.         _nop_();_nop()_;_nop_();_nop()_;
  64.         E=0;
  65. }

  66. void LcdInit(void)
  67. {
  68.          delaynms(16);
  69.          WriteCommand(0x38);
  70.          delaynms(5);
  71.          WriteCommand(0x38);
  72.          delaynms(5);
  73.          WriteCommand(0x0c);
  74.          
  75.          delaynms(5);
  76.          WriteCommand(0x06);
  77.          
  78.          delaynms(5);
  79.          WriteCommand(0x01);
  80.          delaynms(5);
  81. }

  82. unsigned char time;
  83. bit Init_DS18B20(void)

  84. {
  85.          bit flag;
  86.          
  87.          DQ=1;
  88.          for(time=0;time<2;time++)
  89.          ;
  90.          DQ=0;
  91.          for(time=0;time<200;time++)
  92.          ;
  93.          DQ=1;
  94.          for(time=0;time<10;time++)
  95.          ;
  96.          flag=DQ;
  97.          for(time=0;time<200;time++)
  98.          ;
  99.          return (flag);
  100. }
  101. unsigned char ReadOneByte(void)
  102. {
  103.         unsigned char i=0;
  104.         unsigned char dat;
  105.         for(i=0;i<8;i++)
  106.         {
  107.                 DQ=1;
  108.                 _nop_();
  109.                 DQ=0;
  110.                 dat>>=1;
  111.                 _nop_();
  112.                 DQ=1;
  113.                 for(time=0;time<2;time++)
  114.          ;
  115.          if(DQ==1)
  116.          dat|=0x80;
  117.          else
  118.          dat|=0x00;
  119.          for(time=0;time<8;time++)
  120.          ;
  121.                 }        
  122.                 return (dat);
  123. }

  124. WriteOneChar(unsigned char dat)
  125. {
  126.         unsigned char i=0;
  127.         for(i=0;i<8;i++)
  128.         {
  129.                 DQ=1;
  130.                 _nop_();
  131.                 DQ=0;
  132.                
  133.                 DQ=dat&0x01;
  134.                
  135.                 for(time=0;time<10;time++)
  136.                 ;
  137.                 DQ=1;
  138.                 for(time=0;time<1;time++)
  139.                 ;
  140.                 dat>>=1;
  141.         }
  142.         for(time=0;time<5;time++)
  143.         ;
  144. }

  145. void Display_Error(void)
  146. {
  147.          unsigned char i;
  148.          WritePosition(0x00);
  149.          i=0;
  150.          while(Error[i]!='\0')
  151.          {
  152.                  WriteASCII(Error[i]);
  153.                  i++;
  154.                  delaynms(100);
  155.                  }        
  156.                  while(1)
  157.                  ;
  158. }

  159. void Display_Explain(void)
  160. {
  161.          unsigned char i;
  162.          WritePosition(0x00);
  163.          i=0;
  164.          while(Str[i]!='\0')
  165.          {
  166.                  WriteASCII(Str[i]);
  167.                  i++;
  168.                  delaynms(100);
  169.                  }        
  170. }

  171. void Display_Symbol(void)
  172. {
  173.          unsigned char i;
  174.          WritePosition(0x40);
  175.          i=0;
  176.          while(Temp[i]!='\0')
  177.          {
  178.                  WriteASCII(Temp[i]);
  179.                  i++;
  180.                  delaynms(50);
  181.                  }        
  182. }

  183. void Display_Dot(void)
  184. {
  185.          WritePosition(0x49);
  186.          WriteASCII('.');
  187.          delaynms(50);
  188. }

  189. void Display_Cent(void)
  190. {
  191.          WritePosition(0x4c);
  192. i=0;
  193.          while(Cent[i]!='\0')
  194.          {
  195.                  WriteASCII(Cent[i]);
  196.                  i++;
  197.                  delaynms(50);
  198.                  }        
  199. }

  200. void Display_Decimal(unsigned char x)
  201. {
  202.          WritePosition(0x4a);
  203.          WriteASCII(digit[x]);
  204.          delaynms(50);
  205. }

  206. void Display_Integer(unsigned char x)
  207. {
  208.          unsigned char u,v,w;
  209.          u=x/100;
  210.          v=(x%100)/10;
  211.          w=x%10;
  212.          WritePosition(0x46);
  213.          WriteASCII(digit[u]);
  214.                  WriteASCII(digit[v]);
  215.                          WriteASCII(digit[w]);
  216.                                  delaynms(50);
  217. }

  218. void ReadyReadTemp(void)
  219. {
  220.          Init_DS18B20();
  221.          WriteOneChar(0xCC);
  222.          WriteOneChar(0x44);
  223.          for(time=0;time<100;time++)
  224.          ;
  225.          Init_DS18B20();
  226.          WriteOneChar(0xCC);
  227.          WriteOneChar(0xBE);
  228. }

  229. void main(void)
  230. {
  231.          unsigned char TL;
  232.          unsigned char TH;
  233.          unsigned char TN;
  234.          unsigned char TD;
  235.     LcdInit();
  236.     delaynms(4);
  237.     if(Init_DS18B20()==1)
  238.     Display_Error;
  239.     Display_Explain;
  240.     Display_Symbol;
  241.     Display_Dot();
  242.     Display_Cent();
  243.     while(1)
  244.     {
  245.             ReadyReadTemp;
  246.             TL=ReadOneByte();
  247.             TH=ReadOneByte();
  248.             TN=TH*16+TL/16;
  249.             TD=(TL%16)*10/16;
  250.             Display_Integer(TN);
  251.             Display_Decimal(TD);
  252.             delaynms(10);
  253.         }
  254. }















復制代碼

溫度傳感器.zip (18.55 KB, 下載次數: 38)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:404068 發表于 2018-9-29 15:31 | 只看該作者
感謝樓主
回復

使用道具 舉報

板凳
ID:416676 發表于 2018-11-10 16:22 | 只看該作者
想學做一下家庭智能報警系統  但是有些知識點不太懂,請問下這個溫度傳感器弄出來以后  通過什么方法可以讓主機接收到溫度傳感器的信號呢?
回復

使用道具 舉報

地板
ID:552382 發表于 2019-6-2 10:02 | 只看該作者
你的附件里并沒有放proteus仿真文件啊?而且這個proteus仿真圖明顯不對啊,ds18b20都沒有連接到單片機上
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩a| 日韩精品成人 | 一级毛片视频免费观看 | 国产精品成人av | 国产精品久久精品 | 欧美日韩精品 | 一区二区三区精品视频 | 中文天堂网 | 久久精品a| 国产精品a久久久久 | 国产福利在线视频 | 91欧美| 久久国产精品视频 | 污视频免费在线观看 | www国产成人免费观看视频 | 中文字幕在线视频网站 | 日干夜操 | 久久精品国产清自在天天线 | 麻豆av片| 精品一二 | 久久久国产一区二区三区 | 欧美精品久久久久 | 日韩国产黄色片 | 黄色一级免费观看 | 男女视频在线看 | 亚洲国产精品va在线看黑人 | 国产精品久久久久av | 久久新视频| 日本欧美国产在线观看 | 亚洲综合视频 | 欧美一区二区三区小说 | 一级片网站视频 | 国产精品日产欧美久久久久 | 2023亚洲天堂| 欧美精品一二三 | 日韩精品视频在线观看一区二区三区 | 日韩中文一区二区三区 | 中文字幕加勒比 | 日本在线观看视频 | 亚洲欧美在线一区 | 亚洲成人免费av |