色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【XR806開(kāi)發(fā)板試用】使用編碼器進(jìn)行調(diào)光

冬至配餃子 ? 來(lái)源:阿珣 ? 作者:阿珣 ? 2023-10-08 11:08 ? 次閱讀

之前做過(guò)一個(gè)LED調(diào)光的項(xiàng)目,這次想拿XR806來(lái)實(shí)現(xiàn),后續(xù)打算加入遠(yuǎn)程控制的功能。這個(gè)項(xiàng)目使用旋轉(zhuǎn)編碼器來(lái)調(diào)節(jié)LED的亮度,基本原理是MCU識(shí)別編碼器的旋轉(zhuǎn)方向和步數(shù),調(diào)節(jié)PWM輸出占空比,從而實(shí)現(xiàn)亮度調(diào)節(jié)。

識(shí)別其旋轉(zhuǎn)方向和步數(shù),要考慮消除抖動(dòng),否則會(huì)出現(xiàn)識(shí)別錯(cuò)誤,導(dǎo)致系統(tǒng)不穩(wěn)定,這和按鍵是類似的。

Github上有對(duì)應(yīng)的Arduino庫(kù),注意它的開(kāi)源協(xié)議是GNU GPL V3!本人曾經(jīng)移植到STM32,現(xiàn)已移植到XR806,效果良好。旋轉(zhuǎn)編碼器相關(guān)代碼如下:

頭文件re.h源碼:

/*
 * Rotary encoder library for Arduino.
 * Port to XR806 by Zixun Chen.
 */

#ifndef _ROTARY_ENCODER_H_
#define _ROTARY_ENCODER_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "main.h"

// 根據(jù)編碼器的輸出類型來(lái)選擇是否定義RE_HALF_STEP
#define RE_HALF_STEP

// 旋轉(zhuǎn)編碼器通常外接上拉電阻,對(duì)應(yīng)空閑電平是00B。如果外接電阻是下拉的,需要定義RE_PINS_PULL_DOWN
// #define RE_PINS_PULL_DOWN

#define DIR_NONE 0    // 尚無(wú)完整有效的步進(jìn)
#define DIR_CW   0x10 // 順時(shí)針步進(jìn)
#define DIR_CCW  0x20 // 逆時(shí)針步進(jìn)

typedef struct {
    // 定義編碼器A端所連的GPIO引腳
    GPIO_Port GPIO_A;
    GPIO_Pin PIN_A;
    // 定義編碼器B端所連的GPIO引腳
    GPIO_Port GPIO_B;
    GPIO_Pin PIN_B;
    uint8_t RetVal; // 保存返回值
    uint8_t State; // 內(nèi)部變量,保存狀態(tài)機(jī)狀態(tài)
} REHandle_t;

void RotaryEncoderInit(REHandle_t *REVal); // 初始化
void RotaryEncoderProcess(REHandle_t *REVal); // 讀取步進(jìn)

#ifdef __cplusplus
}
#endif

#endif // _ROTARY_ENCODER_H_

源文件re.c:

/* Rotary encoder handler for arduino.
 *
 * Copyright 2011 Ben Buxton. Licenced under the GNU GPL Version 3.
 * Contact: bb@cactii.net
 *
 * Port to XR806 by Zixun Chen.
 */

#include "re.h"

/*
 * The below state table has, for each state (row), the new state
 * to set based on the next encoder output. From left to right in,
 * the table, the encoder outputs are 00, 01, 10, 11, and the value
 * in that position is the new state to set.
 */

#define R_START 0x0

