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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1437|回復: 6
收起左側

新手求助!為什么這個程序顯示不出溫度?

[復制鏈接]
ID:978933 發表于 2021-11-15 10:59 | 顯示全部樓層 |閱讀模式
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. sbit RS=P2^0;   
  4. sbit RW=P2^1;
  5. sbit E=P1^2;
  6. sbit DQ=P1^4;

  7. sbit led1=P0^0;
  8. sbit led2=P0^1;
  9. sbit led3=P0^2;
  10. sbit led4=P0^3;
  11. sbit led5=P0^4;
  12. sbit led6=P0^5;
  13. sbit led7=P0^6;
  14. sbit led8=P0^7;
  15. sbit buzz=P0^6;

  16. unsigned char a,b,c,d,e,f,g,h;
  17. static int readtemp=0;
  18. unsigned char s[]={"Temp:"};
  19. unsigned char str[]={"0123456789"};

  20. //************************************************************************
  21. void delay(unsigned int n)//Ñó3ùoˉêy
  22. {
  23.   unsigned i=0,j=0;
  24.     for(i=0;i<n;i++)
  25.     {
  26.       for(j=0;j<120;j++);
  27.     }
  28. }
  29. //*************************ds18b20****************************************
  30. void Write_DS18B20(unsigned char dat)
  31. {
  32.         unsigned char i;
  33.         for(i=0;i<8;i++)
  34.         {
  35.                 DQ = 0;
  36.                 DQ = dat&0x01;
  37.                 delay(5);
  38.                 DQ = 1;
  39.                 dat >>= 1;
  40.         }
  41.         delay(5);
  42. }
  43. unsigned char Read_DS18B20(void)
  44. {
  45.         unsigned char i;
  46.         unsigned char dat;

  47.         for(i=0;i<8;i++)
  48.         {
  49.                 DQ = 0;
  50.                 dat >>= 1;
  51.                 DQ = 1;
  52.                 if(DQ)  
  53.                 {
  54.                         dat |= 0x80;
  55.                 }            
  56.                 delay(5);
  57.         }
  58.         return dat;
  59. }
  60. bit init_ds18b20(void)
  61. {
  62.           bit initflag = 0;
  63.          
  64.           DQ = 1;
  65.           delay(12);
  66.           DQ = 0;
  67.           delay(80);
  68.           DQ = 1;
  69.           delay(10);
  70.           initflag = DQ;     
  71.           delay(5);

  72.           return initflag;
  73. }
  74. unsigned char Readtemp(void)
  75. {
  76.           char temp;  

  77.           init_ds18b20();
  78.           Write_DS18B20(0xCC);
  79.           Write_DS18B20(0x44);
  80.           delay(100);

  81.           init_ds18b20();
  82.           Write_DS18B20(0xCC);
  83.           Write_DS18B20(0xBE);
  84.     delay(100);
  85.           a = Read_DS18B20();
  86.           b = Read_DS18B20();

  87.           temp = ((b*256+a)>>4);   

  88.           return temp;
  89. }

  90. //*********************1602************************************
  91. void writedat(unsigned char dat)
  92. {
  93.   RS=1;
  94.     RW=0;  
  95.     E=0;   
  96.     P0=dat;
  97.     delay(5);
  98.     E=1;
  99.     E=0;
  100. }

  101. void writecom(unsigned char com)
  102. {
  103.   RS=0;
  104.     RW=0;  
  105.     E=0;  
  106.     P0=com;
  107.     delay(5);
  108.     E=1;
  109.     E=0;
  110. }
  111. void initlcd()
  112. {
  113.   writecom(0x38);  
  114.     writecom(0x0c);  
  115.     writecom(0x06);  
  116.     writecom(0x01);  
  117. }

  118. /*******************DòáDoÅ*************************************
  119. void disply18b20Rom(char Rom)
  120. {
  121.         char h,l;
  122.         l=Rom&0x0f;
  123.         h=Rom&0xf0;
  124.         h>>=4;
  125.         if((h>=0x00)&&(h<=0x30))
  126.         {
  127.                 writedat(h+0x30);
  128.         }
  129.                 else
  130.                         writedat(h+0x37);
  131.                 if((l>=0x00)&&(l<=0x09))
  132.                 {
  133.                         writedat(l+0x30);
  134.                 }
  135.                 else
  136.                         writedat(l+0x37);
  137.                
  138.         }*/

  139. //*************oˉêy********************************************
  140. void display()//ÏÔê¾oˉêy
  141. {
  142.         unsigned int temp0=0,temp1=0,temp2=0,i=0;
  143.         temp0=readtemp/100+'0';
  144.         temp1=(readtemp%100)/10+'0';
  145.         temp2=readtemp%10+'0';
  146.         writecom(0x80);  
  147.         delay(5);            
  148.         while(s[i]!='\0')
  149.         {
  150.           writedat(s[i]);
  151.                 delay(5);
  152.                 i++;
  153.         }
  154.         
  155.         writecom(0x80+6);  
  156.         delay(5);
  157.         writedat(' ');
  158.         delay(5);
  159.         writedat(str[temp0]);
  160.         delay(5);           
  161.         writedat(str[temp1]);
  162.         delay(5);            
  163.         writedat(str[temp2]);
  164.         delay(5);   
  165.   writedat('.');
  166.         delay(5);        
  167.         writedat('0');
  168.         delay(5);
  169.         writedat(0xDF);
  170.         delay(5);         
  171.         writedat('C');
  172.         delay(5);           
  173. }
  174. void displayfu()
  175. {
  176.         unsigned int temp0=0,temp1=0,temp2=0,i=0;
  177.         temp0=~readtemp/100+'0';
  178.         temp1=(~readtemp%100)/10+'0';
  179.         temp2=~readtemp%10+'0';
  180.         writecom(0x80);  
  181.         delay(5);            
  182.         while(s[i]!='\0')
  183.         {
  184.           writedat(s[i]);
  185.                 delay(5);
  186.                 i++;
  187.         }
  188.         
  189.         writecom(0x80+6);  
  190.         delay(5);
  191.         writedat('-');
  192.         delay(5);
  193.         writedat(str[temp0]);
  194.         delay(5);           
  195.         writedat(str[temp1]);
  196.         delay(5);            
  197.         writedat(str[temp2]);
  198.         delay(5);   
  199.   writedat('.');
  200.         delay(5);        
  201.         writedat('0');
  202.         delay(5);
  203.         writedat(0xDF);
  204.         delay(5);         
  205.         writedat('C');
  206.         delay(5);   
  207. }
  208. //************************Ö÷oˉêy******************************
  209. void main()
  210. {
  211.           int i;
  212.         initlcd();/*
  213.         void disply18b20Rom(char Rom);
  214. Write_DS18B20(0x33);
  215.         delay(1);
  216. a =Read_DS18B20();
  217.         b =Read_DS18B20();
  218.         c=Read_DS18B20();
  219.         d =Read_DS18B20();
  220.         e=Read_DS18B20();
  221.         f=Read_DS18B20();
  222.         g =Read_DS18B20();
  223.         h = Read_DS18B20();
  224.         writecom(0x80+0x40);
  225.         display18b20Rom(h);
  226. display18b20Rom(g);
  227. display18b20Rom(f);
  228. display18b20Rom(e);
  229. display18b20Rom(d);
  230. display18b20Rom(c);
  231. display18b20Rom(b);
  232. display18b20Rom(a);*/

  233.         while(1)
  234.         {
  235.                 if(Readtemp()==0)
  236.                 {
  237.                         writecom(0x01);
  238.                         readtemp=0;
  239.                         display();
  240.                 }
  241.                 else if(Readtemp()<150)
  242.                 {
  243.                         readtemp=Readtemp();
  244.                         display();
  245.                 }
  246.                 else
  247.                 {
  248.                         int a=0;
  249.                         a=Readtemp();
  250.                         readtemp=a-257;
  251.                         displayfu();
  252.                 }
  253.         if((readtemp>=20)||(readtemp<=10))
  254.                 {
  255.                         for(i=0;1>0;i++)
  256.                 {
  257.                         led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;
  258.                 buzz=1;
  259.                 delay(500);
  260.                         led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;led8=0;
  261.                 buzz=0;
  262.                         delay(500);
  263.                 }
  264.         }
  265.         }
  266. }
