精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用C語(yǔ)言在Linux下實(shí)現(xiàn)CC2530上位機(jī)-1

系統(tǒng) Linux
本篇給大家介紹用C語(yǔ)言在Linux下實(shí)現(xiàn)CC2530上位機(jī)-1,希望能夠幫助到你。

[[377335]]

0、前言

網(wǎng)友提問(wèn)如下:


本地進(jìn)程之間 pipe shm msg 消息隊(duì)列, sem

兩個(gè)pc之間 socket /unix

raw 套接字:

BSD socket unix -> bill joy bsd分支,

匯總下這個(gè)網(wǎng)友的問(wèn)題,其實(shí)就是實(shí)現(xiàn)一個(gè)網(wǎng)關(guān)程序,內(nèi)容分為幾塊:

下位機(jī),通過(guò)串口與上位機(jī)相連;

下位機(jī)要能夠接收上位機(jī)下發(fā)的命令,并解析這些命令;

下位機(jī)能夠根據(jù)這些命令配置對(duì)應(yīng)的外設(shè)、讀取對(duì)應(yīng)的傳感器的數(shù)據(jù)上傳到上位機(jī);

主程序串口操作模塊:通過(guò)串口下發(fā)命令或者讀取下位機(jī)上傳的數(shù)據(jù)信息;

主程序網(wǎng)絡(luò)通信模塊:接收遠(yuǎn)程服務(wù)器下發(fā)的命令,并將下位機(jī)采集的數(shù)據(jù)上傳到服務(wù)器。

整體看來(lái),這個(gè)相當(dāng)于是一個(gè)小的項(xiàng)目了,內(nèi)容難度都比較大,下面我們會(huì)分為幾篇獨(dú)立的文章來(lái)講解。

本篇只討論如何給下位機(jī)編寫(xiě)一個(gè)簡(jiǎn)單的上位機(jī)。

一、環(huán)境簡(jiǎn)介

1. 軟硬件環(huán)境

下位機(jī):CC2530 OS:vmware + ubuntu

在這里彭老師采用的是CC2530,讀者也可以采用其他的板子,我們只需要該板子有串口,可以和PC通信,同時(shí)板子上有可設(shè)置的led燈、繼電器以及可以采集數(shù)據(jù)的傳感器即可。

2. 硬件連接圖

硬件連接圖如下:


該款CC2530已經(jīng)集成了CH340芯片,usb線連接電腦,即可被識(shí)別。

3. pc下識(shí)別串口

如果該串口被PC獲取,名字為COMn【n為某整數(shù)】。


windows下串口

4. ubuntu下識(shí)別串口

首先需要vmware抓取串口【串口在同一時(shí)刻要么被windows抓取要么被vmware抓取】,按下圖所示,點(diǎn)擊連接即可:


虛擬機(jī)抓取串口

但是往往ubuntu中沒(méi)有ch340的驅(qū)動(dòng),經(jīng)過(guò)實(shí)際測(cè)試,ubuntu14及之前的版本都沒(méi)有這個(gè)驅(qū)動(dòng),ubuntu16以上的版本有這個(gè)驅(qū)動(dòng)。

如果沒(méi)有ch340驅(qū)動(dòng)可以用以下方法安裝對(duì)應(yīng)的驅(qū)動(dòng):

  1. 1 make  
  2. 2 sudo make load 
  3. 3 ls /dev/ttyUSB0 

 

ubuntu安裝串口驅(qū)動(dòng)

按照上述步驟,會(huì)生成設(shè)備文件**/dev/ttyUSB0**。

  1. ls /dev/ttyUSB0 -l 
  2. crw-rw---- 1 root dialout 188, 0 Jan 15 05:45 /dev/ttyUSB0 

c : 字符設(shè)備 rw-rw---- :文件操作權(quán)限

188, 0 :主次設(shè)備號(hào)

3、4節(jié)提到的usb轉(zhuǎn)串口驅(qū)動(dòng)和linux下驅(qū)動(dòng)源碼后臺(tái)【GH】回復(fù) ch340 即可獲得


【注意】如果是其他開(kāi)發(fā)板,自行安裝其他的串口驅(qū)動(dòng)。

二、模塊設(shè)計(jì)

上位機(jī)和下位機(jī)的通信往往都是通過(guò)串口,linux下往往生成字符設(shè)備ttyUSB0【有的是ttyS0】,操作串口設(shè)備就只需要操作該字符設(shè)備即可。