#ifdef RE_HALF_STEP
// Use the half-step state table (emits a code at 00 and 11)
#define R_CCW_BEGIN 0x1
#define R_CW_BEGIN 0x2
#define R_START_M 0x3
#define R_CW_BEGIN_M 0x4
#define R_CCW_BEGIN_M 0x5
const unsigned char ttable[6][4] = {
    // R_START (00)
    {R_START_M,           R_CW_BEGIN,    R_CCW_BEGIN,  R_START},
    // R_CCW_BEGIN
    {R_START_M | DIR_CCW, R_START,       R_CCW_BEGIN,  R_START},
    // R_CW_BEGIN
    {R_START_M | DIR_CW,  R_CW_BEGIN,    R_START,      R_START},
    // R_START_M (11)
    {R_START_M,           R_CCW_BEGIN_M, R_CW_BEGIN_M, R_START},
    // R_CW_BEGIN_M
    {R_START_M,           R_START_M,     R_CW_BEGIN_M, R_START | DIR_CW},
    // R_CCW_BEGIN_M
    {R_START_M,           R_CCW_BEGIN_M, R_START_M,    R_START | DIR_CCW},
};
#else
// Use the full-step state table (emits a code at 00 only)
#define R_CW_FINAL 0x1
#define R_CW_BEGIN 0x2
#define R_CW_NEXT 0x3
#define R_CCW_BEGIN 0x4
#define R_CCW_FINAL 0x5
#define R_CCW_NEXT 0x6

const unsigned char ttable[7][4] = {
  // R_START
  {R_START,    R_CW_BEGIN,  R_CCW_BEGIN, R_START},
  // R_CW_FINAL
  {R_CW_NEXT,  R_START,     R_CW_FINAL,  R_START | DIR_CW},
  // R_CW_BEGIN
  {R_CW_NEXT,  R_CW_BEGIN,  R_START,     R_START},
  // R_CW_NEXT
  {R_CW_NEXT,  R_CW_BEGIN,  R_CW_FINAL,  R_START},
  // R_CCW_BEGIN
  {R_CCW_NEXT, R_START,     R_CCW_BEGIN, R_START},
  // R_CCW_FINAL
  {R_CCW_NEXT, R_CCW_FINAL, R_START,     R_START | DIR_CCW},
  // R_CCW_NEXT
  {R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START},
};
#endif

static uint8_t ReadPinLevel(GPIO_Port GPIOx, GPIO_Pin PINy); // 內(nèi)部函數(shù),讀取引腳電平

void RotaryEncoderInit(REHandle_t *REVal) {
    GPIO_InitParam GPIO_InitVal={0};
    // 初始化GPIO引腳
    GPIO_InitVal.driving=GPIO_DRIVING_LEVEL_1;
    GPIO_InitVal.mode=GPIOx_Pn_F0_INPUT;
    GPIO_InitVal.pull=GPIO_PULL_NONE;
    HAL_GPIO_Init(REVal- >GPIO_A, REVal- >PIN_A, &GPIO_InitVal);
    HAL_GPIO_Init(REVal- >GPIO_B, REVal- >PIN_B, &GPIO_InitVal);
    // 初始化狀態(tài)機(jī)
    REVal- >State=R_START;
}

void RotaryEncoderProcess(REHandle_t *REVal) {
    uint8_t pinstate;
    // 讀取AB端電平
    pinstate=(ReadPinLevel(REVal- >GPIO_B, REVal- >PIN_B)< 1) | 
              ReadPinLevel(REVal- >GPIO_A, REVal- >PIN_A);
    // 狀態(tài)機(jī)操作
    REVal- >State=ttable[REVal- >State & 0xf][pinstate];
    // 返回編碼器步進(jìn)信息
    REVal- >RetVal=REVal- >State & 0x30;
}

static uint8_t ReadPinLevel(GPIO_Port GPIOx, GPIO_Pin PINy)
{
    GPIO_PinState RDPin;
    RDPin=HAL_GPIO_ReadPin(GPIOx, PINy);
    #ifdef RE_PINS_PULL_DOWN
    // 如果定義RE_PINS_PULL_DOWN,需要反轉(zhuǎn)引腳電平
    if(GPIO_PIN_HIGH==RDPin) {
        return 0;
    } else {
        return 1;
    }
    #else // RE_PINS_PULL_DOWN
    if(GPIO_PIN_HIGH==RDPin) {
        return 1;
    } else {
        return 0;
    }
    #endif // RE_PINS_PULL_DOWN
}

