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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一個用C8051F330單片機的無線鍵盤程序

[復制鏈接]
跳轉到指定樓層
樓主
一個用51單片機成無線鍵盤程序。ID藍牙鍵盤模塊配對后,pin2-Rxd輸入下面的格式即可,電平3.3V。

UART2HID程序


單片機源程序如下:
  1. //-----------------------------------------------------------------------------
  2. // Includes
  3. //-----------------------------------------------------------------------------

  4. #include <c8051f330.h>                 // SFR declarations
  5. #include <stdio.h>
  6. #include "mytype.h"
  7. #include "config.h"

  8. static uint16 idle_timeout_time=300;//無按鍵按下超時,5min
  9. static uint16 idle_timeout=0;//無按鍵按下超時
  10. static uint8 reconn_flag=0;//重新連接標志
  11. static uint8 poweroff_flag=0;//關機標志
  12. static uint8 bat_val=0;//電池電壓
  13. static uint8 adc_flag=0;//電池電壓測試標志,10min
  14. static uint16 adc_timeout=0;//電壓測試時間
  15. uint8 code batt[16]= {0x27,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x05,0x04,0x17,0x10,0x0C,0x11}; //0~9,bat,min

  16. #define vcc_on        1
  17. #define vcc_off        0
  18. #define bl_on        0
  19. #define bl_off        1
  20. //-----------------------------------------------------------------------------
  21. // Global CONSTANTS
  22. //-----------------------------------------------------------------------------

  23. #define SYSTEMCLOCK      6125000           // SYSCLK frequency in Hz
  24. #define BAUDRATE         57600           // Baud rate of UART in bps

  25. #define TIMER_PRESCALER            48  // Based on Timer CKCON settings

  26. // There are SYSTEMCLOCK/TIMER_PRESCALER timer ticks per second, so
  27. // SYSCLK/TIMER_PRESCALER/1000 timer ticks per millisecond.
  28. #define TIMER_TICKS_PER_MS  SYSTEMCLOCK/TIMER_PRESCALER/1000

  29. // Note: TIMER_TICKS_PER_MS should not exceed 255 (0xFF) for the 8-bit timer

  30. #define AUX1     TIMER_TICKS_PER_MS
  31. #define AUX2     -AUX1

  32. #define TIMER0_RELOAD_HIGH       AUX2  // Reload value for Timer0 high byte

  33. //-----------------------------------------------------------------------------
  34. // Function PROTOTYPES
  35. //-----------------------------------------------------------------------------
  36. void ADC0_Init(void);
  37. void SYSCLK_Init (void);
  38. void UART0_Init (void);
  39. void PORT_Init (void);
  40. void Timer0_Init (void);
  41. void KEY_VAL(uint8 tmp);
  42. void delay_ms(uint16 ms);
  43. //-----------------------------------------------------------------------------
  44. // Global Variables
  45. //-----------------------------------------------------------------------------
  46. static uint8 tx_buf[12]= {0x0C,0x00,0xA1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //HID發送緩沖區
  47. static uint8 tx_count;//發送字節數,實際發送12個字節
  48. uint8 fn_flag;//Fn鍵按下狀態
  49. #define FnDown        0x00
  50. #define FnUp        0x01

  51. //key
  52. #define LCtrl        0x14
  53. #define LShift         0x12
  54. #define LAlt        0x10
  55. #define LGui        0x07
  56. //#define RCtrl        0x??
  57. #define RShift         0x59
  58. #define RAlt        0x13
  59. //#define RGui        0x??
  60. #define Fn                0x02
  61. //fn_key,用于測試。實際使用時查表
  62. #define Home        0x5E
  63. #define End                0x2F
  64. #define PgUp        0x28
  65. #define PgDown        0x60
  66. #define Esc                0x0E
  67. #define F1                0x16
  68. #define        F3                0x26

  69. //uart緩沖區使用變量
  70. #define UART_BUFFERSIZE 32
  71. uint8 UART_Buffer[UART_BUFFERSIZE];
  72. uint8 UART_Buffer_Size = 0;
  73. uint8 UART_Input_First = 0;
  74. uint8 UART_Output_First = 0;
  75. uint8 TX_Ready =1;
  76. static uint8 Byte;

  77. //KEY
  78. uint8 code key_code[128]=
  79. {

  80.         0x00,0x00,0x65,0x00,0x00,0x00,0x00,0xE3,0x29,0x00,0x00,0x00,0x00,0x2B,0x35,0x00,

  81.         0xE2,0x00,0xE1,0xE6,0xE0,0x14,0x1E,0x00,0x00,0x00,0x1D,0x16,0x04,0x1A,0x1F,0x00,

  82.         0x00,0x06,0x1B,0x07,0x08,0x21,0x20,0x00,0x52,0x00,0x19,0x09,0x17,0x15,0x22,0x4F,

  83.         0x00,0x11,0x05,0x0B,0x0A,0x1C,0x23,0x00,0x00,0x00,0x10,0x0D,0x18,0x24,0x25,0x00,

  84.         0x00,0x36,0x0E,0x0C,0x12,0x27,0x26,0x00,0x00,0x37,0x38,0x0F,0x33,0x13,0x2D,0x00,

  85.         0x00,0x00,0x34,0x00,0x2F,0x2E,0x00,0x00,0x39,0xE5,0x28,0x30,0x2C,0x31,0x50,0x00,

  86.         0x51,0x00,0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  87.         0x00,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  88. };

  89. //Fn_KEY
  90. uint8 code fn_key_code[128]=
  91. {

  92.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x00,

  93.         0x00,0x00,0x00,0x00,0x00,0x00,0x3A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x00,

  94.         0x00,0x00,0x00,0x00,0x00,0x3D,0x3C,0x00,0x4B,0x00,0x00,0x00,0x00,0x00,0x3E,0x4D,

  95.         0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x41,0x00,

  96.         0x00,0x00,0x00,0x00,0x00,0x43,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,

  97.         0x00,0x00,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4A,0x00,

  98.         0x4E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  99.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  100. };

  101. //-----------------------------------------------------------------------------
  102. // MAIN Routine
  103. //-----------------------------------------------------------------------------

  104. void main (void)
  105. {
  106.         uint8 i,tmp;
  107.         PCA0MD &= ~0x40;                    // WDTE = 0 (clear watchdog timer
  108.         // enable)
  109.         PORT_Init();                        // Initialize Port I/O
  110.         SYSCLK_Init ();                     // Initialize Oscillator
  111.         UART0_Init();
  112.         Timer0_Init ();                  //1ms定時器

  113.         vcc_ctrl        =        vcc_on;//打開系統總電源,1開0關
  114.         bl_conn_ctrl=        0;//根據外部按鈕的狀態控制藍牙模塊
  115.         zb_led2                =        0;//1為亮,0為滅,LED2未連接
  116.         //bl_state        為藍牙模塊狀態輸入
  117.         //key_int0  按鍵中斷及開機
  118.         //zb_adc0   電池電壓判斷
  119.         idle_timeout=0;
  120.         reconn_flag=0;//重新連接標志
  121.         poweroff_flag=0;
  122.         adc_flag=0;


  123.         //'0c 00 a1 01 00 00 27 00 00 00 00 00
  124.         tx_buf[0]=0x0C;//固定開頭
  125.         tx_buf[1]=0x00;
  126.         tx_buf[2]=0xA1;
  127.         tx_buf[3]=0x01;

  128.         tx_buf[4]=0x00;//功能鍵shift、alt、ctrl、win
  129.         tx_buf[5]=0x00;//固定00

  130.         tx_buf[6]=0x00;//后面6個字節為按鍵碼
  131.         tx_buf[7]=0x00;
  132.         tx_buf[8]=0x00;
  133.         tx_buf[9]=0x00;
  134.         tx_buf[10]=0x00;
  135.         tx_buf[11]=0x00;

  136.         fn_flag=FnUp;

  137.         ADC0_Init();
  138.         bl_vcc_ctrl        =        bl_on;//1為關閉藍牙電源,0為開啟
  139.         EA = 1;


  140.         while(1)
  141.         {
  142.                 delay_ms(10);

  143.                 if(TX_Ready == 1 && UART_Buffer_Size != 0)
  144.                 {
  145.                         TX_Ready = 0;                 // Set the flag to zero

  146.                         // If a new word is being output
  147.                         if ( UART_Buffer_Size == UART_Input_First )
  148.                         {
  149.                                 UART_Output_First = 0;
  150.                         }

  151.                         tmp = UART_Buffer[UART_Output_First];

  152.                         KEY_VAL(tmp);

  153.                         UART_Output_First++;            // Update counter

  154.                         UART_Buffer_Size--;             // Decrease array size

  155.                         TI0 = 1;                      // Set transmit flag to 1

  156.                 }
  157.                 else
  158.                 {
  159.                         UART_Buffer_Size = 0;            // Set the array size to 0
  160.                         TX_Ready = 1;                    // Indicate transmission complete
  161.                 }

  162.                 if(reconn_flag)
  163.                 {
  164.                         idle_timeout=0;//重新連接按下則空閑等待置0,從新計數
  165.                         reconn_flag=0;

  166.                         bl_conn_ctrl=1;//藍牙清楚記憶,重新連接
  167.                         delay_ms(2000);
  168.                         bl_conn_ctrl=0;

  169.                 }

  170.                 if(poweroff_flag)
  171.                 {
  172.                         poweroff_flag=0;
  173.                         vcc_ctrl=vcc_off;//總電源關閉
  174.                 }

  175.                 if(adc_flag)
  176.                 {
  177.                         adc_flag=0;
  178.                         ADC0_Init();
  179.                 }
  180.         }
  181. }

  182. //-----------------------------------------------------------------------------
  183. // Initialization Subroutines
  184. //-----------------------------------------------------------------------------

  185. //-----------------------------------------------------------------------------
  186. // PORT_Init
  187. //-----------------------------------------------------------------------------
  188. //
  189. // Return Value : None
  190. // Parameters   : None
  191. //
  192. // Configure the Crossbar and GPIO ports.
  193. //
  194. // P0.4   digital   push-pull    UART TX
  195. // P0.5   digital   open-drain   UART RX
  196. //
  197. //-----------------------------------------------------------------------------
  198. void PORT_Init (void)
  199. {
  200.         P1MDIN    = 0x7F;
  201.         P0MDOUT   = 0x14;
  202.         P1MDOUT   = 0x48;
  203.         XBR0    = 0x01;                     // Enable UART on P0.4(TX) and P0.5(RX)
  204.         XBR1    = 0x40;                     // Enable crossbar and weak pull-ups
  205. }
  206. //ADC Init P1.7-GND
  207. void ADC0_Init()
  208. {
  209.         uint8 k;
  210.         uint16 adc_val;

  211.         EA=0;
  212.         delay_ms(50);


  213.         AMX0P     = 0x0F;//P1.7
  214.         AMX0N     = 0x11;//GND
  215.         ADC0CF   |= 0x04;//LEFT ADJUST
  216.         AD0EN          = 1;
  217.         adc_val          = 0;
  218.         for(k=0; k<10; k++)
  219.         {
  220.                 AD0INT=0;
  221.                 AD0BUSY=1;//轉換ADC
  222.                 while(!AD0INT);//等待轉換完成
  223.                 if(k>4)adc_val += ADC0H;
  224.         }
  225.         AD0EN = 0;

  226.         k=(uint8)(adc_val / 5)+3;//補償3-36mv,4-48mv

  227.         if(k>115)bat_val=100;//2776
  228.         else if(k>110)bat_val=75;//2655
  229.         else if(k>105)bat_val=50;//2535
  230.         else if(k>100)bat_val=40;//2414
  231.         else if(k>95)bat_val=30;//2293
  232.         else if(k>90)bat_val=20;//2173
  233.         else if(k>85)bat_val=10;//2052
  234.         else if(k>80)bat_val=5;//1931
  235.         else //if(k>75)//1811
  236.         {
  237.                 bat_val=0;
  238.                 poweroff_flag=1;
  239.         }
  240.         EA=1;
  241. }
  242. //-----------------------------------------------------------------------------
  243. // SYSCLK_Init
  244. //-----------------------------------------------------------------------------
  245. //
  246. // Return Value : None
  247. // Parameters   : None
  248. //
  249. // This routine initializes the system clock to use the internal oscillator
  250. // at its maximum frequency.
  251. // Also enables the Missing Clock Detector.
  252. //-----------------------------------------------------------------------------

  253. void SYSCLK_Init (void)
  254. {

  255.         OSCICN    = 0x81;                                        //6.125MHz

  256.         RSTSRC  = 0x04;                     // Enable missing clock detector

  257. }
  258. //1ms定時器
  259. void Timer0_Init (void)
  260. {
  261.         TH0 =TIMER0_RELOAD_HIGH;
  262.         CKCON |=  0x02;//48分頻

  263.         TL0 = TH0;                          // init Timer1
  264.         TMOD &= ~0x0F;                      // TMOD: timer 1 in 8-bit autoreload
  265.         TMOD |=  0x02;
  266.         TR0 = 1;
  267.         ET0=1;
  268. }
  269. //-----------------------------------------------------------------------------
  270. // UART0_Init
  271. //-----------------------------------------------------------------------------
  272. //
  273. // Return Value : None
  274. // Parameters   : None
  275. //
  276. // Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
  277. //-----------------------------------------------------------------------------
  278. void UART0_Init (void)
  279. {
  280.         SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
  281.         //        level of STOP bit is ignored
  282.         //        RX enabled
  283.         //        ninth bits are zeros
  284.         //        clear RI0 and TI0 bits
  285.         if (SYSTEMCLOCK/BAUDRATE/2/256 < 1)
  286.         {
  287.                 TH1 = -(SYSTEMCLOCK/BAUDRATE/2);
  288.                 CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = xx
  289.                 CKCON |=  0x08;
  290.         }
  291.         else if (SYSTEMCLOCK/BAUDRATE/2/256 < 4)
  292.         {
  293.                 TH1 = -(SYSTEMCLOCK/BAUDRATE/2/4);
  294.                 CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
  295.                 CKCON |=  0x01;
  296.         }
  297.         else if (SYSTEMCLOCK/BAUDRATE/2/256 < 12)
  298.         {
  299.                 TH1 = -(SYSTEMCLOCK/BAUDRATE/2/12);
  300.                 CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
  301.         }
  302.         else
  303.         {
  304.                 TH1 = -(SYSTEMCLOCK/BAUDRATE/2/48);
  305.                 CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
  306.                 CKCON |=  0x02;
  307.         }

  308.         TL1 = TH1;                          // init Timer1
  309.         TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
  310.         TMOD |=  0x20;
  311.         TR1 = 1;                            // START Timer1
  312.         TX_Ready = 1;                       // Flag showing that UART can transmit
  313.         IP |= 0x10;                         // Make UART high priority
  314.         ES0 = 1;                            // Enable UART0 interrupts
  315. }

  316. //-----------------------------------------------------------------------------
  317. // Interrupt Service Routines
  318. //-----------------------------------------------------------------------------
  319. //-----------------------------------------------------------------------------
  320. // Timer0_ISR
  321. //-----------------------------------------------------------------------------
  322. void Timer0_ISR (void) interrupt 1
  323. {
  324.         static int counter = 0;

  325.         if((counter++) >= 1000)
  326.         {
  327.                 counter = 0;
  328.                 idle_timeout++;
  329.                 adc_timeout++;

  330.                 if(idle_timeout>=idle_timeout_time)//5min
  331.                 {
  332.                         idle_timeout=0;
  333.                         poweroff_flag=1;
  334.                 }
  335.                 if(adc_timeout>=600)//10min
  336.                 {
  337.                         adc_timeout=0;
  338.                         adc_flag=1;
  339.                 }
  340.         }
  341. }
  342. //-----------------------------------------------------------------------------
  343. // UART0_Interrupt
  344. //-----------------------------------------------------------------------------
  345. //
  346. // This routine is invoked whenever a character is entered or displayed on the
  347. // Hyperterminal.
  348. //
  349. //-----------------------------------------------------------------------------

  350. void UART0_Interrupt (void) interrupt 4
  351. {
  352.         idle_timeout=0;//有按鍵接收則,空閑等待時間置0,從新計數

  353.         if (RI0 == 1)
  354.         {
  355.                 if( UART_Buffer_Size == 0)         // If new word is entered
  356.                 {
  357.                         UART_Input_First = 0;
  358.                 }

  359.                 RI0 = 0;                           // Clear interrupt flag

  360.                 Byte = SBUF0;                      // Read a character from UART

  361.                 if (UART_Buffer_Size < UART_BUFFERSIZE)
  362.                 {
  363.                         UART_Buffer[UART_Input_First] = Byte; // Store in array

  364.                         UART_Buffer_Size++;             // Update array's size

  365.                         UART_Input_First++;             // Update counter
  366.                 }
  367.         }

  368.         if (TI0 == 1)                   // Check if transmit flag is set
  369.         {
  370.                 TI0 = 0;                           // Clear interrupt flag

  371.                 if (tx_count <12)         // 總共發送12個字節
  372.                 {

  373.                         // Store a character in the variable byte
  374.                         SBUF0= tx_buf[tx_count++];

  375.                 }
  376.                 else
  377.                 {
  378.                         tx_count = 0;            // Set the array size to 0
  379.                         TX_Ready = 1;                    // Indicate transmission complete
  380.                 }
  381.         }
  382. }

  383. //鍵值處理
  384. void KEY_VAL(uint8 tmp)
  385. {
  386.         switch (tmp)
  387.         {
  388.         case LCtrl:
  389.         {
  390.                 tx_buf[4]|=0x01;
  391.                 break;
  392.         }
  393.         case LShift:
  394.         {
  395.                 tx_buf[4]|=0x02;
  396.                 break;
  397.         }
  398.         case LAlt:
  399.         {
  400.                 tx_buf[4]|=0x04;
  401.                 break;
  402.         }
  403.         case LGui:
  404.         {
  405.                 tx_buf[4]|=0x08;
  406.                 break;
  407.         }
  408.         case RShift:
  409.         {
  410.                 tx_buf[4]|=0x20;
  411.                 break;
  412.         }
  413.         case RAlt:
  414.         {
  415.                 tx_buf[4]|=0x40;
  416.                 break;
  417.         }
  418.         case LCtrl+0x80:
  419.         {
  420.                 tx_buf[4]&=~0x01;
  421.                 break;
  422.         }
  423.         case LShift+0x80:
  424.         {
  425.                 tx_buf[4]&=~0x02;
  426.                 break;
  427.         }
  428.         case LAlt+0x80:
  429.         {
  430.                 tx_buf[4]&=~0x04;
  431.                 break;
  432.         }
  433.         case LGui+0x80:
  434.         {
  435.                 tx_buf[4]&=~0x08;
  436.                 break;
  437.         }
  438.         case RShift+0x80:
  439.         {
  440.                 tx_buf[4]&=~0x20;
  441.                 break;
  442.         }
  443.         case RAlt+0x80:
  444.         {
  445.                 tx_buf[4]&=~0x40;
  446.                 break;
  447.         }
  448.         case Fn:
  449.         {
  450.                 fn_flag=FnDown;
  451.                 tx_buf[6]=0x00;
  452.                 break;
  453.         }
  454.         case Fn+0x80:
  455.         {
  456.                 fn_flag=FnUp;
  457.                 tx_buf[6]=0x00;
  458.                 tx_buf[7]=0x00;
  459.                 tx_buf[8]=0x00;
  460.                 tx_buf[9]=0x00;
  461.                 tx_buf[10]=0x00;
  462.                 tx_buf[11]=0x00;
  463.                 break;
  464.         }
  465.         default :
  466.         {
  467.                 if(tmp & 0x80)
  468.                 {
  469.                         tx_buf[6]=0x00;
  470.                         tx_buf[7]=0x00;
  471.                         tx_buf[8]=0x00;
  472.                         tx_buf[9]=0x00;
  473.                         tx_buf[10]=0x00;
  474.                         tx_buf[11]=0x00;
  475.                 }
  476.                 else
  477.                 {
  478.                         if(fn_flag==FnUp)
  479.                         {
  480.                                 tx_buf[6]=key_code[tmp];
  481.                         }

  482.                         if(fn_flag==FnDown)        //Fn鍵按下
  483.                         {
  484.                                 if(tmp==0x2B)//Fn+F//重新連接
  485.                                 {
  486.                                         tx_buf[6]=0x00;
  487.                                         reconn_flag=1;//重新連接標志置1
  488.                                 }
  489.                                 if(tmp==0x5D)//Fn+A=1c///0x5D(ok)//關機標志
  490.                                 {
  491.                                         tx_buf[6]=0x00;
  492.                                         poweroff_flag=1;//關機標志置1
  493.                                 }
  494.                                 if(tmp==0x64)//Fn+S=1b///0x4A/67(BAT)//電池電量
  495.                                 {
  496.                                         ADC0_Init();
  497. ……………………

  498. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
UART2HID程序.zip (548.7 KB, 下載次數: 28)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美视频一区二区三区 | a级在线 | 中文字幕在线视频精品 | 久久久免费电影 | 欧美成年网站 | 爱爱免费视频 | 激情一区 | 欧美精品影院 | 亚洲欧洲精品一区 | 黑人巨大精品欧美一区二区免费 | 羞羞的视频免费在线观看 | 国产亚洲精品久久久久久牛牛 | 精品国产乱码久久久久久蜜柚 | 在线看av网址 | 91色网站 | 久久亚洲精品久久国产一区二区 | 欧美 日韩精品 | 午夜欧美| 日韩国产免费观看 | 丝袜久久| 国产精久久久久久久 | 在线观看黄色电影 | 久久久久久久久久久久久久国产 | 亚洲成人精品 | 在线视频a | 日韩小视频 | 精品日韩一区二区三区av动图 | 国产精品视频一区二区三区不卡 | 欧美一区二区另类 | www.成人.com| 99中文字幕 | 成人国产毛片 | 国产精品久久久久久久久久三级 | 波多野结衣二区 | 色偷偷888欧美精品久久久 | 懂色一区二区三区免费观看 | 日韩二三区| 国产成人精品免高潮在线观看 | 欧美另类日韩 | 色视频欧美 | 欧美性网 |