下面我們?cè)O(shè)計(jì)上下位機(jī)的軟件模塊。

1. 信令

設(shè)計(jì)上位機(jī),首先需要設(shè)計(jì)上位機(jī)下發(fā)給下位機(jī)的指令格式,上位機(jī)按照該指令格式發(fā)送命令給下位機(jī),下位需嚴(yán)格按照該指令格式進(jìn)行解析指令。


含義如下:

  • device:要操作的設(shè)備
  • data :對(duì)應(yīng)的設(shè)備及其額外的數(shù)據(jù)
  • CRC :校驗(yàn)碼
  • # :信令終止符

信令格式可以根據(jù)需要擴(kuò)展或者精簡(jiǎn)。

其中device定義如下【可以根據(jù)實(shí)際情況進(jìn)行擴(kuò)展】:

  1. #define DEV_ID_LED_ON    0X1 
  2. #define DEV_ID_LED_OFF    0X2 
  3. #define DEV_ID_DELAY 0X3 
  4. #define DEV_ID_GAS  0X4 

【注意】為便于理解,我們暫不考慮效率問(wèn)題。

2. 上傳數(shù)據(jù)

下位機(jī)需要采集傳感器的數(shù)據(jù)并通過(guò)串口上傳,數(shù)據(jù)結(jié)構(gòu)定義如下:

  1. struct data{ 
  2.  unsigned char device; 
  3.  unsigned char crc;    
  4.  unsigned short data; 
  5. }; 
  • device 設(shè)備
  • data 采集的數(shù)據(jù)
  • crc 校驗(yàn)碼

3. 功能模塊

現(xiàn)在就可以開(kāi)始設(shè)計(jì)軟件的各個(gè)功能模塊了。

下位機(jī)


下位機(jī)流程圖

下位主要任務(wù)就是循環(huán)接收上位機(jī)通過(guò)串口下發(fā)的數(shù)據(jù),然后解析該指令內(nèi)容,操作對(duì)應(yīng)的硬件。

上位機(jī)


上位機(jī)

上位機(jī)主要任務(wù)是打印菜單,由用戶(hù)針對(duì)菜單做出選擇,然后按照指令格式封裝命令,并通過(guò)串口將該命令下發(fā)給下位機(jī)。

三、 下位機(jī)功能函數(shù)

cc2530的操作原理,本文不討論,如果是其他開(kāi)發(fā)板,只需要修改串口操作函數(shù)。

1. LED初始化

  1. /**************************************************************************** 
  2. * 名    稱(chēng): InitLed() 
  3. * 功    能: 設(shè)置LED燈相應(yīng)的IO口 
  4. * 入口參數(shù): 無(wú) 
  5. * 出口參數(shù): 無(wú) 
  6. ****************************************************************************/ 
  7. void InitLed(void) 
  8.     P1DIR |= 0x01;               //P1.0定義為輸出口 
  9.     LED1 = 0;    

