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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

第19章 單總線DS18B20通信(無線通信)

  [復制鏈接]
跳轉到指定樓層
樓主
51單片機輕松入門—基于STC15W4K系列(C語言版)
李友全
編著 詳見:http://www.zg4o1577.cn/bbs/dpj-37954-1.html

第19章 單總線DS18B20通信(無線通信)
1 電路圖
2 程序移植
3 多點測溫

DS18B20是一種常用的高精度數字溫度傳感器,長距離(1KM以上)無線通信

在實際工程中也經常用到。

1 電 路 圖

DS18B20是一種很常用的數字溫度傳感器,溫度檢測范圍是-55~+125度,手冊 說明在-10~+85度范圍內檢測誤差為±0.5度,作者在自己的產品中隨機抽樣驗證 了幾只傳感器,在-25度誤差0.1度,+25度與+50度誤差小于0.1度,可見這種傳感 器實際精度是很高的,傳感器引腳如圖19-1所示,工作電壓范圍是3.0~5.5V,通 常使用+5V,電源接反或接錯一般是不會損壞傳感器的,對于單只DS18B20的使

用,我們按圖19-2連接即可。







2 程序移植

例 19.1 單 只 DS18B20 的 溫 度 檢 測 , 測 溫 范 圍 -55 ~ +125 度 , 1602 液 晶 顯 示 。 R/C 時 鐘 頻 率 :

22.1184MHz。程序移植時只需要修改DS18B20.H中的18B20信號引腳定義(sbit DQ=P1^5;)與myfun.c
中的延時函數參數保證延時時間基本準確即可,主要程序代碼與運行結果如圖所示。
while(1)
{
gettemp();
if(flag) // 負溫度
{
WriteChar(0,1,'-');
}
if(!flag) // 正溫度
{
WriteChar(0,1,'+');
}
WriteChar(1,1,baiw); WriteChar(2,1,shiw);
WriteChar(3,1,gew);
WriteChar(4,1,'.'); WriteChar(5,1,point_1);
WriteChar(6,1,point_2); WriteChar(7,1,point_3);
WriteChar(8,1,point_4);
SetCur(NoCur); // 有顯示無光標
}


3 多點測溫
當一個系統只使用幾只18B20進行溫度檢測時,可將它們的信號端分別接到單片機的幾個IO 口上,然后使用前面介紹的單點溫度檢測程序即可分別讀出傳感器溫度,當一個系統使用幾 百只甚至更多的18B20進行溫度檢測時,需要將多只18B20信號端與電源端分別并接到一起, 多點測溫首先必須取得各個傳感器代碼,類似每個人的身份證號碼一樣是沒有重復的。
例19-4 讀取18B20內部代碼。程序說明:此程序讀取P1口(P1.0、P1.1、P1.2、P1.3)4只

DS18B20代碼并發送給計算機,計算機只接收顯示數據,不向單片機發送任何信息,效果如圖 所示,前面的數據01、02、03、04分別表示單片機P1.0、P1.1、P1.2、P1.3引腳,后面的8 字節才是18B20的內部代碼,代碼這里就不寫出來了,需要的讀者請查看配套資源。

下圖是通過計算機操作,運用無線電波傳送數據的完整結構圖,整個系統使

用一臺計算機作主機對數據進行顯示與存儲,使用多個單片機作分機對18B20 進行溫度采集。

單片機系統電路圖,只畫了1組IO口,可同時使用多組IO口



