91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32的DS18B20溫度傳感器設計

1126626497 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-03-07 11:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?一、環境介紹

編程軟件: keil5

操作系統: win10

MCU型號: STM32F103C8T6

STM32編程方式: 寄存器開發 (方便程序移植到其他單片機)

溫度傳感器 DS1820

DS18B20是一個數字溫度傳感器,采用的是單總線時序與主機通信,只需要一根線就可以完成溫度數據讀取;

DS18B20內置了64位產品序列號,方便識別身份,在一根線上可以掛接多個DS18B20傳感器,通過64位身份驗證,可以分別讀取來至不同傳感器采集的溫度信息。

二、DS18B20介紹

2.1 DS18B20 的主要特征

1. 全數字溫度轉換及輸出。

2. 先進的單總線數據通信。

3. 最高 12 位分辨率,精度可達土 0.5 攝氏度。

4. 12 位分辨率時的最大工作周期為 750 毫秒。

5. 可選擇寄生工作方式。

6. 檢測溫度范圍為–55° C ~+125° C (–67° F ~+257° F)

7. 內置 EEPROM,限溫報警功能。

8. 64位光刻 ROM,內置產品序列號,方便多機掛接。

9. 多樣封裝形式,適應不同硬件系統。

基于STM32的DS18B20溫度傳感器設計

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

2.2 DS18B20 引腳功能

GND 電壓地

DQ 單數據總線

VDD 電源電壓

NC 空引腳

2.3 DS18B20 工作原理及應用

DS18B20 的溫度檢測與數字數據輸出全集成于一個芯片之上,從而抗干擾力更強。其一個工作周期可分為兩個部分,即溫度檢測和數據處理。

18B20 共有三種形態的存儲器資源,它們分別是:ROM 只讀存儲器,用于存放 DS18B20ID 編碼,其前 8 位是單線系列編碼(DS18B20 的編碼是19H),后面 48 位是芯片唯一的序列號,最后 8 位是以上 56 的位的 CRC 碼(冗余校驗)。數據在出產時設置不由用戶更改,DS18B20 一共有 64 位 ROM。

RAM 數據暫存器,用于內部計算和數據存取,數據在掉電后丟失, DS18B20 共 9 個字節 RAM,每個字節為 8 位。第 1、 2 個字節是溫度轉換后的數據值信息,第 3、 4 個字節是用戶 EEPROM(常用于溫度報警值儲存)的鏡像。在上電復位時其值將被刷新。第 5 個字節則是用戶第 3 個 EEPROM的鏡像。第 6、 7、 8 個字節為計數寄存器,是為了讓用戶得到更高的溫度分辨率而設計的,同樣也是內部溫度轉換、計算的暫存單元。第 9 個字節為前 8 個字節的 CRC 碼。 EEPROM 非易失性記憶體,用于存放長期需要保存的數據,上下限溫度報警值和校驗數據,DS18B20 共 3 位 EEPROM,并在 RAM 都存在鏡像,以方便用戶操作。

基于STM32的DS18B20溫度傳感器設計

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

DS18B20默認工作在12位分辨率模式,轉換后得到的12位數據,存儲在DS18B20的兩個8比特的RAM中(最前面的兩個字節),二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際溫度。或者使用位運算方式提取溫度: 小數位是占用的是低4位,高位是整數位(不考慮負數情況)。

2.4DS18B20 芯片 ROM 指令表

1. Read ROM(讀 ROM) [33H] (方括號中的為 16 進制的命令字)
這個命令允許總線控制器讀到 DS18B20 的 64 位 ROM。只有當總線上只存在一個 DS18B20 的時候才可以使用此指令,如果掛接不只一個,當通信時將會發生數據沖突

2. atch ROM(指定匹配芯片) [55H]
這個指令后面緊跟著由控制器發出了 64 位序列號,當總線上有多只 DS18B20 時,只有與控制發出的序列號相同的芯片才可以做出反應,其它芯片將等待下一次復位。這條指令適應單芯片和多芯片掛接。

