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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LPC2000系列ARM芯片的電子琴的設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:570925 發表于 2019-6-24 16:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1.用LPC2000系列ARM芯片設計電子琴,用proteus軟件仿真。
2.按下不同的按鍵,揚聲器能夠發出不同的音調。
3.用PWM控制揚聲器可以實現音調的條件。

通過編程,利用按鍵去控制揚聲器的發聲。
    通過小組討論分析,結合設計電路性能指標、器件的性價比,本設計電路選擇方案二。
  • 硬件設計與介紹
嵌入式的定義:
從技術的角度定義:以應用為中心、以計算機技術為基礎、軟件硬件可裁剪、適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
    從系統的角度定義:嵌入式系統是設計完成復雜功能的硬件和軟件,并使其緊密耦合在一起的計算機系統。術語嵌入式反映了這些系統通常是更大系統中的一個完整的部分,稱為嵌入的系統。嵌入的系統中可以共存多個嵌入式系統。
     3.1 213X系列最小系統板介紹:
LPC2131/2132/2138 是基于一個支持實時仿真和嵌入式跟蹤的32/16ARM7TDMI-STM CPU 的微控制器,并帶有32kB、64kB、512 kB 的嵌入的高速Flash 存儲器。128 位寬度的存儲器接口和獨特的加速結構使32 位代碼能夠在最大時鐘速率下運行。對代碼規模有嚴格控制的應用可使用16 位Thumb模式將代碼規模降低超過30%,而性能的損失卻很小。
較小的封裝和極低的功耗使 LPC2131/2132/2138 可理想地用于小型系統中,如訪問控制和POS 機。寬范圍的串行通信接口和片內8/16/32kB的SRAM使LPC2131/2132/2138 非常適用于通信網關、協議轉換器、軟modem、聲音辨別和低端成像,為它們提供巨大的緩沖區空間和強大的處理功能。多個32位定時器、1個或2 個10 位8 路ADC、10 位DAC、PWM 通道和47個GPIO 以及多達9個邊沿或電平觸發的外部中斷使它們特別適用于工業控制和醫療系統。
主要特性如下:
(1)16/32位ARM7TDMI-S核,超小LQFP64封裝。  ??
(2)8/16/32kB的片內靜態RAM和32/64/128/256/512kB的片內Flash程序存儲器。128位寬度接口/加速器可實現高達60MHz工作頻率。  ??
(3)通過片內boot裝載程序實現在系統編程/在應用編程(ISP/IAP)。單個Flash扇區或整片擦除時間 為400ms。256字節行編程時間為1ms。  ??
(4)EmbeddedICE RT和嵌入式跟蹤接口通過片內RealMonitor軟件對代碼進行實時調試和高速跟蹤。 ??
(5)1個(LPC2131/32)或2個(LPC2134/36/38)8路10位的A/D轉換器,共提供16路模擬輸入,每個通道的轉換時間低至2.44us。  ??
(6)1個10位的D/A轉換器,可產生不同的模擬輸出。(LPC2132/34/36/38)  ?? (7)2個32位定時器/外部事件計數器(帶4路捕獲和4路比較通道)、PWM單元(6路輸出)和看門狗。  ??
(8)低功耗實時時鐘具有獨立的電源和特定的32kHz時鐘輸入。  ??
(9)多個串行接口,包括2個16C550工業標準UART、2個高速I2C總線(400 kbit/s)、SPI和具有緩沖作用和數據長度可變功能的SSP。 ??
(10)向量中斷控制器。可配置優先級和向量地址。  ??
(11)小型的LQFP64封裝上包含多達47個通用I/O口(可承受5V電壓)。 ?? (12)多達9個邊沿或電平觸發的外部中斷管腳。  ??
(13)通過片內PLL(100us的設置時間)可實現最大為60MHz的CPU操作頻率。  ??
(14)片內集成振蕩器與外部晶體的操作頻率范圍為1~30 MHz,與外部振蕩器的操作頻率范圍高達 50MHz。  ??
(15)低功耗模式:空閑和掉電。  ??
(16)可通過個別使能/禁止外部功能和外圍時鐘分頻來優化功耗。 ??
(17)通過外部中斷或BOD將處理器從掉電模式中喚醒。 ??
(18)單電源,具有上電復位(POR)和掉電檢測(BOD)電路。  ??
(19)CPU操作電壓范圍:3.0V~3.6 V (3.3 V± 10﹪),I/O口可承受5V的電壓。
3.2最小系統板結構
    LPC2131/2132/2138 包含一個支持仿真的ARM7TDMI-S CPU、與片內存儲器控制器接口的ARM7 局部總線、與中斷控制器接口的AMBA 高性能總線(AHB)和連接片內外設功能的VLSI 外設總線(VPB,ARMAMBA 總線的兼容超集)。LPC2131/2132/2138 將ARM7TDMI-S 配置為小端(little-endian)字節順序。AHB 外設分配了2M 字節的地址范圍,它位于4G 字節ARM 存儲器空間的最頂端。每個AHB 外設都分配了16k 字節的地址空間。LPC2131/2132/2138 的外設功能(中斷控制器除外)都連接到VPB 總線。AHB到VPB 的橋將VPB 總線與AHB 總線相連。VPB 外設也分配了2M 字節的地址范圍,從3.5GB 地址點開始。每個VPB 外設在VPB 地址空間內都分配了16k 字節地址空間。
