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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1659|回復: 3
收起左側

編譯錯誤 怎么樣DS18B20的測溫與顯示(整數加小數)仿真不出來

[復制鏈接]
ID:985176 發表于 2021-11-27 00:08 | 顯示全部樓層 |閱讀模式
錯誤.png
  1. #include"reg52.h"
  2. sbit DQ=P1^4;
  3. void Delay_OneWire(unsigned int t)
  4. {
  5.         
  6.         unsigned char i;
  7.         while(t--){
  8.                 for(i=0;i<12;i++);
  9.         }
  10. }
  11. void Write_DS18B20(unsigned char dat)
  12. {
  13.         unsigned char i;
  14.         for(i=0;i<8;i++)
  15.         {
  16.                 DQ=0;
  17.                 DQ=dat&0x01;
  18.     Delay_OneWire(5);
  19.     DQ=1;
  20.     dat>>=1;               
  21.   }
  22.         Delay_OneWire(5);
  23. }
  24. unsigned char Read_DS18B20(void)
  25. {
  26.         unsigned char i;
  27.         unsigned char dat;
  28.   for(i=0;i<8;i++)
  29.         {
  30.                 DQ=0;
  31.     dat>>=1;
  32.                 DQ=1;
  33.                 if(DQ)
  34.                 {
  35.                         dat|=0x80;
  36.     }
  37.                 Delay_OneWire(5);
  38.   }
  39.         return dat;
  40. }
  41. //DS18B203õê¼»ˉ
  42. bit int_ds18b20(void)
  43. {
  44.         bit initflag=0;
  45.         DQ=1;
  46.         Delay_OneWire(12);
  47.         DQ=0;
  48.         Delay_OneWire(80);
  49.         DQ=1;
  50.         Delay_OneWire(10)
  51.         initflag=DQ;
  52.         Delay_OneWire(5);
  53.         return initflag;
  54. }
  55. unsigned char rd_temperature(void)
  56. {
  57.         unsigned char low,high;
  58.         char temp;
  59.         init_ds18b20();      
  60.         Write_DS18B20(0xCC);
  61.         Write_DS18B20(0x44);
  62.         Delay_OneWire(200);  
  63.         init_ds18b20();   
  64.         Write_DS18B20(0xCC);
  65.         Write_DS18B20(0xBE);
  66.         low=Read_DS18B20();  
  67.         high=Read_DS18B20();
  68.         temp=high<<4;        
  69.         temp|=(low>>4);      
  70.         return temp;
  71. }

  72. #include"reg52.h"
  73. #include"onewire.h"
  74. #include"absacc.h"
  75. unsigned char dspbuf[8]={10,10,10,10,10,10,0,0}
  76. unsigned char dspcom=0;
  77. unsigned char intr;  
  78. bit temper_flag=0;  
  79. code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

  80. void display(void);
  81. void main(void)      
  82. {
  83.         unsigned char temperature;
  84.   TMOD|=0x01;            
  85.   TH0=(65536-2000)/256;
  86.   TL0=(65536-2000)%256;
  87.   EA=1;
  88.   ET0=1;        
  89.   TR0=1;        
  90.   while(1);
  91.         {
  92.                 if(temper_flag)
  93.                 {
  94.                         temper_flag=0;
  95.                         temperature=rd_temperature();
  96.     }
  97.         
  98.                 dspbuf[6]=temperature/10;
  99.                 dspbuf[7]=temperature%10;
  100.   }
  101. }
  102. void_isr_timer_0(void) interrupt 1
  103. {
  104.         TH0=(65536-2000)/256;
  105.   TL0=(65536-2000)%256;
  106.         display();
  107.         if(++intr==100)
  108.         {
  109.                 intr=0;
  110.                 temper_flag=1;
  111.   }
  112. }
  113. void display(void)
  114. {
  115.         P2=((P2&0x1f)|0xE0);
  116.         P0=0Xff;
  117.         P2&=0x1f;
  118.         P2=((P2&0x1f)|0xC0);
  119.         P0=1<<dspcom;
  120.         P2&=0x1f;
  121.         P2=((P2&0x1f)|0XE0);
  122.         P0=tab[dspbuf[dspcom]];
  123.         P2&=0x1f;
  124.         if(++dspcom==8){
  125.                 dspcom=4;
  126.         }
  127. }
  128. unit rd_temperature(void)
  129. {
  130.         uchar low,high;
  131.         unit temp;
  132.         init_ds18b20();
  133.         Write_DS18B20(0xCC);
  134.         Write_DS18B20(0x44);
  135.         Delay_OneWrite(400);
  136.         init_ds18b20();
  137.         Write_DS18B20(0xCC);
  138.         Write_DS18B20(0xBE);
  139.         low=Read_DS18B20();
  140.         high=Read_DS18b20();
  141.         temp=high;
  142.         temp<<=8;
  143.         temp|=low;
  144.         temp=temp*(0.625);
  145.         return temp;
  146. }

  147. void display(void)
  148. {
  149.         P2=((P2&0x1f)|0xE0);
  150.         P0=0xff;
  151.         P2&=0x1f;
  152.         P2=((P2&0x1f)|0xC0);
  153.         P0=1<<dspcom;
  154.         P2&=0x1f;
  155.         P2=((P2&0x1f)|0xE0);
  156.         if(dspcom==6)
  157.         {
  158.                 P0=tab[dspbuf[dspcom]]&0x7f;
  159.   }
  160.         else
  161.                 P0=tab[dspbuf[dspcom]];
  162.           P2&=0x1f;
  163.         if(++dspcom==8){
  164.                 dspcom=5;
  165.         }
  166. }

