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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機串口 18B20 接收 時好時壞

[復制鏈接]
跳轉到指定樓層
樓主
開起pwm(開燈) 后 18B20 數值出錯 請各位大師幫我看看   O(∩_∩)O謝謝
程序如下
  1. #include <reg51.h>
  2. #include <temp.h>
  3. #include <stdio.h>              //printf頭文件
  4. #define uc unsigned char
  5. #define uint unsigned int
  6. float tp;
  7. uc Trg,off;                                   //Trg(triger) 單擊鍵值全局變量
  8. uc Cont;                                  //Cont(continue)長擊鍵值全局變量
  9. uc flag,Repeat,i,flag_t,flag_a,s[10]="",j=0,miao,fen,y[20]="",shi,pwm,upwm,flagpwm,flag_b,PWM_COUNT;
  10. bit lamp1;
  11. int time,Intrcnt;
  12. sbit led =P1^0; //工作指示燈
  13. sbit power=P1^1; //電源
  14. sbit lamp=P1^2; //燈
  15. sbit sound=P1^3; //耳機或音響
  16. sbit air =P1^4; //空調
  17. sbit power1=P1^5; //電源1
  18. sbit power2=P1^6; //電源2
  19. void uart();
  20. void KeyRead();
  21. void KeyProc();
  22. void LcdDisplay(int temp);

  23. void init()
  24. {
  25.         TMOD=0X22;  //雙定時器都打開工作方式2
  26.         SCON=0X50;
  27.         TH1=0Xfd;    //4800的波特率
  28.         TL1=0Xfd;
  29.     TH0=0x00;  //100us
  30.     TL0=0xA4;
  31.         ET0=1;         //ET0=1;開啟定時器0中斷
  32.         TR0=1;
  33.         TR1=1;
  34.         EA=1;
  35.         ES=1;                 //ES=1;開啟串口中斷
  36. //        PS=1;       //串口中斷有最高優先級
  37.         PT0=1;                //設定定時器T0為高優先級中斷
  38.         P1=0x00;                //P1口全部低電平
  39.         P2=0xff;                //P2口全部高電平
  40.         upwm=0;
  41.         pwm=65;
  42.         Repeat=0;
  43.         flagpwm=0;
  44.         for(i=0;i<18;i++)
  45.         {
  46.         y[i]='g';
  47.         }
  48.         y[11]=65;
  49.         y[20]='\0';
  50. }
  51. void uart()             //串口發送
  52. {
  53.            TI=1;      //printf之前必須將T1置為1才行。
  54.         printf ("%s\n",y);//向上位機發送數據
  55.         while(!TI);                  //等待發送完畢
  56.         TI=0;                         //清除發送中斷標志
  57.         flag_t=0;                //清除標志位
  58.         flag=0;                        //清除標志位
  59. }
  60. void timer0() interrupt 1 //定時器0中斷函數
  61. {
  62.         time++;
  63.         Intrcnt++;
  64.          PWM_COUNT++;
  65.         if(255 == lamp1)
  66.         {
  67.            if(PWM_COUNT <= pwm){lamp=1;}      //判斷是否到了點亮LED的時候           
  68.            else{lamp=0;}
  69.            if(PWM_COUNT>=115){PWM_COUNT=0;}
  70.         }
  71.         else{lamp=0;}
  72.         
  73.         if(time==3600 ) //5000比實際慢 因為運行其它程序會占用時間
  74.         {
  75.           time = 0;
  76.           led=~led;
  77.           flag_a++;
  78.                     
  79.         }
  80. }
  81. void kaiguan()
  82. {
  83.          if(flag_t==1)   
  84.          {
  85.                 if(s[0]=='*')//*燈控制符
  86.                  {
  87.                         if(s[1]=='1')
  88.                          {
  89.                                 lamp1=255;         //開燈
  90.                                 y[10]='k';
  91.                          }
  92.                         if(s[1]=='2')
  93.                          {
  94.                                 lamp1=0;        //關燈
  95.                                 y[10]='g';
  96.                                 upwm=0;               
  97.                          }
  98.                    }
  99.                 if(s[0]=='!')//*空調控制符
  100.                  {
  101.                         if(s[1]=='1')
  102.                          {
  103.                                 air=1;         //開
  104.                                 y[9]='k';
  105.                              }
  106.                         if(s[1]=='2')
  107.                           {
  108.                                 air=0;        //關
  109.                                 y[9]='g';                                                  
  110.                           }
  111.                  }
  112.                 if(s[0]=='@')//*耳機控制符
  113.                  {
  114.                         if(s[1]=='1')
  115.                           {
  116.                                 sound=1;         //耳機        
  117.                                 y[8]='k';
  118.                          }
  119.                         if(s[1]=='2')
  120.                          {
  121.                                 sound=0;        //音響
  122.                                 y[8]='g';                                                         
  123.                          }
  124.                  }
  125.                 if(s[0]=='%')//*電源1控制符
  126.                  {
  127.                         if(s[1]=='1')
  128.                           {
  129.                                 power1 = 1;         //開
  130.                                 y[7]='k';
  131.                          }
  132.                         if(s[1]=='2')
  133.                          {
  134.                                 power1=0;        //關
  135.                                 y[7]='g';                                                  
  136.                          }
  137.                  }
  138.                 if(s[0]=='^')//*電源2控制符
  139.                  {
  140.                         if(s[1]=='1')
  141.                           {
  142.                                 power2=1;         //開
  143.                                 y[6]='k';
  144.                          }
  145.                         if(s[1]=='2')
  146.                          {
  147.                                 power2=0;        //關
  148.                                 y[6]='g';                                                         
  149.                          }
  150.                  }

  151.                 if(s[0]=='


  152. )//*時間
  153.                  {
  154.                    miao=((s[1]-48)*10+s[2]-48);           //48是ASCLL碼數字0
  155.                    fen=((s[3]-48)*10+s[4]-48);
  156.                    shi=((s[5]-48)*10+s[6]-48);
  157.                  }
  158.                 if(s[0]=='&')//&pwm控制符
  159.                  {               
  160.                    pwm=s[1];         //開
  161.                    y[11]=pwm;
  162.                  }
  163.                 uart();
  164.                 flag=0;
  165.         }
  166. }
  167. void shijian() //發送時間
  168. {

  169.         
  170.          if(flag_a==2)
  171.          {         
  172.           flag_a=0;
  173.           miao++;           
  174.           if(miao>59)
  175.           {
  176.                   miao=0;
  177.                 fen++;
  178.                 if(fen>59)
  179.                 {
  180.                  fen=0;
  181.                  shi++;
  182.                  if(shi>23)
  183.                  shi=0;
  184.                 }        
  185.           }
  186.           if(miao<=9)
  187.           {
  188.                   y[0]=48;         //48是ASCLL碼數字0
  189.                   y[1]=48+miao;         
  190.           }
  191.           else
  192.           {
  193.                 y[0]=48+miao/10;
  194.                 if(miao%10==0)
  195.                 {
  196.                  y[1]=48;
  197.                 }
  198.                 else y[1]=48+miao%10;         
  199.           }
  200.           if(fen<=9)
  201.           {
  202.                   y[2]=48;
  203.                   y[3]=48+fen;         
  204.           }
  205.           else
  206.           {
  207.                 y[2]=48+fen/10;
  208.                 if(fen%10==0)
  209.                 {
  210.                  y[3]=48;
  211.                 }
  212.           else y[3]=48+fen%10;         
  213.           }
  214.           if(shi<=9)
  215.           {
  216.                   y[4]=48;
  217.                   y[5]=48+shi;         
  218.           }
  219.           else
  220.           {
  221.                 y[4]=48+shi/10;
  222.                 if(shi%10==0)
  223.                 {
  224.                  y[5]=48;
  225.                 }
  226.           else y[5]=48+shi%10;         
  227.           }                              
  228.           uart();
  229.           LcdDisplay(Ds18b20ReadTemp());
  230.           if(power==1)
  231.           {
  232.            off--;
  233.            if(off<15)
  234.                 power=0;           
  235.           }
  236.           y[18]=off;                    
  237.          }
  238. }
  239. void main()
  240. {        
  241.         init();
  242.         while(1)
  243.         {                        
  244.            kaiguan();  //發送當前開關狀態
  245.            shijian();        //發送當前時間                           
  246.          KeyRead();  //將每個子程序都掃描一遍
  247.          KeyProc();        
  248.            while(1)
  249.          {
  250.            if(Intrcnt>600)                // 一直在等,直到20ms時間到
  251.              {
  252.                Intrcnt=0;
  253.                break;               // 返回主循環
  254.              }
  255.          }

  256.     }
  257. }
  258. void ser() interrupt 4          //串口中斷函數
  259. {

  260.             
  261.         if(RI)       //接收數據,手動將RI清0
  262.         {
  263.                 RI=0;
  264.                 off=60;
  265.                 if(flag==0&&j!=0)//1.循環賦值為'\0'(字符串結尾標志符),j=0,為了第二次傳遞字符串是又是從頭輸出
  266.                         {                         //2.flag為0和j不為0時,保證是第二次及以后,傳輸字符串(控制輸出格式)
  267.                                   for(j=0;s[j]!='#'&&j<10;j++)
  268.                                 s[j]='\0';//'\0'字符串結尾標志符
  269.                                 j=0;
  270.                   }
  271.                                 s[j]=SBUF;
  272.                                 flag=1;
  273.                 if(s[j]=='#'||j==9)//以'#'作為傳送字符串的結尾符,我定義的字符數組最長為10所以9也應該結束。
  274.                         flag_t=1;
  275.                   else
  276.                         j++;
  277.         }
  278. }

  279. void KeyRead()                                        //讀鍵獲取鍵值
  280. {
  281.     uc ReadData = P2^0xFF;   //ReadData 臨時變量,"^"按位異或運算:如果a、b兩個值不相同!
  282.                                                             //則異或結果為1。如果a、b兩個值相同,異或結果為0。
  283.     Trg = ReadData & (ReadData ^ Cont); //獲取短按鍵值 按位與(&)兩個數相同時才為1
  284.     Cont = ReadData;                    //獲取長按鍵值

  285. }

  286. void KeyProc()                                                //判斷鍵值執行相應任務
  287. {
  288.         //uc cnt_plus,cnt_plus1;                //定義2個計時變量               
  289.                 if (Trg & 1)                         //1 2 4 8 16 32 64 128
  290.                  {                                                 // 如果按下的是1 ,而且你長按這按鍵也沒有用,
  291.                           power=1;
  292.                         off=255;        
  293.                  }
  294.                 if(Trg &4)
  295.                  {
  296.                    air=~air;
  297.                    if(air==1)
  298.                    y[9]='k';
  299.                    else
  300.                            y[9]='g';
  301.                         uart();                          
  302.                  }
  303.                 if(Trg &8)
  304.                  {
  305.                    sound=~sound;
  306.                    if(sound==1)
  307.                    y[8]='k';
  308.                    else
  309.                            y[8]='g';
  310.                         uart();                           
  311.                  }
  312.                 if(Trg &16)
  313.                  {
  314.                    power1=~power1;
  315.                    if(power1==1)
  316.                    y[7]='k';
  317.                    else
  318.                            y[7]='g';
  319.                         uart();                           
  320.                  }
  321.                 if(Trg &32)
  322.                  {
  323.                    power2=~power2;
  324.                    if(power2==1)
  325.                    y[6]='k';
  326.                    else
  327.                    y[6]='g';
  328.                    uart();                                                     
  329.                  }                 
  330.         if (Cont & 2 )        //如果按著不放
  331.         {
  332.                         flagpwm=0;
  333.                         if(0 == upwm)
  334.                         {
  335.                                 lamp = ~lamp;
  336.                                 lamp1 = ~lamp1;
  337.                                 if(1==lamp)
  338.                                 y[10]='k';
  339.                                 else
  340.                                 y[10]='g';                                
  341.                                 upwm=1;
  342.                                 uart();
  343.                         }
  344.                         if(1 == upwm && 255 ==lamp1 )
  345.                         {
  346.                            pwm++;
  347.                            if(pwm>115)
  348.                            pwm=115;
  349.                            y[11]=pwm;
  350.                            flag_b=1;
  351.                            uart();
  352.                         }
  353.                         if(2 == upwm && 255 ==lamp1)
  354.                         {
  355.                            pwm--;
  356.                            if(pwm<15)
  357.                            pwm=15;
  358.                            y[11]=pwm;
  359.                            flag_b=2;
  360.                            uart();
  361.                         }                                            
  362.         }
  363.                 flagpwm++;
  364.                 if(0 == Cont && 1==flag_b && upwm!=0)
  365.                  upwm=2;
  366.                 if(0 == Cont && 2==flag_b && upwm!=0)
  367.                  upwm=1;
  368.                 if(0 == Cont && flagpwm>20)
  369.                 {
  370.                   flagpwm=0;
  371.                   upwm=0;
  372.                 }
  373.                                                       
  374. }            

  375. void LcdDisplay(int temp)          //lcd顯示
  376. {

  377.         
  378.          if(temp< 0)                                //當溫度值為負數
  379.           {

  380.                 //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
  381.                 y[12]=45;
  382.                 temp=temp-1;
  383.                 temp=~temp;
  384.                 tp=temp;
  385.                 temp=tp*0.0625*100+0.5;        
  386.                 //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  387.                 //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  388.                 //算由?.5,還是在小數點后面。

  389.           }
  390.          else
  391.           {                        

  392.                 y[12]=43;
  393.                 tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
  394.                 //如果溫度是正的那么,那么正數的原碼就是補碼它本身
  395.                 temp=tp*0.0625*100+0.5;        
  396.                 //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  397.                 //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  398.                 //算加上0.5,還是在小數點后面。
  399.         }
  400.         y[13]='0'+temp / 10000;
  401.         y[14]='0'+ temp % 10000 / 1000;
  402.         y[15]='0'+temp % 1000 / 100;
  403.         y[16]='0'+temp % 100 / 10;
  404.          y[17]='0'+temp % 10;
  405. }

  406. #ifndef __TEMP_H_
  407. #define __TEMP_H_

  408. #include<reg51.h>
  409. //---重定義關鍵詞---//
  410. #ifndef uchar
  411. #define uchar unsigned char
  412. #endif

  413. #ifndef uint
  414. #define uint unsigned int
  415. #endif

  416. //--定義使用的IO口--//
  417. sbit DSPORT=P3^7;

  418. //--聲明全局函數--//
  419. void Delay1ms(uint );
  420. uchar Ds18b20Init();
  421. void Ds18b20WriteByte(uchar com);
  422. uchar Ds18b20ReadByte();
  423. void  Ds18b20ChangTemp();
  424. void  Ds18b20ReadTempCom();
  425. int Ds18b20ReadTemp();

  426. #endif

  427. #include"temp.h"
  428. /*******************************************************************************
  429. * 函 數 名         : Delay1ms
  430. * 函數功能                   : 延時函數
  431. * 輸    入         : 無
  432. * 輸    出         : 無
  433. *******************************************************************************/

  434. void Delay1ms(uint y)
  435. {
  436.         uint x;
  437.         for( ; y>0; y--)
  438.         {
  439.                 for(x=110; x>0; x--);
  440.         }
  441. }
  442. /*******************************************************************************
  443. * 函 數 名         : Ds18b20Init
  444. * 函數功能                   : 初始化
  445. * 輸    入         : 無
  446. * 輸    出         : 初始化成功返回1,失敗返回0
  447. *******************************************************************************/

  448. uchar Ds18b20Init()
  449. {
  450.         uchar i;
  451.         DSPORT = 0;                         //將總線拉低480us~960us
  452.         i = 70;        
  453.         while(i--);         //延時642us
  454.         DSPORT = 1;                        //然后拉高總線,如果DS18B20做出反應會將在15us~60us后總線拉低
  455.         i = 0;
  456.         while(DSPORT)        //等待DS18B20拉低總線
  457.         {
  458.                 i++;
  459.                 if(i>5)//等待>5MS
  460.                 {
  461.                         return 0;//初始化失敗
  462.                 }
  463.                 Delay1ms(1);        
  464.         }
  465.         return 1;//初始化成功
  466. }

  467. /*******************************************************************************
  468. * 函 數 名         : Ds18b20WriteByte
  469. * 函數功能                   : 向18B20寫入一個字節
  470. * 輸    入         : com
  471. * 輸    出         : 無
  472. *******************************************************************************/

  473. void Ds18b20WriteByte(uchar dat)
  474. {
  475.         uint i, j;

  476.         for(j=0; j<8; j++)
  477.         {
  478.                 DSPORT = 0;                       //每寫入一位數據之前先把總線拉低1us
  479.                 i++;
  480.                 DSPORT = dat & 0x01;  //然后寫入一個數據,從最低位開始
  481.                 i=6;
  482.                 while(i--); //延時68us,持續時間最少60us
  483.                 DSPORT = 1;        //然后釋放總線,至少1us給總線恢復時間才能接著寫入第二個數值
  484.                 dat >>= 1;
  485.         }
  486. }
  487. /*******************************************************************************
  488. * 函 數 名         : Ds18b20ReadByte
  489. * 函數功能                   : 讀取一個字節
  490. * 輸    入         : com
  491. * 輸    出         : 無
  492. *******************************************************************************/


  493. uchar Ds18b20ReadByte()
  494. {
  495.         uchar byte, bi;
  496.         uint i, j;        
  497.         for(j=8; j>0; j--)
  498.         {
  499.                 DSPORT = 0;//先將總線拉低1us
  500.                 i++;
  501.                 DSPORT = 1;//然后釋放總線
  502.                 i++;
  503.                 i++;//延時6us等待數據穩定
  504.                 bi = DSPORT;         //讀取數據,從最低位開始讀取
  505.                 /*將byte左移一位,然后與上右移7位后的bi,注意移動之后移掉那位補0。*/
  506.                 byte = (byte >> 1) | (bi << 7);                                                  
  507.                 i = 4;                //讀取完之后等待48us再接著讀取下一個數
  508.                 while(i--);
  509.         }                                
  510.         return byte;
  511. }
  512. /*******************************************************************************
  513. * 函 數 名         : Ds18b20ChangTemp
  514. * 函數功能                   : 讓18b20開始轉換溫度
  515. * 輸    入         : com
  516. * 輸    出         : 無
  517. *******************************************************************************/

  518. void  Ds18b20ChangTemp()
  519. {
  520.         Ds18b20Init();
  521.         Delay1ms(1);
  522.         Ds18b20WriteByte(0xcc);                //跳過ROM操作命令                 
  523.         Ds18b20WriteByte(0x44);            //溫度轉換命令
  524.         Delay1ms(100);        //等待轉換成功,而如果你是一直刷著的話,就不用這個延時了

  525. }
  526. /*******************************************************************************
  527. * 函 數 名         : Ds18b20ReadTempCom
  528. * 函數功能                   : 發送讀取溫度命令
  529. * 輸    入         : com
  530. * 輸    出         : 無
  531. *******************************************************************************/

  532. void  Ds18b20ReadTempCom()
  533. {        

  534.         Ds18b20Init();
  535.         Delay1ms(1);
  536.         Ds18b20WriteByte(0xcc);         //跳過ROM操作命令
  537.         Ds18b20WriteByte(0xbe);         //發送讀取溫度命令
  538. }
  539. /*******************************************************************************
  540. * 函 數 名         : Ds18b20ReadTemp
  541. * 函數功能                   : 讀取溫度
  542. * 輸    入         : com
  543. * 輸    出         : 無
  544. *******************************************************************************/

  545. int Ds18b20ReadTemp()
  546. {
  547.         int temp = 0;
  548.         uchar tmh, tml;
  549.         Ds18b20ChangTemp();                                 //先寫入轉換命令
  550.         Ds18b20ReadTempCom();                        //然后等待轉換完后發送讀取溫度命令
  551.         tml = Ds18b20ReadByte();                //讀取溫度值共16位,先讀低字節
  552.         tmh = Ds18b20ReadByte();                //再讀高字節
  553.         temp = tmh;
  554.         temp <<= 8;
  555.         temp |= tml;
  556.         return temp;
  557. }