多點測溫程序(部分文件預覽,如需下載全部源碼請下載本帖附件):ds18b20.h文件:
  1. #include "DS18b20.h"
  2. #include "myfun.h"
  3. /****************《51單片機輕松入門-基于STC15W4K系列》配套例程 *************
  4. ★★★★★★★★★★★★★★★★★★★★★★★★
  5. 《51單片機輕松入門-基于STC15W4K系列》 一書已經由北航出版社正式出版發行。
  6.   作者親手創作的與教材配套的51雙核實驗板(2個MCU)對程序下載、調試、仿真方便,不需要外部
  7.   仿真器與編程器,這種設計方式徹底解決了系統中多個最高優先級誰也不能讓誰的中斷競爭問題。
  8.   QQ群:STC51-STM32(3) :515624099 或 STC51-STM32(2):99794374。
  9.         驗證信息:STC15單片機
  10.   郵箱:[email]xgliyouquan@126.com[/email]
  11.   ★★★★★★★★★★★★★★★★★★★★★★★★*/

  12. unsigned char  *p;
  13. extern unsigned char Port,Pin;        
  14. extern unsigned char ReceivdID_buff[8];
  15. extern unsigned char temp_buff[9];
  16. /****************************************************************/
  17. //P0的Pin腳置1 Pin為腳所在地址,如第3腳就是0x04。
  18. void Set1toP0()
  19. {
  20.         P0|=Pin;
  21. }
  22. /**************************************************************/
  23. //P0的Pin腳置0,Pin為腳所在地址,如第3腳就是0x04。
  24. void Set0toP0()
  25. {
  26.         P0&=~Pin;
  27. }
  28. /********************************************************/
  29. //檢查P0的Pin腳電平,為0返回0,為1返回非0
  30. unsigned char CheckP0Level()
  31. {
  32.         return(P0&Pin);
  33. }
  34. /********************************************************/
  35. unsigned char DS18B20_Reset()
  36. {
  37.         unsigned char x=0;
  38.         DIR=1;                        // 單片機輸出                                         
  39.         delay(3);            // 延時約2uS,等待硬件穩定         
  40.         Set1toP0();     //DQ=1;  DQ拉高                                         
  41.                         DQTest=1;   //時間調整觀察參考引腳
  42.         delay(3);            //延時約2uS                                                
  43.         Set0toP0();     //DQ=0;  DQ拉低                                    
  44.                     DQTest=0;          //時間調整觀察參考引腳
  45.         delay720us();   // 要求延時 480us~960us (這里取中心值720uS)         
  46.         Set1toP0();     //DQ=1;  DQ拉高釋放總線                                                
  47.                             DQTest=1;          //時間調整觀察參考引腳
  48.                         // 以下是由單片機產生"復位脈沖"
  49.         delay(3);            // 延時約2uS,等待硬件穩定                                    
  50.         DIR=0;                        // 單片機輸入                                                            
  51.         delay(205);     // 要求延時大于60 us  (這里取75uS)                  
  52.         x=CheckP0Level();   //x=DQ;  DS18B20產生"存在脈沖"
  53.                         // 檢測DQ 如果為低,說明復位成功,DS18B20存在
  54.                         // 如果為高,說明復位失敗,DS18B20損壞或不存在
  55.         delay500us();   // 讓18B20釋放總線,避免影響到下一步操作。
  56.         DIR=1;          // 單片機輸出
  57.         delay(3);            // 延時約2uS,等待硬件穩定
  58.         Set1toP0();                // 總線拉高
  59.                                         DQTest=1;          //時間調整觀察參考引腳
  60.         return x;            // 返回復位結果
  61. }
  62. //單字節寫入P0上18b20子程序(低位在前,高位在后)
  63. void WriteByteP0 (unsigned char dat)
  64. {
  65.         unsigned char i;
  66.     DIR=1;                        // 單片機輸出
  67.         delay(3);            // 延時約2uS,等待硬件穩定        
  68.         for (i=0;i<8;i++)
  69.         {
  70.             Set1toP0();          //DQ=1;  將數據線置為高電平
  71.                                           DQTest=1;        //時間調整觀察參考引腳
  72.                 delay(3);          //兩次寫過程間隔大于1us,這里延時約2uS(沒考慮外部調用時間)
  73.                 Set0toP0();          //DQ=0; 開始一個寫過程
  74.                                           DQTest=0;        //時間調整觀察參考引腳
  75.                 delay(9);     // 低電平保持1us以上,這里延時約4uS,
  76.             if(dat&0x01)  // dat & 0x01;  最低位移出需要寫入的數據
  77.                 {
  78.                         Set1toP0();
  79.                 }
  80.                 else
  81.                 {
  82.                         Set0toP0();
  83.                 }
  84.             delay(178);     // 延時65uS,寫過程開始15us后DS18B20對數據線進行采樣
  85.             Set1toP0();                // DQ=1; 釋放總線
  86.                                                 DQTest=1;        //時間調整觀察參考引腳
  87.             dat >>= 1;
  88.         }
  89. }

  90. //從P0上18b20讀取單字節子程序(低位在前,高位在后)
  91. unsigned char ReadByteP0()
  92. {
  93.         unsigned char i,dat=0;
  94.         for(i=0;i<8;i++)
  95.         {
  96.                 dat=dat>>1;
  97.                 DIR=1;                      // 輸出
  98.                 delay(3);           // 延時約2uS,等待硬件穩定        
  99.                 Set1toP0();           //DQ=1;  將數據線置為高電平
  100.                                            DQTest=1;        //時間調整觀察參考引腳        ////////
  101.                 delay(9);      // 兩次讀過程間隔大于1us  (實測約4uS) ////////
  102.                 Set0toP0();           // DQ=0;  開始一個讀過程
  103.                                            DQTest=0;        //時間調整觀察參考引腳 //////////
  104.                 delay(9);      // 低電平保持1us以上 (實測約4uS)         /////////
  105.                 Set1toP0();           // DQ=1;釋放總線進入接收狀態                         ////
  106.                                            DQTest=1;   //時間調整觀察參考引腳      //
  107.                 delay(3);           // 延時約2uS,讀時間片開始后15us內主機對數據線進行采樣
  108.                 DIR=0;                   // 輸入
  109.                 delay(3);           // 延時約2uS,等待硬件穩定
  110.                 if(CheckP0Level())
  111.                 {
  112.                         dat |= 0x80;
  113.                 }
  114.                 delay(165);   // 讀周期60us<t<120us (60="" us)
  115.         }
  116.         return(dat);
  117. }
  118. //從P0上18b20連續讀取數個字節子程序
  119. void read_bytesP0 (unsigned char j)
  120. {
  121.         unsigned char i;
  122.         for(i=0;i<j;i++)
  123.         {
  124.                 *p = ReadByteP0();
  125.                 p++;
  126.         }
  127. }

  128. //匹配ROM命令,只有P0上8位ID相同的18b20才能響應以后的命令
  129. void MatchRomP0()
  130. {
  131.         unsigned char i;
  132.         DS18B20_Reset();
  133.         WriteByteP0(Match_ROM);  //發出匹配ROM命令0x55,后帶8字節ROM ID
  134.         for(i=0;i<8;i++)
  135.         {
  136.                 WriteByteP0(ReceivdID_buff[i]);
  137.         }
  138. }
  139. //讀取P0上溫度子程序
  140. void GetTempP0 ()
  141. {
  142.         DS18B20_Reset ();
  143.         MatchRomP0();                            // 匹配ROM
  144.         WriteByteP0(Read_Scratchpad);   // 讀暫存器命令0xbe(RAM)
  145.         p = temp_buff;
  146.         read_bytesP0(9);
  147. }
  148. //P0-P2上所有溫度傳感器開始采集溫度存放在傳感器上內存中
  149. void TempConvertAll()
  150. {
  151.         unsigned char i;
  152.         unsigned char a;        
  153.         a=Pin;                       // 保存Pin不被此程序修改,Pin只能由主程序提供
  154.         Pin=0x01;                   // 1——8 腳分別進行轉換
  155.         DIR=1;                       // 輸出
  156.         delay(3);               // 延時約2uS,等待硬件穩定        
  157.         for(i=0;i<8;i++)   // P0上的18b20開始采集溫度
  158.         {
  159.                 DS18B20_Reset ();
  160.                 WriteByteP0(Skip_ROM);   // 跳過ROM操作(0xCC)
  161.                 WriteByteP0(Convert_T);  // 啟動溫度轉換(0x44)
  162.                 Set1toP0();                                 // 釋放總線
  163.                 Pin<<=1;
  164.         }
  165.         delay800ms();   // 發出溫度轉換命令后800ms必定已轉換完成。     
  166.         Pin=a;         
  167. }
  168. /******************************************************/  
  169. //得到P0-P2口上Pin腳的溫度,存放在temp_buff.
  170. void GetTemp()
  171. {
  172.         switch(Port)
  173.         {
  174.                 case 0x00:GetTempP0();break;
  175.                 // case 0x01:GetTempP1();break;   
  176.                 default:break;
  177.         }
  178. }
