wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PONG...PONG 8x8 LED 矩陣的復古玩法

[復制鏈接]
跳轉到指定樓層
樓主
。。。上一次和同學們(同學=一同學習者,同游=一同云游者,同居? 。。。 以此類推,不一而論)瞎聊了一點有關二進制數的宏定義以及用 bit map 手工輸入點陣圖形的事(http://m.izizhuan.cn/bbs/dpj-237651-1.html), 但沒有提及如何玩 51 單板機上那個 8x8 LED 矩陣。 BBC Micro:bit 上有一組 5 x 5 的LED 矩陣,官方很認證地開發了一個"喜怒哀樂"表情包,意欲把那個稀缺資源的利用發揮到極致,考慮到Micro:bit不過是兒童的玩具,我就不把那個表情包port到51 單板機上了。對于認真的程序員,把 PONG 這個古老的游戲port過來,以表示對前輩程序員的敬意,視乎更有一點意思?

。。。閑話少敘,我們單刀直入,先在那個 8x8LED 矩陣上實現單個 LED 的動畫,而后展開相應的數據結構,以實現“乒乓球”和“乒乓板”之間的互動。為此,我們來看看如何實現用(x,y)一對坐標來實現對64個LED當中任何一個LED的“尋址” 。。。 以下是N種方案當中的一種:

u8 data bitBuffer []= {
  b00111000,  //x(7,0)       *(7,7)
  b01111100,  //  |
  b01111110,  //  |
  b00111111,  //  |
  b00111111,  //  |   *(x,y)
  b01111110,  //  |
  b01111100,  //  |  
  b00111000   //(0,0)-------->y(0,7)
};
按照單板機上具體的硬件設計,我們可以把(x,y)映射為8x8LED矩陣的行列端口控制信號,以我手上那塊單板機為例(http://m.izizhuan.cn/bbs/dpj-237407-1.html),其映射關系如下:

(x,y) --> ( LedMatrixPort_Col = ~(1<<(7-x)) ,74hc595_Dout = 1<<(7-y))  )
這里,x 和 y 的值域都是整數閉區間 [0,7].

如你想要點亮(x,y)位置上單獨一顆LED,調用以下函數即可:
//void _8x8ledMatrixShow(u8 x,u8 y) compact{
//       
//        LedMatrixPort_Col = ~(1<<(7-x));
//        hc595_write_data(1<<(7-y));
//        delay_10us(100);       //延時一段時間,等待顯示穩定
//        hc595_write_data(0x00);//消影
//}

有了這個函數,你可以讓這顆被點亮的LED在各種(數學)軌跡上游走,實現任意動畫效果, piece of cake?

細心的同學會注意到我把上述函數注釋屏蔽掉了,表示我在實際的PONG游戲代碼里并沒有使用這個函數。在游戲更新“乒乓球”位置的代碼中,我直接利用了(x,y)和行-列端口的映射關系,同時把球的位置信息和“乒乓板”的位置信息一起緩存在bitBuffer 里面,當所有需要更新的數據都準備好之后才一次性地“刷新” LED矩陣的顯示,這是幾乎所有游戲編程普遍使用的所謂double buffer 技術,大家可以誰便參考一本游戲編程的書籍了解其原委,我不講了。


避免調用上述函數,對于51 單片機這樣的系統還考慮到硬件資源問題。51單片機的片內 數據RAM 非常貧乏,只能實現一個很淺的stack, 如果在函數調用時使用很多參數,最糟的情況下(如遞歸調用帶參數的函數),stack 很容易overflow, 導致程序崩潰。因此,大家在不影響程序代碼架構清晰的情況下,盡量使用全局變量為上策。

okay,我們繼續PONG的編程。。。在游戲世界里,“球”和“板”都是所謂的 objetcs (東東? sprite ? whatever ),如果開發環境比較豪華,我們應該用類似C++ 的class 來封裝這些東東的屬性和行為,但這里比較簡陋,我們就用struct 來簡單湊合一下吧。。。

typedef struct {
        signed char pTop;   // 球板的頂端 y 坐標
        signed char pShift; // 球板的頂端 x 坐標,缺省值為 7,如果<7, 表示迎著球的方向擊球,如果值不變,就是簡單的擋球。。。
        u8 score;               // 用于計分
} sPaddle;

sPaddle myPaddle;    // 左側球板,手工通過按鈕實現上下移動或由 MPU 判斷球的來路自動移動
sPaddle mpuPaddle;  // 右側球板,由 MPU 判斷球的來路自動移動


struct {
        signed char x, y;   // 球的位置
        signed char vx,vy; // 球的速度
}ball;


在游戲初始化時,我們必須給這些東東一些初始值,例如:

        if(bGameReStart)// 如果全局變量 bGameReStart ==1 , 從新開局
        {
                LED_PORT=0xff; // 熄滅 8x8 LED 矩陣
                srand (rand());   //  隨機數下種, 要在main.c 開頭處加上 #inlude <stdlib.h> 才能調用 srand 和 rand 函數

                myPaddle.pTop = 3; myPaddle.pShift  = 0;myPaddle.score  = 0;
                mpuPaddle.pTop = rand() % 6;mpuPaddle.pShift = 7;mpuPaddle.score = 0;
                ball.x = 6;
                ball.y =  myPaddle.pTop + rand() % 3;    //ball start by human
                ball.vx = 1 + rand()%2; //  相當于 random(1,2);
                ball.vy = -2 + rand()%5;// 相當于 random(-2,2);     avoid use function stack...

                bGameReStart =0; // don't keep running the code inside  {}
        }


世上所有游戲的靈魂是隨機數,包括你在“真實”世界里面玩現實版的“真人游戲”, 所以我對隨機數多啰嗦幾句。。。由于硬件隨機數發生器非常昂貴,大多數數字系統都采用軟件偽隨機數,其原理大家自行wikipeida, 我只解釋上面的代碼里,我為何免用 random(上限,下限) 這樣的函數,而是直接用 % 運算符來取指定范圍的隨機數。

在<stdlib.h>庫里,rand() 的16位整數值域是 [0, 32767],    random(上限,下限) 的定義通常類似以下形式:
unsigned int  random(unsigned int  lo,unsigned int  hi) {
  return ( lo +  (hi - lo)* rand()/32768 );
}

或者,限于返回8位(signed)整數:
signed char random(signed char lo, signed char hi){
return  (lo +  rand()%((hi-lo+1)) );
}


但這樣的函數定義都有參數調用的開銷,前一個還涉及“昂貴”的除法,這些都是資源匱乏的單板機需要盡量避免的。通常在C語言里,我們可以采用宏定義來重寫函數定義,調用時采用 inline 宏定義,這樣可以避免運行時的開銷,把計算的負擔分配到編譯時,由編譯器來代勞。同學們可以自行實驗利用宏來修改上面的代碼,提高程序的可讀性。

接下來就是游戲的主循環。。。

L_GAME_START:
    bGameReStart =1;                       
    while(1)
                {
                                key_matrix_flip_scan(key_value);  // 4 x 4 按鈕矩陣掃描
                                if (key_value ==2 || key_value == 5 )OE_74HC595 = 1; //turn off 8x8 LED matrix
                                        else OE_74HC595 = 0; // enable it otherwsie


                       
                                switch (key_value)
                                {
                                        case 1:     // 按鈕- 1
                                                        _8x8ledMatrixDisplay(mPONG);
                                                         bGameReStart = 1;  // 從新開始游戲
                                                        continue;
                                        case mPADDLE_UPP-1:               
                                        case mPADDLE_UPP:
                                             myPaddle.pShift = mPADDLE_UPP - key_value;
                                                                myPaddle.pTop -=2;
                                                                if (myPaddle.pTop < 0)myPaddle.pTop =0;
                                                                goto L_GAME_UPDATE;       
                                       
                                        case mPADDLE_UP-1:
                                        case mPADDLE_UP:
                                                                myPaddle.pShift = mPADDLE_UP - key_value;                               
                                                                myPaddle.pTop -=1;
                                                                if (myPaddle.pTop < 0)myPaddle.pTop =0;
                                       
                                                                goto L_GAME_UPDATE;       
                                        case mPADDLE_DOWN-2:
                                        case mPADDLE_DOWN-1:
                                        case mPADDLE_DOWN:
                                                                myPaddle.pShift = mPADDLE_DOWN - key_value;
                                                                myPaddle.pTop +=1;
                                                                if (myPaddle.pTop > 4)myPaddle.pTop =5;
                                       
                                                                goto L_GAME_UPDATE;       
                                       
                                        case mPADDLE_DOWND-3:
                                        case mPADDLE_DOWND-2:
                                        case mPADDLE_DOWND-1:
                                        case mPADDLE_DOWND:  
                                                                myPaddle.pShift = mPADDLE_DOWND - key_value;
                                                                myPaddle.pTop +=2;
                                                                if (myPaddle.pTop > 4)myPaddle.pTop =5;
                                                                goto L_GAME_UPDATE;               
                                       
                                        case mUPDATE_PONG:  
                                                             if(bGameReStart)// re-start game
                                                             {
                                                               // 游戲初始化代碼,前面已經講解,此處不再重復
                                                            }
                                               
                                        L_GAME_UPDATE:       
                                                            _8x8clearBitBuffer();         // 清除緩沖區內容
                                                 
                                                             // 畫球板
                                                              bitBuffer[myPaddle.pShift]  = b11100000;
                                                              bitBuffer[myPaddle.pShift]  = bitBuffer[myPaddle.pShift]>>myPaddle.pTop;

                                                            // 更新球的位置
                                                             ball.x += ball.vx;
                                                             ball.y += ball.vy;
                                                 
                                                            // 更新球板的位置
                                                           if (ball.vx > 0 ) // ball coming to human
                                                          {
                                                            // 如果 MPU 控制球板,計算球板如何判斷球路做相應的移動
                                                            }

                                                         if(myPaddle.pTop <0) myPaddle.pTop =0;
                                                         if (myPaddle.pTop > 4)myPaddle.pTop =5;


                                                       // 判斷球板是否接住球,沒有接住,對方就加分。。。
                                                       if(ball.x >= (7 - myPaddle.pShift) )
                                                      {
                                                         ball.x = 7;
                                                         ball.vx=-ball.vx; //左側 X方向反彈
                                                         
                                                         if( abs(ball.vy)<=1)
                                                         {
                                                                 if ( ball.y < myPaddle.pTop || ball.y > (myPaddle.pTop+2))
                                                                 {
                                                                         mpuPaddle.score++;  // 球板沒有擋住球,對方加分
                                                                 }
                                                         }
                                                         else
                                                         {
                                                             // 等等其它判斷和計分邏輯 。。。
                                                         }
                                                     }
                                                 
                                                  if( ball.y <=0 )
                                                 {
                                                    ball.y = 0;       // 頂端 Y- 方向反彈
                                                    ball.vy=-ball.vy;
                                                 }
                                                 if( ball.y >= 7)
                                                 {
                                                    ball.y = 7;   // 底端 Y- 方向反彈
                                                     ball.vy=-ball.vy;
                                                 }
                                                   if( ball.x <=0 )
                                                 {
                                                   ball.x = 0;  //右側 X方向反彈
                                                   ball.vx=-ball.vx;
                                                 }
                                                         
                                               
                                                 bitBuffer[7-ball.x] = 128>>ball.y;  // 把球的位置“寫” 入緩存區域
                                               
                                                 _8x8ledMatrixDisplay(bitBuffer);    // 刷新 8x8 LED 顯示
                                                 key_value = mUPDATE_PONG; // repeat run mUPDATE_PONG section
                                                 
                                                 // 在 7 段數碼管上 顯示計分
                                                ired_buf[0]=gsmg_code[mpuPaddle.score];
                                                ired_buf[3]=gsmg_code[myPaddle.score];
                                               
                                                smg_display(ired_buf,1);
                                                continue;                                       
                                }
                }
//END OF GAME


同學們可以看到我在這個循環里大大冒犯了一下 Goto 語句的批評者,我是實用主義者,goto 語句在這里的使用,既有效也不影響程序的可讀性。C就是高級的匯編語言啊,匯編語言大量使用各種 JMP 指令,C語言里適當使用 goto 語句,大家可以理直氣壯。

這個循環的上面有一小段和 PZ 單板機設計缺陷有關的代碼:


if (key_value ==2 || key_value == 5 )OE_74HC595 = 1; //turn off 8x8 LED matrix
        else OE_74HC595 = 0; // enable it otherwsie


板子的設計者提示玩家,如果要禁止 8x8 LED 矩陣,可以使用跳針,其實沒有這個必要,這個跳針設計是多余的。8x8 LED 矩陣的開關,完全可以通過軟件加以控制。我在板子上加了一根飛線,用 sbit OE_74HC595 = P1^7 定義了其用法,接下來就可以用P1^7 端口控制74HC595芯片,從而實現8x8 LED 矩陣的開和關,大家留意一下下面視頻和圖片里的飛線即可。

.....  ......  ...... let's call it a day. .................. .................... ................... ........................ ........... .......... .............















評分

參與人數 1黑幣 +70 收起 理由
admin + 70 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
久久精品人人做人人综合 | 69精品视频| 国产在线综合视频| 国产又粗又硬又长| 成人免费看黄网站| 亚洲精品福利免费在线观看| 国产精品电影院| 日本强好片久久久久久aaa| 人人网欧美视频| 丁香花在线高清完整版视频| 丝袜美女写真福利视频| 欧美人乱大交xxxxx| 国产三级理论片| www.xx日本| 久久久久xxxx| www.日本三级| av在线不卡一区| 欧美精品一区二区三区精品| 亚洲小说区图片区都市| av日韩在线免费| 欧美粗暴性video| av观看在线免费| 手机看片久久久| 啪啪一区二区三区| 国产乱淫av麻豆国产免费| 国产精品久久中文字幕| 美女视频久久| 91久久精品美女高潮| 高清欧美性猛交xxxx| 亚洲欧美国产日韩天堂区| 欧美在线观看禁18| 欧美精品黄色| 9999久久久久| 97人人做人人爽香蕉精品| 思思99re6国产在线播放| 免费看的毛片| 深夜福利av你懂的| 91九色网站| 884aa四虎免费影库4h| av中文字幕播放| 精品无码一区二区三区的天堂| 韩国19禁主播vip福利视频| 一区二区三区日韩在线| 亚洲精品成人网| 日韩欧美一区在线| 欧美日韩精品一区二区三区四区| 亚洲一区二区三区激情| 亚洲欧美区自拍先锋| 国产欧美一区二区精品忘忧草| 国产精品香蕉一区二区三区| 日本视频免费一区| 日日夜夜精品免费视频| 欧美午夜三级| 天堂av中文在线观看| 欧美极品少妇videossex| 超碰免费在线| 看**视频a级毛片| 欧美日韩久久中文字幕| 丁香久久五月| www欧美在线| 日韩精品一区二区三区国语自制| 中文字幕av久久爽av| 日本 欧美 国产| 波多野结衣喷潮| 男人的午夜天堂| 午夜爱爱毛片xxxx视频免费看| 一级在线观看视频| 欧美视频一区二区在线| 日韩在线视频网址| 国产精品成人免费观看| 免费毛片一区二区三区| 天天综合网久久综合网| 中文字幕在线欧美| 一区二区国产欧美| 理论片中文字幕| 中文字幕在线看精品乱码| 国产免费大片| 来个黄色网址| 国产一二三视频| 中文字幕免费在线| 91se在线| h片在线观看视频免费免费| 亚洲综合在线电影| 电影一区中文字幕| 嫩草影视亚洲| 在线播放日韩| 国产一区欧美二区| 久久午夜精品| 精品一区二区国语对白| 99精品视频一区| 亚洲素人一区二区| 精品色蜜蜜精品视频在线观看| 日本精品一级二级| 精品国产乱码久久久久久影片| 亚洲精品一区二区三区婷婷月| www.日韩av.com| 日本久久中文字幕| 国内一区二区在线视频观看 | 亚洲一区免费在线观看| 欧美性xxxx在线播放| 日韩欧美美女一区二区三区| 亚洲国产一区自拍| 欧美日韩电影在线观看| 国产福利一区二区三区视频在线| 国产999精品久久久久久绿帽| 国产欧美综合色| 一区二区三区四区乱视频| 黄色一区二区三区| 欧美日韩国产片| 日韩精品免费电影| 97国产成人精品视频| 国产精品爽爽爽| 四虎影院一区二区三区| www.欧美黄色| 性感美女一区二区三区| 国产中文av在线| 91好色先生tv| 影音先锋5566资源站| 写真福利片hd在线观看| 羞羞污视频在线观看| 天堂久久午夜av| 国产一区二区三区四区二区| 欧美日韩一区二区国产| 精品一区二区三区影院在线午夜| 国产日韩视频一区二区三区| 欧美性精品220| 亚洲黄色av女优在线观看| 欧美大片免费观看在线观看网站推荐| 亚洲精品免费网站| 亚洲精品日韩在线观看| 美女又黄又免费的视频| 国产精品国产三级国产传播| 国产精品视频一二区| 国产一卡2卡3卡四卡网站| 国产在线导航| 777午夜精品电影免费看| 国产精品xxxav免费视频| 亚洲深夜影院| ...xxx性欧美| 亚洲国产精品一区二区三区| 国产99久久精品一区二区| 中文字幕日韩一区二区三区不卡| 天堂在线精品视频| 成人免费区一区二区三区| 欧美精品videosbestsex另类 | 国产成人黄色| 国产ts人妖一区二区| 欧美色播在线播放| 久久99久国产精品黄毛片入口| 蜜桃狠狠色伊人亚洲综合网站| av噜噜在线观看| 欧美福利视频一区二区| 国产95在线|亚洲| 国产在线观看免费麻豆| 视频国产一区| 99久久99久久精品免费看蜜桃| 一本大道久久a久久综合婷婷| 国产精品一卡二卡| 亚洲激情第一区| 亚洲午夜色婷婷在线| 成人性生交xxxxx网站| 久久久999视频| 波多野结衣亚洲一区二区| www.精品视频| 500福利第一精品导航| 性感女国产在线| 亚洲中无吗在线| 久久青草欧美一区二区三区| 亚洲精品美女免费| 久久精品国产第一区二区三区最新章节| 青娱乐国产精品视频| 亚洲一级av毛片| 青檬在线电视剧在线观看| 中文字幕日韩高清在线| 成人av网站免费| 日韩电影在线观看永久视频免费网站| 国产乱子伦精品| 黄色a一级视频| 亚洲欧美日本在线观看| 永久免费av在线| 欧美 日韩 国产 一区| 亚洲一区在线播放| 欧美怡红院视频一区二区三区| 欧美亚洲国产成人| 超碰在线观看91| 最新在线地址| 欧美综合一区| 夜夜亚洲天天久久| xvideos亚洲| 永久域名在线精品| 手机视频在线观看| 中文在线免费看视频| 五月天激情小说| 亚洲经典自拍| 性欧美高清强烈性视频| 国产精品无av码在线观看| 色婷婷色综合| 不卡的免费av| 亚洲小视频在线观看| 中文字幕亚洲一区二区va在线| 亚洲精品成人久久| 欧美日韩亚洲综合一区二区三区激情在线| 美女黄色一级视频| 欧美三级又粗又硬| 午夜无码国产理论在线| 国产激情视频一区二区三区欧美| 国产农村妇女精品一二区| 色爱区综合激月婷婷| 国产精品亚洲自拍| 中文字幕丰满乱子伦无码专区| 国产1卡2卡三卡四卡网站| 免费成人动漫| 精品一区二区三区在线视频| 亚洲女人被黑人巨大进入| 奇米影视首页 狠狠色丁香婷婷久久综合| 99国产精品免费| www久久com| 国产激情欧美| 国产精品亚洲一区二区三区在线 | 国产欧美精品一区二区三区介绍| 国内自拍第二页| 欧美另类黑人巨大videos| 欧美91在线|欧美| 成人在线爆射| 99精品国产一区二区三区不卡 | 911福利视频| 久草在线视频网| 日本精品久久| 国产精品丝袜一区| 国产精品美女免费看| 精品无人区无码乱码毛片国产| 一个人看的日本免费视频| 91麻豆精品国产91久久久久推荐资源| 欧美国产日韩一二三区| 欧美在线亚洲一区| 国产精品无码一区二区三区免费| eeuss影院130020部| 欧美激情久久久久久久久久久| 亚洲欧美一区二区三区孕妇| 国产精品久久久久久久久久 | 亚洲一区二区精品在线| 日韩av女优在线观看| 在线观看一级片| 国产精品综合| 中文字幕综合一区| 免费不卡av网站| 免费吸乳羞羞网站视频| 成人激情开心网| 这里只有精品99re| 中文字幕人妻熟女人妻洋洋| 人妻妺妺窝人体色www聚色窝| a成人v在线| 亚洲精品久久久久久国产精华液| 国产三级精品在线不卡| 久久久久亚洲视频| 91九色porn在线资源| 久久精品视频在线免费观看| 成人欧美一区二区三区黑人| 日本亚洲欧美在线| 欧美大胆的人体xxxx| 久久女同互慰一区二区三区| 国产欧美一区二区三区久久| 国产无套内射又大又猛又粗又爽| 制服丝袜中文字幕在线| 国产亚洲人成网站| 国产精品免费区二区三区观看 | 色婷婷综合视频在线观看| 国产免费一区二区三区四在线播放| 亚洲精品无amm毛片| 欧美性猛交ⅹxxx乱大交免费| 美女日韩一区| 精品久久久久久久大神国产| 久久精品国产理论片免费| 97人妻精品视频一区| 末成年女av片一区二区下载| 亚洲色图一区二区三区| caoporn国产精品免费公开| 天天操夜夜操视频| 欧美123区| 亚洲最大成人网4388xx| 午夜精品区一区二区三| 在线观看xxx| 亲子伦视频一区二区三区| 欧美高清激情brazzers| 久久久久久久久久久免费视频| 免费大片黄在线观看| 国产精品国产三级国产在线观看| 欧美不卡视频一区| 永久免费黄色片| 一级片免费看| 成人免费精品视频| 97人人干人人| 久草成人在线视频| 九色porny自拍视频在线播放| 亚洲午夜在线电影| 久艹在线免费观看| 伊人免费视频| 午夜在线视频观看日韩17c| 欧美激情久久久久| 黄色一级视频免费| 国产精品扒开腿做爽爽爽视频软件| 亚洲一区在线视频| 日本xxx免费| 拍拍拍无挡免费播放视频在线观看| 欧美久久九九| 2020久久国产精品| 久久久久久久久黄色| 久久精品xxxxx| 在线观看av不卡| 特黄视频免费观看| jizzjizz中文| 国产一区二区久久| 91日韩在线播放| 99精品免费观看| 日本一区二区免费高清| 久久色精品视频| 久一区二区三区| 色综合一本到久久亚洲91| 色婷婷国产精品| 91国内在线播放| 国产永久免费高清在线观看视频| bt7086福利一区国产| 成人免费视频网站| 亚洲精品自产拍在线观看app| 欧美成人有码| 57pao成人永久免费视频| 亚洲精品毛片一区二区三区| 林ゆな中文字幕一区二区| 亚洲精品国产精品国自产在线| 在线免费看黄视频| 日韩在线影院| 亚洲精品电影在线| www欧美com| 日韩在线精品强乱中文字幕| 国产二区国产一区在线观看| 精品人伦一区二区三区| 国产寡妇树林野战在线播放| 日韩高清在线不卡| 久久久久天天天天| 免费看片黄色| 99久久99久久精品国产片果冻| 老司机午夜网站| 最近中文字幕mv第三季歌词| 亚洲日本中文字幕区| 一区二区三区视频在线观看免费| 1024免费在线视频| 一本大道av一区二区在线播放| wwwww在线观看| 天堂电影一区| 亚洲人成网在线播放| 国产免费av一区| 亚洲成人日韩| 91手机在线播放| 国产xxxxxx久色视频在| 成人一区二区三区在线观看 | 欧美jjzz| 亚洲第一搞黄网站| 日本一区二区在线观看视频| 松下纱荣子在线观看| 日韩精品中文在线观看| 日批视频免费在线观看| 国产精品av久久久久久麻豆网| 国产激情美女久久久久久吹潮| www污网站在线观看| 国产精品国产自产拍在线| 交换做爰国语对白| 成人做爰视频www网站小优视频| 国产亚洲精品一区二555| 一区二区日韩在线观看| 性一交一乱一区二区洋洋av| 天天综合狠狠精品| 青青草视频免费在线观看| 精品1区2区3区| av天堂一区二区| 成人黄色免费网站| 色综合久久88色综合天天看泰| 四虎免费在线观看| 国产精品一区二区久激情瑜伽| 国内精品视频一区二区三区| 超碰在线免费公开| 亚洲美女中文字幕| 国产哺乳奶水91在线播放| 久久精品72免费观看| 日本天堂免费a| 国内福利写真片视频在线| 亚洲成年人网站在线观看| 亚洲午夜精品久久久久久高潮| 精品福利网址导航| 成人网在线免费看| 成人网址大全| 色婷婷亚洲精品| 免费在线黄色片| 欧美在线黄色| 一区二区不卡在线视频 午夜欧美不卡' | 日韩一级黄色片| 中文字幕一区二区三区四区免费看| 日韩精品五月天| 好吊妞无缓冲视频观看| 18video性欧美19sex高清| 上原亚衣av一区二区三区|