編碼器A端和B端分別連接PA12和PA13,使用板載LED即可,引腳是PA21,對(duì)應(yīng)PWM_CH2。開(kāi)發(fā)環(huán)境基于FreeRTOS,XR806 SDK在 ~/tools/目錄下。在 ~/tools/xr806_sdk/project/demo/ 目錄下新建 tryre 文件夾,并在其中添加源代碼,makefile等文件,然后按照教程編譯鏈接下載即可。主要代碼如下:
頭文件main.h:

#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

// 需要包含的頭文件
#include < stdio.h >
#include "driver/chip/hal_gpio.h"
#include "driver/chip/hal_pwm.h"
#include "re.h"
#include "FreeRTOS.h"
#include "task.h"

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

main.c:

#include "main.h"

// 定義編碼器占用的GPIO引腳
static REHandle_t REVal={
    .GPIO_A=GPIO_PORT_A,
    .PIN_A=GPIO_PIN_12,
    .GPIO_B=GPIO_PORT_A,
    .PIN_B=GPIO_PIN_13
};
static const uint8_t STEPMAX=10, STEPMIN=0;
static uint8_t step=0; // 控制LED亮度等級(jí)
static void RotaryScan(void); // 編碼器識(shí)別與處理
// PWM輸出初始化
#define PWM_CHANNEL   PWM_GROUP1_CH2
#define PWM_MODE      PWM_CYCLE_MODE
#define PWM_GPIO_PORT GPIO_PORT_A
#define PWM_GPIO_PIN  GPIO_PIN_21
#define PWM_GPIO_MODE GPIOA_P21_F4_PWM2_ECT2
static int max_duty_ratio; // PWM計(jì)數(shù)上限
static void PWMCycleModeSet(void); // PWM重復(fù)輸出模式初始化
static HAL_Status PWMDutyRatioSet(int val); // 設(shè)置PWM輸出占空比
// FreeRTOS配置
#define TASK_RE_PRIO     1
#define TASK_RE_STK_SIZE 200
static TaskHandle_t TaskRE_Handler=NULL;
static void TaskCreation(void); // 創(chuàng)建任務(wù)
static void TaskRE(void *pvParameters); // 編碼器識(shí)別任務(wù)

int main(void)
{
    printf("Rotary encoder & PWM demo.rn"); // 串口輸出相關(guān)信息
    RotaryEncoderInit(&REVal); // 初始化編碼器
    PWMCycleModeSet(); // 初始化PWM
    PWMDutyRatioSet(max_duty_ratio*step/STEPMAX); // 設(shè)置PWM輸出占空比
    TaskCreation(); // 創(chuàng)建任務(wù)
    // 任務(wù)調(diào)度不需要用戶指定
    return 0;
}

static void TaskCreation(void)
{
    BaseType_t xRet = NULL;
    taskENTER_CRITICAL();
    xRet = xTaskCreate((TaskFunction_t )TaskRE, (const char *)"TaskRE", (uint16_t)TASK_RE_STK_SIZE, 
                       (void *)NULL, (UBaseType_t)TASK_RE_PRIO, (TaskHandle_t *)&TaskRE_Handler);
    if(pdPASS == xRet) {
        printf("TaskRE created!rn"); // 任務(wù)創(chuàng)建成功
    }
    taskEXIT_CRITICAL();
}

static void TaskRE(void *pvParameters)
{
    while (1) {
        RotaryScan(); // 識(shí)別編碼器步進(jìn)
        vTaskDelay(10); // 延遲10(ms)
    }
}

static void RotaryScan(void)
{
    RotaryEncoderProcess(&REVal); // 識(shí)別編碼器步進(jìn)
    if(DIR_CW == REVal.RetVal) { // 順時(shí)針步進(jìn)
        if(step< STEPMAX) {
            step++; // 增大亮度,上限是STEPMAX
            PWMDutyRatioSet(max_duty_ratio*step/STEPMAX);
            printf("%d  ", step);
        }
    } else if(DIR_CCW == REVal.RetVal) {
        if(step >STEPMIN) {
            step--; // 減小亮度,下限是STEPMIN
            PWMDutyRatioSet(max_duty_ratio*step/STEPMAX);
            printf("%d  ", step);
        }
    }
}