3. Skip ROM(跳躍 ROM 指令) [CCH]
這條指令使芯片不對 ROM 編碼做出反應,在單總線的情況之下,為了節省時間則可以選用此指令。如果在多芯片掛接時使用此指令將會出現數據沖突,導致錯誤出現。

4. Search ROM(搜索芯片) [F0H]
在芯片初始化后,搜索指令允許總線上掛接多芯片時用排除法識別所有器件的 64 位 ROM。

5. Alarm Search(報警芯片搜索) [ECH]
在多芯片掛接的情況下,報警芯片搜索指令只對附合溫度高于 TH 或小于 TL 報警條件的芯片做出反應。只要芯片不掉電,報警狀態將被保持,直到再一次測得溫度什達不到報警條件為止。

6. Write Scratchpad (向 RAM 中寫數據) [4EH]
這是向 RAM 中寫入數據的指令,隨后寫入的兩個字節的數據將會被存到地址 2(報警 RAM 之 TH)和地址 3(報警 RAM 之 TL)。寫入過程中可以用復位信號中止寫入。

7. Read Scratchpad (從 RAM 中讀數據) [BEH]
此指令將從 RAM 中讀數據,讀地址從地址 0 開始,一直可以讀到地址 9,完成整個 RAM 數據的讀出。芯片允許在讀過程中用復位信號中止讀取,即可以不讀后面不需要的字節以減少讀取時間。

8. Copy Scratchpad (將 RAM 數據復制到 EEPROM 中) [48H]
此指令將 RAM 中的數據存入 EEPROM 中,以使數據掉電不丟失。此后由于芯片忙于 EEPROM 儲存處理,當控制器發一個讀時間隙時,總線上輸出“0”,當儲存工作完成時,總線將輸出“1”。
在寄生工作方式時必須在發出此指令后立刻超用強上拉并至少保持 10MS,來維持芯片工作。

9. Convert T(溫度轉換) [44H]
收到此指令后芯片將進行一次溫度轉換,將轉換的溫度值放入 RAM 的第 1、 2 地址。此后由于芯片忙于溫度轉換處理,當控制器發一個讀時間隙時,總線上輸出“0”,當儲存工作完成時,總線將輸出“1”。在寄生工作方式時必須在發出此指令后立刻超用強上拉并至少保持 500MS,來維持芯片工作。

10. Recall EEPROM(將 EEPROM 中的報警值復制到 RAM) [B8H]
此指令將 EEPROM 中的報警值復制到 RAM 中的第 3、 4 個字節里。由于芯片忙于復制處理,當控制器發一個讀時間隙時,總線上輸出“0”,當儲存工作完成時,總線將輸出“1”。另外,此指令將在芯片上電復位時將被自動執行。這樣 RAM 中的兩個報警字節位將始終為 EEPROM 中數據的鏡像。

11. Read Power Supply(工作方式切換) [B4H]
此指令發出后發出讀時間隙,芯片會返回它的電源狀態字,“0”為寄生電源狀態,“1”為外部電源狀態。

2.5 DS18B20時序圖

2.5.1 DS18B20 復位及應答關系示意圖

基于STM32的DS18B20溫度傳感器設計

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png基于STM32的DS18B20溫度傳感器設計

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

每一次通信之前必須進行復位,復位的時間、等待時間、回應時間應嚴格按時序編程。

DS18B20 讀寫時間隙:DS18B20的數據讀寫是通過時間隙處理位和命令字來確認信息交換的。

2.5.2 向DS18B20寫數據0和數據1

基于STM32的DS18B20溫度傳感器設計

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

在寫數據時間隙的前 15uS 總線需要是被控制器拉置低電平,而后則將是芯片對總線數據的采樣時間,采樣時間在 15~60uS,采樣時間內如果控制器將總線拉高則表示寫“1”,如果控制器將總線拉低則表示寫“0”。

每一位的發送都應該有一個至少 15uS的低電平起始位,隨后的數據“0”或“1”應該在 45uS 內完成。