片內外設與器件管腳的連接由管腳連接模塊控制。該模塊必須由軟件進行控制以符合外設功能與管腳在特定應用中的需求。
3.3 片內FLASH程序儲存器
LPC2131/2132/2138 分別含有32kB、64kB 和512kB 的FLASH 存儲器系統。該存儲器可用作代碼和數據的存儲。對FLASH 存儲器的編程可通過幾種方法來實現:通過內置的串行JTAG 接口,通過在系統編程(ISP)和UART0,或通過在應用編程(IAP)。使用在應用編程的應用程序也可以在應用程序運行時對FLAH 進行擦除和/或編程,這樣就為數據存儲和現場固件的升級都帶來了極大的靈活性。如果LPC2131/2132/2138 使用了片內引導裝載程序(bootloader),32/64/512kB 的Flash 存儲器就可用來存放用戶代碼。
LPC2131/2132/2138 的Flash 存儲器至少可擦除/編程10,000 次,保存數據的時間長達10 年。
3.4 片內靜態RAM
片內靜態RAM(SRAM)可用作代碼和/或數據的存儲,支持8 位、16 位和32 位的訪問。LPC2131/2132/2138 含有8/16/32kB 的靜態RAM。
LPC2131/2132/2138 SRAM 是一個字節尋址的存儲器。對存儲器進行字和半字訪問時將忽略地址對準,訪問被尋址的自然對準值(因此,對存儲器進行字訪問時將忽略地址位0 和1,半字訪問時將忽略地址位0)。
因此,有效的讀寫操作要求半字數據訪問的地址線0 為0(地址以0、2、4、6、8、A、C 和E 結尾),字數據訪問的地址線0 和1 都為0(地址以0、4、8 和C 結尾)。該原則同樣用于片外和片內存儲器。
SRAM 控制器包含一個回寫緩沖區,它用于防止CPU 在連續的寫操作時停止運行。回寫緩沖區總是保存著軟件發送到SRAM 的最后一個字節。該數據只有在軟件請求下一次寫操作時才寫入SRAM(數據只有在軟件執行另外一次寫操作時被寫入SRAM)。如果發生芯片復位,實際的SRAM 內容將不會反映最近一次的寫請求(即:在一次“熱”芯片復位后,SRAM 不會反映最后一次寫入的內容)。任何在復位后檢查SRAM 內容的程序都必須注意這一點。通過對一個單元執行兩次相同的寫操作可保證復位后數據的寫入。或者,也可通過在進入空閑或掉電模式前執行虛寫(dummy write)操作來保證最后的數據在復位后被真正寫入到SRAM。
3.5 存儲器映射概念和操作方式
LPC2131/2132/2138 的基本的概念是:每個存儲器組在存儲器映射中都有一個“物理上的”位置。它是一個地址范圍,該范圍內可寫入程序代碼。每一個存儲器空間的容量都永久固定在同一個位置,這樣就不需要將代碼設計成在不同地址范圍內運行。
由于ARM7 處理器上的中斷向量位置(地址0x0000 0000~0x0000 001C,見表2),Boot Block 和SRAM空間的一小部分需要重新映射來實現在不同操作模式下對中斷的使用,見表1。中斷的重新映射通過存儲器映射控制特性來實現,詳見系統控制模塊一節。
表1:LPC2131/2132/2138 存儲器映射模式
模式
激活
用途
Boot裝載程序模式
由任何復位硬件激活
在任何復位后都會執行 Boot 裝載程序。Boot Block 中斷向量映射到存儲器的底部以允許處理異常并在Boot 裝載過程中使用中斷。
用戶Flash模式
由Boot代碼軟件激活
當在存儲器中識別了一個有效的用戶程序標識并且Boot 裝載操作未被執行時,由Boot 裝載程序啟動。中斷向量沒有重新映射,它位于Flash 存儲器的底部。
用戶RAM模式
由用戶程序軟件激活
由用戶程序激活。中斷向量重新映射到靜態 RAM 的底部。
3.6 系統控制模塊
系統控制模塊功能匯總:
系統控制模塊包括幾個系統特性和控制寄存器,這些寄存器具有眾多與特定外設器件無關的功能。
1、晶體振蕩器
2、外部中斷輸入
3、存儲器映射控制
4、PLL
5、功率控制
6、復位
7、VPB 分頻器
8、喚醒定時器
每種類型的功能都有其自身的寄存器,不需要的位則定義為保留位。為了滿足將來擴展的需要,無關/的功能不共用相同的寄存器地址。
表2:系統控制模塊功能相關的管腳
管腳名稱
管腳方向
管腳描述
X1
輸入
晶振輸入--振蕩器和內部時鐘發生器電路的輸入
X2
輸出
晶振輸出--振蕩器放大器的輸出
EINT0
輸入
外部中斷輸入0--低有效的通用中斷輸入。該管腳可用于將處理器從空閑或掉電模式中喚醒。
P0.1和P0.16可用作EINT0 功能。
EINT1
輸入
外部中斷輸入1--見上面的EINT0 描述。
P0.3 和P0.14可用作EINT1 功能。
復位后管腳 P0.14上立即出現的低電平被看作是一個啟動ISP 命令處理器的外部硬件請求
EINT2
輸入
外部中斷輸入2--見上面的EINT0 描述。
P0.7 和P0.15 可用作EINT2 功能。
EINT3
輸入
外部中斷輸入3--見上面的EINT0 描述。
P0.9,P0.20和P0.30可用作EINT3 功能。
RESET
輸入
外部復位輸入--該管腳上的低電平將芯片復位,使I/O 口和外設恢復其默認狀態,并使處理器從地址0 開始執行程序。
                      圖3.1 LPC2138管腳排列圖
  3.7 行列式鍵盤工作原理