2. 初始化UART

  1. /**************************************************************** 
  2. * 名    稱(chēng): InitUart() 
  3. * 功    能: 串口初始化函數(shù) 
  4. * 入口參數(shù): 無(wú) 
  5. * 出口參數(shù): 無(wú) 
  6. *****************************************************************/ 
  7. void InitUart(void) 
  8. {  
  9.     PERCFG = 0x00;           //外設(shè)控制寄存器 USART 0的IO位置:0為P0口位置1  
  10.     P0SEL = 0x0c;            //P0_2,P0_3用作串口(外設(shè)功能) 
  11.     P2DIR &= ~0xC0;          //P0優(yōu)先作為UART0 
  12.      
  13.     U0CSR |= 0x80;           //設(shè)置為UART方式 
  14.     U0GCR |= 11;            
  15.     U0BAUD |= 216;           //波特率設(shè)為115200 
  16.     UTX0IF = 0;              //UART0 TX中斷標(biāo)志初始置位0 
  17.     U0CSR |= 0x40;           //允許接收  
  18.     IEN0 |= 0x84;            //開(kāi)總中斷允許接收中斷   

3. 串口發(fā)送函數(shù)

  1. /********************************************************************** 
  2. * 名    稱(chēng): UartSendString() 
  3. * 功    能: 串口發(fā)送函數(shù) 
  4. * 入口參數(shù): Data:發(fā)送緩沖區(qū)   len:發(fā)送長(zhǎng)度 
  5. * 出口參數(shù): 無(wú) 
  6. ***********************************************************************/ 
  7. void UartSendString(char *Data, int len) 
  8.     uint i; 
  9.      
  10.     for(i=0; i<len; i++) 
  11.     { 
  12.         U0DBUF = *Data++; 
  13.         while(UTX0IF == 0); 
  14.         UTX0IF = 0; 
  15.     } 

 4. 串口中斷處理函數(shù)

  1. /********************************************************************** 
  2. * 名    稱(chēng): UART0_ISR(void) 串口中斷處理函數(shù)  
  3. * 描    述: 當(dāng)串口0產(chǎn)生接收中斷,將收到的數(shù)據(jù)保存在RxBuf中 
  4. **********************************************************************/ 
  5. #pragma vector = URX0_VECTOR  
  6. __interrupt void UART0_ISR(void)  
  7. {  
  8.     URX0IF = 0;       // 清中斷標(biāo)志  
  9.     RxBuf = U0DBUF;                            

5. 煙霧傳感器數(shù)據(jù)讀取

  1. /**************************************************************** 
  2. * 名    稱(chēng): myApp_ReadGasLevel() 
  3. * 功    能: 煙霧傳感器數(shù)據(jù)讀取 
  4. * 入口參數(shù): 無(wú) 
  5. * 出口參數(shù): 無(wú) 
  6. *****************************************************************/ 
  7. uint16 myApp_ReadGasLevel( void ) 
  8.   uint16 reading = 0; 
  9.    
  10.   /* Enable channel */ 
  11.   ADCCFG |= 0x80; 
  12.    
  13.   /* writing to this register starts the extra conversion */ 
  14.   ADCCON3 = 0x87; 
  15.    
  16.   /* Wait for the conversion to be done */ 
  17.   while (!(ADCCON1 & 0x80)); 
  18.    
  19.   /* Disable channel after done conversion */ 
  20.   ADCCFG &= (0x80 ^ 0xFF); 
  21.    
  22.   /* Read the result */ 
  23.   reading = ADCH; 
  24.   reading |= (int16) (ADCH << 8);  
  25.   reading >>= 8; 
  26.    
  27.   return (reading); 

6. LED燈控制函數(shù)

  1. /**************************************************************** 
  2. * 名    稱(chēng): led_opt() 
  3. * 功    能: LED燈控制函數(shù) 
  4. * 入口參數(shù):  RxData:接收到的指令  flage:led的操作,點(diǎn)亮或者關(guān)閉 
  5. * 出口參數(shù): 無(wú) 
  6. *****************************************************************/ 
  7. void led_opt(char RxData[],unsigned char flage) 
  8.  switch(RxData[1]) 
  9.  { 
  10.   case 1: 
  11.                   LED1 = (flage==DEV_ID_LED_ON)?ON:OFF
  12.    break; 
  13.   /* TBD for led2 led3*/ 
  14.  
  15.    
  16.   default
  17.    break; 
  18.  } 
  19.  return

7. 主程序

  1. /**************************************************************************** 
  2. * 主程序入口函數(shù) 
  3. ****************************************************************************/ 
  4. void main(void) 
  5. {  
  6.  CLKCONCMD &= ~0x40;           //設(shè)置系統(tǒng)時(shí)鐘源為32MHZ晶振 
  7.  while(CLKCONSTA & 0x40);      //等待晶振穩(wěn)定為32M 
  8.  CLKCONCMD &= ~0x47;           //設(shè)置系統(tǒng)主時(shí)鐘頻率為32MHZ    
  9.  
  10.  InitLed();                    //設(shè)置LED燈相應(yīng)的IO口 
  11.  InitUart();                   //串口初始化函數(shù)    
  12.  UartState = UART0_RX;         //串口0默認(rèn)處于接收模式 
  13.  memset(RxData, 0, SIZE); 
  14.        
  15.  while(1) 
  16.  { 
  17.       //接收狀態(tài)  
  18.   if(UartState == UART0_RX)              
  19.   { //讀取數(shù)據(jù),遇到字符'#'或者緩沖區(qū)字符數(shù)量超過(guò)4就設(shè)置UartState為CONTROL_DEV狀態(tài) 
  20.    if(RxBuf != 0)  
  21.    {  
  22.     //以'#'為結(jié)束符,一次最多接收4個(gè)字符        
  23.     if((RxBuf != '#')&&(count < 4))      
  24.     {  
  25.      RxData[count++] = RxBuf;  
  26.     } 
  27.     else 
  28.     { 
  29.       //判斷數(shù)據(jù)合法性,防止溢出 
  30.      if(count >= 4)             
  31.      {  
  32.       //計(jì)數(shù)清0 
  33.       count = 0;              
  34.       //清空接收緩沖區(qū) 
  35.       memset(RxData, 0, SIZE); 
  36.      } 
  37.      else
  38.       //進(jìn)入發(fā)送狀態(tài)  
  39.       UartState = CONTROL_DEV; 
  40.      } 
  41.     } 
  42.     RxBuf  = 0; 
  43.    } 
  44.   } 
  45.          //控制控制外設(shè)狀態(tài)  
  46.          if(UartState == CONTROL_DEV)             
  47.          { 
  48.              //判斷接收的數(shù)據(jù)合法性 
  49.    //RxData[]:  | device | data |crc | # | 
  50.    //check_crc:   crc = device ^ data 
  51.    //if(RxData[2] == (RxData[0]^RxData[1])) 
  52.    { 
  53.     switch(RxData[0]) 
  54.     { 
  55.      case DEV_ID_LED_ON : 
  56.       led_opt(RxData,DEV_ID_LED_ON); 
  57.       break; 
  58.      case DEV_ID_LED_OFF: 
  59.       led_opt(RxData,DEV_ID_LED_OFF); 
  60.       break; 
  61.      case DEV_ID_DELAY: 
  62.       break; 
  63.      case DEV_ID_GAS: 
  64.       send_gas(); 
  65.       break;    
  66.      default
  67.       break; 
  68.     }         
  69.    } 
  70.              UartState = UART0_RX; 
  71.              count = 0;      
  72.    //清空接收緩沖區(qū) 
  73.              memset(RxData, 0, SIZE);            
  74.   } 
  75.  } 

四、 上位機(jī)功能函數(shù)

結(jié)構(gòu)體

  1. #define DEV_ID_LED_ON    0X1 
  2. #define DEV_ID_LED_OFF    0X2 
  3. #define DEV_ID_DELAY 0X3 
  4. #define DEV_ID_GAS  0X4 
  5. struct data{ 
  6.  unsigned char device; 
  7.  unsigned char crc;  
  8.  unsigned short data; 
  9. }; 

函數(shù)

  1. void uart_init(void ) 
  2.  int nset1,nset2; 
  3.  
  4.  serial_fd = open"/dev/ttyUSB0", O_RDWR); 
  5.  if(serial_fd == -1) 
  6.  { 
  7.   printf("open() error\n"); 
  8.   exit(1); 
  9.  } 
  10.  nset1 = set_opt(serial_fd, 115200, 8, 'N', 1); 
  11.  if(nset2 == -1) 
  12.  { 
  13.   printf("set_opt() error\n"); 
  14.   exit(1); 
  15.  } 
  16. int Menu()  
  17.  int option
  18.   
  19.  system("clear"); 
  20.  
  21.  printf("\n\t\t************************************************\n"); 
  22.  printf("\n\t\t**               ALARM SYSTERM                **\n"); 
  23.  printf("\n\t\t**               1----LED                     **\n"); 
  24.  printf("\n\t\t**               2----GAS                   **\n"); 
  25.  printf("\n\t\t**               0----EXIT                    **\n"); 
  26.  printf("\n\t\t************************************************\n");  
  27.  while(1) 
  28.  {  
  29.   printf("Please choose what you want: "); 
  30.   scanf("%d",&option);  
  31.   if(option<0||option>2) 
  32.    printf("\t\t    choose error!\n"); 
  33.   else  
  34.    break; 
  35.  } 
  36.  return option;  
  37. // RxData[]:  | device | data |crc | # | 
  38. void led() 
  39.  int lednum = 0; 
  40.  int onoff; 
  41.  
  42.  char cmd[4]; 
  43.  //選擇led燈 
  44.  while(1) 
  45.  { 
  46.   printf("input led number :[1 2]\n#"); 
  47.  
  48.   scanf("%d",&lednum); 
  49.   //check   
  50.   if(lednum<1 || lednum >2) 
  51.   { 
  52.    printf("invalid led number\n"); 
  53.    system("clear"); 
  54.    continue
  55.   }else
  56.    break; 
  57.   } 
  58.  } 
  59.  printf("operation: 1 on , 0  off\n"); 
  60.  scanf("%d",&onoff);  
  61.  
  62.  if(onoff == 1) 
  63.  { 
  64.   cmd[0] = DEV_ID_LED_ON; 
  65.  }else if(onoff == 0) 
  66.  { 
  67.   cmd[0] = DEV_ID_LED_OFF; 
  68.  }else
  69.   printf("invalid led number\n"); 
  70.   return
  71.  } 
  72.   
  73.  cmd[1] = lednum; 
  74.  //fulfill crc  area 
  75.  cmd[2] = cmd[0]^cmd[1];   
  76.  cmd[3] = '#';//表示結(jié)束符 
  77.   
  78.  tcflush(serial_fd, TCIOFLUSH); 
  79.  
  80.  int i = 0; 
  81.  
  82.  for(i=0;i<4;i++) 
  83.  { 
  84.   printf("%d ",cmd[i]); 
  85.  } 
  86.  printf("\n"); 
  87.   
  88.  write(serial_fd,&cmd,sizeof(cmd));   
  89.   
  90.  sleep(1); 
  91.   
  92. // RxData[]:  | device | data |crc | # | 
  93. void gas() 
  94.  int len ; 
  95.  unsigned short  GasLevel; 
  96.  struct data msg; 
  97.  char gas[4]={0}; 
  98.  char cmd[4]; 
  99.   
  100.  cmd[0] = DEV_ID_GAS; 
  101.  cmd[3] = '#';//表示結(jié)束符 
  102.  write(serial_fd,&cmd,sizeof(cmd)); 
  103.  sleep(1); 
  104.   
  105.  len = read(serial_fd,&msg,sizeof(struct data)); 
  106.  //轉(zhuǎn)換讀取的gas數(shù)據(jù)格式 
  107.  GasLevel = msg.data; 
  108.  gas[0] = GasLevel / 100 + '0'
  109.  gas[1] = GasLevel / 10%10 + '0'
  110.  gas[2] = GasLevel % 10 + '0'
  111.  
  112.  printf("%s\n",gas); 
  113.  getchar(); 
  114. void run() 
  115.  int x; 
  116.   
  117.  while(1) 
  118.  {   
  119.   x=Menu();  
  120.   switch(x)  
  121.   {  
  122.    case 1: 
  123.     led(); 
  124.     break;   
  125.    case 2: 
  126.     gas(); 
  127.     break;  
  128.    case 0: 
  129.     printf("\n\t\t     exit!\n\n"); 
  130.     close(serial_fd); 
  131.     exit(0); 
  132.    default
  133.     fg=1; 
  134.     break; 
  135.    } 
  136.    if(fg) 
  137.     break; 
  138.   } 
  139.  
  140. int main()  
  141.  uart_init(); 
  142.  run(); 
  143.  return 0; 