復制代碼





回復

使用道具 舉報

ID:213173 發表于 2021-11-27 06:59 | 顯示全部樓層
DS18B20對時序要求比較苛刻,隨意套用別人的代碼不易成功。更不能隨意增減“;”號和改變數據類型。 無標題.jpg

  1. #include"reg52.h"
  2. //#include"onewire.h"
  3. //#include"absacc.h"
  4. sbit DQ=P1^4;
  5. code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
  6. unsigned char dspbuf[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
  7. unsigned char dspcom=0;
  8. unsigned char intr;  
  9. bit temper_flag=0;  

  10. bit init_ds18b20();
  11. void Write_DS18B20(unsigned char dat);
  12. unsigned char Read_DS18B20(void);
  13. unsigned int rd_temperature(void);
  14. void display(void);
  15. void Delay_OneWire(unsigned int t);

  16. void Delay_OneWire(unsigned int t)
  17. {      
  18.         while(t--);
  19. }

  20. void Write_DS18B20(unsigned char dat)
  21. {
  22.         unsigned char i;
  23.         for(i=0;i<8;i++)
  24.         {
  25.                 DQ=0;
  26.                 DQ=dat&0x01;
  27.                 Delay_OneWire(5);
  28.                 DQ=1;
  29.                 dat>>=1;               
  30.         }
  31.         Delay_OneWire(4);
  32. }
  33. unsigned char Read_DS18B20(void)
  34. {
  35.         unsigned char i;
  36.         unsigned char dat;
  37.         for(i=0;i<8;i++)
  38.         {
  39.                 DQ=0;
  40.                 dat>>=1;
  41.                 DQ=1;
  42.                 if(DQ)
  43.                 {
  44.                         dat|=0x80;
  45.                 }
  46.                 Delay_OneWire(4);
  47.         }
  48.         return dat;
  49. }

  50. bit init_ds18b20()
  51. {
  52.         bit initflag=0;
  53.         DQ=1;
  54.         Delay_OneWire(8);
  55.         DQ=0;
  56.         Delay_OneWire(80);
  57.         DQ=1;
  58.         Delay_OneWire(10);
  59.         initflag=DQ;
  60.         Delay_OneWire(20);
  61.         return initflag;
  62. }

  63. unsigned int rd_temperature(void)
  64. {
  65.         unsigned char low,high;
  66.         unsigned int temp;
  67.         init_ds18b20();      
  68.         Write_DS18B20(0xCC);
  69.         Write_DS18B20(0x44);
  70.         Delay_OneWire(2000);  
  71.         init_ds18b20();   
  72.         Write_DS18B20(0xCC);
  73.         Write_DS18B20(0xBE);
  74.         low=Read_DS18B20();  
  75.         high=Read_DS18B20();
  76.         temp=high<<8;        
  77.         temp|=low;      
  78.         return temp;
  79. }

  80. void main(void)      
  81. {
  82.         unsigned int temperature;
  83.         unsigned char tempH,tempL;
  84.         TMOD|=0x01;            
  85.         TH0=(65536-2000)/256;
  86.         TL0=(65536-2000)%256;
  87.         EA=1;
  88.         ET0=1;               
  89.         rd_temperature();
  90.         Delay_OneWire(0xffff);
  91.         TR0=1;
  92.         while(1)
  93.         {
  94.                 if(temper_flag)
  95.                 {
  96.                         temper_flag=0;
  97.                         temperature=rd_temperature();
  98.                         tempH=temperature>>4;
  99.                         tempL=(temperature&0x0f)*0.625;
  100.                         dspbuf[5]=tab[tempH/10];
  101.                         dspbuf[6]=tab[tempH%10]&0x7f;
  102.                         dspbuf[7]=tab[tempL];
  103.                 }
  104.         }
  105. }

  106. void _isr_timer_0(void) interrupt 1
  107. {
  108.         TH0=(65536-2000)/256;
  109.         TL0=(65536-2000)%256;
  110.         display();
  111.         if(++intr==100)
  112.         {
  113.                 intr=0;
  114.                 temper_flag=1;
  115.         }
  116. }

  117. void display(void)
  118. {
  119.         P0=0xff;
  120.         P2=0x01<<dspcom;
  121.         P0=dspbuf[dspcom];
  122.         dspcom=++dspcom%8;
  123. }
  124. /*
  125. unsigned char rd_temperature(void)
  126. {
  127.         uchar low,high;
  128.         unit temp;
  129.         init_ds18b20();
  130.         Write_DS18B20(0xCC);
  131.         Write_DS18B20(0x44);
  132.         Delay_OneWrite(400);
  133.         init_ds18b20();
  134.         Write_DS18B20(0xCC);
  135.         Write_DS18B20(0xBE);
  136.         low=Read_DS18B20();
  137.         high=Read_DS18b20();
  138.         temp=high;
  139.         temp<<=8;
  140.         temp|=low;
  141.         temp=temp*(0.625);
  142.         return temp;
  143. }

  144. void display(void)
  145. {
  146.         P2=((P2&0x1f)|0xE0);
  147.         P0=0xff;
  148.         P2&=0x1f;
  149.         P2=((P2&0x1f)|0xC0);
  150.         P0=1<<dspcom;
  151.         P2&=0x1f;
  152.         P2=((P2&0x1f)|0xE0);
  153.         if(dspcom==6)
  154.         {
  155.                 P0=tab[dspbuf[dspcom]]&0x7f;
  156.         }
  157.         else
  158.                 P0=tab[dspbuf[dspcom]];
  159.         P2&=0x1f;
  160.         if(++dspcom==8)
  161.         {
  162.                 dspcom=5;
  163.         }
  164. }*/

復制代碼







回復

使用道具 舉報

ID:985176 發表于 2021-11-27 09:26 | 顯示全部樓層
wulin 發表于 2021-11-27 06:59
DS18B20對時序要求比較苛刻,隨意套用別人的代碼不易成功。更不能隨意增減“;”號和改變數據類型。

原來是這樣 謝謝呀
回復

使用道具 舉報

ID:397211 發表于 2021-11-27 16:24 | 顯示全部樓層
temp=temp*(0.625);要加幾位小數就擴大多少倍就行了,擴大10倍就是1位小數。。。。。。。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月婷婷亚洲 | 精品成人av | 日本激情视频中文字幕 | 久久久91精品国产一区二区三区 | 欧美一二三 | 国产日韩欧美二区 | 中文字幕高清一区 | 亚洲精品久久久久中文字幕二区 | 亚洲a在线观看 | 亚洲激情在线视频 | 国产精品久久久久久婷婷天堂 | 国产无人区一区二区三区 | 成人国产免费观看 | 2019天天操 | 国产精品一区二区电影 | 91久久久www播放日本观看 | 精品久久网 | 99视频入口| 欧美日韩国产精品 | 成人精品免费视频 | 成人国产精品色哟哟 | 成人福利影院 | av中文字幕在线观看 | 日本亚洲一区 | 久久久久国产一区二区三区 | 国产精品成人一区二区三区夜夜夜 | 欧美激情在线一区二区三区 | 超碰日韩 | 亚洲久久一区 | xx视频在线 | 一区在线播放 | 日韩精品免费 | 精品videossex高潮汇编 | 亚洲乱码国产乱码精品精的特点 | 丝袜一区二区三区 | 精品免费国产一区二区三区 | 久久精品国产99国产精品 | 91视频.com| 精品一区免费 | 中国大陆高清aⅴ毛片 | 亚洲综合大片69999 |