在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

利用Proteus仿真STM32實現DHT11溫濕度檢測

DS小龍哥-嵌入式技術 ? 2022-09-17 15:53 ? 次閱讀

1. 前言

Proteus是英國著名的EDA工具(仿真軟件),從原理圖布圖、代碼調試到單片機與外圍電路協同仿真,一 鍵切換到PCB設計,真正實現了從概念到產品的完整設計。是世界上唯一將電路仿真軟件、PCB設計軟 件和虛擬模型仿真軟件三合一的設計平臺,其處理器模型支持8051、HC11、 PIC10/12/16/18/24/30/DSPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系 列處理器,并持續增加其他系列處理器模型。在編譯方面,它也支持IAR、KeilMATLAB等多種編譯 器。 前面文章介紹了Proteus的下載,安裝,建立工程,完成LED燈仿真運行。這篇文章在這基礎上增加串口打印,DHT11溫濕度檢測

2. 設計程序

先使用keil軟件就將程序設計設計好,然后生成HEX文件,等待設計好原理圖后進行仿真測試。

注意: 當前使用的芯片STM32F103。Proteus的版本是8.9

image-20220524143658130
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "dht11.h"
?
/*
(3)溫濕度傳感器: DHT11
VCC--VCC
GND---GND
DAT---PA5 
*/
?
#include "stm32f10x.h"
#include 
#include 
#include "sys.h"
#include 
?
#define USART1_RX_LENGTH 1024
extern u8 USART1_RX_BUFFER[USART1_RX_LENGTH]; //保存接收數據的緩沖區
extern u32 USART1_RX_CNT; //當前接收到的數據長度
extern u8 USART1_RX_FLAG; //1表示數據接收完畢 0表示沒有接收完畢
?
#define USART2_RX_LENGTH 1024
extern u8 USART2_RX_BUFFER[USART2_RX_LENGTH]; //保存接收數據的緩沖區
extern u32 USART2_RX_CNT; //當前接收到的數據長度
extern u8 USART2_RX_FLAG; //1表示數據接收完畢 0表示沒有接收完畢
?
#define USART3_RX_LENGTH 1024
extern u8 USART3_RX_BUFFER[USART3_RX_LENGTH]; //保存接收數據的緩沖區
extern u32 USART3_RX_CNT; //當前接收到的數據長度
extern u8 USART3_RX_FLAG; //1表示數據接收完畢 0表示沒有接收完畢
?
void USART1_Init(u32 baud);
void USART2_Init(u32 baud);
void USART3_Init(u32 baud);
void USARTx_StringSend(USART_TypeDef *USARTx,char *str);
void USARTx_DataSend(USART_TypeDef *USARTx,u8 *data,u32 len);
?
//定義按鍵IO口
#define KEY_S3 PAin(1) 
?
//函數聲明
void KEY_Init(void);
u8 KEY_Scan(u8 mode);
?
?
//LED定義
#define LED1 PBout(6)
#define LED2 PBout(7)
#define LED3 PBout(8)
#define LED4 PBout(9)
?
//蜂鳴器IO口定義
#define BEEP PAout(6)
?
//函數聲明
void LED_Init(void);
void BEEP_Init(void);
?
?
?
//IO方向設置
#define DHT11_IO_IN()  {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0x00800000;}
#define DHT11_IO_OUT() {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=0x00300000;}
////IO操作函數                                            
#define DHT11_DQ_OUT PAout(5) //數據端口    PA5 
#define DHT11_DQ_IN  PAin(5) //數據端口    PA5
?
?
u8 DHT11_Init(void);        //初始化DHT11
u8 DHT11_Read_Data(u8 *temp,u8 *humi);//讀取溫濕度
u8 DHT11_Read_Byte(void);   //讀出一個字節
u8 DHT11_Read_Bit(void);    //讀出一個位
u8 DHT11_Check(void);       //檢測是否存在DHT11
void DHT11_Rst(void);       //復位DHT11  
?
//復位DHT11
void DHT11_Rst(void)      
{         
     DHT11_IO_OUT();   //SET OUTPUT
  DHT11_DQ_OUT=0;     //拉低DQ
  DelayMs(20);       //拉低至少18ms
  DHT11_DQ_OUT=1;     //DQ=1 
     DelayUs(30);    //主機拉高20~40us
}
//等待DHT11的回應
//返回1:未檢測到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)      
{  
    u8 retry=0;
    DHT11_IO_IN();//SET INPUT    
 while (DHT11_DQ_IN&&retry<100)//DHT11會拉低40~80us
?    {
?        retry++;
?        DelayUs(1);
?    };   
?    if(retry>=100)return 1;
    else retry=0;
  while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后會再次拉高40~80us
?    {
?        retry++;
?        DelayUs(1);
?    };
?    if(retry>=100)return 1;   
    return 0;
}
//從DHT11讀取一個位
//返回值:1/0
u8 DHT11_Read_Bit(void)              
{
    u8 retry=0;
    while(DHT11_DQ_IN&&retry<100)//等待變為低電平
?    {
?        retry++;
?        DelayUs(1);
?    }
?    retry=0;
?    while(!DHT11_DQ_IN&&retry<100)//等待變高電平
?    {
?        retry++;
?        DelayUs(1);
?    }
?    DelayUs(40);//等待40us
?    if(DHT11_DQ_IN)return 1;
?    else return 0;       ? 
?}
??
?//從DHT11讀取一個字節
?//返回值:讀到的數據
?u8 DHT11_Read_Byte(void) ? ?
?{ ? ? ? ?
? ? ?u8 i,dat;
? ? ?dat=0;
?    for (i=0;i<8;i++) 
?    {
? ?      dat<<=1; 
?     ? ?dat|=DHT11_Read_Bit();
? ?  }                        ? ?
? ? ?return dat;
?}
??
??
?//從DHT11讀取一次數據
?//temp:溫度值(范圍:0~50°)
?//humi:濕度值(范圍:20%~90%)
?//返回值:0,正常;1,讀取失敗
?u8 DHT11_Read_Data(u8 *temp,u8 *humi) ? ?
?{ ? ? ? ?
?    u8 buf[5];
?    u8 i;
?    DHT11_Rst();
?    //printf("------------------------rn");
?    if(DHT11_Check()==0)
?    {
?        for(i=0;i<5;i++)//讀取40位數據
?        {
?            buf[i]=DHT11_Read_Byte();
?        }
?        if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
?        {
?            *humi=buf[0];
?            *temp=buf[2];
?        }
?    }else return 1;
?    return 0;    ? ?
?}
??
??
?//初始化DHT11的IO口 DQ 同時檢測DHT11的存在
?//返回1:不存在
?//返回0:存在 ?       
?u8 DHT11_Init(void)
?{
?    RCC->APB2ENR|=1<<2; ? ?//使能PORTA口時鐘 
?    GPIOA->CRL&=0XFF0FFFFF;//PORTA.5 推挽輸出
    GPIOA->CRL|=0X00300000;
    GPIOA->ODR|=1<<5; ? ? ?//輸出1                 ? ?
?    DHT11_Rst();
?    return DHT11_Check();
?}
??
??
?/*
?函數功能:按鍵初始化
?硬件連接:PA1
?特性: 按下為低電平---沒按下高電平
?*/
?void KEY_Init(void)
?{
? ? ?//開時鐘
? ? ?RCC->APB2ENR|=1<<2;
? ? ?//配置模式
? ? ?GPIOA->CRL&=0xFFFFFF0F;
  GPIOA->CRL|=0x00000080;
  //上拉
  GPIOA->ODR|=1<<1;
?}
??
??
?/*
?函數功能:函數掃描函數
?函數參數: mode=1表示使用連續模式  mode=0使用單擊模式
?返回值:  2 3 4 5 表示具體的按鈕 ? 0表示沒有按下
?*/
?u8 KEY_Scan(u8 mode)
?{
? ? static u8 flag=1; //記錄上一次按下的狀態 
? ? if(mode)flag=1;
? ? if(flag&&(KEY_S3==0))
? ? {
? ? ? ? flag=0;
? ? ? ? delay_ms(20);
? ? ? ? if(KEY_S3==0)return 3;
? ? }
? ? else if(KEY_S3)
? ? {
? ? ? ? flag=1; 
? ? }
? ? return 0;
?}
??
??
?/*
?函數功能: LED初始化
?硬件連接: PB6 PB7 PB8 PB9
?特性: 低電平點亮
?*/
?void LED_Init(void)
?{
? ? ?//開時鐘
? ? ?RCC->APB2ENR|=1<<3;
? ? ?//配置GPIO口
? ? ?GPIOB->CRL&=0x00FFFFFF;
  GPIOB->CRL|=0x22000000;
  GPIOB->CRH&=0xFFFFFF00;
  GPIOB->CRH|=0x00000022;
  //上拉
  GPIOB->ODR|=1<<6;
? ? ?GPIOB->ODR|=1<<7;
? ? ?GPIOB->ODR|=1<<8;
? ? ?GPIOB->ODR|=1<<9;
?}
??
?/*
?函數功能: 蜂鳴器初始化
?硬件連接: PA6
?特性: 高電平響
?*/
?void BEEP_Init(void)
?{
? ? RCC->APB2ENR|=1<<2;
? ? GPIOA->CRL&=0xF0FFFFFF;
  GPIOA->CRL|=0x02000000;
}
?
?
/*
函數功能: 串口1的初始化
硬件連接: PA9(TX)  和 PA10(RX)
*/
void USART1_Init(u32 baud)
{
  /*1. 開時鐘*/
  RCC->APB2ENR|=1<<14; //USART1時鐘
? ? ?RCC->APB2ENR|=1<<2; ?//PA
? ? ?RCC->APB2RSTR|=1<<14; //開啟復位時鐘
? ? ?RCC->APB2RSTR&=~(1<<14);//停止復位
? ? ?/*2. 配置GPIO口的模式*/
? ? ?GPIOA->CRH&=0xFFFFF00F;
  GPIOA->CRH|=0x000008B0;
  /*3. 配置波特率*/
  USART1->BRR=72000000/baud;
  /*4. 配置核心寄存器*/
  USART1->CR1|=1<<5; //開啟接收中斷
? ? ?STM32_SetPriority(USART1_IRQn,1,1); //設置中斷優先級
? ? ?USART1->CR1|=1<<2; //開啟接收
? ? ?USART1->CR1|=1<<3; //開啟發送
? ? ?USART1->CR1|=1<<13;//開啟串口功能
?}
??
?/*
?函數功能: 串口2的初始化
?硬件連接: PA2(TX)  和 PA3(RX)
?*/
?void USART2_Init(u32 baud)
?{
? ? ?/*1. 開時鐘*/
? ? ?RCC->APB1ENR|=1<<17; //USART2時鐘
? ? ?RCC->APB2ENR|=1<<2; ?//PA
? ? ?RCC->APB1RSTR|=1<<17; //開啟復位時鐘
? ? ?RCC->APB1RSTR&=~(1<<17);//停止復位
? ? ?
? ? ?/*2. 配置GPIO口的模式*/
? ? ?GPIOA->CRL&=0xFFFF00FF;
  GPIOA->CRL|=0x00008B00;
  /*3. 配置波特率*/
  USART2->BRR=36000000/baud;
  /*4. 配置核心寄存器*/
  USART2->CR1|=1<<5; //開啟接收中斷
? ? ?STM32_SetPriority(USART2_IRQn,1,1); //設置中斷優先級
? ? ?USART2->CR1|=1<<2; //開啟接收
? ? ?USART2->CR1|=1<<3; //開啟發送
? ? ?USART2->CR1|=1<<13;//開啟串口功能
?}
??
?/*
?函數功能: 串口3的初始化
?硬件連接: PB10(TX)  和 PB11(RX)
?*/
?void USART3_Init(u32 baud)
?{
? ? ?/*1. 開時鐘*/
? ? ?RCC->APB1ENR|=1<<18; //USART3時鐘
? ? ?RCC->APB2ENR|=1<<3; ?//PB
? ? ?RCC->APB1RSTR|=1<<18; //開啟復位時鐘
? ? ?RCC->APB1RSTR&=~(1<<18);//停止復位
? ? ?
? ? ?/*2. 配置GPIO口的模式*/
? ? ?GPIOB->CRH&=0xFFFF00FF;
  GPIOB->CRH|=0x00008B00;
  /*3. 配置波特率*/
  USART3->BRR=36000000/baud;
  /*4. 配置核心寄存器*/
  USART3->CR1|=1<<5; //開啟接收中斷
? ? ?STM32_SetPriority(USART3_IRQn,1,1); //設置中斷優先級
? ? ?USART3->CR1|=1<<2; //開啟接收
? ? ?USART3->CR1|=1<<3; //開啟發送
? ? ?USART3->CR1|=1<<13;//開啟串口功能
?}
??
?u8 USART1_RX_BUFFER[USART1_RX_LENGTH]; //保存接收數據的緩沖區
?u32 USART1_RX_CNT=0; ?//當前接收到的數據長度
?u8 USART1_RX_FLAG=0; //1表示數據接收完畢 0表示沒有接收完畢
??
?//串口1的中斷服務函數
?void USART1_IRQHandler(void)
?{
? ? ?u8 data;
? ? ?//接收中斷
? ? ?if(USART1->SR&1<<5)
? ?  {
? ? ? ? ?TIM1->CNT=0; //清除計數器
    TIM1->CR1|=1<<0; //開啟定時器1
? ? ? ? ?data=USART1->DR; //讀取串口數據
   //  if(USART1_RX_FLAG==0) //判斷上一次的數據是否已經處理完畢
     {
      //判斷是否可以繼續接收
      if(USART1_RX_CNTSR&1<<5)
? ?  {
? ? ? ? ?TIM2->CNT=0; //清除計數器
    TIM2->CR1|=1<<0; //開啟定時器2
? ? ? ? ?data=USART2->DR; //讀取串口數據
   //  if(USART2_RX_FLAG==0) //判斷上一次的數據是否已經處理完畢
     {
      //判斷是否可以繼續接收
      if(USART2_RX_CNTSR&1<<5)
? ?  {
? ? ? ? ?TIM3->CNT=0; //清除計數器
    TIM3->CR1|=1<<0; //開啟定時器3
? ? ? ? ?data=USART3->DR; //讀取串口數據
   //  if(USART3_RX_FLAG==0) //判斷上一次的數據是否已經處理完畢
     {
      //判斷是否可以繼續接收
      if(USART3_RX_CNTDR=*str++;
    while(!(USARTx->SR&1<<7)){}
? ? }
?}
??
?/*
?函數功能: 數據發送
?*/
?void USARTx_DataSend(USART_TypeDef *USARTx,u8 *data,u32 len)
?{
? ? u32 i;
? ? for(i=0;iDR=*data++;
? ? ? ? while(!(USARTx->SR&1<<7)){}
? ? }
?}
??
?//printf函數底層函數接口
?int fputc(int c, FILE* stream)
?{
? ? ?USART1->DR=c;
  while(!(USART1->SR&1<<7)){}
? ? ?return c;
?}
??
??
?u8 dht11_temp;
?u8 dht11_humidity;
??
?int main()
?{
? ? u8 key_val;
? ? u32 time=0;
? ? LED_Init();
? ? BEEP_Init();
? ? KEY_Init();
? ? USART1_Init(115200); ? ?//串口1初始化-打印調試信息
? ? //初始化DHT11
? ? DHT11_Init();
? ? ?
? ? while(1)
? ? {
? ? ? ?key_val=KEY_Scan(0); //PA1
? ? ? ?if(key_val)
? ? ?  {
? ? ? ? ? BEEP=!BEEP;
? ? ? ? ? LED1=!LED1; ? //PB6
? ? ?  }
? ? ? ?delay_ms(5);
? ? ? ?
? ? ? ?time++;
? ? ? ?if(time>=10)
    {
    time=0;
    LED2=!LED2; //PB7
     
    //讀取溫濕度
    if(DHT11_Read_Data(&dht11_temp,&dht11_humidity))
     {
      printf("溫度讀取失敗.rn");
     }    
    printf("T:%d,H:%drn",dht11_temp,dht11_humidity);
    
    //濕度大于80以上就關閉插座
    if(dht11_humidity>80)
     {
      LED1=1;
     }
    }
  }
}
復制代碼

3. 設計電路圖

3.1 添加DHT11器件

打開Proteus,搜索DHT11元器件

image-20220524143937845

鼠標選擇空白區域,點擊鼠標右鍵,放置電源和GND。

image-20220524144345503

設計好的效果如下:

image-20220524144418613

3.2 添加虛擬串口終端

為了方便查看程序的串口輸出,添加一個串口終端顯示框。

在虛擬儀表模式下,選擇virtual terminal工具,然后在原理圖空白區域點擊一下就可以放virtual terminal工具。

image-20220524145332372

在繪制原理圖的經常遇到連線復雜,或者布線很亂,如果元器件的引腳不方便直接與MCU單片機連接,可以采用標簽的形式或者總線方式布線。這里以串口終端演示,采用標簽方式連接IO口。

首先在坐標的菜單欄里選擇終端模式,然后鼠標點擊DEFAULT,然后在原理圖的空白區域,點擊一下鼠標左鍵,會出現一個空心的連接線條,將這個連接線條連接到元器件的IO口上就行。

image-20220524150145275image-20220524145810211

放置好之后,鼠標點擊這個接線端子--空心圓圈,彈出對話框,設置連接的IO口。

image-20220524150321956

然后MCU的PA9和PA10的端子上也設置好標簽名稱。

image-20220524151328570

設置虛擬串口顯示器的波特率為:115200

image-20220524150744558

如果在調試仿真時, Virtual Terminal無法自動彈出窗口,可以點擊菜單欄的調試,選擇恢復彈出窗口。

image-20220524151628962

設置STM32芯片的晶振為:71MHZ

image-20220524155200053

3.3 開始仿真

image-20220524155229691image-20220524155252228image-20220524155723214

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

    關注

    79

    文章

    1692

    瀏覽量

    106579
  • STM32
    +關注

    關注

    2270

    文章

    10900

    瀏覽量

    356010
  • DHT11
    +關注

    關注

    19

    文章

    277

    瀏覽量

    57594
收藏 人收藏

    評論

    相關推薦

    《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11數字溫濕度傳感器

    高電平的持續時間,所以這個作為判斷的依據。dht11_read_byte函數就是調用一字節讀取函數進行實現。下面介紹讀取溫濕度函數,其定義如下:/** * @brief 從DHT11
    發表于 12-26 09:26

    基于51單片機的溫濕度檢測報警及串口傳輸系統

    具體實現功能由51單片機+DHT11溫濕度傳感器+獨立按鍵+LCD1602液晶+蜂鳴器+串口模塊構成。具體功能:(1)DHT11溫濕度傳感器
    的頭像 發表于 10-22 14:12 ?269次閱讀
    基于51單片機的<b class='flag-5'>溫濕度</b><b class='flag-5'>檢測</b>報警及串口傳輸系統

    dht11溫濕度傳感器工作原理介紹

    DHT11是一種常用的溫濕度傳感器,它能夠測量溫度和相對濕度。這種傳感器廣泛應用于智能家居、氣象站、農業監控等領域。 DHT11溫濕度傳感器
    的頭像 發表于 10-21 09:47 ?1584次閱讀

    Arduino Nano 和 DHT11 實現 LabVIEW 溫濕度采集

    Arduino Nano 和 DHT11 實現 LabVIEW 溫濕度采集
    的頭像 發表于 10-08 11:46 ?614次閱讀
    Arduino Nano 和 <b class='flag-5'>DHT11</b> <b class='flag-5'>實現</b> LabVIEW <b class='flag-5'>溫濕度</b>采集

    CW32模塊使用 DHT11溫濕度傳感器

    DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器。其成本低、長期穩定、可以測量相對濕度和溫度測量,并可以只使用一根數據線進行
    的頭像 發表于 09-09 18:21 ?1341次閱讀
    CW32模塊使用 <b class='flag-5'>DHT11</b><b class='flag-5'>溫濕度</b>傳感器

    dht11采用什么通信協議

    DHT11是一款廣泛使用的溫濕度傳感器,它通過簡單的數字接口與微控制器或其他數字設備進行通信。DHT11使用單總線通信協議,這意味著所有的數據傳輸都通過單一的數據線完成。這種通信方式簡單且成本低
    的頭像 發表于 09-04 09:06 ?2152次閱讀

    dht11溫度傳感器的原理及應用

    DHT11是一種廣泛使用的數字溫濕度傳感器,它能夠測量溫度和相對濕度。這種傳感器因其低成本、易于使用和相對較高的準確性而受到歡迎。 DHT11傳感器的原理
    的頭像 發表于 09-03 17:28 ?1756次閱讀

    DHT11溫度傳感器測量范圍與精度

    DHT11是一款含有已校準數字信號輸出的溫濕度復合傳感器,它結合了溫濕度傳感技術,通過專用的數字模塊采集技術實現溫濕度的測量,無需復雜的電路
    的頭像 發表于 09-03 17:03 ?1881次閱讀

    Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環境溫濕度數據及 OLED顯示

    Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環境溫濕度數據及 OLED顯示
    的頭像 發表于 08-13 18:04 ?1169次閱讀
    Arduino Nano 和 NodeMCU ESP8266 讀取 <b class='flag-5'>DHT11</b> 環境<b class='flag-5'>溫濕度</b>數據及 OLED顯示

    基于51單片機SHT11溫濕度檢測proteus仿真及電路圖程序

    本資源內容概要:? ? ? ?這是基于51單片機SHT11溫濕度檢測proteus仿真及電路圖程序設計包含了電路圖源文件(Altiumdes
    發表于 06-19 11:45 ?0次下載

    DHT11數字溫濕度傳感器產品手冊

    電子發燒友網站提供《DHT11數字溫濕度傳感器產品手冊.pdf》資料免費下載
    發表于 06-12 17:09 ?9次下載

    DHT11傳感器簡介及數據傳輸過程分析

    DHT11傳感器內部包含有溫濕度傳感器模塊和一個AD轉換模塊。當傳感器受到激勵時,溫濕度傳感器模塊會測量環境中的溫度和濕度,并通過AD轉換模塊將模擬信號轉換為數字信號,然后輸出給外部的
    發表于 04-04 11:38 ?4336次閱讀

    基于51單片機的SHT11溫濕度監測系統,LCD1602顯示,上下限按鍵設置

    設計要求 1.設計一套基于51單片機的溫濕度Proteus仿真監控系統; 2.采用高精度的SHT11溫濕度傳感器模塊; 3.LCD液晶實時顯
    發表于 03-26 17:44

    【原創】DHT11傳感器溫濕度監測系統畢設,論文、代碼、原理圖和仿真介紹

    溫濕度傳感器元件,沒有DHT11傳感器元件。Proteus8版本經過升級更新后,元件庫已添加了DHT11傳感器元件。 因此,本設計采用Proteus
    發表于 03-13 00:53

    【先楫HPM5361EVK開發板試用體驗】溫濕度傳感器DHT11實踐

    開發環境: IDE:RT-Thread Studio 2.2.7 開發板:HPM5300EVK 1 理論分析 1.1 DHT11介紹 DHT11 數字溫濕度傳感器是一款含有已校準數字信號輸出的
    發表于 01-03 23:46
    主站蜘蛛池模板: 你懂的在线视频观看| 91av在线免费观看| 国产一级毛片午夜| 亚洲高清成人| 日本三级黄色网址| 激情97| 清纯漂亮小美女准备啪啪| 日本特黄绿像大片免费看| 在线免费亚洲| 日本黄色大片网站| 午夜高清视频在线观看| 在线一区二区三区| 人人看人人添人人爽| 图片视频小说| 男人j进女人j免费视频视频| 欧美在线视频播放| 天堂va欧美ⅴa亚洲va一国产| 亚洲视屏一区| 四虎国产精品永久在线看| 福利天堂| 看屁屁www视频免费观看| 男人午夜视频| 久久99免费| 天天综合天天| 男人视频在线| 日本三级在线| 日本wwwxx| 亚洲天堂最新地址| 男人的天堂免费网站| 日日操夜夜爽| 亚洲伦理一区二区| 一级不卡毛片| 狠狠色噜噜狠狠狠狠五月婷| 国语自产自拍秒拍在线视频 | 一级黄a| 中文字幕第二区| 欧美激情综合| 午夜视频在线| 中文字幕在线不卡| 免费看 s色| 失禁h啪肉尿出来高h受|