整個位的發送時間應該保持在 60~120uS,否則不能保證通信的正常。

注意: DS18B20讀寫數據都是從低位開始傳輸。

2.5.3 從DS18B20讀數據0和數據1

基于STM32的DS18B20溫度傳感器設計

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

讀時間隙時控制時的采樣時間應該更加的精確才行,讀時間隙時也是必須先由主機產生至少1uS的低電平,表示讀時間的起始。隨后在總線被釋放后的 15uS 中 DS18B20 會發送內部數據位,這時控制如果發現總線為高電平表示讀出“1”,如果總線為低電平則表示讀出數據“0”。每一位的讀取之前都由控制器加一個起始信號。

注意:必須在讀間隙開始的 15uS 內讀取數據位才可以保證通信的正確。

在通信時是以 8 位“0”或“1”為一個字節,字節的讀或寫是從低位開始的。

2.5.4 讀取一次溫度的順序(總線上只有單個DS18B20情況)

1. 發送復位信號

2. 檢測回應信號

3. 發送0xCC

4. 發送0x44

5. 發送復位信號

6. 檢測回應信號

7. 寫0xcc

8. 寫0xbe

9. 循環8次讀取溫度低字節

10. 循環8次讀取溫度高字節

11. 合成16位溫度數據,處理

三、驅動代碼

3.1 DS18B20.c

#include "ds18b20.h"

/*
函數功能: DS18B20初始化
硬件連接: PB15
*/
void DS18B20_Init(void)
{
		RCC->APB2ENR|=1<<3; //PB
		GPIOB->CRH&=0x0FFFFFFF;
		GPIOB->CRH|=0x30000000;
		GPIOB->ODR|=1<<15; //上拉
}


/*
函數功能: 檢測DS18B20設備是否存在
返回值  : 1表示設備不存在 0表示設備正常
*/
u8 DS18B20_CheckDevice(void)  //包含了復位脈沖、檢測存在脈沖
{
		DS18B20_OUTPUT_MODE();//初始化為輸出模式
		DS18B20_OUT=0;        //產生復位脈沖
		DelayUs(750);         //產生750us的低電平
		DS18B20_OUT=1;        //釋放總線
		DelayUs(15);          //等待DS18B20回應
		if(DS18B20_CleckAck())//檢測存在脈沖
		{
				return 1;
		}
		return 0;
}

/*
函數功能: 檢測DS18B20設備的存在脈沖
返回值  : 1表示錯誤 0表示正常
*/
u8 DS18B20_CleckAck(void)
{
		u8 cnt=0;
		DS18B20_INPUT_MODE();//初始化為輸入模式
		while(DS18B20_IN&&cnt<200) //等待DS18B20響應存在脈沖
		{
				DelayUs(1);
				cnt++;
		}
		if(cnt>=200)return 1; //錯誤
		
		cnt=0;
		while((!DS18B20_IN)&&cnt<240) //等待DS18B20釋放總線
		{
				DelayUs(1);
				cnt++;
		}
		if(cnt>=240)return 1; //錯誤
		return 0;
}


/*
函數功能: 寫一個字節
首先學會如何寫一個位。
*/
void DS18B20_WriteByte(u8 cmd)
{
		u8 i;
		DS18B20_OUTPUT_MODE(); //初始化為輸出模式
		for(i=0;i<8;i++)
	  {
				DS18B20_OUT=0;  //產生寫時間間隙(寫開始)
				DelayUs(2);
				DS18B20_OUT=cmd&0x01; //發送實際的數據位
				DelayUs(60);    //等待寫完成
				DS18B20_OUT=1;  //釋放總線,準備下一次發送
				cmd>>=1;        //繼續發送下一位數據
		}
}