五、 運(yùn)行結(jié)果

1. 上位機(jī)運(yùn)行界面


主菜單

2. 點(diǎn)亮led燈

點(diǎn)亮led1:


3. 滅燈


熄滅led1

4. 讀取煙霧傳感器數(shù)據(jù)


獲取煙霧數(shù)據(jù)

煙霧的數(shù)據(jù)是079,可以點(diǎn)根華子,你會(huì)發(fā)現(xiàn)每次讀取的值都是在變化。

OK!至此為止,一個(gè)簡(jiǎn)易的CC2530上位機(jī)我們就編寫(xiě)完畢,如果想將從串口獲取的數(shù)據(jù)的值發(fā)送到遠(yuǎn)端服務(wù)器,后續(xù)文章我們將繼續(xù)討論。

 

責(zé)任編輯:姜華 來(lái)源: 一口Linux
相關(guān)推薦

2022-09-08 11:44:17

EW匯編器連接定位器

2013-05-13 13:33:42

2011-03-04 10:04:31

Linux文件操作命令

2021-05-24 06:40:59

C語(yǔ)言Linux軟件庫(kù)

2020-10-15 10:38:35

C語(yǔ)言狀態(tài)模型

2022-08-27 10:53:15

C語(yǔ)言Linux內(nèi)核

