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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS18B20溫度傳感器不能讀溫度,讀出來恒定一個數,應該是延時的問題

[復制鏈接]
跳轉到指定樓層
樓主
5黑幣
#include<reg51.h>
#include<intrins.h>
#include <ctype.h>       
#include <stdlib.h>       

#define LCD_DATA P0
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
unsigned char dispBuff0[16]={'S','E','T',':',' ','.',' ','V',' ',' ',' ','s',' ',' ',' ',};
unsigned char dispBuff1[16]={'T','E','M','P',':',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',};
unsigned char dispBuff2[4]={' ',' ',' ',' ',};
unsigned char dispBuff3[16]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',};
unsigned char dispBuff4[16]={'I','N','P','U','T',' ','4','W','E','I',' ','M','I','M','A',};
unsigned char dispBuff5[16]={' ',' ',' ','M','I','M','A',' ','E','R','R','O','R',' ',' ',};

sbit DQ=P2^3;
unsigned int temperature=0;
unsigned int fuhao=0;

sbit LED1=P1^1;
#define off  1
#define on 0

sbit speaker=P1^0;

void Delay20ms() ;
void LCD_WriteDat(unsigned char lcd_dat);
void LCD_WriteCmd(unsigned char lcd_cmd);
unsigned char LCD_ReadStatus(void);
void LCD_Goto(unsigned char x,unsigned char y);
void LCD_Display(unsigned char row,unsigned char *str);

void delay(unsigned int x)
{
        unsigned char j;
        while(x--)
    {
            for(j=0;j<125;j++);
    }
}

void delay1(unsigned int x)
{
           while(--x);
}

char keyscan()
{
        char skey;
        P3 = 0xfe;
        while((P3 & 0xf0) != 0xf0)       
        {
                delay(10);                                
                while((P3 & 0xf0) != 0xf0)       
                {
                        switch(P3)               
                        {
                                case 0xee: skey = '7'; break;
                                case 0xde: skey = '8'; break;
                                case 0xbe: skey = '9'; break;
                                case 0x7e: skey = '+'; break;
                        }
                        while((P3 & 0xf0) != 0xf0);
                }
        }
        P3 = 0xfd;       
        while((P3 & 0xf0) != 0xf0)
        {
                delay(10);
                while((P3 & 0xf0) != 0xf0)
                {   
                        switch(P3)
                        {
                                case 0xed: skey = '4'; break;
                                case 0xdd: skey = '5'; break;
                                case 0xbd: skey = '6'; break;
                                case 0x7d: skey = '-'; break;
                        }
                        while((P3 & 0xf0) != 0xf0);
                }
        }
        P3 = 0xfb;
        while((P3 & 0xf0) != 0xf0)
        {
                delay(10);
                while((P3 & 0xf0) != 0xf0)
                {
                        switch(P3)
                        {
                                case 0xeb: skey = '1'; break;
                                case 0xdb: skey = '2'; break;
                                case 0xbb: skey = '3'; break;
                                case 0x7b: skey = '.'; break;
                        }
                        while((P3 & 0xf0) != 0xf0);
                }
        }
        P3 = 0xf7;
        while((P3 & 0xf0) != 0xf0)
        {
                delay(10);
                while((P3 & 0xf0) != 0xf0)
                {
                        switch(P3)
                        {
                                case 0xe7: skey = '&'; break;
                                case 0xd7: skey = '0'; break;
                                case 0xb7: skey = '*'; break;
                                case 0x77: skey = '#'; break;
                        }
                        while((P3 & 0xf0) != 0xf0);
                }
        }
        return skey;
}

void Delay20ms()
{
        unsigned int tmp = 50000;
        while(tmp--);
}

void LCD_Init(void)
{
        Delay20ms();
        LCD_WriteCmd(0x38);
        LCD_WriteCmd(0x0c);
        LCD_WriteCmd(0x01);
        LCD_WriteCmd(0x06);
        LCD_Goto(0,0);
}

void LCD_WriteDat(unsigned char lcd_dat)
{
        unsigned char tmp;
        tmp = LCD_ReadStatus();
        while((tmp & 0x80))
        {
                tmp = LCD_ReadStatus();
        }
        LCD_RS = 1;
        LCD_RW = 0;
        LCD_DATA = lcd_dat;
        _nop_();
        LCD_EN = 0;
        _nop_();
        _nop_();
        LCD_EN = 1;      
}

void  LCD_WriteCmd(unsigned char lcd_cmd)
{
        unsigned char tmp;
        tmp = LCD_ReadStatus();
        while((tmp & 0x80))
        {
                tmp = LCD_ReadStatus();
        }
        LCD_RS = 0;
        LCD_RW = 0;
        LCD_DATA = lcd_cmd;
        _nop_();
        LCD_EN = 0;
        _nop_();
        _nop_();
        LCD_EN = 1;
}

unsigned char LCD_ReadStatus(void)
{
        unsigned char tmp;
        #if 0
        LCD_RS = 0;
        LCD_RW = 1;
        LCD_EN = 1;
        tmp = LCD_DATA;
        LCD_EN = 0;
        #endif
        LCD_DATA = 0xff;
        LCD_RS = 0;
        LCD_RW = 1;
        LCD_EN = 0;
        _nop_();
        _nop_();
        LCD_EN = 1;
        tmp = LCD_DATA;
        return tmp;
}

void LCD_Goto(unsigned char x,unsigned char y)
{
        unsigned char tmp;
        if(y)
        {
                tmp = 0xc0 + x;
                LCD_WriteCmd(tmp);
        }
    else
    {
                tmp = 0x80 + x;
                LCD_WriteCmd(tmp);
        }               
}

void LCD_Display(unsigned char row,unsigned char *str)
{
        if(row)
        {
                LCD_Goto(0,1);
        }
        else
        {
                LCD_Goto(0,0);
        }
        while(*str != '\0')
        {
                LCD_WriteDat(*str++);
        }
}

int Init_DS18B20()
{
        unsigned char x=0;
        DQ = 1;   
        delay1(1);
        DQ = 0;      
        delay1(30);
        DQ = 1;      
        delay1(5);
        if(DQ==1)
        {
                x=0;
        }
        else
        {
                x=1;
        }
        delay1(30);
        return x;
}

unsigned char ReadOneChar(void)
{
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--)
        {
            DQ=1;
                _nop_();
                _nop_();
                _nop_();
                DQ = 0;
            dat>>=1;
                delay(1);
            DQ = 1;
                delay(2);
            if(DQ)
                    dat|=0x80;
            delay(5);
        }
   return(dat);
}