復制代碼

主程序:


  1. /****************《51單片機輕松入門-基于STC15W4K系列》配套例程 *************
  2. ★★★★★★★★★★★★★★★★★★★★★★★★
  3. 《51單片機輕松入門-基于STC15W4K系列》 一書已經由北航出版社正式出版發行。
  4.   作者親手創作的與教材配套的51雙核實驗板(2個MCU)對程序下載、調試、仿真方便,不需要外部
  5.   仿真器與編程器,這種設計方式徹底解決了系統中多個最高優先級誰也不能讓誰的中斷競爭問題。
  6.   QQ群:STC51-STM32(3) :515624099 或 STC51-STM32(2):99794374。
  7.         驗證信息:STC15單片機
  8.   郵箱:[email]xgliyouquan@126.com[/email]
  9.   ★★★★★★★★★★★★★★★★★★★★★★★★*/

  10. //18B20多點測溫程序,11.0592M晶振
  11. #include "STC15W4K.H"
  12. #include "usart.h"
  13. #include "ds18b20.h"
  14. #define CONVERT 0x44        // 收主機轉換溫度命令
  15. #define GETTEMP 0xaa        // 收主機讀溫度命令
  16. #define GETHOUSE 0xcc       // 收主機讀倉庫濕度命令
  17. #define GETAREA 0xd6        // 收主機讀庫區濕度命令
  18. #define GETSTATE 0x11       // 收主機通信檢測命令
  19. #define SENDAREA 0xdd       // 向主機發庫區濕度
  20. #define SENDHOUSE 0xce      // 向主機發倉庫濕度
  21. #define CVTOK 0x88          // 向主機發轉換溫度完畢命令
  22. #define CPUOK 0x22                        // 向主機發通信正常命令
  23. #define TEMPDATA 0xbb       // 向主機發溫度命令         
  24. unsigned char Port,Pin,count=0;         //單片機端口P0、P1、P2、P3,端口具體引腳(1-8),接收計數器

  25. unsigned char send_buff[14];          // 發送緩沖區14字節,加幀頭幀尾共16字節每幀
  26. unsigned char ReceivdID_buff[8];  // 存儲主機發來的rom ID為8字節
  27. unsigned char receivedcmd[16];    // 存放接收到的命令 1:幀頭,2發送機號,3本機ID,4命令,5port,6pin,7-14ID,15CRC,16幀尾
  28. unsigned char temp_buff[9];       // 存儲讀取的溫度字節,讀溫度為9字節,讀rom ID為8字節

  29. unsigned char code CrcTable [256]={
  30. 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
  31. 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
  32. 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
  33. 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
  34. 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
  35. 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
  36. 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
  37. 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
  38. 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
  39. 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
  40. 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
  41. 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
  42. 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
  43. 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
  44. 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
  45. 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};        

  46. //反序CRC查表校驗
  47. unsigned char crc8_f_table (unsigned char *ptr, unsigned char len)
  48. {
  49.         unsigned char i;
  50.         unsigned char crc =0;
  51.         for(i=0;i<len;i++) 查表校驗
  52.         {
  53.                 crc= CrcTable[crc^ptr[i]];   // ^是按位異或運算符
  54.         }
  55.         return(crc);
  56. }
  57. void port_mode()            // 端口模式
  58. {
  59.         P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
  60.         P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
  61. }
  62. void main()         
  63. {
  64.         unsigned char i;
  65.         unsigned char crccount;          // crc校驗次數        
  66.         unsigned char crc_data;          // crc校驗結果
  67.         port_mode();                  // 所有IO口設為準雙向弱上拉方式。
  68.         com_init();                              // 串口初始化         
  69.         while(1)
  70.         {                        
  71.                 if(count==16)    //count是全局變量,表示串口已收到的字節數
  72.                 {         
  73.                         count=0;
  74.                                          
  75.                         for(i=0;i<14;i++)
  76.                         {
  77.                                 send_buff[i]=receivedcmd[i+1];          //取出接收幀2——15字節(舍棄幀頭幀尾),準備CRC校驗
  78.                         }               
  79.                         crc_data=crc8_f_table(send_buff,14);  //發送緩沖區14字節全部參與CRC校驗               
  80.                         if(crc_data==0&&receivedcmd[15]==FMEND)//如果CRC正確且幀尾有效
  81.                         {         
  82.                                 switch(send_buff[2])
  83.                                 {
  84.                                         case CONVERT:                           // 溫度轉換命令 0x44
  85.                                         {
  86.                                                 REN=0;                 // 禁止串口接收
  87.                                                 ES=0;                  // 關串口中斷
  88.                                                 TempConvertAll();
  89.                                                 ES=1;                  //開串口中斷
  90.                                                 REN=1;
  91.                                                 send_buff[0]=MYID;           // 本分機ID
  92.                                                 send_buff[1]=MAINID;   // 主機ID=0x00
  93.                                                 send_buff[2]=CVTOK;           // 溫度轉換完畢命令0x88
  94.                                                 crc_data=crc8_f_table(send_buff,13);
  95.                                                 send_buff[13]=crc_data;
  96.                                                 sendcombytes();                   // 發送一幀完整數據
  97.                                                 break;
  98.                             }
  99.                                         case GETTEMP:                           // 讀取溫度命令 0xaa
  100.                                         {                                                
  101.                                                 Port=send_buff[3];          // 確定端口(P0、P1、P2、P3)
  102.                                                 Pin=send_buff[4];          // 確定端口具體引腳(數據0x80、0x40、0x20、0x010、0x08、0x04、0x02、0x01)
  103.                                                 for(i=0;i<8;i++)
  104.                                                 {
  105.                                                         ReceivdID_buff[i]=send_buff[i+5];        // 匹配ROM命令必須用ReceivdID_buff[i]
  106.                                                 }
  107.                                                 REN=0;                // 禁止串口接收
  108.                                                 ES=0;                 // 關串口中斷
  109.                                                 crccount=0;
  110.                                                 do                                          //同一ID傳感器允許讀4次溫度,4次失敗則退出。
  111.                                                 {
  112.                                                         GetTemp();
  113.                                                         crc_data=crc8_f_table(temp_buff,9);         //要使用校驗碼,讀溫度必然是連續9字節
  114.                                                         crccount++;
  115.                                                 }while(!(crccount>4||crc_data==0));             //校驗次數>4或校驗正確立即退出循環
  116.                                                 ES=1;                 // 開串口中斷
  117.                                                 REN=1;                // 允許串口接收                                                                                                
  118.                                                 send_buff[0]=MYID;
  119.                                                 send_buff[1]=MAINID;
  120.                                                 send_buff[2]=TEMPDATA;        // 向主機發溫度命令        0xbb
  121.                                                 if(crc_data==0)
  122.                                                 {
  123.                                                         send_buff[3]=temp_buff[0];        // 原始溫度低字節
  124.                                                         send_buff[4]=temp_buff[1];        // 原始溫度高字節
  125.                                                 }
  126.                                                 else
  127.                                                 {
  128.                                                         send_buff[3]=0xff;
  129.                                                         send_buff[4]=0xff;
  130.                                                 }
  131.                                                 for(i=0;i<8;i++)
  132.                                                 {
  133.                                                         send_buff[i+5]=ReceivdID_buff[i];        
  134.                                                 }                                                        
  135.                                                 crc_data=crc8_f_table(send_buff,13);
  136.                                                 send_buff[13]=crc_data;
  137.                                                 sendcombytes();
  138.                                                 break;
  139.                                         }
  140.                                         case GETSTATE:                           // 主機通信檢測命令0x11,確認主機與分機通信是否正常  
  141.                                         {
  142.                                                 send_buff[0]=MYID;
  143.                                                 send_buff[1]=MAINID;
  144.                                                 send_buff[2]=CPUOK;           // CPUOK 0x22
  145.                                                 for(i=0;i<10;i++)
  146.                                                 {
  147.                                                         send_buff[i+3]=0x55;
  148.                                                 }
  149.                                                 crc_data=crc8_f_table(send_buff,13);
  150.                                                 send_buff[13]=crc_data;
  151.                                                 sendcombytes();
  152.                                                 break;
  153.                                         }
  154.                                         case GETHOUSE:                                  //倉庫濕度命令 0xce
  155.                                         {
  156.                                                 ;        
  157.                                         }
  158.                                         case GETAREA:                              // 庫區濕度命令 0xd6
  159.                                         {
  160.                                                 ;
  161.                                         }
  162.                                         default:break;
  163.                                 }                                 
  164.                         }                        
  165.                 }
  166.         }
  167. }