ARM嵌入式系統使用常用的行列式鍵盤電路,此電路的優點是比較節省I/0口線,并且接口簡單。它的工作模式如下圖所示。它的行線與按鍵的一個引腳相連,列線與按鍵的另一個引腳相連。平時列線被置成低電平,沒有按鍵被按下時,行線保持高電平,而有按鍵被按下時,行線被拉成低電平。如圖3.2。



圖3.2 鍵盤掃描模式
  3.8 鍵盤識別原理
對于常規的按鍵識別過程一般分為以下幾步:
(1)用IF語句判斷按鍵是否按下。
(2)調用延時函數延時去除按鍵抖動。
(3)再用IF語句判斷是否真的按下。
(4)是真的按下,則執行按鍵處理程序。
(5)用WHILE語句等待按鍵釋放。
為了考慮提高CPU的效率和充分利用CPU的資源等因素,可將第2步和第5步的延時和等待過程用其他方式代替。
  3.9鍵盤電路介紹
為了實現電子琴的輸入,需要擴展鍵盤以作為控制輸入。系統采用LPC2138的P0.8--P0.13端口引腳作為2X4矩陣鍵盤的擴展接口,電路原理圖如圖3.3所示。
                       圖 3.3 鍵盤電路

在擴展鍵盤時需要解決兩個問題,一是鍵盤的抖動,二是多鍵同時按下。鍵盤的去抖動可通過軟件的適當延時實現,即在讀入端口P0.8~P0.11后,適當延時一段時間,再讀入端口P0.12~P0.13,兩次比較后確定按鍵是否真按得下。多鍵同時按下也可通過軟件設計屏蔽多按下的鍵,對于同一列的鍵同時按下,可以只取鍵值最小的鍵,屏蔽值大的鍵,或反之。對于不同列的鍵,可以將P0.12~P0.13設置優先級,如P0.12最高,P0.13最低,或反之。這樣,只取優先級高的鍵,屏蔽優先級低的鍵。
在ARM中,必須將管腳置為GPIO口后才能將管腳作為I/O口的功能來使用,由于在I/O的初始化中已經將用到的管腳設置為GPIO口,固可以將管腳作為I/O口的功能來使用。具體方法如下:
先將P0.8-P0.11這4列端口設置為輸入管腳并且置為低電平,然后將P0.12-P0.13這2行端口設置為輸出管腳并且置為高電平,通過判斷是否有按鍵按下,如果有按鍵按下則可以首先確定2行端口的代碼,接著再將4列端口設置為輸出管腳并且置為高電平,將2行端口設置為輸入管腳并且置為低電平,以此來決定4列端口的代碼,然后再講4列端口代碼和2行端口代碼按照2行為高4位,4列為低4位的順序排成一個8位代碼。
3.10 蜂鳴器驅動電路分析
   蜂鳴器驅動電路分析如下:
   蜂鳴器:發聲元件,在其兩端施加直流電壓(有源蜂鳴器)或者方波(無源蜂鳴器)就可以發聲,其主要參數是外形尺寸、發聲方向、工作電壓、工作頻率、工作電流、驅動方式(直流/方波)等。這些都可以根據需要來選擇。
   續流二極管:蜂鳴器本質上是一個感性元件,其電流不能瞬變,因此必須有一個續流二極管提供續流。否則,在蜂鳴器兩端會產生幾十伏的尖峰電壓,可能損壞驅動三極管,并干擾整個電路系統的其它部分。
   三極管驅動蜂鳴器電路:三極管Q1起開關作用,其基極的高電平使三極管飽和導通,使蜂鳴器發聲;而基極低電平則使三極管關閉,蜂鳴器停止發聲。如圖3.4。

                        圖3.4實際選用驅動放大電路

  3.11 整體電路圖
       如圖3.5所示。
                      圖3.5 硬件設計電路整體圖
  • 軟件設計
   1.程序流程圖如圖4.1所示。
                      圖4.1程序流程圖
  2.軟件設計程序代碼如下:
  1. /*******************************************************************************
  2. *File: Main.c
  3. *功能: 使用PWM6輸出PWM信號,通過濾波電路實現DAC轉換.由按鍵控制PWM占空比,每按一次
  4. *      按鍵將會改變一次PWM的占空比,使蜂鳴器發出不同的音調。
  5. *******************************************************************************/
  6. #include "config.h"
  7. #define   KEY1   0x00004000        /*P0.14引腳連接KEY1*/
  8. #define   KEY2   0x00000400        /*P0.10引腳連接KEY2*/
  9. #define   KEY3   0x00000800        /*P0.11引腳連接KEY3*/
  10. #define   KEY4   0x00001000        /*P0.12引腳連接KEY4*/
  11. #define   KEY5   0x00002000        /*P0.13引腳連接KEY5*/
  12. #define   KEY6   0x00008000        /*P0.15引腳連接KEY6*/
  13. #define   KEY7   0x00010000        /*P0.16引腳連接KEY7*/
  14. #define   KEY8   0x00020000        /*P0.17引腳連接KEY8*/

  15. /*******************************************************************************
  16. *名稱: WaitKey()
  17. *功能: 等待一個有效按鍵,有去抖功能
  18. *******************************************************************************/
  19. /*void WaitKey(void)
  20. { uint32 i;

  21.   while(1)
  22.   { while((IOPIN&KEY1)!=0);                 //等待KEY1鍵按下
  23.     for(i=0;i<50;i++);                      //延時去抖
  24.     if((IOPIN&KEY1)==0)break;
  25.   }
  26.     while((IOPIN&KEY1)==0);                   //等待KEY1鍵放開
  27. }*/
  28. void TargetInit(void);
  29. /*******************************************************************************
  30. *名稱: main()
  31. *功能: 使用PWM6輸出占空比可調的PWM波形
  32. *******************************************************************************/
  33. int main(void)
  34. { uint32  pwmdata;                        //PWM占空比控制變量
  35.   int i;
  36.   PINSEL0=0x00080000;                     //設置PWM6連接到P0.9引腳
  37.   PINSEL1=0x00000000;                     //其他引腳設置為GPIO
  38.   TargetInit();                           //PWM初始化
  39.   pwmdata=1382;
  40.   while(1)
  41.   {  PWMMR0=2765;                         //設置PWM周期
  42.      PWMMR6=pwmdata;                      //設置PWM占空比
  43.      PWMLER=0x41;                         //PWMMR0,PWMMR6鎖存,更新PWM占空比
  44.     // WaitKey();                           //等待按鍵

  45.     if(KEY1==0)
  46.                    { while((IOPIN&KEY1)!=0);                 //等待KEY1鍵按下
  47.                   for(i=0;i<50;i++);                      //延時去抖
  48.                   if((IOPIN&KEY1)==0)break;
  49.                    }
  50.                   while((IOPIN&KEY1)==0);                   //等待KEY1鍵放開
  51.                    pwmdata=100;                        //改變PWM占空比控制變量

  52.     if(KEY2==0)
  53.                    { while((IOPIN&KEY2)!=0);                 //等待KEY2鍵按下
  54.                   for(i=0;i<50;i++);                      //延時去抖
  55.                   if((IOPIN&KEY2)==0)break;
  56.                    }
  57.                   while((IOPIN&KEY2)==0);                   //等待KEY2鍵放開
  58.                    pwmdata=300;                        //改變PWM占空比控制變量
  59.                   
  60.     if(KEY3==0)
  61.                    { while((IOPIN&KEY3)!=0);                 //等待KEY3鍵按下
  62.                   for(i=0;i<50;i++);                      //延時去抖
  63.                   if((IOPIN&KEY3)==0)break;
  64.                    }
  65.                   while((IOPIN&KEY3)==0);                   //等待KEY3鍵放開
  66.                    pwmdata=500;                        //改變PWM占空比控制變量
  67.                   
  68.     if(KEY4==0)
  69.                    { while((IOPIN&KEY4)!=0);                 //等待KEY4鍵按下
  70.                   for(i=0;i<50;i++);                      //延時去抖
  71.                   if((IOPIN&KEY4)==0)break;
  72.                    }
  73.                   while((IOPIN&KEY4)==0);                   //等待KEY4鍵放開
  74.                    pwmdata=700;                        //改變PWM占空比控制變量  
  75.                   
  76.     if(KEY5==0)
  77.                    { while((IOPIN&KEY5)!=0);                 //等待KEY5鍵按下
  78.                   for(i=0;i<50;i++);                      //延時去抖
  79.                   if((IOPIN&KEY5)==0)break;
  80.                    }
  81.                   while((IOPIN&KEY5)==0);                   //等待KEY5鍵放開
  82.                    pwmdata=900;                        //改變PWM占空比控制變量
  83.                   
  84.               if(KEY6==0)
  85.                    { while((IOPIN&KEY6)!=0);                 //等待KEY6鍵按下
  86.                   for(i=0;i<50;i++);                      //延時去抖
  87.                   if((IOPIN&KEY6)==0)break;
  88.                    }
  89.                   while((IOPIN&KEY6)==0);                   //等待KEY6鍵放開
  90.                    pwmdata=1100;                        //改變PWM占空比控制變量
  91.                   
  92.     if(KEY7==0)
  93.                    { while((IOPIN&KEY7)!=0);                 //等待KEY7鍵按下
  94.                   for(i=0;i<50;i++);                      //延時去抖
  95.                   if((IOPIN&KEY7)==0)break;
  96.                    }
  97.                   while((IOPIN&KEY7)==0);                   //等待KEY7鍵放開
  98.                    pwmdata=1300;                        //改變PWM占空比控制變量   
  99.                   
  100.                   
  101.     if(KEY8==0)
  102.                    { while((IOPIN&KEY8)!=0);                 //等待KEY8鍵按下
  103.                   for(i=0;i<50;i++);                      //延時去抖
  104.                   if((IOPIN&KEY8)==0)break;
  105.                    }
  106.                   while((IOPIN&KEY8)==0);                   //等待KEY8鍵放開
  107.                    pwmdata=1500;                        //改變PWM占空比控制變量
  108.                        
  109.      if(pwmdata>=2764)pwmdata=0;
  110.   }
  111.   return(0);
  112. }
  113. //PWM初始化函數
  114.   void TargetInit(void)
  115. {
  116. PWMPR=0x00;                      //不分頻
  117. PWMMCR=0x02;                     //設置PWMMR0匹配
  118.     PWMMR0=2765;                     //設置PWM周期
  119. PWMMR6=1382;                     //設置PWM占空比   
  120. PWMLER=0x41;                     //PWMMR0,PWMMR6鎖存                                               PWMPCR=0x4000;                       //允許PWM單邊輸出
  121.     PWMTCR=0x09;                     //PWM使能
  122. }
