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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1851|回復: 1
收起左側

stm32測溫 通道2的搜索程序就是把1的搜索程序改為2,程序運行只能正常顯示通道1...

[復制鏈接]
ID:340210 發表于 2018-6-18 23:25 | 顯示全部樓層 |閱讀模式
主程序:
  1. u8 ID_Buff_1[MAXNUM][8];

  2. u8 ID_Buff_2[MAXNUM][8];
  3. int main(void)
  4. {
  5. u8 num1,num2,i,j,k=0;
  6.   u8 IN1,IN2;
  7. short temperature;   
  8. delay_init();       //延時函數初始化   
  9. uart_init(9600);   //串口初始化為9600
  10. LED_Init();      //初始化與LED連接的硬件接口
  11.   LCD_Init();
  12.   POINT_COLOR=RED;//設置字體為紅色
  13. LCD_ShowString(30,50,200,16,16,"DS18B20 TEST");
  14. LCD_ShowString(30,80,200,16,16,"2018/6/15");
  15. POINT_COLOR=BLUE;//設置字體為藍色  
  16.   while(DS18B20_Init_1()&&(k<10)) //DS18B20初始化
  17. {
  18.   k++;
  19. }

  20.   if(k>=10)
  21. {
  22.   IN1 =0;
  23.   LCD_ShowString(30,100,200,16,16,"DS18B20_1 is NO!");

  24. }
  25. else
  26. {
  27.   IN1 =1;
  28.   num1 = DS18B20_Search_ROM_1(ID_Buff_1,MAXNUM);  
  29.     printf("通道1總線上最大掛載的DS18B20數量為: %d\r\n",MAXNUM);  
  30.     printf("通道1搜索到的DS18B20數量為: %d\r\n",num1);  
  31. }
  32. k=0;

  33. while(DS18B20_Init_2()&&(k<10)) //DS18B20初始化
  34. {
  35.   k++;
  36. }

  37.   if(k>=10)
  38. {
  39.   IN2 =0;
  40.   LCD_ShowString(30,160,200,16,16,"DS18B20_2 is NO!");

  41. }
  42. else
  43. {
  44.   IN2 =1;
  45.   num2 = DS18B20_Search_ROM_2(ID_Buff_2,MAXNUM);  
  46.     printf("通道2總線上最大掛載的DS18B20數量為: %d\r\n",MAXNUM);  
  47.     printf("通道2搜索到的DS18B20數量為: %d\r\n",num2);  
  48. }


  49.         
  50.     while(1)
  51.     {
  52.    LED1 = ~LED1;
  53.       delay_ms (500);   
  54.      
  55.    if(IN1)
  56.    {
  57.     printf("\r\n通道1存在\r\n");
  58.     LCD_ShowString(30,110,200,16,16,"DS18B20_1 OK");
  59.     DS18B20_Start_1 ();
  60.      for(i = 0;i < num1;i ++)  
  61.        {  
  62.      temperature = DS18B20_Get_Tempers_1(ID_Buff_1[i]);
  63.          printf("\r\n DS18B20 No%d ID: ",i+1);
  64.         
  65.          for(j = 0;j < 8;j ++)  
  66.          {
  67.      
  68.        //LCD_ShowString(30,110,200,16,16,ID_Buff[i][j]);
  69.             printf("%02X ",ID_Buff_1[i][j]);  
  70.          }
  71.      
  72.      
  73.      if(temperature<0)
  74.      {
  75.       LCD_ShowChar(30+50,160,'-',16,0);
  76.       temperature =-temperature ;
  77.      
  78.      
  79.       printf("\r\n 通道1第%d個DS18B20溫度為:-%.2f ℃",i+1,temperature/100.0);
  80.      }
  81.      else
  82.      {
  83.       LCD_ShowChar(30+50,160,' ',16,0);
  84.        printf("\r\n 通道1第%d個DS18B20溫度為:%.2f ℃",i+1,temperature/100.0);
  85.       
  86.       
  87.      }
  88.      
  89.      LCD_ShowString(30,120+i*20,200,16,16,"temp1:    .  C");
  90.      LCD_ShowNum (30+50+8,120+i*20,temperature /100,2,16);
  91.      LCD_ShowNum(30+50+32,120+i*20,temperature %100,1,16);
  92.       delay_ms (1000);
  93.         }   
  94.    }
  95.    if(IN2)
  96.    {
  97.     printf("\r\n通道2存在\r\n");
  98.     LCD_ShowString(30,130,200,16,16,"DS18B20_2 OK");
  99.     DS18B20_Start_2 ();
  100.      for(i = 0;i < num2;i ++)  
  101.        {  
  102.      temperature = DS18B20_Get_Tempers_2(ID_Buff_2[i]);
  103.          printf("\r\n DS18B20 No%d ID: ",i+1);
  104.         
  105.          for(j = 0;j < 8;j ++)  
  106.          {
  107.      
  108.        //LCD_ShowString(30,110,200,16,16,ID_Buff[i][j]);
  109.             printf("%02X ",ID_Buff_2[i][j]);  
  110.          }
  111.      
  112.      
  113.      if(temperature<0)
  114.      {
  115.       LCD_ShowChar(30+50,160,'-',16,0);
  116.       temperature =-temperature ;
  117.      
  118.      
  119.       printf("\r\n 通道2第%d個DS18B20溫度為:-%.2f ℃",i+1,temperature/100.0);
  120.      }
  121.      else
  122.      {
  123.       LCD_ShowChar(30+50,160,' ',16,0);
  124.        printf("\r\n 通道2第%d個DS18B20溫度為:%.2f ℃",i+1,temperature/100.0);
  125.       
  126.       
  127.      }
  128.      
  129.      LCD_ShowString(60,160+i*30,200,16,16,"temp2:    .  C");
  130.      LCD_ShowNum (60+50+8,160+i*30,temperature /100,2,16);
  131.      LCD_ShowNum(60+50+32,160+i*30,temperature %100,1,16);
  132.       delay_ms (1000);
  133.         }   
  134.    }
  135.    
  136.       if(i == num1)  
  137.         {  
  138.             //i = 0;  
  139.             printf("\r\n");  
  140.         }
  141.   }   
  142. }
  143. 通道1的搜索程序:
  144. u8 DS18B20_Search_ROM_1(u8 (*pID)[8],u8 Num)  
  145. {   
  146.     unsigned char k,l=0,ConflictBit,m,n;  
  147.     unsigned char BUFFER_1[MAXNUM];  
  148.     unsigned char ss[64];
  149.   unsigned char s=0;  
  150.     u8 num = 0;      
  151.     do  
  152.     {  
  153.         DS18B20_Rst_1();
  154.         DS18B20_Check_1();        //復位DS18B20總線  
  155.         DS18B20_Write_Byte_1(0xf0); //搜索ROM    0xf0  
  156.         for(m=0;m<8;m++)  
  157.         {  
  158. //            unsigned char s=0;  
  159.             for(n=0;n<8;n++)  
  160.             {  
  161.                 k=DS18B20_Read_2Bit_1();  // 讀兩位數據
  162.                 k=k&0x03;  
  163.                 s= s>>1;  
  164.                 if(k==0x01)       //0000 0001 如果讀到的數據為0
  165.                 {            
  166.                     DS18B20_Write_Bit_1(0);//寫0,使總線上為0的器件響應  
  167.                     ss[(m*8+n)]=0;  
  168.                 }  
  169.                 else if(k==0x02)    //0000 0010 如果讀到的數據為1
  170.                 {  
  171.                     s=s|0x80;  
  172.                     DS18B20_Write_Bit_1 (1);//寫1,使總線上為1的器件響應   
  173.                     ss[(m*8+n)]=1;  
  174.                 }  
  175.                 else if(k==0x00)//如果讀取到的數據為00,則有沖突,需進行沖突位判斷  
  176.                 {               
  177.                     ConflictBit=m*8+n+1;                  
  178.                     if(ConflictBit>BUFFER_1[l])//如果沖突位大于棧頂,則寫0   
  179.                     {                        
  180.                         DS18B20_Write_Bit_1 (0);  
  181.                         ss[(m*8+n)]=0;                                                
  182.                         BUFFER_1[++l]=ConflictBit;                        
  183.                     }  
  184.                     else if(ConflictBit<BUFFER_1[l])//如果沖突位小于棧頂,則寫以前的數據
  185.                     {  
  186.                         s=s|((ss[(m*8+n)]&0x01)<<7);  
  187.                         DS18B20_Write_Bit_1 (ss[(m*8+n)]);  
  188.                     }  
  189.                     else if(ConflictBit==BUFFER_1[l])//如果沖突位等于棧頂,則寫1
  190.                     {  
  191.                         s=s|0x80;  
  192.                         DS18B20_Write_Bit_1 (1);  
  193.                         ss[(m*8+n)]=1;  
  194.                         l=l-1;  
  195.                     }  
  196.                 }  
  197.                 else//如果讀到的數據為0x03(0000 0011),則說明單總線上不存在任何設備
  198.                 {  
  199.                     return num; //搜索完成,返回搜索到的個數
  200.                 }
  201.         delay_us(5);
  202.             }  
  203.             pID[num][m]=s;
  204.       s=0;
  205.         }  
  206.         num=num+1;
  207.     }  
  208.     while(BUFFER_1[l]!=0&&(num<MAXNUM));   
  209.       
  210.     return num;     //返回搜索到的個數
  211. }