復制代碼


單片機單只18B20測溫程序(使用Float處理數據):http://www.zg4o1577.cn/bbs/dpj-47289-1.html
單只18B20測溫程序(1602寫字符串方式) :http://www.zg4o1577.cn/bbs/dpj-47288-1.html
單只DS18B20測溫程序(1602寫單字符方式):http://www.zg4o1577.cn/bbs/dpj-47287-1.html
IR中斷方式的單片機紅外解碼程序http://www.zg4o1577.cn/bbs/dpj-47283-1.html
DS18B20無線多點測溫單片機程序:http://www.zg4o1577.cn/bbs/dpj-47291-1.html
單片機讀取DS18B20內部溫度上傳到上位機(電腦) :http://www.zg4o1577.cn/bbs/dpj-47290-1.html

5個完整源碼下載: 第19章 單總線18B20.rar (6.95 MB, 下載次數: 169)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:188698 發表于 2017-4-12 22:18 | 只看該作者
您好為啥我打不開呢
回復

使用道具 舉報

板凳
ID:190731 發表于 2017-4-29 17:37 | 只看該作者
支持支持支持
回復

使用道具 舉報

地板
ID:75062 發表于 2017-10-23 17:20 | 只看該作者
謝謝分享!!
回復

使用道具 舉報