復制代碼



捕獲.JPG (41.13 KB, 下載次數: 120)

捕獲.JPG

捕獲1.JPG (41.99 KB, 下載次數: 125)

捕獲1.JPG

程序 - 副本1.5.rar

338.56 KB, 下載次數: 4

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

使用道具 舉報

沙發
ID:420836 發表于 2021-2-8 08:27 | 只看該作者
當PWM開啟時,定時器中斷會擾亂18B20的延遲。
回復

使用道具 舉報

板凳
ID:115204 發表于 2021-2-8 08:43 | 只看該作者
有可能是你在Ds18b20ReadByte函數里總線釋放的時間有些短,適當添加一點延時再試試,就是i++那里
回復

使用道具 舉報

地板
ID:871393 發表于 2021-2-8 09:06 | 只看該作者
我用hx711時, 發現負數的移位有可能得出錯誤結果(估計是編譯器有差異), 使用一般加減乘除試試
回復

使用道具 舉報

5#
ID:373388 發表于 2021-2-8 10:39 | 只看該作者
18b20在讀寫時,時序比較嚴格,中斷以后基本上都會打亂時序,讀數錯誤,利用crc校驗, 驗證數據,如果數據不正確,重新讀數;
回復

使用道具 舉報

6#
ID:373388 發表于 2021-2-8 13:07 | 只看該作者
上傳一個ds18b20的crc校驗程序,供參考。 crc8.rar (1.03 KB, 下載次數: 8)