復制代碼

通道2的搜索程序就是把1的搜索程序改為2,程序運行只能正常顯示通道1的傳感器序列號及對應的溫度值。而通道2只能顯示1個序列號及對應的溫度值
  


回復

使用道具 舉報

ID:340210 發表于 2018-6-18 23:26 | 顯示全部樓層
當吧通道1去掉,通道2正常運行
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线播放 | 亚洲 欧美 在线 一区 | 久久99精品国产 | 欧美综合久久久 | 国产成人久久 | 青青草综合网 | 亚洲午夜视频 | 欧美黑人一级爽快片淫片高清 | 国产精品不卡视频 | 日韩亚洲一区二区 | 精精国产xxxx视频在线播放 | 琪琪午夜伦伦电影福利片 | 成人精品高清 | 国产成人免费一区二区60岁 | 国产欧美日韩 | 国产精品久久久亚洲 | 激情欧美日韩一区二区 | 国产成人精品久久二区二区91 | 欧美成人激情视频 | 欧美亚洲国产日韩 | 怡红院免费的全部视频 | 在线观看的av | 色悠悠久 | 97视频在线看 | 黑人精品xxx一区一二区 | 99国产精品视频免费观看一公开 | 91伦理片 | 国产精品一区二区三区在线 | 中文字幕的av | 国产成人精品av | 久草网址 | wwwxx在线观看 | 黑人性hd| 成人av一区二区在线观看 | 成人免费av在线 | av先锋资源 | 国产高清一区二区三区 | 国产精品久久久久久久久 | 日韩高清www | 免费观看日韩av | 欧美一级艳情片免费观看 |