void WriteOneChar(unsigned char dat)
{
        unsigned char i=0;
        for (i=8; i>0; i--)
        {
                DQ = 1;
                _nop_();
                _nop_();
                _nop_();
                DQ = 0;
            DQ = dat&0x01;
            delay(2);
            dat>>=1;
        }
}

void ReadTemperature(void)
{        unsigned char readdata[2]={0,0};
        fuhao=0;
        temperature=0;
        delay(40);
        if(Init_DS18B20()==1)
        {       
                WriteOneChar(0xCC);
                WriteOneChar(0x44);
        }
        delay1(30);
        if(Init_DS18B20()==1)
        {       
                WriteOneChar(0xCC);
                WriteOneChar(0xBE);
        }
        delay1(30);
        readdata[0]=ReadOneChar();
        readdata[1]=ReadOneChar();
        readdata[1]<<=8;
        if (readdata[1]>127)
        {
                readdata[0]^=0xff;
                readdata[1]^=0xff;
                fuhao=1;
        }
        temperature =readdata[1]*256+readdata[0] ;
        temperature =temperature*0.625+0.5;
}

void set()
{
        int i;
        char ckey;
        ckey=keyscan();
        if(ckey=='#')
        {
                delay(10);
                i=1;
                while(1)
                {        ckey=keyscan();
                       
                        if(isdigit(ckey)&&i==1)
                        {
                                 dispBuff2[0]=ckey;
                                i=0;
                                dispBuff0[4]=dispBuff2[0];
                                LCD_Display(0,dispBuff0);       
                        }
                        else if(isdigit(ckey)&&i==0)
                        {
                                dispBuff2[1]=ckey;
                                dispBuff0[6]=dispBuff2[1];
                                LCD_Display(0,dispBuff0);
                                break;       
                        }
                        delay(800);
                }
        }
        if(ckey=='*')
        {
                delay(10);
                i=1;
                while(1)
                {        ckey=keyscan();
                       
                        if(isdigit(ckey)&&i==1)
                        {
                                 dispBuff2[2]=ckey;
                                i=0;
                                dispBuff0[9]=dispBuff2[2];
                                LCD_Display(0,dispBuff0);       
                        }
                        else if(isdigit(ckey)&&i==0)
                        {
                                dispBuff2[3]=ckey;
                                dispBuff0[10]=dispBuff2[3];
                                LCD_Display(0,dispBuff0);
                                break;       
                        }
                        delay(800);
                }
        }               
}