/*
函數功能: 讀一個字節
首先學會如何讀一個位。
*/
u8 DS18B20_ReadByte(void)
{
	 u8 i,data=0;	
	 for(i=0;i<8;i++)
	 {
			DS18B20_OUTPUT_MODE(); //初始化為輸出模式
			DS18B20_OUT=0;  //產生讀時間間隙(讀開始)
			DelayUs(2);
			DS18B20_OUT=1;  //釋放總線
			DS18B20_INPUT_MODE(); //初始化為輸入模式
			DelayUs(8);    //等待DS18B20的數據輸出
			data>>=1;      //高位補0,默認以0為準
		  if(DS18B20_IN) data|=0x80;
			DelayUs(60);
			DS18B20_OUT=1;  //釋放總線,等待讀取下一位數據
	 }
	 return data;
}


/*
函數功能: 讀取一次DS18B20的溫度數據
返 回 值: 讀取的溫度數據
考慮的情況:  總線上只是接了一個DS18B20的情況
*/
u16 DS18B20_ReadTemp(void)
{
	  u16 temp=0;
		u8 temp_H,temp_L;
	  DS18B20_CheckDevice();   //發送復位脈沖、檢測存在脈沖
		DS18B20_WriteByte(0xCC); //跳過ROM序列檢測
		DS18B20_WriteByte(0x44); //啟動一次溫度轉換
		
		//等待溫度轉換完成
		while(DS18B20_ReadByte()!=0xFF){}
		
		DS18B20_CheckDevice();   //發送復位脈沖、檢測存在脈沖
		DS18B20_WriteByte(0xCC); //跳過ROM序列檢測
		DS18B20_WriteByte(0xBE); //讀取溫度
		
		temp_L=DS18B20_ReadByte(); //讀取的溫度低位數據
		temp_H=DS18B20_ReadByte(); //讀取的溫度高位數據
		temp=temp_L|(temp_H<<8);   //合成溫度
		return temp;
}


3.2 DS18B20.h

#ifndef DS18B20_H
#define DS18B20_H
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "ds18b20.h"
#include "usart.h"

/*封裝接口*/

//初始化DS18B20為輸入模式
#define DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x80000000;}

//初始化DS18B20為輸出模式
#define DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO口輸出
#define DS18B20_OUT PBout(15)

//DS18B20 IO口輸入
#define DS18B20_IN PBin(15) 

//函數聲明
u8 DS18B20_CleckAck(void);
u8 DS18B20_CheckDevice(void);
void DS18B20_Init(void);
u16 DS18B20_ReadTemp(void);
u8 DS18B20_ReadByte(void);
void DS18B20_WriteByte(u8 cmd);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.3 延時函數

/*
函數功能: 延時us單位
*/
void DelayUs(int us)
{
#ifdef	_SYSTICK_IRQ_
	int i,j;
	for(i=0;iVAL=0;         //CNT計數器值	
	SysTick->LOAD=9*us;     //9表示1us
	SysTick->CTRL|=1<<0;    //開啟定時器	
	do
	{
			tmp=SysTick->CTRL; //讀取狀態
	}while((!(tmp&1<<16))&&(tmp&1<<0));
	SysTick->VAL=0;         //CNT計數器值	
	SysTick->CTRL&=~(1<<0); //關閉定時器	
#endif	
};i++)>

3.4 main.c 調用DS18B20讀取溫度打印到串口

#include "stm32f10x.h"
#include "ds18b20.h"

u8 DS18B20_ROM[8]; //存放DS18B20的64為ROM編碼