復制代碼


  • 系統的仿真與調試

   將編譯好的十六制文件下載到proteus中的ARM芯片中。
    第一次用軟件調試時,沒有任何現象,檢查了好久終于發現了原來是有一個電源沒有設置數值,也沒有標明電源的極性,將其改為+3.3V時現象就出現了。
依次按下KEY1-KEY,依次發出不同音調的聲音,按下復位鍵系統回歸到初始狀態。
    圖5.1 為硬件設計電路整體圖。

                          圖5.1 硬件設計電路整體圖
  • 設計總結
此次嵌入式設計的主要內容:基于LPC2000系列的高級電子琴設計。它的主要功能是:實現不同頻率的音調輸出。因此要涉及到蜂鳴器的驅動電路,按鍵的掃描程序,最小系統電路的設計。
剛開始時拿到這個設計的題目是還有點不知所措,但通過上網查閱LPC213X系列最小系統板的相關資料,學會了用proteus進行ARM仿真,查找了一些以應用嵌入式ARM的仿真實例,分析各個實例的工作原理,將各個實例的有用模塊綜合運用得到本實訓基于嵌入式ARM的高級電子琴設計的原理圖,該圖主要包括三個模塊:2*4鍵盤、PWM脈沖輸出、功率放大電路。控制LPC213X系列最小系統板的P0.9口輸出PWM脈沖發出不同頻率使蜂鳴器發出不同的聲音,P0.9口外接功放電路連接蜂鳴器發聲。按鍵輸入功能有8個輸入故最終確定采用2*4的矩陣鍵盤作為電子密碼鎖的鍵盤控制。經過網上收集資料與同學之間的討論,終于明白了鍵盤掃描的工作原理,和51單片機一樣都是利用動態掃描原理最終實現了鍵盤輸入的功能。依靠程序完成大部分的功能,所以程序的調試是重中之重,當然前提是能夠編寫并會修改程序。
    此次設計總的來說進行的還順利,這是小組成員團結付出的結果,當然,在此期間指導老師也為我們提供了巨大的幫助,在此表示深深的感謝!在此期間也學到了許多,特別是對軟件的應用,如proteus,ADS1.2,AXD,加強了理論與實踐的聯系。