int mima()
{
        int i,a;
        char ckey;
        LCD_Display(0,dispBuff4);
        ckey=keyscan();
        if(ckey=='&')
        {
                delay(10);
                i=0;
                while(1)
                {       
                        ckey=keyscan();
                        if(isdigit(ckey)&&i==0)
                        {
                                 dispBuff2[0]=ckey;
                                i=1;
                                dispBuff3[6]=dispBuff2[0];
                                LCD_Display(1,dispBuff3);       
                        }
                        else if(isdigit(ckey)&&i==1)
                        {
                                dispBuff2[1]=ckey;
                                i=2;
                                dispBuff3[7]=dispBuff2[1];
                                LCD_Display(1,dispBuff3);       
                        }
                        else if(isdigit(ckey)&&i==2)
                        {
                                dispBuff2[2]=ckey;
                                i=3;
                                dispBuff3[8]=dispBuff2[2];
                                LCD_Display(1,dispBuff3);       
                        }
                        else if(isdigit(ckey)&&i==3)
                        {
                                dispBuff2[3]=ckey;
                                i=4;
                                dispBuff3[9]=dispBuff2[3];
                                LCD_Display(1,dispBuff3);
                                break;       
                        }
                        delay(800);
                }
        }
        a=(dispBuff2[0]-'0')*1000+(dispBuff2[1]-'0')*100+(dispBuff2[2]-'0')*10+(dispBuff2[3]-'0');
        return a;
}

void timer0() interrupt 1
{        TH0=254;
        TL0=200;
        speaker=!speaker;
}

void main()
{       
        int a,b,d;
        float c;
        LCD_Init();
        TMOD=0x11;
        TH0=254;
        TL0=200;
        ET0=1;  
        EA=1;
        speaker=1;
        m:d=mima();
        if(d==1234)               
        {        while(1)
                {       
                        delay(10);
                        set();
                        ReadTemperature();
                        if (fuhao)
                        {
                                dispBuff1[5]='-';
                        }
                else
                {
                                dispBuff1[5]='+';
                        }
                        dispBuff1[6]=(temperature/1000)%10+'0';
                        dispBuff1[7]=(temperature/100)%10+'0';
                        dispBuff1[8]=(temperature/10)%10+'0';
                         dispBuff1[9]='.';
                        dispBuff1[10]=(temperature)%10+'0';
                        LCD_Display(0,dispBuff0);
                        LCD_Display(1,dispBuff1);
                        a=dispBuff0[4]-'0';
                        b=dispBuff0[6]-'0';
                        c=a+b*0.1;
                        delay(20);
                        if (temperature>=c*510 && !fuhao)
                        {
                                LED1=on;
                        }
                else
                {
                                LED1=off;
                        }
                        if (temperature>=c*510 && !fuhao)
                {
                                TR0=1;
                        }
                else
                {
                                TR0=0;
                        }
                }
        }
        else
        {       
                LCD_Display(1,dispBuff5);
                goto m;
        }
}