int main(void)
{
	u16 temp;
	USARTx_Init(USART1,72,115200);//串口1的初始化
	DS18B20_Init();   //DS18B20初始化
	
	/*1. 讀取DS18B20的64位ROM編碼*/
	//發送復位脈沖、檢測存在脈沖
	while(DS18B20_CheckDevice()) 
	{
			printf("DS18B20設備不存在!\n");
			DelayMs(500);
	}
	//發送讀取64為ROM編碼的命令
	DS18B20_WriteByte(0x33);
	
	//循環讀取64位ROM編碼
	for(i=0;i<8;i++)
	{
			DS18B20_ROM[i]=	DS18B20_ReadByte();
			printf("DS18B20_ROM[%d]=0x%X\n",i,DS18B20_ROM[i]);
	}
	
	while(1)
	{
			/*2. 同時操作總線上所有的DS18B20開始轉換溫度*/
			DS18B20_CheckDevice();   //發送復位脈沖、檢測存在脈沖
			DS18B20_WriteByte(0xCC); //跳過ROM序列檢測
			DS18B20_WriteByte(0x44); //啟動一次溫度轉換(讓總線上所有的DS18B20都轉換溫度)
			DelayMs(500);  //等待線上所有的DS18B20溫度轉換完成
			
			/*3. 單個針對性讀取每個DS18B20的溫度*/
			DS18B20_CheckDevice();   //發送復位脈沖、檢測存在脈沖
			DS18B20_WriteByte(0x55); //發送匹配ROM的命令
			for(i=0;i<8;i++)         //發送64位編碼
		    {
					DS18B20_WriteByte(DS18B20_ROM[i]); 
			}
			DS18B20_WriteByte(0xBE);      //讀取溫度
			temp=DS18B20_ReadByte();      //讀取的溫度低位數據
		    temp|=DS18B20_ReadByte()<<8;  //讀取的溫度高位數據
			printf("temp1=%d.%d\n",temp>>4,temp&0xF);
			printf("temp2=%f\n",temp*0.0625);
			
			DelayMs(500);
	}	
}

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

審核編輯:湯梓紅