復制代碼



回復

使用道具 舉報

ID:744809 發表于 2021-11-15 11:41 | 顯示全部樓層
這是做仿真還是實物?原理圖不放上來嗎
回復

使用道具 舉報

ID:879348 發表于 2021-11-15 11:46 | 顯示全部樓層
就問誰會耐心看完代碼,提問也要自己把范圍縮小
回復

使用道具 舉報

ID:624769 發表于 2021-11-15 12:46 | 顯示全部樓層
一,最大的可能, LED沒接,不然就不是說顯示不出溫度,而是說溫度顯示: xxxxxx.
二,第二大可能,18B20沒有連接,不然就不會說顯示不出溫度,而是說18B20回傳是:xxxxxx
三,可能調試都沒調試過, 不然就會說串口回傳 xxxx 屬于正常范圍,但是傳給LED顯示時為:xxxxxx
回復

使用道具 舉報

ID:976493 發表于 2021-11-15 14:04 來自手機 | 顯示全部樓層
原理圖呢,說明白你遇到的問題
回復

使用道具 舉報

ID:71233 發表于 2021-11-15 14:15 | 顯示全部樓層
如果LCD能顯示的話,我懷疑是延時不符合18B20的時序。18B20的時序是很嚴格的。
回復

使用道具 舉報

ID:446156 發表于 2021-11-15 15:27 | 顯示全部樓層
DS18B20連接的IO口必須處于開漏狀態,我對51不熟不知道P1口能不能設置為開漏狀態,但是P0口是可以作為開漏輸出的。還有必須加上拉電阻一般10K就行。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线a视频 | 日韩一区二区三区在线 | 亚洲成色777777在线观看影院 | 久久精品aaa| 欧美亚洲综合久久 | 国产一区二区影院 | 欧洲免费视频 | 罗宾被扒开腿做同人网站 | 精品国产免费人成在线观看 | 福利视频三区 | 亚洲性综合网 | 国产精品免费在线 | 色久五月 | 色婷婷国产精品综合在线观看 | 亚洲一区二区三区欧美 | 日本一二三区高清 | 成人精品国产一区二区4080 | 国精品一区 | 黄色片a级 | 日日摸夜夜添夜夜添精品视频 | 久久久一二三 | 成人在线不卡 | 午夜一区二区三区在线观看 | 国产精品久久av | 日韩欧美一区二区三区 | 国产精品一区二区三区在线 | 成人字幕网zmw | 欧美自拍另类 | 日韩欧美成人一区二区三区 | 成人av免费在线观看 | av日韩高清 | 91亚洲精品在线观看 | 日韩视频在线观看一区二区 | 久久久91精品国产一区二区三区 | 中文字幕一区二区三 | 欧美日韩一区二区电影 | 日韩一区二区在线观看 | 成人免费福利视频 | 亚洲福利在线观看 | 国产精品揄拍一区二区 | 九九亚洲精品 |