完整的Word格式文檔51黑下載地址:
基于LPC2000系列的電子琴的設計.doc (987.63 KB, 下載次數: 31)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本精a在线观看 | 亚洲成人免费视频在线观看 | 亚洲成人av一区二区 | 99婷婷| 中文字幕日韩一区 | 激情五月综合 | 欧美日韩在线电影 | 五月婷婷丁香婷婷 | 女同久久 | 免费观看黄a一级视频 | 亚洲欧洲成人 | 久久久精品国产 | 在线看日韩 | 玖操| 成人影院在线观看 | 国产美女视频一区 | 国产成人亚洲精品 | 婷婷精品 | 黄网站免费观看 | 精品久 | 欧美三区 | 午夜成人在线视频 | 久久久久一区 | 99精品欧美 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 福利视频大全 | 久久免费国产 | 精品伊人久久 | 国产成人精品一区二区三区网站观看 | 国产精品一区二区欧美黑人喷潮水 | 国产精品久久久久久久久免费桃花 | 久久久亚洲 | 欧美一区二区三区的 | 性一交一乱一透一a级 | 久久不卡| 黄色一级免费 | 色网站入口 | 欧美在线不卡 | 精品99久久久久久 | 成人欧美一区二区三区在线播放 | 日韩中文字幕在线视频 |