2017-02-23 09:00:42

2022-04-22 15:06:59

C++PythonJava

2020-04-15 11:07:31

C語(yǔ)言對(duì)象思想

2023-12-07 12:59:46

C語(yǔ)言循環(huán)隊(duì)列代碼

2015-08-27 10:19:31

LinuxRAID

2018-05-07 09:09:13

編程語(yǔ)言 C 語(yǔ)言Java

2010-09-14 09:24:29

C語(yǔ)言

2009-06-24 09:36:52

XML實(shí)現(xiàn)breadcMVC

2009-05-20 19:33:34

Vista虛擬機(jī)Linux

2012-07-12 14:06:10

C語(yǔ)言

2025-10-20 04:22:00

2014-05-07 09:48:39

CC語(yǔ)言

2015-12-25 15:52:50

Linux蘋(píng)果編程Swift

2009-12-17 09:56:18

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美日韩一级二级| 国产凹凸在线观看一区二区| 一个人看的www久久| 少妇性l交大片| 自拍视频在线播放| 国产麻豆精品95视频| 午夜精品免费视频| 精品无码在线观看| 日韩中文字幕在线一区| 精品日韩美女的视频高清| 日韩精品另类天天更新| 国产精品女同一区二区| 国产日韩精品视频一区二区三区 | 国产999精品视频| 日韩毛片无码永久免费看| 视频二区欧美| 色综合久久久久综合体| 中文字幕久久综合| 天天操天天操天天| 国产一二三精品| 日韩美女视频免费看| 免费人成视频在线| 日本一区二区三区视频| 欧美精品一区二区三区蜜臀| 国产福利影院在线观看| 丁香花电影在线观看完整版 | 亚洲一区二区在| 视频一区二区三区国产| 国产高清在线精品| 国产久一一精品| 日韩 国产 欧美| 亚洲大胆视频| 欧美黑人xxxx| 美女福利视频在线观看| 欧美日韩一区二区三区视频播放| 精品福利一二区| 亚洲热在线视频| 免费一区二区三区四区| 91精品1区2区| 日本熟妇人妻xxxxx| www.综合| 五月天欧美精品| 国产精品69久久久| 中文字幕在线播放网址| 亚洲人一二三区| 一区二区三区欧美在线| 888av在线| 国产精品久久久久久久久图文区 | 成人黄色片网站| 精品国产青草久久久久96| 久久aⅴ乱码一区二区三区| 97在线视频国产| 久久久久久久久久影院| 亚洲精品极品| 欧洲亚洲免费视频| 四虎影院在线免费播放| 日韩中文字幕亚洲一区二区va在线 | 欧美欧美黄在线二区| 精品亚洲一区二区三区在线播放| 久久人妻少妇嫩草av无码专区 | 欧美本精品男人aⅴ天堂| 久久精品无码一区二区三区毛片| 国产日本亚洲| 欧美电视剧在线看免费| 日韩黄色一区二区| 牛牛影视久久网| 亚洲色图偷窥自拍| 国产99在线 | 亚洲| 久久性感美女视频| 久久成年人视频| 久久精品视频日本| 在线视频免费在线观看一区二区| 26uuu日韩精品一区二区| 日韩在线视频免费播放| 日韩精品乱码免费| 92看片淫黄大片看国产片| www.欧美国产| 91麻豆swag| 在线视频不卡一区二区三区| 久久综合之合合综合久久| 一区二区三区在线视频观看58| 狠狠精品干练久久久无码中文字幕 | 免费av一区| 精品国内自产拍在线观看| 极品盗摄国产盗摄合集| 国产欧美精品久久| 国产精品久久久久77777| av中文在线观看| 91在线免费播放| 亚洲精品一区二区三区av| 成人在线免费看黄| 婷婷国产在线综合| 欧美三级午夜理伦三级富婆| 日韩在线观看中文字幕| 日韩电影中文 亚洲精品乱码| www亚洲色图| 日韩电影免费网址| 欧美巨大黑人极品精男| 日本一区二区三区免费视频| 欧美日韩精品| 国产精品羞羞答答| 亚洲av无码一区二区三区性色| 久久欧美一区二区| 欧美另类videos| 福利视频亚洲| 精品sm在线观看| 日韩欧美黄色网址| 国产一区二区精品| 国产91色在线|亚洲| 在线观看二区| 日韩欧美在线视频观看| 最新中文字幕日本| 91精品秘密在线观看| 国产精品扒开腿做| 日韩a在线观看| 亚洲一区二区在线免费看| 99re精彩视频| 精品一区二区三区中文字幕老牛| 97精品在线视频| 国产99久久九九精品无码免费| 日本一区二区三区高清不卡| 国产91xxx| 一区二区三区自拍视频| 日韩最新中文字幕电影免费看| 黄色在线观看国产| 成人午夜电影小说| 日本亚洲导航| 欧美人与禽性xxxxx杂性| 国产精品6666| 国内精品伊人久久久久影院对白| 国产精品对白刺激久久久| 黄色网页在线免费看| 色先锋资源久久综合| 在线观看一区二区三区四区| 欧美电影《轻佻寡妇》| 国产精品91久久久久久| 国产一区二区三区福利| 亚洲一级不卡视频| 国产九九九视频| 欧美a级片视频| 国产成人一区二区三区电影| 黑人乱码一区二区三区av| 亚洲一区二区精品视频| 国产在线视频三区| 亚洲九九在线| 成人黄色片在线| 日本精品在线| 这里是久久伊人| 免费91在线观看| 日本不卡免费在线视频| 久久国产主播精品| 2020国产在线| 精品国产乱码久久久久久浪潮 | 欧美孕妇性xx| 欧美自拍偷拍第一页| 亚洲成人动漫在线观看| 国产高潮失禁喷水爽到抽搐| 中文字幕一区二区三区在线视频 | 中文字幕+乱码+中文乱码www| 91在线码无精品| 日韩国产欧美亚洲| 日本成人7777| 热久久视久久精品18亚洲精品| 日本韩国免费观看| 狠狠躁夜夜躁人人躁婷婷91| 亚洲v在线观看| 久久久夜夜夜| 色播亚洲婷婷| 日韩欧国产精品一区综合无码| 色婷婷**av毛片一区| 在线视频1卡二卡三卡| 亚洲欧美韩国综合色| 极品人妻一区二区| 亚洲午夜视频| 美女被啪啪一区二区| 婷婷综合六月| 亚洲图片在线综合| 国产精品久久久久毛片| 一区二区三区在线观看视频| 91精品又粗又猛又爽| 激情欧美国产欧美| 国产无套精品一区二区| 国产极品嫩模在线观看91精品| 中文字幕日韩欧美| 国产成人精品一区二三区四区五区 | 中文字幕日本在线| 日韩亚洲欧美成人一区| 欧美激情黑白配| 中文子幕无线码一区tr| 天天久久综合网| 99成人在线| 视频在线99re| 成人在线视频www| 国内精品久久久久久久| 九色在线观看视频| 欧美精品电影在线播放| 久久精品国产亚洲av麻豆色欲 | 国产精品白嫩初高中害羞小美女| 久久日韩视频| 日韩成人av在线播放| 波多野结衣在线观看视频| 亚洲香肠在线观看| 韩国三级hd中文字幕| 国产伦精品一区二区三区视频青涩| 亚洲色欲久久久综合网东京热| 青青久久av| 国产精品久久久久久av| aa国产成人| 最近2019中文字幕mv免费看| 国产小视频免费观看| 欧美性猛交xxxxxx富婆| 九九热只有精品| 亚洲天堂免费看| 丰满少妇一区二区三区| 国产剧情一区在线| 国产精品无码专区av在线播放 | 成人福利视频在线| 欧美特级aaa| 一区三区视频| 天堂8在线天堂资源bt| 日韩电影在线视频| 精品乱码一区二区三区| 播放一区二区| 久久国产精品电影| av大片在线看| 精品美女在线播放| 国产强被迫伦姧在线观看无码| 亚洲综合偷拍欧美一区色| av黄色免费网站| 成人永久免费视频| 国产性生活一级片| 激情都市一区二区| 另类小说第一页| 西西裸体人体做爰大胆久久久| 成人在线观看毛片| 999国产精品永久免费视频app| 日本一区二区三区视频在线观看| 成人激情自拍| 亚洲一区二区三区在线免费观看| 欧美日韩视频网站| 午夜免费在线观看精品视频| 理论不卡电影大全神| 欧美成人中文字幕| 巨大荫蒂视频欧美大片| 日韩中文字幕视频| 精品无人乱码| 国产一区二区三区四区福利| 婷婷五月综合激情| 亚洲电影免费观看高清| 午夜精品久久久久久久91蜜桃| 色94色欧美sute亚洲13| 国产日韩久久久| 欧美在线观看视频一区二区三区 | 成a人片在线观看| 色天天综合狠狠色| 欧美a在线看| 日韩中文字在线| 成人看片免费| 欧美精品免费在线观看| 巨大荫蒂视频欧美大片| 久久久精品影院| 成人福利片网站| 91精品国产亚洲| 亚洲黄色免费看| 情事1991在线| 先锋欧美三级| 国产精彩精品视频| 国产午夜亚洲精品一级在线| 91网站免费看| 91精品尤物| 精品一区久久久| 欧美色女视频| 正在播放一区二区三区| 888久久久| 国产小视频免费| 伊人狠狠色j香婷婷综合| 蜜臀av无码一区二区三区| 亚洲欧美日本国产专区一区| 麻豆av免费在线| 久久精品国产999大香线蕉| 久久久久国产免费| 久久夜色精品一区| 日韩欧美视频免费观看| 一区二区三区蜜桃| 无码免费一区二区三区| 欧美剧在线免费观看网站 | 天天在线视频色| 久久久久免费视频| 欧洲一区二区三区精品| 日韩女在线观看| 精品视频一区二区三区在线观看| 国产精品视频免费一区| 久久不卡国产精品一区二区| 日韩免费电影一区二区三区| 欧美日一区二区在线观看| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 香蕉视频禁止18| 国产精品亚洲第一区在线暖暖韩国 | 亚洲免费综合| 亚洲欧美日韩中文字幕在线观看| 成人动漫中文字幕| 99国产精品免费| 亚洲一区二区欧美日韩| 欧美性猛交xxxx乱大交hd | 性欧美办公室18xxxxhd| 性高爱久久久久久久久| 国产经典一区二区三区| 国产一区二区三区站长工具| 成人在线免费高清视频| 日日欢夜夜爽一区| 日韩少妇一区二区| ww亚洲ww在线观看国产| 欧美极品欧美精品欧美视频| 亚洲精品午夜久久久久久久| 欧美日韩不卡一区二区| 欧美一级淫片免费视频魅影视频| 亚洲欧洲在线观看| 操喷在线视频| 国产美女精品视频| 色愁久久久久久| 中文字幕第50页| 日韩国产精品久久| 亚洲综合自拍网| 亚洲精品欧美激情| 中国一级片黄色一级片黄| 亚洲国产天堂网精品网站| 超鹏97在线| 国产精品嫩草影院久久久| 国产精品一区2区3区| 男人天堂av片| 国产精品99久久久| 蜜桃av免费在线观看| 欧美日韩亚洲视频一区| 免费观看的毛片| 欧美另类极品videosbestfree| 国产毛片精品久久| 亚洲高清在线观看一区| 久久精品亚洲| 国产精品无码网站| 午夜精品免费在线| 国模人体一区二区| 久久99国产综合精品女同| 午夜不卡一区| 久久av喷吹av高潮av| 麻豆精品一区二区av白丝在线| 日本黄色特级片| 欧美色视频日本版| 国产综合在线观看| 国产不卡精品视男人的天堂| 好吊妞国产欧美日韩免费观看网站 | 欧美精彩视频一区二区三区| av资源免费观看| 国产午夜精品全部视频在线播放| 日本а中文在线天堂| 九九九九九九精品| 99国产精品| 一区二区三区四区视频| 亚洲精品承认| 国产在线a不卡| 热久久天天拍国产| 香蕉视频色在线观看| 亚洲精品欧美二区三区中文字幕| 亚洲一区在线观| 久久久久久91香蕉国产| 精品嫩草影院| 日本不卡在线观看视频| 2021久久国产精品不只是精品| 亚洲国产成人无码av在线| 亚洲欧美日韩第一区| 四虎视频在线精品免费网址| 99精品一区二区三区的区别| 国产精选一区二区三区| 欧美黄色一级网站| 精品美女一区二区| 老司机深夜福利在线观看| 国内精品视频免费| 青青草国产精品97视觉盛宴| 一级片一级片一级片| 日韩久久久精品| 欧美特大特白屁股xxxx| 亚洲一区影院| 粉嫩蜜臀av国产精品网站| 久久9999久久免费精品国产| 亚洲视频在线播放| 色999久久久精品人人澡69| 国产手机视频在线观看| 久久久综合网站| 国产又黄又粗又长| 欧美贵妇videos办公室| 爽爽窝窝午夜精品一区二区| 亚洲国产成人va在线观看麻豆| 一区二区三区日本| 醉酒壮男gay强迫野外xx| 好吊一区二区三区| 精品无码av一区二区三区不卡| 午夜久久久影院| 欧美三级黄网| 欧美黑人3p| 国产精品一二一区| 无码人妻丰满熟妇精品区|