XB]UK4@C2[}C$LMCSY69YZJ.png (61.45 KB, 下載次數: 45)

XB]UK4@C2[}C$LMCSY69YZJ.png

最佳答案

查看完整內容

我這個例程是使用過的,沒有問題。 有程序main.c: /******************************************************************************* * 實驗名 :溫度顯示實驗 * 使用的IO : * 實驗效果 :1602顯示溫度 * 注意 : *******************************************************************************/ #include #include"temp.h" //數碼管IO #define DIG P0 sbit LSA=P2^2; sbit LSB=P2^3 ...
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 2019-6-26 10:26 | 只看該作者
我這個例程是使用過的,沒有問題。
有程序main.c:
/*******************************************************************************
* 實驗名                           :溫度顯示實驗
* 使用的IO             :
* 實驗效果       :1602顯示溫度
*        注意                                         :
*******************************************************************************/

#include<reg51.h>
#include"temp.h"

//數碼管IO
#define DIG        P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char Num=0;
unsigned int disp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};

void LcdDisplay(int);
void Timer0Configuration();

/*******************************************************************************
* 函數名         : main
* 函數功能                   : 主函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/

void main()
{
    Timer0Configuration();
        while(1)
        {
                LcdDisplay(Ds18b20ReadTemp());
        }
}

/*******************************************************************************
* 函數名         : LcdDisplay()
* 函數功能                   : LCD顯示讀取到的溫度
* 輸入           : v
* 輸出                  : 無
*******************************************************************************/

void LcdDisplay(int temp)          //lcd顯示
{

          unsigned char datas[] = {0, 0, 0, 0, 0}; //定義數組
        float tp;  
        if(temp< 0)                                //當溫度值為負數
          {
        disp[2] = 0x40;
                //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
                temp=temp-1;
                temp=~temp;
                tp=temp;
                temp=tp*0.0625*100+0.5;       
                //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
                //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
                //算加上.5,還是在小數點后面。

          }
        else
          {       
        disp[2] = 0;               
                tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
                //如果溫度是正的那么,那么正數的原碼就是補碼它本身
                temp=tp*0.0625*100+0.5;       
                //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
                //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
                //算加上0.5,還是在小數點后面。
        }
//    disp[0] = 0;
//    disp[1] = 0;
//    disp[3] = DIG_CODE[temp / 10000];
        disp[4] = DIG_CODE[temp % 10000 / 1000];
        disp[5] = DIG_CODE[temp % 1000 / 100] | 0x80;
        disp[6] = DIG_CODE[temp % 100 / 10];
        disp[7] = DIG_CODE[temp % 10];

}