?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2565

    文章

    52967

    瀏覽量

    767108
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17970

    瀏覽量

    366497
  • STM32
    +關注

    關注

    2293

    文章

    11031

    瀏覽量

    364678
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    單片機實例項目:DS18B20溫度傳感器

    單片機實例項目:DS18B20溫度傳感器,推薦下載!
    發表于 06-03 20:59

    基于FPGA的DS18B20數字溫度傳感器測溫實例

    本文將使用三段式狀態機(Moore型)的寫法來對DS18B20進行測溫操作,以便了解DS18B20和熟悉三段式狀態機的寫法。
    的頭像 發表于 03-17 11:06 ?1485次閱讀
    基于FPGA的<b class='flag-5'>DS18B20</b>數字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>測溫實例

    DS18B20實時溫度傳感器中文資料

    DS18B20 是一種單總線數字溫度傳感器,它被廣泛應用于各種領域,例如氣象監測、室內溫度控制、工業自動化等。DS18B20 采用了單總線接
    發表于 02-28 17:02 ?5次下載

    基于FPGA的溫度傳感器(ds18b20)驅動設計

    本篇主要討論基于FPGA的溫度傳感器ds18b20)驅動設計---第一版 設計實現:利用FPGA驅動DS18b20,讀取到溫度數值顯示到數
    的頭像 發表于 01-16 14:08 ?1272次閱讀
    基于FPGA的<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>(<b class='flag-5'>ds18b20</b>)驅動設計

    【正點原子STM32H7R3開發套件試用體驗】DS18B20、DHT11溫濕度采集

    使用正點原子STM32H7R3開發套件,結合DS18B20、DHT11溫濕度傳感器,采集環境溫度和濕度數據,并通過 LCD 屏顯示,同時串口發送的項目。由于溫濕度數據在工業和生活中扮演
    發表于 01-01 11:16

    《DNESP32S3使用指南-IDF版_V1.6》第二十九章 DS18B20實驗

    第二十九章 DS18B20實驗 本章,我們將介紹ESP32-S3如何讀取外部溫度傳感器溫度,來得到較為準確的環境溫度。我們將學習單總線技術
    發表于 12-25 09:43

    CW32模塊使用 DS18B20溫度傳感器

    DS18B20數字溫度傳感器提供9位至12位精度的溫度測量,并具有非易失性用戶可編程上下觸發點報警功能。DS18B20通過單總線通信,根據定
    的頭像 發表于 11-26 17:47 ?671次閱讀
    CW32模塊使用 <b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>

    DS18B20溫度傳感器的工作原理和硬件設計

    通過本文可以了解DS18B20溫度傳感器工作原理、硬件設計、DS18B20單總線接口驅動編寫。
    的頭像 發表于 10-24 14:38 ?1.2w次閱讀
    <b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>的工作原理和硬件設計

    ds18b20傳感器的使用方法

    DS18B20是一種廣泛使用的數字溫度傳感器,它基于1-Wire(單總線)通信協議。這種傳感器因其高精度、易用性和低成本而受到歡迎。 DS18B20
    的頭像 發表于 10-18 14:52 ?2832次閱讀

    ds18b20溫度傳感器怎么接線

    DS18B20是一種廣泛使用的數字溫度傳感器,它基于1-Wire(一線)通信協議工作。這種傳感器因其高精度、易用性和低成本而受到歡迎。 DS18B2
    的頭像 發表于 10-18 14:50 ?4534次閱讀

    物聯網系統中基于IIC通信的數字溫度傳感器測溫方案

    高精度測量:數字式溫度傳感器芯片,如DS18B20,采用芯片集成技術,能夠有效抑制外界不同程度的干擾,從而提供高精度的溫度測量。這對于物聯網系統來說至關重要,因為準確的
    的頭像 發表于 09-29 14:17 ?1267次閱讀
    物聯網系統中基于IIC通信的數字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>測溫方案

    ds18b20溫度傳感器如何使用

    DS18B20是一款廣泛使用的數字溫度傳感器,它具有高精度、低功耗和易于使用的特點。 DS18B20溫度
    的頭像 發表于 09-03 16:51 ?1649次閱讀

    ds18b20溫度傳感器是什么類型

    DS18B20溫度傳感器是一種數字溫度傳感器,它屬于單總線(One-Wire)數字溫度
    的頭像 發表于 09-03 16:46 ?2118次閱讀

    ds18b20溫度傳感器和dht11的區別

    DS18B20和DHT11都是常用的溫度和濕度傳感器,它們在許多項目和應用中都有廣泛的應用。 1. 工作原理 DS18B20 DS18B20
    的頭像 發表于 09-03 16:44 ?5016次閱讀

    MY18E20、MY1820 與 DS18B20 性能對比表

    MY18E20、MY1820 與 DS18B20 最高測溫精度一樣,都是±0.5℃,M1820Z 最高測溫精度±0.1℃。芯片感溫原理基于 CMOS 半導體 PN節溫度與帶隙電壓的特性關系,經過
    的頭像 發表于 07-29 18:22 ?1660次閱讀
    MY<b class='flag-5'>18E20</b>、MY1820 與 <b class='flag-5'>DS18B20</b> 性能對比表
    主站蜘蛛池模板: 六月丁香激情 | 九色视频网 | 午夜黄色网址 | 亚洲444444在线观看 | 久久久久激情免费观看 | 狼狼色丁香久久女婷婷综合 | 天天视频观看 | 午夜免费体验 | 2022欧美高清中文字幕在线看 | 五月婷婷六月综合 | 久久久综合视频 | 一级特黄aa大片免费 | 四虎三级 | 天天亚洲| 在线片视频网站 | 欧美爱爱帝国综合社区 | 美女在线看永久免费网址 | 亚洲天堂社区 | 国产色婷婷精品综合在线手机播放 | 操欧洲美女 | 美女扒开腿让男人桶尿口 | 国产三级网站在线观看 | 欧美性天天 | 久久久久久9 | 性生交酡 | 国产伦一区二区三区免费 | 久久精品国产免费高清 | 一级做a爰片久久毛片毛片 一级做a爰片久久毛片美女图片 | 噜噜啪啪 | 中国一级做a爰片久久毛片 中韩日欧美电影免费看 | 又黄又爽又猛大片录像 | 免费一级毛片无毒不卡 | 国产精品夜色7777青苹果 | 免费不卡毛片 | 特黄特色大片免费播放路01 | 国产亚洲精品久久久久久牛牛 | 在线视频亚洲色图 | 1024手机免费看 | 美女毛片免费 | 天天翘夜夜洗澡天天做 | 忘忧草爱网 |