5#
ID:393796 發表于 2018-10-23 23:52 | 只看該作者
好東西!感謝樓主
回復

使用道具 舉報

6#
ID:510842 發表于 2019-10-30 21:01 | 只看該作者
感謝樓主,太有用了
回復

使用道具 舉報

7#
ID:462361 發表于 2019-12-24 13:09 | 只看該作者
太好用了,感謝分享!!!
回復

使用道具 舉報

8#
ID:584195 發表于 2021-8-6 21:15 | 只看該作者
無私的樓主!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级毛片久久99精品蜜桃 | 9191av| 久久亚洲一区二区 | 九九热免费在线观看 | 国产精品久久 | 亚洲第一成人影院 | 亚洲午夜精品一区二区三区他趣 | 高清av在线| 在线观看视频h | 国产高清视频在线观看 | 精品欧美一区二区久久久伦 | 亚洲欧美激情视频 | 中文字幕成人av | 国产第二页 | 玖玖国产| 韩国精品一区 | 久久99蜜桃综合影院免费观看 | 久久综合一区二区三区 | 国产98色在线 | 日韩 | 精品欧美乱码久久久久久1区2区 | 亚洲一区二区视频 | av黄色在线观看 | 玖玖色在线视频 | 久久精品在线免费视频 | 久久一二区 | 国产一级在线观看 | 天天久| 天天干天天干 | 欧美a在线| 日本精品一区二区三区视频 | 天天干天天谢 | 99精品国自产在线观看 | 欧美一区二区三区在线观看视频 | 一区二区三区视频免费看 | 免费在线精品视频 | 成人av播放 | 欧美性久久 | 日本三级电影免费 | 亚洲一区二区高清 | 麻豆国产一区二区三区四区 | 激情综合五月 |