/*******************************************************************************
* 函數名         : Timer0Configuration()
* 函數功能                   : 設置計時器
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/

void Timer0Configuration()
{
        TMOD=0X02;//選擇為定時器模式,工作方式2,僅用TRX打開啟動。

        TH0=0X9C;        //給定時器賦初值,定時100us
        TL0=0X9C;       
        ET0=1;//打開定時器0中斷允許
        EA=1;//打開總中斷
        TR0=1;//打開定時器               
}

/*******************************************************************************
* 函數名         : DigDisplay() interrupt 1
* 函數功能                   : 中斷數碼管顯示
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/

void DigDisplay() interrupt 1
{
//定時器在工作方式二會自動重裝初,所以不用在賦值。
//        TH0=0X9c;//給定時器賦初值,定時1ms
//        TL0=0X00;               
        DIG=0; //消隱
        switch(Num)         //位選,選擇點亮的數碼管,
        {
                case(7):
                        LSA=0;LSB=0;LSC=0; break;
                case(6):
                        LSA=1;LSB=0;LSC=0; break;
                case(5):
                        LSA=0;LSB=1;LSC=0; break;
                case(4):
                        LSA=1;LSB=1;LSC=0; break;
//                case(3):
//                        LSA=0;LSB=0;LSC=1; break;
//                case(2):
//                        LSA=1;LSB=0;LSC=1; break;
//                case(1):
//                        LSA=0;LSB=1;LSC=1; break;
//                case(0):
//                        LSA=1;LSB=1;LSC=1; break;       
        }
        DIG=disp[Num]; //段選,選擇顯示的數字。
        Num++;
        if(Num>7)
                Num=4;
}



溫度讀取程序temp.c:
#include"temp.h"
/*******************************************************************************
* 函數名         : Delay1ms
* 函數功能                   : 延時函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/

void Delay1ms(unsigned int y)
{
        unsigned int x;
        for(y;y>0;y--)
                for(x=110;x>0;x--);
}
/*******************************************************************************
* 函數名         : Ds18b20Init
* 函數功能                   : 初始化
* 輸入           : 無
* 輸出                  : 初始化成功返回1,失敗返回0
*******************************************************************************/

unsigned char Ds18b20Init()
{
        unsigned int i;
    EA = 0;
        DSPORT=0;                         //將總線拉低480us~960us
        i=70;       
        while(i--);//延時642us
        DSPORT=1;                        //然后拉高總線,如果DS18B20做出反應會將在15us~60us后總線拉低
        i=0;
    EA = 1;
        while(DSPORT)        //等待DS18B20拉低總線
        {
                i++;
                if(i>5000)//等待>5MS
                        return 0;//初始化失敗       
        }
        return 1;//初始化成功
}

/*******************************************************************************
* 函數名         : Ds18b20WriteByte
* 函數功能                   : 向18B20寫入一個字節
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/

void Ds18b20WriteByte(unsigned char dat)
{
        unsigned int i,j;
    EA = 0;
        for(j=0;j<8;j++)
        {
                DSPORT=0;                        //每寫入一位數據之前先把總線拉低1us
                i++;
                DSPORT=dat&0x01; //然后寫入一個數據,從最低位開始
                i=6;
                while(i--); //延時68us,持續時間最少60us
                DSPORT=1;        //然后釋放總線,至少1us給總線恢復時間才能接著寫入第二個數值
                dat>>=1;
        }
    EA = 1;
}
/*******************************************************************************
* 函數名         : Ds18b20ReadByte
* 函數功能                   : 讀取一個字節
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/


unsigned char Ds18b20ReadByte()
{
        unsigned char byte,bi;
        unsigned int i,j;
    EA = 0;       
        for(j=8;j>0;j--)
        {
                DSPORT=0;//先將總線拉低1us
                i++;
                DSPORT=1;//然后釋放總線
                i++;
                i++;//延時6us等待數據穩定
                bi=DSPORT;         //讀取數據,從最低位開始讀取
                /*將byte左移一位,然后與上右移7位后的bi,注意移動之后移掉那位補0。*/
                byte=(byte>>1)|(bi<<7);                                                  
//                i=4;                //讀取完之后等待48us再接著讀取下一個數
//                while(i--);
        }
    EA = 1;                               
        return byte;
}
/*******************************************************************************
* 函數名         : Ds18b20ChangTemp
* 函數功能                   : 讓18b20開始轉換溫度
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/

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

}
/*******************************************************************************
* 函數名         : Ds18b20ReadTempCom
* 函數功能                   : 發送讀取溫度命令
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/

void  Ds18b20ReadTempCom()
{       

        Ds18b20Init();
        Delay1ms(1);
        Ds18b20WriteByte(0xcc);         //跳過ROM操作命令
        Ds18b20WriteByte(0xbe);         //發送讀取溫度命令
}
/*******************************************************************************
* 函數名         : Ds18b20ReadTemp
* 函數功能                   : 讀取溫度
* 輸入           : com
* 輸出                  : 無
*******************************************************************************/

