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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32F042驅動I2C OLED程序源碼

[復制鏈接]
跳轉到指定樓層
樓主
STM32F042網絡資源很少,F042 驅動I2C OLED程序.

單片機源程序如下:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "stm32f0xx_hal.h"

  4. /* USER CODE BEGIN Includes */

  5. #define address 0x78

  6. /* USER CODE END Includes */

  7. /* Private variables ---------------------------------------------------------*/
  8. I2C_HandleTypeDef hi2c1;

  9. /* USER CODE BEGIN PV */
  10. /* Private variables ---------------------------------------------------------*/

  11. unsigned char buffer12864[8][128] = { 0x00,};

  12. const unsigned char logo[8][128] = {
  13.   0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  14. …………
  15. …………
  16. …………限于本文篇幅 余下代碼請從51黑下載附件…………
  17.   0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //~
  18. };
  19. /* USER CODE END PV */

  20. /* Private function prototypes -----------------------------------------------*/
  21. void SystemClock_Config(void);
  22. static void MX_GPIO_Init(void);
  23. static void MX_I2C1_Init(void);

  24. /* USER CODE BEGIN PFP */
  25. /* Private function prototypes -----------------------------------------------*/

  26. void Writecom(uint8_t COM);
  27. void Writedata(uint8_t DATA);
  28. void SSD1306_Init(void);
  29. void clear(uint8_t data);
  30. void Draw_Point(uint8_t x, uint8_t y);
  31. void Draw_Line(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
  32. void Draw_byte(uint8_t page, uint8_t lie, uint8_t data);
  33. void Draw_byte_clear(uint8_t page, uint8_t lie, uint8_t data);
  34. void show_char(uint8_t page, uint8_t lie, uint8_t data);
  35. void show_char_clear(uint8_t page, uint8_t lie, uint8_t data);
  36. void show_string(uint8_t page, uint8_t lie, uint8_t *Data, uint16_t length);
  37. void show_string_clear(uint8_t page, uint8_t lie,  uint8_t *Data, uint16_t length);
  38. void display_logo(void);
  39. /* USER CODE END PFP */

  40. /* USER CODE BEGIN 0 */

  41. /* USER CODE END 0 */

  42. int main(void)
  43. {

  44.   /* USER CODE BEGIN 1 */

  45.   /* USER CODE END 1 */

  46.   /* MCU Configuration----------------------------------------------------------*/

  47.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  48.   HAL_Init();

  49.   /* USER CODE BEGIN Init */

  50.   /* USER CODE END Init */

  51.   /* Configure the system clock */
  52.   SystemClock_Config();

  53.   /* USER CODE BEGIN SysInit */

  54.   /* USER CODE END SysInit */

  55.   /* Initialize all configured peripherals */
  56.   MX_GPIO_Init();
  57.   MX_I2C1_Init();

  58.   /* USER CODE BEGIN 2 */
  59.   SSD1306_Init();  //SSD1306_Init
  60.   HAL_Delay(100);
  61.        
  62. // display_logo();//logo
  63. // HAL_Delay(1000);
  64.        
  65.         clear(0x00);
  66.        
  67. uint8_t xx[6] = "hello!";

  68.   /* USER CODE END 2 */

  69.   /* Infinite loop */
  70.   /* USER CODE BEGIN WHILE */
  71.   while (1)
  72.   {
  73.   /* USER CODE END WHILE */
  74.                 display_logo();
  75.                 while(1);
  76.   /* USER CODE BEGIN 3 */

  77.   }
  78.   /* USER CODE END 3 */

  79. }

  80. /** System Clock Configuration
  81. */
  82. void SystemClock_Config(void)
  83. {

  84.   RCC_OscInitTypeDef RCC_OscInitStruct;
  85.   RCC_ClkInitTypeDef RCC_ClkInitStruct;
  86.   RCC_PeriphCLKInitTypeDef PeriphClkInit;

  87.     /**Initializes the CPU, AHB and APB busses clocks
  88.     */
  89.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSI48;
  90.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  91.   RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  92.   RCC_OscInitStruct.HSICalibrationValue = 16;
  93.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  94.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  95.   {
  96.     _Error_Handler(__FILE__, __LINE__);
  97.   }

  98.     /**Initializes the CPU, AHB and APB busses clocks
  99.     */
  100.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  101.                               |RCC_CLOCKTYPE_PCLK1;
  102.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI48;
  103.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  104.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  105.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  106.   {
  107.     _Error_Handler(__FILE__, __LINE__);
  108.   }

  109.   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2C1;
  110.   PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;
  111.   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  112.   {
  113.     _Error_Handler(__FILE__, __LINE__);
  114.   }

  115.     /**Configure the Systick interrupt time
  116.     */
  117.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  118.     /**Configure the Systick
  119.     */
  120.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  121.   /* SysTick_IRQn interrupt configuration */
  122.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  123. }

  124. /* I2C1 init function */
  125. static void MX_I2C1_Init(void)
  126. {

  127.   hi2c1.Instance = I2C1;
  128.   hi2c1.Init.Timing = 0x2000090E;
  129.   hi2c1.Init.OwnAddress1 = 0;
  130.   hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  131.   hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  132.   hi2c1.Init.OwnAddress2 = 0;
  133.   hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  134.   hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  135.   hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  136.   if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  137.   {
  138.     _Error_Handler(__FILE__, __LINE__);
  139.   }

  140.     /**Configure Analogue filter
  141.     */
  142.   if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  143.   {
  144.     _Error_Handler(__FILE__, __LINE__);
  145.   }

  146.     /**Configure Digital filter
  147.     */
  148.   if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
  149.   {
  150.     _Error_Handler(__FILE__, __LINE__);
  151.   }

  152. }

  153. /** Configure pins as
  154.         * Analog
  155.         * Input
  156.         * Output
  157.         * EVENT_OUT
  158.         * EXTI
  159. */
  160. static void MX_GPIO_Init(void)
  161. {

  162.   GPIO_InitTypeDef GPIO_InitStruct;

  163.   /* GPIO Ports Clock Enable */
  164.   __HAL_RCC_GPIOB_CLK_ENABLE();
  165.   __HAL_RCC_GPIOF_CLK_ENABLE();
  166.   __HAL_RCC_GPIOA_CLK_ENABLE();

  167.   /*Configure GPIO pin Output Level */
  168.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);

  169.   /*Configure GPIO pin Output Level */
  170.   HAL_GPIO_WritePin(GPIOB, LED_Pin|GPIO_PIN_7, GPIO_PIN_RESET);

  171.   /*Configure GPIO pin : PB8 */
  172.   GPIO_InitStruct.Pin = GPIO_PIN_8;
  173.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  174.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  175.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  176.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  177.   /*Configure GPIO pin : LED_Pin */
  178.   GPIO_InitStruct.Pin = LED_Pin;
  179.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  180.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  181.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  182.   HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);

  183.   /*Configure GPIO pin : PB7 */
  184.   GPIO_InitStruct.Pin = GPIO_PIN_7;
  185.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  186.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  187.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  188.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  189. }

  190. /* USER CODE BEGIN 4 */
  191. void Writecom(uint8_t COM)
  192. {
  193.         HAL_I2C_Mem_Write(&hi2c1,address,0X00,1,&COM,1,10);
  194. }
  195. /*=====i2c???=====*/
  196. void Writedata(uint8_t DATA)
  197. {
  198.         HAL_I2C_Mem_Write(&hi2c1,address,0X40,1,&DATA,1,10);
  199. }
  200. /*=====OLED ???=====*/
  201. void SSD1306_Init()
  202. {       
  203.   Writecom(0XAE);//display off
  204. //HAL_GPIO_WritePin(GPIOA,PA9_Pin,GPIO_PIN_RESET);
  205.   Writecom(0X00);//set lower column address
  206.   Writecom(0X10);//set higher column address
  207.   Writecom(0X40);//set display start line
  208.   Writecom(0XB0);//set page address
  209.   Writecom(0X81);//set contract control
  210.   Writecom(0XCF);// VCC Generated by Internal DC/DC Circuit
  211.   Writecom(0XA1);//set segment remap  column address 127 is mapped to SEG0
  212.   Writecom(0XA6);//normal / reverse   normal display
  213.   Writecom(0XA8);//multiplex ratio
  214.   Writecom(0X3F);//1/64
  215.   Writecom(0XC8);//Com scan direction remapped mode. Scan from COM[N-1] to COM0
  216.   Writecom(0XD3);//set display offset
  217.   Writecom(0X00);
  218.   Writecom(0XD5);//set osc division
  219.   Writecom(0X80);
  220.   Writecom(0XD9);//set pre-charge period
  221.   Writecom(0X11);
  222.   Writecom(0XDa);//set COM pins
  223.   Writecom(0X12);
  224.   Writecom(0X8d);/*set charge pump enable*/
  225.   Writecom(0X14);
  226.   Writecom(0Xdb);//Set VcomH
  227.   Writecom(0X20);
  228.   Writecom(0XAF);//display ON
  229. }
  230. /*===========================????===========================*/
  231. void clear(uint8_t data)
  232. {
  233. //  Writecom(0XAE);//display OFF
  234.   static unsigned char i, j;
  235.   Writecom(0x00);//set lower column address
  236.   Writecom(0x10);//set higher column address
  237.   for (j = 0; j < 8; j++)
  238.   {
  239.     Writecom(0xB0 + j); //set page address
  240.     for (i = 0; i < 128; i++)
  241.     {
  242.       buffer12864[j][i] = 0x00;
  243.       Writedata(data);
  244.     }
  245.   }
  246. //  Writecom(0XAF);//display ON
  247. }
  248. /*===========================??===========================*/
  249. void Draw_Point(uint8_t x, uint8_t y)
  250. {
  251.   static unsigned char page, higher, lower, cache1, cache2;
  252.   page = y / 8;
  253.   higher = x / 16;
  254.   lower = x % 16;
  255.   cache1 = 0x01 << (y % 8);
  256.   cache2 = buffer12864[ PAGE][x] | cache1;
  257.   buffer12864[ PAGE][x] = cache2;
  258.   Writecom(0xB0 + page); //set page address, page<=7
  259.   Writecom(0x10 + higher); //set higher column address, higher<=7
  260.   Writecom(0x00 + lower);//set lower column address, lower<=15
  261.   Writedata(cache2);
  262. }

  263. void Draw_Line(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)
  264. {
  265.         int x , y;
  266.         float k;
  267.        
  268.         if(x1 == x2)
  269.         {
  270.                 y =y2 - y1;
  271.                 if(y<0)y=0-y;
  272.                 for(x = 0; x <y; x++)
  273.                 {
  274.                         if(y > 0)Draw_Point(x1, y1 + x);
  275.                         else if(y < 0)Draw_Point(x1, y1 - x);
  276.                         else Draw_Point(x1, y1);
  277.                 }
  278.         }
  279.                
  280.         if(y1 == y2)
  281.         {
  282.                 y =x2 - x1;
  283.                 if(y<0)y=0-y;
  284.                 for(x = 0; x < y; x++)
  285.                 {
  286.                         if(y > 0)Draw_Point(x1 + x, y1);
  287.                         else Draw_Point(x1 - x, y1);
  288.                 }
  289.         }
  290.         if(x1 < x2)
  291.         {
  292.                 y = x2 - x1;
  293.                 k = (y2 - y1)/y;
  294.                 for(x = 0 ; x <= y; x++)
  295.                 {
  296.                         Draw_Point(x1 + x, y1 + (int)(x * k));
  297.                 }
  298.         }
  299.         else
  300.         {
  301.                 y = x1 - x2;
  302.                 k = (y1 - y2)/y;
  303.                 for(x = 0 ; x <= y; x++)
  304.                 {
  305.                         Draw_Point(x2 + x, y2 + (int)(x * k));
  306.                 }
  307.         }
  308.                
  309.        
  310.         /*
  311.        
  312.        
  313.         uint8_t t;
  314.         uint8_t xerr=0,yerr=0,delta_x,delta_y,distance;
  315.         uint8_t incx,incy,uRow,uCol;

  316.         delta_x=x2-x1;
  317.         delta_y=y2-y1;
  318.         uRow=x1;
  319.         uCol=y1;
  320.         if(delta_x>0)incx=1;
  321.         else if(delta_x==0)incx=0;
  322.         else {incx=-1;delta_x=-delta_x;}
  323.         if(delta_y>0)incy=1;
  324.         else if(delta_y==0)incy=0;
  325.         else{incy=-1;delta_y=-delta_y;}
  326.         if( delta_x>delta_y)distance=delta_x;
  327.         else distance=delta_y;
  328.         for(t=0;t<=distance+1;t++ )
  329.         {  
  330.                 Draw_Point(uRow,uCol);
  331.                 xerr+=delta_x ;
  332.                 yerr+=delta_y ;
  333.                 if(xerr>distance)
  334.                 {
  335.                         xerr-=distance;
  336.                         uRow+=incx;
  337.                 }
  338.                 if(yerr>distance)
  339.                 {
  340.                         yerr-=distance;
  341.                         uCol+=incy;
  342.                 }
  343.         }        */
  344. }
  345. /*===========================?????===========================*/
  346. void Draw_byte(uint8_t page, uint8_t lie, uint8_t data)
  347. {
  348.   static unsigned char  higher, lower, cache;
  349.   higher = lie / 16;
  350.   lower = lie % 16;
  351.   cache = buffer12864[ PAGE][lie] | data;
  352.   buffer12864[ PAGE][lie] = cache;
  353.   Writecom(0xB0 + page); //set page address, page<=7
  354.   Writecom(0x10 + higher); //set higher column address, higher<=7
  355.   Writecom(0x00 + lower);//set lower column address, lower<=15
  356.   Writedata(cache);
  357. }
  358. /*===========================????===========================*/
  359. void Draw_byte_clear(uint8_t page, uint8_t lie, uint8_t data) //half
  360. {
  361.   static unsigned char  higher, lower, cache;
  362.   higher = lie / 16;
  363.   lower = lie % 16;
  364.   cache = buffer12864[ PAGE][lie] | data;
  365.   Writecom(0xB0 + page); //set page address, page<=7
  366.   Writecom(0x10 + higher); //set higher column address, higher<=7
  367.   Writecom(0x00 + lower);//set lower column address, lower<=15
  368.   Writedata(cache);
  369. }
  370. /*===========================?????===========================*/
  371. void show_char(uint8_t page, uint8_t lie, uint8_t data)
  372. {
  373.   if ((data <= '~') && (data >= ' '))
  374.   {
  375.     for (int m = 0; m < 8; m++)
  376.     {
  377.       Draw_byte(page, lie + m, F8X16[data - 32][m]);
  378.       Draw_byte(page + 1, lie + m, F8X16[data - 32][m + 8]);
  379.     }
  380.   }
  381. }
  382. /*===========================?????===========================*/
  383. void show_char_clear(uint8_t page, uint8_t lie, uint8_t data)
  384. {
  385.   if ((data <= '~') && (data >= ' '))
  386.   {
  387.     for (int m = 0; m < 8; m++)
  388.     {
  389.       Draw_byte_clear(page, lie + m, F8X16[data - 32][m]);
  390.       Draw_byte_clear(page + 1, lie + m, F8X16[data - 32][m + 8]);
  391.     }
  392.   }
  393.   else
  394.   {
  395.     for (int m = 0; m < 8; m++)
  396.     {
  397.       Draw_byte_clear(page, lie + m, F8X16[0][m]);
  398.       Draw_byte_clear(page + 1, lie + m, F8X16[0][m + 8]);
  399.     }
  400.   }
  401. }
  402. /*===========================??????===========================*/
  403. void show_string(uint8_t page, uint8_t lie, uint8_t *Data, uint16_t length)
  404. {
  405.   uint8_t m=0;
  406.         if((128-length*8-lie)>0)
  407.         {
  408.                 for (m = 0; m < length; m++)
  409.                 {
  410.                         show_char(page, lie + m * 8, *Data++);
  411.                 }
  412.         }
  413.         else
  414.         {               
  415.                 for (m = 0; m < ((128-lie)/8); m++)
  416.                 {
  417.                         show_char(page, lie + m * 8, *Data++);
  418.                 }
  419.                 for (m = 0; m < length; m++)
  420.                 {
  421.                         show_char(page+2, m * 8, *Data++);
  422.                 }
  423.         }
  424. }
  425. /*===========================??????===========================*/
  426. void show_string_clear(uint8_t page, uint8_t lie,  uint8_t *Data, uint16_t length) //
  427. {
  428.   uint8_t m=0;
  429.         if((128-length*8-lie)>0)
  430.         {
  431.                 for (m = 0; m < length; m++)
  432.                 {
  433.                         show_char(page, lie + m * 8, *Data++);
  434.                 }
  435.         }
  436.         else
  437.         {               
  438.                 for (m = 0; m < ((128-lie)/8); m++)
  439.                 {
  440.                         show_char_clear(page, lie + m * 8, *Data++);
  441.                 }
  442.                 for (m = 0; m < length; m++)
  443.                 {
  444.                         show_char_clear(page+2, m * 8, *Data++);
  445.                 }
  446.         }
  447. }
  448. /*===========================????===========================*/
  449. void display_logo(void)
  450. {
  451.   Writecom(0XAE);//display OFF
  452.   static unsigned char x, y, m, n;
  453.   for (x = 0; x < 8; x++)
  454.   {
  455.     for (y = 0; y < 128; y++)
  456.     {
  457.       Draw_byte_clear(x, y, logo[x][y]); // pgm_read_byte(&logo[x][y]) ????flash????
  458.     }
  459.   }
  460.   Writecom(0XAF);//display ON

  461.   for (m = 0; m < 8; m++) //?????
  462.   {
  463.     for (n = 0; n < 64; n++)
  464.     {
  465.       Writecom(0XD3);//set display offset
  466.       Writecom(0X00 + n);
  467.       HAL_Delay(1);
  468.     }
  469.   }
  470.   for (m = 0; m < 5; m++)
  471.   {
  472.     for (n = 0; n < 64; n++)
  473.     {
  474.       Writecom(0XD3);//set display offset
  475.       Writecom(0X00 + n);
  476.       HAL_Delay(2);
  477.     }
  478.   }
  479.   Writecom(0XD3);//set display offset
  480.   Writecom(0X00);
  481.   HAL_Delay(100);
  482. }

  483. /* USER CODE END 4 */

  484. /**
  485.   * @brief  This function is executed in case of error occurrence.
  486.   * @param  None
  487.   * @retval None
  488.   */
  489. void _Error_Handler(char * file, int line)
  490. {
  491.   /* USER CODE BEGIN Error_Handler_Debug */
  492.   /* User can add his own implementation to report the HAL error return state */
  493.   while(1)
  494.   {
  495.   }
  496.   /* USER CODE END Error_Handler_Debug */
  497. }

  498. #ifdef USE_FULL_ASSERT

  499. /**
  500.    * @brief Reports the name of the source file and the source line number
  501.    * where the assert_param error has occurred.
  502.    * @param file: pointer to the source file name
  503.    * @param line: assert_param error line source number
  504.    * @retval None
  505.    */
  506. void assert_failed(uint8_t* file, uint32_t line)
  507. {
  508.   /* USER CODE BEGIN 6 */
  509.   /* User can add his own implementation to report the file name and line number,
  510.     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  511.   /* USER CODE END 6 */

  512. }

  513. #endif

  514. /**
  515.   * @}
  516.   */

  517. /**
  518.   * @}
  519. */

  520. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