回復

使用道具 舉報

7#
ID:290576 發表于 2021-2-8 15:15 | 只看該作者
justinchill 發表于 2021-2-8 08:43
有可能是你在Ds18b20ReadByte函數里總線釋放的時間有些短,適當添加一點延時再試試,就是i++那里

加上兩個空指令后 直接就錯了
回復

使用道具 舉報

8#
ID:290576 發表于 2021-2-8 15:16 | 只看該作者
xhaity 發表于 2021-2-8 13:07
上傳一個ds18b20的crc校驗程序,供參考。

文件錯誤
回復

使用道具 舉報

9#
ID:213173 發表于 2021-2-8 17:44 | 只看該作者
如果只是為了調燈的亮度,沒必要設置這么高頻率的PWM,中斷里運行的語句越少越好。否則會破壞18b20讀寫時序而出錯。串口通訊也要把中斷方式改查詢方式為好。
回復

使用道具 舉報

10#
ID:390416 發表于 2021-2-8 18:48 | 只看該作者
你這個代碼居然有死等幾百us  ,去看看我們 人人學會單片機的代碼
http://www.zg4o1577.cn/bbs/dpj-200968-1.html
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美一区二区三区久久久 | 亚洲一区二区三区四区五区中文 | 999久久久免费精品国产 | 国产在线精品一区二区三区 | 性高湖久久久久久久久3小时 | 日皮视频免费 | 国产黄a一级 | 国产成人免费视频 | 黄色毛片在线观看 | 精品久久久久一区二区国产 | 国产做a爱免费视频 | 91精品久久久久久久久中文字幕 | 一本大道久久a久久精二百 欧洲一区二区三区 | 欧美成人一区二区三区 | 婷婷综合网 | 国产精品欧美一区二区三区不卡 | 久在线| 香蕉av免费| 欧美二区在线 | 波多野结衣中文字幕一区二区三区 | 国产成人免费一区二区60岁 | 国产乱码精品一区二区三区av | 99精品久久久 | 久久国产激情视频 | 成人在线一区二区 | 欧美国产视频一区二区 | 久草热在线 | 日韩欧美久久精品 | 日韩欧美中文字幕在线观看 | 日韩欧美三级 | 亚洲视频在线播放 | 交专区videossex农村 | 狠狠操狠狠干 | 日韩精品免费播放 | 国产激情综合五月久久 | 久久精品免费 | 男女视频免费 | 欧美一区二区成人 | 国产在线视频一区二区 | 不卡一区二区在线观看 | 亚洲久久一区 |