int Ds18b20ReadTemp()
{
        int temp=0;
        unsigned char tmh,tml;
        Ds18b20ChangTemp();                                 //先寫入轉換命令
        Ds18b20ReadTempCom();                        //然后等待轉換完后發送讀取溫度命令
        tml=Ds18b20ReadByte();                //讀取溫度值共16位,先讀低字節
        tmh=Ds18b20ReadByte();                //再讀高字節
        temp=tmh;
        temp<<=8;
        temp|=tml;
        return temp;
}



溫度讀取頭文件temo.h:
#ifndef __TEMP_H_
#define __TEMP_H_

#include<reg51.h>

sbit DSPORT=P3^7;

void Delay1ms(unsigned int );
unsigned char Ds18b20Init();
void Ds18b20WriteByte(unsigned char com);
unsigned char Ds18b20ReadByte();
void  Ds18b20ChangTemp();
void  Ds18b20ReadTempCom();
int Ds18b20ReadTemp();

#endif




適用電路:






回復

使用道具 舉報

板凳
ID:564898 發表于 2019-6-26 14:32 來自手機 | 只看該作者
如果你用的是12M的晶振就把復位里的低電平延時30改成70以上
回復

使用道具 舉報

地板
ID:427818 發表于 2019-6-26 23:41 | 只看該作者
先占個位置學習
回復

使用道具 舉報

5#
ID:207421 發表于 2019-6-27 13:48 | 只看該作者
DS18B20 讀時序要求特別高,用實際硬件來調調吧,否則都用定時器
回復

使用道具 舉報

6#
ID:503048 發表于 2019-6-27 17:44 | 只看該作者
青青梓衿 發表于 2019-6-26 14:32
如果你用的是12M的晶振就把復位里的低電平延時30改成70以上

仿真可以讀出來溫度,但是一燒到單片機上就不行了,單片機是STC89C52
回復

使用道具 舉報

7#
ID:503048 發表于 2019-6-27 17:46 | 只看該作者
現在仿真可以了,但是同樣代碼在硬件上不行
回復

使用道具 舉報

8#
ID:401564 發表于 2019-6-28 17:03 | 只看該作者
仿真是以AT8051的12T指令運行的
STC89C52是6T指令
所有用到延時的延時時間要*2,定時器可以不用改
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区福利视频 | 黄色一级视频 | 欧美久操网 | 亚洲三级在线观看 | 在线一区视频 | 精品国产乱码久久久久久闺蜜 | 精品日韩一区二区 | 伊人影院99 | 激情黄色在线观看 | 久久香蕉精品视频 | 国产高清在线精品一区二区三区 | 久久国产秒 | 亚洲精品国产精品国自产在线 | 亚洲三级在线观看 | 国产成人精品免高潮在线观看 | 91国产视频在线观看 | 久免费视频 | 色888www视频在线观看 | 久久精品一区 | 黄色片网站国产 | 欧美jizzhd精品欧美巨大免费 | 日本精品网站 | 91欧美精品成人综合在线观看 | 亚洲日本中文字幕在线 | 天天天操操操 | 在线观看视频一区 | 国产精品自产拍在线观看蜜 | 日本一区二区三区四区 | 亚洲免费在线播放 | 国产超碰人人爽人人做人人爱 | 久久久精| 国产精品久久久久aaaa九色 | 日韩精品视频在线免费观看 | 亚洲精品www | 日韩精品一区二区三区久久 | 久久伊人精品 | 蜜桃视频在线观看免费视频网站www | 久久久久久久久久久一区二区 | 久久久www成人免费无遮挡大片 | 国产精品美女久久久久久免费 | 成在线人视频免费视频 |