static void PWMCycleModeSet(void)
{
    // 初始化硬件所需變量聲明
    GPIO_InitParam io_param = {0};
    HAL_Status status = HAL_ERROR;
    PWM_ClkParam clk_param = {0};
    PWM_ChInitParam ch_param = {0};
    // 配置GPIO復(fù)用,官方例程里面缺了這一部分
    io_param.driving = GPIO_DRIVING_LEVEL_1;
    io_param.mode = PWM_GPIO_MODE;
    io_param.pull = GPIO_PULL_NONE;
    HAL_GPIO_Init(PWM_GPIO_PORT, PWM_GPIO_PIN, &io_param);
    // 配置PWM時(shí)鐘
    clk_param.clk = PWM_CLK_HOSC;
    clk_param.div = PWM_SRC_CLK_DIV_1;
    status = HAL_PWM_GroupClkCfg(PWM_CHANNEL / 2, &clk_param);
    if (status != HAL_OK) {
        printf("%s(): %d, PWM group clk config errorn", __func__, __LINE__);
    }
    // 配置PWM模式,頻率和極性
    ch_param.hz = 1000;
    ch_param.mode = PWM_MODE;
    ch_param.polarity = PWM_HIGHLEVE;
    max_duty_ratio = HAL_PWM_ChInit(PWM_CHANNEL, &ch_param);
    if (max_duty_ratio == -1) {
        printf("%s(): %d, PWM ch init errorn", __func__, __LINE__);
    }
    // 設(shè)置占空比
    status = HAL_PWM_ChSetDutyRatio(PWM_CHANNEL, max_duty_ratio / 2);
    if (status != HAL_OK) {
        printf("%s(): %d, PWM set duty ratio errorn", __func__, __LINE__);
    }
    // 使能通道
    status = HAL_PWM_EnableCh(PWM_CHANNEL, PWM_MODE, 1);
    if (status != HAL_OK) {
        printf("%s(): %d, PWM ch enable errorn", __func__, __LINE__);
    }
}