復制代碼

全部資料51hei下載地址:
STM32F042G_IIC_OLED.rar (3.32 MB, 下載次數: 67)


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

使用道具 舉報

沙發
ID:44037 發表于 2019-1-29 22:48 | 只看該作者
謝謝分享   學習一下

沒有分開 i2c
回復

使用道具 舉報

板凳
ID:357729 發表于 2019-7-1 00:18 | 只看該作者

謝謝分享   學習一下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品福利 | 美女黄网站 | 欧美人成在线视频 | 亚洲一区二区视频 | 国产精品一区三区 | 欧美一级视频免费看 | 亚洲 欧美 日韩 在线 | 99福利视频 | 婷婷色婷婷 | 精品国产伦一区二区三区观看说明 | 精品日韩 | 中文字幕 在线观看 | www.日韩 | 国产成人精品一区二 | 欧美在线播放一区 | 欧美精品第一区 | 日韩一区二区三区四区五区 | 午夜专区 | 国产欧美一区二区三区久久手机版 | 欧美激情一区二区 | 国产激情一区二区三区 | 亚洲国产精品99久久久久久久久 | 久久久人成影片免费观看 | 成人九色 | 韩日一区二区三区 | 精品福利一区 | 成人精品国产免费网站 | 亚洲精品国产综合区久久久久久久 | 国产午夜精品久久久久 | av永久免费 | 中文字幕亚洲欧美 | 精品国产一区二区三区久久 | 欧美女优在线观看 | 9久9久9久女女女九九九一九 | 操人网| 日本三级电影在线观看视频 | 在线视频a | 少妇久久久| 天天天插 | 欧美成人免费在线 | 日韩精品在线一区 |