static HAL_Status PWMDutyRatioSet(int val)
{
    return HAL_PWM_ChSetDutyRatio(PWM_CHANNEL, val);
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 旋轉(zhuǎn)編碼器
    +關(guān)注

    關(guān)注

    5

    文章

    159

    瀏覽量

    25990
  • LED調(diào)光
    +關(guān)注

    關(guān)注

    0

    文章

    61

    瀏覽量

    16323
  • GNU
    GNU
    +關(guān)注

    關(guān)注

    0

    文章

    143

    瀏覽量

    17512
  • MCU控制
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    6757
  • PWM輸出
    +關(guān)注

    關(guān)注

    1

    文章

    66

    瀏覽量

    5204
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    XR806開(kāi)發(fā)板適用】基于多源信息融合的糧食霉變檢測(cè)系統(tǒng)設(shè)計(jì)

    XR806開(kāi)發(fā)板具有強(qiáng)大的數(shù)據(jù)處理和傳輸能力,廣泛應(yīng)用于物聯(lián)網(wǎng)和嵌入式系統(tǒng)開(kāi)發(fā)
    的頭像 發(fā)表于 10-27 17:06 ?952次閱讀
    【<b class='flag-5'>XR806</b><b class='flag-5'>開(kāi)發(fā)板</b>適用】基于多源信息融合的糧食霉變檢測(cè)系統(tǒng)設(shè)計(jì)

    基于全志XR806開(kāi)發(fā)板的家用環(huán)境監(jiān)測(cè)傳感設(shè)計(jì)

    本文來(lái)自全志XR806開(kāi)發(fā)板評(píng)測(cè)活動(dòng)文章,作者使用XR806開(kāi)發(fā)板制作一個(gè)簡(jiǎn)單的家用環(huán)境監(jiān)測(cè)傳感,可以獲取當(dāng)前的溫度、濕度、氣壓、海拔這四
    的頭像 發(fā)表于 12-03 10:20 ?684次閱讀
    基于全志<b class='flag-5'>XR806</b><b class='flag-5'>開(kāi)發(fā)板</b>的家用環(huán)境監(jiān)測(cè)傳感<b class='flag-5'>器</b>設(shè)計(jì)

    如何使用XR806開(kāi)發(fā)板來(lái)設(shè)計(jì)一個(gè)糧食霉變檢測(cè)系統(tǒng)?

    XR806開(kāi)發(fā)板具有強(qiáng)大的數(shù)據(jù)處理和傳輸能力,廣泛應(yīng)用于物聯(lián)網(wǎng)和嵌入式系統(tǒng)開(kāi)發(fā)
    的頭像 發(fā)表于 01-05 17:30 ?844次閱讀
    如何使用<b class='flag-5'>XR806</b><b class='flag-5'>開(kāi)發(fā)板</b>來(lái)設(shè)計(jì)一個(gè)糧食霉變檢測(cè)系統(tǒng)?

    OpenHarmony南向嵌入式:【XR806開(kāi)發(fā)板指導(dǎo)文檔】

    XR806_OpenHarmony開(kāi)發(fā)板是基于XR806芯片設(shè)計(jì)開(kāi)發(fā)的參考評(píng)估,身集成了XR806
    的頭像 發(fā)表于 04-14 09:25 ?780次閱讀
    OpenHarmony南向嵌入式:【<b class='flag-5'>XR806</b><b class='flag-5'>開(kāi)發(fā)板</b>指導(dǎo)文檔】

    XR806芯片、XR806開(kāi)源鴻蒙開(kāi)發(fā)板簡(jiǎn)介

    。可廣泛滿足 智能家居、智慧樓宇、工業(yè)互聯(lián)、兒童玩具、電子競(jìng)賽、極客DIY 等領(lǐng)域的無(wú)線連接需求。芯片框圖芯片參數(shù)XR806開(kāi)源鴻蒙開(kāi)發(fā)板介紹XR806開(kāi)發(fā)板是基于
    發(fā)表于 11-15 17:08

    XR806芯片、XR806開(kāi)源鴻蒙開(kāi)發(fā)板簡(jiǎn)介

    。可廣泛滿足 智能家居、智慧樓宇、工業(yè)互聯(lián)、兒童玩具、電子競(jìng)賽、極客DIY 等領(lǐng)域的無(wú)線連接需求。芯片框圖芯片參數(shù)XR806開(kāi)源鴻蒙開(kāi)發(fā)板介紹XR806開(kāi)發(fā)板是基于
    發(fā)表于 11-15 18:32

    如何對(duì)XR806開(kāi)發(fā)板的環(huán)境進(jìn)行配置呢

    如何對(duì)XR806開(kāi)發(fā)板的環(huán)境進(jìn)行配置呢?有哪些配置步驟?
    發(fā)表于 12-28 07:51

    請(qǐng)問(wèn)大佬XR806鴻蒙開(kāi)發(fā)板怎么樣?

    請(qǐng)問(wèn)大佬XR806鴻蒙開(kāi)發(fā)板怎么樣?
    發(fā)表于 12-29 07:06

    簡(jiǎn)述星辰處理的全志XR806鴻蒙開(kāi)發(fā)板上手體驗(yàn)

    本文轉(zhuǎn)載于極術(shù)社區(qū)極術(shù)專欄:STAR CPU(星辰處理)作者:PingYang XR806鴻蒙開(kāi)發(fā)板是全志科技新出的一款支持WiFi和BLE的高集成度無(wú)線MCU芯片,支持鴻蒙L0系統(tǒng)。CPU采用
    的頭像 發(fā)表于 11-03 15:00 ?8589次閱讀
    簡(jiǎn)述星辰處理<b class='flag-5'>器</b>的全志<b class='flag-5'>XR806</b>鴻蒙<b class='flag-5'>開(kāi)發(fā)板</b>上手體驗(yàn)

    簡(jiǎn)述XR806開(kāi)發(fā)板與STAR-MC1處理

    全志XR806開(kāi)發(fā)板基于XR806芯片設(shè)計(jì),搭載了安謀中國(guó)的星辰系列STAR-MC1處理。該開(kāi)發(fā)板體積較小,具備WiFi、低功耗藍(lán)牙技術(shù)等
    的頭像 發(fā)表于 04-11 18:08 ?3210次閱讀

    XR806開(kāi)發(fā)板試用】留言功能開(kāi)發(fā)

    XR806開(kāi)源鴻蒙開(kāi)發(fā)板是一款基于XR806芯片設(shè)計(jì),高度集成WiFi/BLE/常用外設(shè),可供開(kāi)發(fā)進(jìn)行方案評(píng)估、DIY或小規(guī)模產(chǎn)品研發(fā),可
    的頭像 發(fā)表于 10-08 10:58 ?696次閱讀

    XR806開(kāi)發(fā)板試用】FreeRTOS創(chuàng)建任務(wù)測(cè)試

    這篇來(lái)學(xué)習(xí)下,XR806開(kāi)發(fā)板在FreeRTOS系統(tǒng)下創(chuàng)建兩個(gè)任務(wù)測(cè)試,由于沒(méi)有找到學(xué)習(xí)的文檔,試著參考例程來(lái)測(cè)試。
    的頭像 發(fā)表于 10-10 11:47 ?653次閱讀
    【<b class='flag-5'>XR806</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>試用</b>】FreeRTOS創(chuàng)建任務(wù)測(cè)試

    使用XR806芯片驅(qū)動(dòng)一下DHT11溫濕度傳感

    參與全志在線與極術(shù)社區(qū)聯(lián)合舉辦的開(kāi)發(fā)板試用活動(dòng),收到寄來(lái)的全志XR806開(kāi)發(fā)板,之前用過(guò)很多全志的SOC芯片,但是像這種無(wú)線芯片還是第一次用。這次打算使用
    發(fā)表于 10-13 17:28 ?657次閱讀
    使用<b class='flag-5'>XR806</b>芯片驅(qū)動(dòng)一下DHT11溫濕度傳感<b class='flag-5'>器</b>

    XR806串口驅(qū)動(dòng)CM32M對(duì)小廚寶的控制實(shí)驗(yàn)

    非常感謝基于安謀科技STAR-MC1的全志XR806 Wi-Fi+BLE開(kāi)源鴻蒙開(kāi)發(fā)板試用活動(dòng),并獲得開(kāi)發(fā)板試用
    的頭像 發(fā)表于 10-23 11:39 ?588次閱讀
    <b class='flag-5'>XR806</b>串口驅(qū)動(dòng)CM32M對(duì)小廚寶的控制實(shí)驗(yàn)

    全志XR806開(kāi)發(fā)板原理圖

    全志XR806開(kāi)發(fā)板原理圖
    發(fā)表于 10-19 15:11 ?12次下載
    主站蜘蛛池模板: 暖暖日本在线手机免费完整版 | 国产97精品久久久天天A片| TUBE8最新日本护士| 偷偷鲁青春草原视频分类| 麻豆文化传媒一区二区| 国产毛片视频网站| 亚洲高清国产拍精品影院| 久久机热免费视频| 99国产视频| 日本三级按摩推拿按摩| 久久超碰色中文字幕| 动漫美女被到爽了流漫画| 色欲AV亚洲永久无码精品| 久久足恋网| 国语92电影网午夜福利| 22eee在线播放成人免费视频| 性欧美videofree中文字幕| 久久re视频精品538在线| 国产精彩视频在线| 伊人精品在线| 奶好大下面流了好多水水| 国产成人久久精品激情| chinese野外男女free| 午夜宅宅伦电影网| 囚禁固定在调教椅上扩张H| 旧里番ovaの催○セイ活指导| 国产中文字幕乱码免费| 国产AV亚洲精品久久久久| jyzzjyzzz视频国产在线观看| 自慰弄湿白丝袜| 王小军怎么了最新消息| 国产一区二区精品视频| 最新国产麻豆精品| 亚洲理论片在线中文字幕| 麻豆AV福利AV久久AV| 久草在线在线精品观看| 黄色三级网站| 精品国产乱码久久久久久人妻| 国模玲玲自拍337p| 国产亚洲精品久久播放| 国产午夜a理论毛片在线影院|