免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

SSD1306 OLED驅(qū)動開發(fā)實戰(zhàn):從I2C通信到顯存管理全覆蓋

SSD1306 OLED驅(qū)動開發(fā)實戰(zhàn):從I2C通信到顯存管理全覆蓋 1. 為什么一塊小小的OLED屏成了嵌入式調(diào)試的“剛需”先聊點實在的。做嵌入式開發(fā)尤其是STM32、ESP32這類單片機(jī)項目調(diào)通一個外設(shè)、跑通一個算法、驗證一組傳感器數(shù)據(jù)最直觀的反饋方式是什么串口打印是一種但串口得接線、得開上位機(jī)、數(shù)據(jù)刷新還不夠直觀。真正上手之后你會發(fā)現(xiàn)一塊OLED屏幕掛在板子上意味著你隨時能看到系統(tǒng)內(nèi)部正在發(fā)生什么。我最早用OLED是被逼的。當(dāng)時調(diào)一個TB6612電機(jī)驅(qū)動模塊PWM波形怎么看都對電機(jī)就是轉(zhuǎn)得一頓一頓的。串口打印占空比數(shù)據(jù)刷得飛快根本看不清。后來把關(guān)鍵變量直接懟到OLED上一秒刷新幾次占空比、電流反饋、編碼器計數(shù)全顯示出來問題一眼就找到了——PWM初始化順序錯了定時器還沒啟動就往里寫比較值。這個教訓(xùn)讓我徹底入了OLED的坑。OLED能在嵌入式圈子里這么普及不只是因為它便宜、尺寸小、接口簡單更關(guān)鍵的是它給了開發(fā)者一種“儀表盤”式的調(diào)試體驗。相比LCD1602那種字符屏OLED能做圖形、能畫曲線、能顯示中文分辨率雖然不高但足夠展示關(guān)鍵信息。相比TFT彩屏OLED的驅(qū)動難度低得多I2C兩根線就能跑內(nèi)存占用也小對MCU性能基本沒有額外要求。這篇文章要解決的事情很明確從零手寫一套基于I2C通信協(xié)議的OLED驅(qū)動模塊搞定初始化、顯存管理、字符顯示、中文顯示和圖形繪制再順手把坐標(biāo)計算、取模工具、緩存刷新這些坑全部填上。無論你用的是STM32加HAL庫還是ESP32加IDF框架甚至是想在Arduino上跑這套驅(qū)動思路都是通用的差別只在底層I2C讀寫函數(shù)的適配。適合誰看剛被OLED點不亮折磨的新手想搞清楚顯存緩沖機(jī)制原理的進(jìn)階玩家以及那些受夠了重復(fù)造輪子、想攢一套萬能驅(qū)動庫的老手??赐赀@篇你不光能點亮屏幕還能明白點亮背后每一行代碼在干什么。2. OLED驅(qū)動背后的核心機(jī)制SSD1306控制器與顯存緩沖設(shè)計2.1 SSD1306到底在做什么為什么I2C兩根線就能控制它市面上絕大多數(shù)0.96寸、0.91寸、1.3寸單色OLED屏用的都是Solomon Systech的SSD1306驅(qū)動控制器。這塊芯片本質(zhì)上是屏幕和MCU之間的“翻譯官”MCU把要顯示的內(nèi)容通過I2C或SPI喂給SSD1306SSD1306負(fù)責(zé)把數(shù)據(jù)刷新到OLED像素陣列上。I2C通信協(xié)議在這里只用了兩根線SCL時鐘線和SDA數(shù)據(jù)線??刂泼詈蛿?shù)據(jù)都走這兩根線靠設(shè)備地址和寄存器狀態(tài)區(qū)分。OLED的I2C設(shè)備地址通常是0x3C如果板子的SA0引腳拉高就是0x3D。我見過不少新手代碼調(diào)不通不是地址寫錯了而是把地址左移一位后忘了匹配實際的7位地址格式這個細(xì)節(jié)后面會展開講。SSD1306內(nèi)置了一塊GRAM顯存。這塊顯存的大小取決于分辨率。以最常見的128x64分辨率為例SSD1306把屏幕按縱向每8個像素為一頁一共分成8頁。每頁128列每列用一個字節(jié)表示字節(jié)的bit0到bit7對應(yīng)屏幕從上到下的8個像素點。這就引出了OLED驅(qū)動最核心的概念顯存是分頁線性排布的而不是像坐標(biāo)軸那樣橫平豎直排列的。如果你把屏幕想象成一張畫布那么SSD1306眼中的畫布是被切成8條橫向長條的每條長條里y方向只有8個像素的精度。2.2 一字節(jié)控制八個像素頁地址模式與坐標(biāo)轉(zhuǎn)換理解頁地址模式是寫驅(qū)動的基礎(chǔ)。SSD1306有三種尋址方式頁地址模式、水平地址模式和垂直地址模式。實際工程里頁地址模式最常用也最容易理解。在頁地址模式下你首先通過命令設(shè)置當(dāng)前頁P(yáng)AGE0到PAGE7再設(shè)置列地址的低4位和高4位然后連續(xù)寫入數(shù)據(jù)列地址會自動遞增寫滿128列后回到當(dāng)前頁的起始列但不會自動換頁。舉個具體例子要在屏幕的(0, 0)位置畫一個點屏幕坐標(biāo)x0、y0對應(yīng)的頁就是y除以8等于0頁頁內(nèi)偏移是y取模8等于0所以這個點對應(yīng)第0頁第0字節(jié)的bit0。如果要在(0, 8)位置畫點那它對應(yīng)第1頁第0字節(jié)的bit0雖然像素坐標(biāo)肉眼看到的是緊挨著上一行但在顯存里它們相差了整整一頁。這就是初學(xué)者最栽跟頭的地方直接用屏幕坐標(biāo)一個個畫點沒問題但如果想往顯存某個字節(jié)的某個bit上寫數(shù)據(jù)必須先算清楚坐標(biāo)到頁、列的映射關(guān)系。好的驅(qū)動會把這一層封裝起來對外提供setPixel(x, y, color)這樣的接口內(nèi)部自動完成坐標(biāo)到顯存地址的換算。2.3 全屏刷新與局部刷新的取舍為什么FPS上不去很多從Arduino轉(zhuǎn)過來的朋友習(xí)慣于調(diào)用display()函數(shù)刷新全屏這在OLED上是可行的但要注意效率。128x64的顯存一共是1024個字節(jié)通過I2C傳輸假設(shè)I2C時鐘設(shè)為400kHz快速模式每個字節(jié)在協(xié)議層面大概需要9個bit的時間也就是1024個字節(jié)加上命令頭一次全屏刷新大概要25毫秒左右。算一下就知道理論最高幀率也就40FPS左右。實際跑的時候如果MCU還在同時處理其他任務(wù)幀率會更低。這就是為什么復(fù)雜動畫在OLED上看起來“卡卡的”。解決思路有兩條。一是只更新臟區(qū)域記錄哪些區(qū)域的數(shù)據(jù)發(fā)生了變化只把那幾頁、那幾列的字節(jié)通過I2C寫過去。二是把刷屏頻率降下來嵌入式界面不是打游戲10到15FPS完全夠用省下的CPU時間可以干正事。我在實際項目里通常采用“雙緩沖加臟矩形”的方案。MCU側(cè)維護(hù)一個用戶空間的顯存數(shù)組所有繪圖操作都先寫這塊數(shù)組等一幀內(nèi)容畫完了再統(tǒng)一把整個數(shù)組推給SSD1306。這樣做的優(yōu)勢是絕對沒有閃爍因為屏幕不會顯示半成品畫面。如果性能吃緊再針對變化區(qū)域做局部推送。3. 先搭骨架基于HAL庫的最小I2C驅(qū)動與初始化序列3.1 I2C底層讀寫函數(shù)這是全部工作的地基無論后面對外提供多高級的接口最底層一定是兩個函數(shù)向SSD1306寫命令和寫數(shù)據(jù)。在STM32的HAL庫環(huán)境下最常用的就是HAL_I2C_Mem_Write。這里有個關(guān)鍵技巧SSD1306的I2C傳輸格式是“控制字節(jié)加數(shù)據(jù)”??刂谱止?jié)0x00表示后面跟的是命令0x40表示后面跟的是數(shù)據(jù)。用HAL_I2C_Mem_Write的話就是把控制字節(jié)當(dāng)作MemAddress來用。#define OLED_ADDR 0x3C void OLED_WriteCmd(uint8_t cmd) { HAL_I2C_Mem_Write(hi2c1, OLED_ADDR 1, 0x00, I2C_MEMADD_SIZE_8BIT, cmd, 1, 100); } void OLED_WriteData(uint8_t data) { HAL_I2C_Mem_Write(hi2c1, OLED_ADDR 1, 0x40, I2C_MEMADD_SIZE_8BIT, data, 1, 100); }注意那行OLED_ADDR 1。HAL庫的I2C地址參數(shù)要求的是8位地址格式也就是7位地址左移一位。我的SSD1306模塊默認(rèn)地址是0x3C左移后變成0x78傳給HAL。如果你用其他庫務(wù)必確認(rèn)庫函數(shù)期望的是7位地址還是8位地址這個細(xì)節(jié)能省掉你半天排查時間。批量寫數(shù)據(jù)的時候別一個字節(jié)一個字節(jié)地調(diào)用HAL_I2C_Mem_Write那效率太低了。直接傳數(shù)組指針和長度讓I2C外設(shè)在硬件層面連續(xù)發(fā)完速度能差好幾倍。這個優(yōu)化對全屏刷新尤其明顯。3.2 初始化序列不是玄學(xué)每條命令都有明確用途網(wǎng)上流傳的SSD1306初始化序列五花八門其實核心邏輯是固定的。我用HAL庫實測穩(wěn)定的一組初始化流程如下void OLED_Init(void) { HAL_Delay(100); // 等待SSD1306內(nèi)部上電穩(wěn)定 OLED_WriteCmd(0xAE); // 關(guān)閉顯示 OLED_WriteCmd(0xD5); // 設(shè)置時鐘分頻因子 OLED_WriteCmd(0x80); // 默認(rèn)分頻 OLED_WriteCmd(0xA8); // 設(shè)置驅(qū)動路數(shù) OLED_WriteCmd(0x3F); // 64路 OLED_WriteCmd(0xD3); // 設(shè)置顯示偏移 OLED_WriteCmd(0x00); // 偏移為0 OLED_WriteCmd(0x40); // 設(shè)置起始行0 OLED_WriteCmd(0x8D); // 電荷泵開關(guān) OLED_WriteCmd(0x14); // 開啟電荷泵這是屏幕能亮的關(guān)鍵 OLED_WriteCmd(0x20); // 設(shè)置尋址模式 OLED_WriteCmd(0x02); // 頁地址模式 OLED_WriteCmd(0xA1); // 段重映射左右鏡像相關(guān) OLED_WriteCmd(0xC8); // 掃描方向上下鏡像相關(guān) OLED_WriteCmd(0xDA); // 設(shè)置COM引腳硬件配置 OLED_WriteCmd(0x12); // 常見配置 OLED_WriteCmd(0x81); // 設(shè)置對比度 OLED_WriteCmd(0xCF); // 對比度值 OLED_WriteCmd(0xD9); // 預(yù)充電周期 OLED_WriteCmd(0xF1); OLED_WriteCmd(0xDB); // VCOMH電壓 OLED_WriteCmd(0x40); OLED_WriteCmd(0xA4); // 從顯存內(nèi)容顯示 OLED_WriteCmd(0xA6); // 正常顯示非反色 OLED_WriteCmd(0xAF); // 開啟顯示 }逐個說重點。0x8D配0x14是開啟內(nèi)部電荷泵OLED屏需要比電源電壓更高的驅(qū)動電壓電荷泵負(fù)責(zé)升壓不開啟電荷泵屏幕就是全黑的但MCU通信一切正常這種“假死”癥狀最容易讓人誤判為硬件壞了。0xA1和0xC8這對命令決定掃描方向和鏡像。不同廠家模塊的引腳排列可能有差異如果你的屏幕顯示左右顛倒或者上下顛倒改這兩個命令就能修正硬件上不需要做任何改動。0x20配0x02把尋址模式設(shè)為頁地址模式后面所有數(shù)據(jù)的寫入邏輯都建立在頁地址模式上。0x81配0xCF是設(shè)置對比度如果你覺得屏幕太暗調(diào)高這里即可我實測0x80左右是我個人比較舒服的亮度太高的對比度反而會有些發(fā)虛。3.3 顯存緩沖區(qū)的建立繪圖操作不再碰硬件初始化完成之后下一步就是在MCU內(nèi)存里開一塊和SSD1306顯存對應(yīng)的緩沖區(qū)。這塊緩沖區(qū)是后續(xù)所有繪圖操作的主戰(zhàn)場。uint8_t OLED_Buffer[8][128]; // 8頁每頁128字節(jié)共1024字節(jié)有人可能會問直接往SSD1306內(nèi)部顯存寫不行嗎當(dāng)然也行但問題是你畫一個點需要讀回當(dāng)前值再和要畫的點疊加這個過程麻煩而且是分步的。有了本地緩沖區(qū)所有畫點、畫線、畫字操作都直接在內(nèi)存里完成最后一次性推送畫面干凈利落。繪制接口封裝的思路是先把坐標(biāo)換算成頁索引和位掩碼void OLED_SetPixel(uint8_t x, uint8_t y, uint8_t color) { if (x 128 || y 64) return; uint8_t page y / 8; uint8_t bit y % 8; if (color) OLED_Buffer[page][x] | (1 bit); else OLED_Buffer[page][x] ~(1 bit); }這個函數(shù)是OLED驅(qū)動的地基。畫線、畫矩形、畫圓、寫字底層全都是調(diào)用它。只要SetPixel的坐標(biāo)換算正確上面所有的圖形函數(shù)就都錯不了。3.4 推送函數(shù)顯存數(shù)據(jù)怎么高效地進(jìn)SSD1306緩沖區(qū)畫完之后需要把數(shù)據(jù)推送到屏幕。推之前先要設(shè)置SSD1306的地址指針到起始位置void OLED_Update(void) { uint8_t i; for (i 0; i 8; i) { OLED_WriteCmd(0xB0 i); // 設(shè)置頁地址為第i頁 OLED_WriteCmd(0x00); // 列地址低4位 OLED_WriteCmd(0x10); // 列地址高4位 // 連續(xù)發(fā)送該頁的128字節(jié) } }更高效的做法是直接把頁地址和列地址設(shè)置一次然后連續(xù)寫入全部1024字節(jié)SSD1306會自動按頁地址模式的規(guī)則遞增列地址。不過要小心頁地址模式寫滿當(dāng)前頁后列回到0但頁不會自動切換所以按頁循環(huán)更穩(wěn)妥。很多庫在Update前會把緩沖區(qū)整個置零。這里想提醒一句清屏操作應(yīng)該由OLED_Clear函數(shù)負(fù)責(zé)而不是放在Update里否則你打算局部更新一幀畫面時會把其他區(qū)域的像素全洗掉。分層清晰是驅(qū)動庫設(shè)計的重要原則。4. 坐標(biāo)、取模與字符顯示從6x8數(shù)字到16x16中文的完整鏈路4.1 字符取模的原理字體數(shù)據(jù)本質(zhì)上是一張位圖表OLED顯示字符和圖形本質(zhì)上是一樣的都是把設(shè)計好的點陣數(shù)據(jù)填充到顯存里。一個6x8的ASCII字符就是6個字節(jié)每個字節(jié)的bit0到bit7對應(yīng)8行像素。字符“A”的顯示說白了就是把它的點陣模式映射到指定坐標(biāo)。字體取模工具有很多PCtoLCD2002、Image2Lcd、點陣字庫生成器都行。設(shè)置取模方式時務(wù)必選擇“逐列式取模從上到下從左到右”這和我們前面講的SSD1306顯存頁排列方式完全對應(yīng)。如果你在屏幕上看到字符是顛倒或者被切割重組的基本可以斷定是取模方向和驅(qū)動函數(shù)的讀取順序不一致不用懷疑屏幕壞了。以標(biāo)準(zhǔn)ASCII字符集為例純英文字符取模后大概是這樣的static const uint8_t OLED_F6x8[][6] { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 空格 {0x00, 0x00, 0x5F, 0x00, 0x00, 0x00}, // ! {0x00, 0x07, 0x00, 0x07, 0x00, 0x00}, // // ... 其余字符 };每個字符6字節(jié)排列順序就是屏幕上的6列。寫入函數(shù)只要把字符對應(yīng)的那6個字節(jié)按順序拷到緩沖區(qū)指定區(qū)域的對應(yīng)列即可。4.2 字符顯示函數(shù)的設(shè)計光標(biāo)位置與坐標(biāo)差一錯誤有了字模寫一個在任意坐標(biāo)顯示字符串的函數(shù)就順理成章了void OLED_ShowString(uint8_t x, uint8_t y, const char *str) { while (*str) { if (*str 0x20 *str 0x7E) { OLED_ShowChar(x, y, *str); x 6; } str; } }這里有一個非常經(jīng)典的坑字符顯示完之后x坐標(biāo)要加多少加6還是加8這取決于你使用的字模寬度。如果你用的6x8字體每個字符占6列那下一個字符起始x坐標(biāo)就要加6。但你可能會發(fā)現(xiàn)6x8字體是等寬的但字符和字符之間幾乎沒有間隙視覺效果有點擠。所以很多工程里會刻意在字符之間留一個像素的間距也就是x加7。這個間距屬于顯示效果的調(diào)優(yōu)范圍沒有標(biāo)準(zhǔn)答案。我自己的習(xí)慣是數(shù)字和字母用6x8字體加1像素間距中文用16x16字體不加間距這樣看起來比較整齊。加間距的邏輯本質(zhì)上是給每個字符的顯示區(qū)域增加一列空白但字模本身不變只是寫入位置偏移了。4.3 中文與圖片的顯示顯存緩沖區(qū)的“貼圖式”操作中文顯示和英文字符的唯一區(qū)別是取模方式和字節(jié)數(shù)。16x16中文點陣一行16個像素分成上下兩頁每頁16字節(jié)總共32字節(jié)。取模工具里選“16x16點陣逐列式縱向取?!钡脑捛?6個字節(jié)是上半部分后16個字節(jié)是下半部分。寫中文顯示函數(shù)時本質(zhì)上就是把32字節(jié)按“上半部分16字節(jié)連續(xù)寫入某頁下半部分16字節(jié)連續(xù)寫入下一頁”的方式拷貝到緩沖區(qū)void OLED_ShowChinese(uint8_t x, uint8_t y, const uint8_t *fontData16x16) { uint8_t i; for (i 0; i 16; i) { OLED_SetPixel_Byte(x i, y, fontData16x16[i]); OLED_SetPixel_Byte(x i, y 8, fontData16x16[i 16]); } }圖中的“OLED_SetPixel_Byte”其實是個更高效的底層操作一次性把一個字節(jié)的8個點寫入緩沖區(qū)void OLED_SetColumnByte(uint8_t x, uint8_t yPage, uint8_t data) { if (x 128 || yPage 8) return; OLED_Buffer[yPage][x] data; }圖片顯示的方案完全一樣。先用Image2Lcd把一張128x64的圖片轉(zhuǎn)換成C數(shù)組。取模設(shè)置要選“生成C數(shù)組、列行式掃描、單色、輸出為十六進(jìn)制”。轉(zhuǎn)換出來的1024個字節(jié)直接按順序拷貝到OLED_Buffer里整個圖片就顯示出來了。這個方法用來顯示開機(jī)Logo特別方便。4.4 反色、滾動和局部刷新的工程實現(xiàn)手法SSD1306本身支持硬件反色命令0xA7也有硬件滾動命令0x2F。硬件反色特別適合做菜單的選中項高亮把選中項那幾行區(qū)域的數(shù)據(jù)取反視覺效果就是白底黑字非常醒目。軟件反色更靈活??梢栽陲@示函數(shù)里加一個反色參數(shù)字模數(shù)據(jù)異或0xFF之后寫入緩沖區(qū)。以6x8字符為例讓每個字節(jié)按位取反即可。這樣不用改字庫也不用切全局狀態(tài)想要高亮哪個區(qū)域就把哪塊區(qū)域的寫入加上異或操作。硬件滾動在SSD1306里是內(nèi)置功能命令序列不復(fù)雜設(shè)置滾動窗口、設(shè)置滾動方向、設(shè)置滾動時間和周期、啟動滾動。但說實話硬件滾動在實際項目里用的不多因為它滾動的是整塊顯存沒法做到像跑馬燈那樣精確到某行文字。跑馬燈效果我用軟件實現(xiàn)每隔一定時間把緩沖區(qū)里的某行像素整體平移幾個像素然后刷新屏幕效果好得多。局部刷新是省時間的大殺器。比如一個時鐘界面秒數(shù)每秒變一次你不需要全屏刷新只要把顯示秒的那個區(qū)域?qū)?yīng)的那兩頁數(shù)據(jù)推送出去就行。我在實際項目里專門封裝了一個OLED_UpdateArea(x1, y1, x2, y2)函數(shù)內(nèi)部根據(jù)坐標(biāo)范圍算出涉及的頁和列只發(fā)送這部分?jǐn)?shù)據(jù)幀率能翻好幾倍。5. 圖形繪制畫線、畫圓與進(jìn)度條UI開發(fā)的基本功5.1 Bresenham畫線算法整數(shù)運算的時代優(yōu)勢畫一條從(x0, y0)到(x1, y1)的線段最直觀的算法是求得斜率對x從x0到x1依次計算對應(yīng)的y值。但這樣涉及浮點運算對MCU來說不僅慢而且占用大量資源。Bresenham算法的精髓在于全程只用整數(shù)加減法就完成了直線繪制。算法核心是根據(jù)誤差項的正負(fù)決定y坐標(biāo)是否遞增。以|x1-x0| |y1-y0|的情況為例x方向是主步進(jìn)方向每個x步進(jìn)一個像素誤差項每步累加dy當(dāng)誤差項超過dx時y方向步進(jìn)一步同時誤差項減去dx。實現(xiàn)代碼不長但調(diào)通后效果非常穩(wěn)定任何分辨率下都不會出現(xiàn)斷點。這在繪制波形圖、趨勢圖時特別有用。比如ADC采樣后的電壓曲線橫軸是采樣點縱軸是電壓值把相鄰點用Bresenham連起來屏幕上就能看到連續(xù)的時間波形。5.2 畫矩形、填充矩形與圓角矩形的效率優(yōu)化畫空心矩形就是把四條邊分別調(diào)用畫線函數(shù)。填充矩形則可以走更快捷的路徑直接按頁填充每一行算8行像素整塊寫入。void OLED_FillRect(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t color) { uint8_t x, y; for (y y1; y y2; y) { for (x x1; x x2; x) { OLED_SetPixel(x, y, color); } } }這個函數(shù)是漸進(jìn)式的理論上足夠用但性能很一般。如果填充區(qū)域很大比如整個屏幕清屏用SetPixel逐點畫會浪費大量時間在頁換算上。優(yōu)化的做法是按頁處理每頁里如果填充范圍覆蓋連續(xù)8行直接用0xFF或0x00填充整列字節(jié)。圓角矩形常用在儀表盤風(fēng)格的UI里畫法是在普通矩形的四個角上處理一下四個角的像素按圓角半徑的曲線來做判斷。嵌入式設(shè)備屏幕小圓角半徑通常取2到4像素就夠了。實戰(zhàn)中畫圓角矩形我一般直接用四條直線加四個小圓弧替代視覺效果很接近但代碼簡單得多。5.3 進(jìn)度條與數(shù)值顯示的組合拳進(jìn)度條是OLED界面上最常用的控件配合數(shù)值顯示可以做出非常直觀的效果。核心就是把當(dāng)前進(jìn)度映射到像素寬度void OLED_ShowProgress(uint8_t x, uint8_t y, uint8_t width, uint8_t percent) { uint8_t fillWidth width * percent / 100; OLED_FillRect(x, y, x fillWidth, y 7, 1); // 已填充部分 OLED_FillRect(x fillWidth 1, y, x width, y 7, 0); // 剩余部分 OLED_DrawRect(x, y, x width, y 7, 1); // 邊框 }percent取值范圍0到100width乘以percent再除以100就是一個整數(shù)乘除法完全避免浮點運算。注意填充時別把邊框覆蓋了先算好邊界或者先把邊框畫完再填充內(nèi)部。很多項目需要同時顯示進(jìn)度條和百分比數(shù)字。我的做法是把進(jìn)度條放在屏幕上半部分?jǐn)?shù)字顯示在進(jìn)度條右側(cè)或者正下方這樣用戶既能看到大致的完成度又能看到精確的數(shù)字。這類組合在充電管理、固件升級進(jìn)度提示里非常常見。5.4 動態(tài)數(shù)據(jù)刷新時的閃爍問題實測案例與解決閃爍問題的源頭是刷屏方式不對。如果你寫的顯示函數(shù)是先清屏再寫新值人眼就會捕捉到屏幕“黑一下再亮”。解決辦法就是前面說的雙緩沖所有內(nèi)容都在緩沖區(qū)修改修改完一次性Update。另外一個容易忽視的閃爍來源是I2C時序不穩(wěn)定。當(dāng)I2C總線上有其他設(shè)備或者總線過長、上拉電阻阻值不合適時波形畸變會導(dǎo)致SSD1306收到錯誤數(shù)據(jù)表現(xiàn)就是屏幕部分區(qū)域亂閃、亂碼。排查這個問題的思路是先用邏輯分析儀抓波形看地址應(yīng)答信號是否正常沒有邏輯分析儀的話就把其他I2C設(shè)備暫時摘掉看問題是否復(fù)現(xiàn)。很多“OLED顯示亂碼”的問題不是驅(qū)動代碼問題而是總線時序問題。6. STM32和ESP32平臺適配以及被問得最多的“卡死”問題6.1 STM32 HAL庫環(huán)境下的移植要點在STM32上I2C外設(shè)用CubeMX配置即可。要點有兩個時鐘頻率設(shè)置為400kHz這是SSD1306支持的上限另一個是I2C的地址模式選7位。CubeMX生成代碼后把上面的OLED_WriteCmd和OLED_WriteData里的HAL_I2C_Mem_Write參數(shù)的句柄改成你自己的hi2c句柄就行。STM32的HAL庫I2C有個特性就是HAL_I2C_Mem_Write是阻塞式的在函數(shù)返回之前CPU一直等著。這在調(diào)試階段沒問題如果項目還有大量其他任務(wù)建議用DMA方式或中斷方式發(fā)送避免阻塞太久的I2C傳輸拖慢整個系統(tǒng)。我實測在400kHz下全屏刷新1024字節(jié)大概需要25毫秒如果每100毫秒刷一次I2C占用的CPU時間約為四分之一這個占比需要評估是否影響其他任務(wù)。STM32系列的I2C外設(shè)踩坑老手都知道I2C模塊有所謂“死鎖”問題特別是遇上總線錯誤時I2C狀態(tài)機(jī)可能卡住。一般的恢復(fù)方式是調(diào)用HAL_I2C_DeInit再重新Init或者直接硬件復(fù)位外設(shè)。不過這種現(xiàn)象在新版HAL庫上已經(jīng)不常見了遇到時不用慌按總線恢復(fù)流程處理即可。6.2 ESP32 IDF框架下的移植差異與FreeRTOS注意事項ESP32 IDF的I2C驅(qū)動寫法跟STM32 HAL庫完全不一樣。IDF提供的是底層I2C master驅(qū)動用i2c_master_write_to_device這類API直接操作。移植OLED驅(qū)動時把寫命令和寫數(shù)據(jù)函數(shù)替換成對應(yīng)的I2C master寫操作即可void OLED_WriteCmd(uint8_t cmd) { uint8_t buffer[2] {0x00, cmd}; i2c_master_write_to_device(I2C_NUM_0, OLED_ADDR, buffer, 2, pdMS_TO_TICKS(100)); } void OLED_WriteData(uint8_t data) { uint8_t buffer[2] {0x40, data}; i2c_master_write_to_device(I2C_NUM_0, OLED_ADDR, buffer, 2, pdMS_TO_TICKS(100)); }注意IDF里的I2C_addr參數(shù)用的是7位地址格式不需要左移這和HAL庫正好相反移植時一定改對不然所有寫入都會得不到應(yīng)答。在ESP-IDF FreeRTOS環(huán)境下有個非常重要的問題I2C總線的訪問并發(fā)。如果你的OLED顯示函數(shù)可能被兩個任務(wù)同時調(diào)用必須在I2C訪問上加互斥鎖。否則兩個任務(wù)同時發(fā)起I2C寫總線數(shù)據(jù)交錯屏幕顯示錯亂還不說嚴(yán)重時會導(dǎo)致總線鎖死。我使用的一個常用做法是給OLED_Update函數(shù)加一個二值信號量保護(hù)任務(wù)里調(diào)用顯示接口前先獲取鎖結(jié)束后釋放。ESP32跑OLED還有個性能上的好處IDF的I2C驅(qū)動支持DMA方式直接把緩沖區(qū)數(shù)據(jù)交給硬件發(fā)送CPU可以在傳輸期間去處理其他任務(wù)。實測同樣刷新一幀DMA方式相比阻塞輪詢方式CPU占用率會明顯下降這對跑WiFi協(xié)議棧的項目來說意義很大。6.3 加了OLED函數(shù)就卡死這個問題的完整排查鏈路“加了OLED函數(shù)就卡死”是各類嵌入式群里的高頻問題。我仔細(xì)排查過幾次歸納出幾類典型的根因按從簡到繁整理一下排查步驟。第一步確認(rèn)卡死是在哪個位置。在被懷疑卡住的地方前后各加IO翻轉(zhuǎn)或串口打印看引腳是否翻轉(zhuǎn)、打印是否輸出。如果卡在HAL_I2C_Mem_Write內(nèi)部基本可以斷定是I2C總線通信異常。第二步檢查I2C地址。地址錯誤不會導(dǎo)致MCU死機(jī)但會導(dǎo)致總線無應(yīng)答如果超時設(shè)置不合適HAL庫在等待應(yīng)答時會長時間阻塞看起來就像卡死。正確地址是0x3C但傳給HAL庫的是0x3C左移一位的0x78。如果這里傳錯了I2C外設(shè)一直重試每次重試都很慢宏觀表現(xiàn)就是系統(tǒng)“卡住”。第三步確認(rèn)OLED初始化序列里有沒有長延時阻塞了中斷。某些錯誤的初始化命令會導(dǎo)致SSD1306內(nèi)部狀態(tài)異常表現(xiàn)為后續(xù)數(shù)據(jù)寫入無響應(yīng)。排查方法是注釋掉初始化函數(shù)直接寫顯存測試數(shù)據(jù)看屏幕是否顯示。第四步排查中斷優(yōu)先級沖突。在STM32上如果I2C中斷優(yōu)先級和滴答定時器或其他外設(shè)沖突特別是使用了HAL_Delay依賴SysTick萬一你屏蔽了中斷或者中斷嵌套沒處理好整個線程可能被卡在某個中斷等待里。OLED驅(qū)動本身一般不用中斷但CubeMX生成代碼里可能開啟了I2C全局中斷這時要確保中斷優(yōu)先級分組配置合理。第五步最容易被忽視的檢查你的OLED模塊電源穩(wěn)定性。OLED在刷大的圖片時電流波動明顯如果板子供電能力弱VCC跌落會導(dǎo)致SSD1306復(fù)位或進(jìn)入異常狀態(tài)。我遇到過一塊板子跑小界面一切正常一顯示全屏圖片就卡死排查到最后是2.5V的LDO帶不動OLED瞬間電流。換一個3.3V穩(wěn)壓器之后問題徹底消失。6.4 矩陣按鍵在OLED上沒反應(yīng)這種“偽故障”怎么判斷還有個特別高頻的問題矩陣按鍵接上去OLED顯示正常但按鍵在OLED上沒反應(yīng)。這個問題通常不是OLED的鍋而是按鍵掃描邏輯和顯示邏輯之間的調(diào)度問題。比如按鍵掃描放在主循環(huán)里但OLED的刷新函數(shù)里用了長時間阻塞的HAL_Delay導(dǎo)致主循環(huán)根本跑不到按鍵掃描。我的排查思路是先做一個“最小驗證”按鍵按下時直接翻轉(zhuǎn)一個LED看硬件和GPIO配置是否正常。如果LED能亮說明按鍵掃描本身正常問題出在任務(wù)調(diào)度。然后把OLED刷新放到定時器中斷里或者降低刷新頻率給主循環(huán)留出足夠的執(zhí)行時間。還有一種情況是按鍵消抖和OLED顯示用了同一個延時函數(shù)互相嵌套導(dǎo)致邏輯混亂。例如按鍵消抖用HAL_Delay(20)沒問題但如果OLED顯示函數(shù)里也有個大延時且按鍵狀態(tài)在中斷里掃描中斷頻繁觸發(fā)導(dǎo)致主循環(huán)饑餓界面上按鍵響應(yīng)自然就遲鈍。解決思路是分時復(fù)用按鍵掃描和界面刷新各自有固定的時間片互不干擾。7. 一些小眾但實用的進(jìn)階玩法繪圖函數(shù)之外的附加能力OLED驅(qū)動做到能顯示字符、中文、圖片、基本圖形已經(jīng)能覆蓋絕大多數(shù)項目需求了。但還有一些需求會在意想不到的場景里冒出來我把碰過的幾種玩法整理在這里。7.1 多級菜單的實現(xiàn)思路狀態(tài)機(jī)配合局部刷新OLED屏幕面積小菜單設(shè)計方案大多是“每屏只顯示一級菜單上下鍵切換選項確認(rèn)鍵進(jìn)入下一級”。實現(xiàn)這類菜單我推薦用函數(shù)指針數(shù)組加狀態(tài)機(jī)。每個菜單頁面是一個函數(shù)函數(shù)內(nèi)部負(fù)責(zé)繪制該頁面的所有元素同時返回按鍵選擇結(jié)果。狀態(tài)機(jī)根據(jù)選擇結(jié)果切換到下一個函數(shù)。局部刷新在菜單界面特別關(guān)鍵。切換菜單時的整屏刷新會產(chǎn)生清晰的黑屏閃爍嚴(yán)重影響體驗。我通常把菜單選中項高亮做成一個獨立函數(shù)當(dāng)選中項變化時只更新高亮矩形和選項文字區(qū)域不刷新整個屏幕這樣菜單切換非常順滑。7.2 OLED顯示實時波形把ADC采樣值可視化顯示ADC采樣波形這件事調(diào)試傳感器時太好用了。思路是維護(hù)一個環(huán)形緩沖區(qū)存儲最近N次ADC采樣值。每次刷新時清掉上一幀波形區(qū)域然后以時間為橫軸、采樣值為縱軸用畫線函數(shù)把相鄰采樣點連起來。我把采樣值映射到固定高度范圍時習(xí)慣先做歸一化。比如12位ADC采樣范圍0到4095屏幕顯示區(qū)域高度是32個像素那縱坐標(biāo)等于采樣值乘以32再除以4095。注意整數(shù)溢出問題建議先放大再用64位或者分步乘除。波形橫軸我是按128個像素長度滾動顯示的每次新采樣點來了整個波形左移一列新點畫在最后一列。這種效果看起來就像示波器一樣。7.3 動畫與開機(jī)Logo的兩種實現(xiàn)方式開機(jī)Logo最穩(wěn)妥的做法是在初始化后直接利用前文圖片顯示的方法把預(yù)存的1024字節(jié)數(shù)組寫入緩沖區(qū)并Update顯示1到2秒后進(jìn)入主界面。動畫則有兩種實現(xiàn)路線。路線一是預(yù)先生成多幀圖片數(shù)據(jù)按照一定時間間隔逐幀刷新優(yōu)點是畫面復(fù)雜精致缺點是占用Flash空間很大。一張128x64的圖片就是1024字節(jié)10幀動畫就是10KB對小型MCU來說負(fù)擔(dān)不小。路線二是程序化生成動畫比如利用三角函數(shù)或者粒子系統(tǒng)動態(tài)計算每一幀的圖形數(shù)據(jù)只更新變化的區(qū)域。這種方案占用的內(nèi)存極小但在主頻低的MCU上需要控制計算量。7.4 低溫環(huán)境下的OLED顯示問題你可能會遇到不同類型OLED屏在低溫下的表現(xiàn)差異很大。我在北方冬天室外測設(shè)備時發(fā)現(xiàn)某些OLED模塊在零下10度以下刷新速度明顯變慢甚至出現(xiàn)殘影。這是因為OLED的驅(qū)動芯片在低溫下的電荷泵效率變低導(dǎo)致像素充電不充分。解決措施也不復(fù)雜給屏幕區(qū)域做局部保溫或者提高SSD1306的對比度。對比度命令0x81搭配的值在低溫下可以適當(dāng)調(diào)高實測能改善顯示效果。還有一招是把顯示內(nèi)容做成“多刷新幾遍”因為低溫下OLED像素保持時間變短時不時整屏重復(fù)刷新可以維持顯示穩(wěn)定。8. 踩坑實錄從手寫驅(qū)動到穩(wěn)定量產(chǎn)我總結(jié)的十六條經(jīng)驗驅(qū)動代碼寫過幾版之后踩過的坑基本都化成經(jīng)驗了。下面這十六條是我個人認(rèn)為最有代表性的按踩坑頻率和嚴(yán)重程度大致排個序。I2C地址該不該左移不同庫不同規(guī)矩。HAL庫要左移一位IDF不要Arduino Wire庫要用0x3C本體。移植前先確認(rèn)靠猜必翻車。上電后立刻初始化大概率失敗。SSD1306需要幾十毫秒的穩(wěn)定時間。初始化前至少延時100毫秒別嫌慢。不開啟電荷泵屏幕永遠(yuǎn)不亮。0x8D加0x14是必須的。很多“新屏點不亮”的案例最后都是這個命令漏了。頁地址模式下列寫滿不會自動切頁。按頁循環(huán)發(fā)送是穩(wěn)妥方案。別指望一次寫1024字節(jié)就完事。顯示字符串務(wù)必檢查邊界。字符顯示函數(shù)里加坐標(biāo)越界判斷否則字符串靠近右邊界時數(shù)組越界會悄悄踩壞內(nèi)存。局部刷新前先確認(rèn)涉及哪些頁。y1到y(tǒng)2范圍可能跨頁算頁范圍時用y1/8到y(tǒng)2/8別漏了邊界的頁。緩沖區(qū)清空放Clear函數(shù)別放Update里。放Update里會導(dǎo)致局部更新失效。I2C加上拉電阻。很多STM32內(nèi)部上拉強(qiáng)度不足外部上拉4.7k是比較合適的。不加上拉的話屏幕時而正常時而異常讓你懷疑人生。時鐘頻率別輕易上1MHz。SSD1306最高支持400kHzI2C總線頻率過高會導(dǎo)致通信不穩(wěn)定。取模工具設(shè)置必須和顯示函數(shù)匹配。逐列式、縱向取模是SSD1306常用的設(shè)置。取模方向錯了顯示出來的漢字就是亂的。中文取模數(shù)據(jù)別放錯Flash空間。STM32的const數(shù)組默認(rèn)在Flash不會占用RAM放心用。刷屏不要用memset清Buffer后直接Update。如果只改了半個屏幕的數(shù)據(jù)memset會把其他區(qū)域的像素全清掉畫面閃爍非常嚴(yán)重。HAL_Delay會在中斷里出問題。如果I2C使用中斷發(fā)送并且中斷優(yōu)先級比SysTick高在中斷回調(diào)里調(diào)用顯示函數(shù)時要格外小心。電源紋波會影響顯示穩(wěn)定性。OLED的電荷泵對電源噪聲敏感供電盡量讓OLED模塊的VCC和邏輯電源分開走。用邏輯分析儀抓波形是最直接的排查手段。比瞎猜效率高得多I2C波形一看就知道地址對不對、應(yīng)答有沒有。給自己留一個OLED_Debug接口。專門用來顯示運行狀態(tài)、變量值調(diào)試完不用刪生產(chǎn)版本里留著這個能力后續(xù)維護(hù)會讓你非常感謝當(dāng)時的決定。這些經(jīng)驗沒有一條是從芯片手冊里直接看出來的都是實際項目里一步步試出來的。特別是第16條我現(xiàn)在每個嵌入式項目里都一定會保留一個DEBUG顯示頁面平時隱藏需要時通過按鍵或者命令調(diào)出來省下的排查時間非常可觀。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天婷婷综合亚洲亚洲| 五月天天综合| 日hao1区| 激情婷婷狠狠干综合| 可以看的AV网站| 色播播五月天| 五月婷婷五月天天| 久热九九| 天天肏高清在线| 色欲天天综合网| 五月色影院| 这里只有精品视频在线观看免费| 97人妻碰碰碰久久香蕉| 变态另类色图| 九色99视频| 激情色五月天| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 欧美激情性做爰免费视频| 艾小青av| 天天婷婷操| 国产黄色一级片| 色婷婷呢狠禁久禁| 亚洲熟妇AV乱码在线观看| 五月综合视频| 影音先锋777xfplay色资源网站| 婷婷丁香社区网| 色婷婷亚洲在线观看| 婷婷视频网| 婷婷五月另类网站| 天天做天天爱天天爽综合网| www夜夜| 久久网日本| 日本天堂网站99| 婷婷97狠狠成人网站| 欧美色色色色色色色| 天天搞天天色综合| 亚洲狠狠干| 婷婷五月天亚洲精品| 91热久久| 色五月丁香总合网| 色婷婷五月基地在线| 亲子乱AV一区二区三区下载| 婷婷久久午夜网| 亚洲第一成人无码A片| 97超碰99热99| 综合伊人久久| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | Av中文在线| 色色欧美。| 欧美黑人巨大性生话| 日本一级黄色电影| Aaa久久| αv中文字幕在线观| 综合五月天| 99精品在线观看| 五月婷婷激情| 天天肏天天舔AV| www.99色在线| 色五月超碰| 久久东京热婷婷五月| 亲子乱AV一区二区三区下载| 久久狠狠色| 五月婷成人网| 婷婷五月六月丁香| 天天天干夜夜夜操| 在线观看视频1区| www.9色色色| 久9热在线免费观看| 欧美六月婷婷| 久久久久9999| 99综合激情久久精品久久| 婷婷丁香五月综合激情小说| 在线成人网址| 五月丁香婷婷欧美色图视频五月丁香777电影 | 九热视频精品| 国产裸舞福利资源在线视频| 五月天色婷婷伊人网| 91人人爽久久涩噜噜噜| www.夜夜操.com| 2018国产大陆天天弄| 亚洲av| 亚洲国产网址| 久久婷婷五月综合97色一本| 天天插AV丝袜中| 色色色综合| 婷婷五月婷婷| 婷婷天堂视频| www.俺去也com| www.久热| 成人草榴视频| www.激情.com.| 激情五月婷婷中文字幕| 99精品网| 丝袜人妻| 婷婷色五月天在线观看| 在线观看国产高清视频免费网站| 日韩av在线免费观看| 久久视这里只有精品| 五月婷在线色视频| 日韩AAAAA| 激情五月天婷婷播播久久综合91| 婷婷丁香色五月亚洲| 亚洲久久婷婷丁香五月天| 99乱视频| 久久精品无码一区| 九月婷婷综合八月丁香在线观看| 99乱视频| 热久久色| 高清无码视频网址| 99cao婷婷| 人妻精品在线| 久久久久久久,99精品视频| 激情宗合网激情五月天| 亚洲欧美成人在线| 国产精品国产| 亚洲国产精品VA在线看黑人| 99色综合久久| 啄木鸟黑丝一区二区| 天天爽天天| 久热99| 啪啪色激情五月天| 久久66精品| 婷婷婷婷婷婷婷五月丁香| 五月丁香婷婷老司机| 五月天日日操夜夜操| 五月天亚洲色| 欧美激情-区二区三区| 激情文学天天| 色综合色综合网| 9热视频在线观看| 五月播播| 激情五月婷婷她| 久久这里只有精品无码| 精品亚洲国产成AV人片传媒| 色五月天综合| 影音先锋91在线资源站| 天天色官网| 99热| 天天成人综合| 日本操天堂| www,五月天com| 丁香五月先锋| 亚韩在线视频| 久久机热/这里只有精品| 色狠狠999综合| 色99网站| 啪啪激情综合| 五月丁香六月激情综合| 亚洲激情五月婷婷日日| 校园春色亚洲色| 天天操夜夜夜拍拍拍| 99在线精品观看99| 六月色日韩| 丝袜大香蕉| 色色色婷婷五月天| 日韩丰满少妇无码内射| 日日爽天天| co超碰在线观看| 五月天色婷婷视频| 婷婷亚洲在线| 久久艹99| 激情综合网之激情五月| 日本V在线观看不卡视频网站| 高清无码一区二区三区四区| 天天色五月婷婷91久久久久久久| 五月天婷婷操逼视频| 久久久久99精品成人网站| 亚洲色99| 《诡秘之主》在线观看| 色婷婷网大全在线| www.狠狠| 蜜臀av无码久久久久久久久 | 99人人干人人操| 久久人妻视步| 亚洲午夜av| 久久激情五月| 99乱视频| 色婷婷成人丁香| 亚洲精品无人区| 99热只有这里才是精品| 欧美va视频| 丁香五月社区| 91人碰| 91人妻PORNY九色大屁股| 最近中文字幕大全免费版在线| 六月色色综合| 成人五月丁香社区| 无码字幕中文| 天天干电影| 天天干一干| 囯产精品一品二区三区| 大香蕉五月丁香| 亚洲激情AV| 五月五婷婷| 伊人久久大香蕉网| 亚洲综合色婷婷文学| 成人在线综合| 婷婷伊人久久综合| 无码se| 综合福利网| 强伦轩人妻一区二区电影| 国产精品视频| 视频一区二区在线| 婷婷中文字幕| 大香蕉啪啪| 99热视精品| 九九99热久久精品66中文字幕| 色五月激情五月| 亚洲 五月 婷婷 成人| 色五月婷婷av| 狠狠色丁香婷婷| 五月色综合| 五月天激情国产综合婷婷| 婷婷色婷婷亚洲成人| 精品AV无码超碰| 偷拍91九色| 五月丁香网中文字幕| 精品人妻在线| 久久婷婷桃花五月天| 日本五月婷婷| 亚洲成人AV在线观看| 99爱视频在线免费观看| 五月丁香婷婷啪啪| 99视频精品在线| 五月激情丁香久久综合网| 丁香五月婷婷久久久| 日产精品一线二线三线芒果 | 五月丁香婷婷伊人日韩| 嫩草AV久久伊人妇女超级A| 激情网婷婷五月天| 欧美婷婷五月天| 国产裸舞福利资源在线视频| 婷婷在线播放av| 亚洲视频1区| 少妇搡BBBB搡BBB搡毛茸茸| 91操人视频| 五月亭亭直播| 五月天成人网在线观看| 色视频五月天| 婷婷五月综合激情免费| 丁香六月激情综合啪啪| 日日夜夜天天爽| 丁香久色| 久热最新视频| 九六五月天婷婷| 永久思思热在线| 人人摸人人操人人爽| 婷婷五月综合免费在线| 久久天堂色| av不卡网站| 九月婷婷在线视频| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 国产午夜精品AV一区二区麻豆 | 免费无码毛片一区二区A片| 这里只有精品免费视频| 少妇人妻人伦A片| 99久在线精品99re8热| 色五月婷婷色| 九九AV| 久久人妻精品| 久久精品国产精品| 色婷婷AV久久| 香蕉婷婷色五月| 婷婷六月丁香欧美视频在线| 丁香婷婷五月综合| 五月丁香黄色视频| 少妇搡BBBB搡BBB搡毛茸茸| 搡BBBB搡BBB搡18| 日韩黄在免| 伊人大香蕉爱聚| 超级碰碰99| 色婷婷另类| 久久婷综合网| 久久这里只有国产| 五月婷婷天| 99热都是精品| 天天做天天爱天天爽| 人人操av| 卡视频1区2区| 婷香五月网在线| 天天摸天天舔天天爽| 激情五月丁香色婷婷| 99秘 在线| 色5月婷婷| 99激情视频| 翔田千里 50岁 无码| 天天肏夜夜肏| 日韩丁香涩| 91综合色噜噜| 色八月婷婷| 五月天激情日色在线| 婷婷基地爱| 五月天综合激情网| 丁香婷婷成年| 丁香六月婷婷激情综合| 操人妻视频91| 激情第四色| 成人九九视频| 91天天操天天干天天射| av婷婷丁香| 色婷婷88| 色色色色色爱| 五月丁香色色网| 五月九九综合| 婷婷五月天激情综合婷婷五月天激情综合| 婷婷五月天第三页| 国产精品涩涩涩视频网站 | 五月天婷婷网站| 五月婷婷丁香社区| 成人做爰黄A片免费看直播室男男| 久久久免费图片视频| 婷婷五月丁香久久| 俺也去在线视频| 亚洲色综合| 九九精品免费视频99| 性欧美日本| 互月天综合| √天堂资源在线人妻熟女| 精品人妻伦九区久久AAA片| 久久综合色五月| 中文网AV| 五月丁香亭亭操逼| 日韩日比视频| 激情综合色婷婷六月天| 乱乱av| 人妻AV在线| 亚美欧色影院| 久久婷婷六月综合国际| 五月婷伊人| 激情综合五月天| 久久99久久99久久99| 久操热| 26uuu成人网| 亚洲深喉aV| 亚洲成人影视在线观看| 大香蕉Av在线| 天天干夜夜想| 五月丁香婷婷激情爱爱| 婷婷五月天天aV| 六月婷婷色综合| 九九色播五月丁香| 五月天婷婷综合网| 成人片在线免费看| 精品久久艹| 亚洲深喉aV| 丁香五月婷婷啪| 丁香花五月天激情| 秋霞A V毛片| 日日干日日| 婷婷桃色网| 能看的av片| 五月天偷拍| 丁香婷婷六月婷婷六月婷婷六月婷婷| 丁香婷婷深情五月亚洲| 婷婷五月丁香综合亚洲| 99无码视频| 99五月丁香丁| 九九在线视频| www.五月激情红色| 1024AV视频| WWW.色婷婷.COM| 懂色av粉嫩av蜜臀av| 婷婷久久国产视频| 五月天色软件| 天天天干夜夜夜操| 久操福利| 99热精品在线播放| 伊人六月无码视频| 色五月综合网站| 久久性爰视频这里只有精品| 色婷婷在线影院| 另类激情首页| 婷婷久久亚洲| 被强行糟蹋的女人A片| 激情婷婷五六月天| 久久密臀婷婷| AV在线观看网站| 激情综合婷婷| 久久婷婷五月综合色区| 激情六月婷婷| 99综合视频一体| 久99| 五月丁香六月欧美综合网站| 久久性爱视频| 香蕉婷婷五月| 婷婷少妇激情| 啄木鸟黑丝一区二区| 伊人五月婷| 综合噜噜| 久久99热免费| 亚洲av成人电影在线观看| 成人丁香色| 狠狠搞五月天| 色九月综合网| 五月开心网| SESE无码AV| 九月综合| 日B日潘金莲BB| 狠狠干在线| 丁香婷婷久久| 九色porny在线观看激情四射| 精品人妻在线| 99精品无码网站| 激情亭亭五月| 99燥99日| 五月天六月色| 色五月天综合网| 五月开心婷婷网| 亚洲精品一二三| 日本久热| 一起草性爱不卡视频| 成人午夜无码视频| 免费成人中文字幕| 96精品成人无码A片观看金桔 | 国产美女精品| 九九五月天| 99色嘟嘟精品网站| 五月色综合| 99热国产免费| 狠狠草综合网| www.日日日.com| 婷婷终合色图| 婷婷婷五月香蕉| 色五月婷婷五月天| 色婷婷免费观看| 天天爽夜夜爽| 婷婷激情六月中文| 色五月丁香总合网| 99热99在线| 男人天堂AV在线一区二区| 99久久9| 99热成人| 综合网五月| 玖玖精品视频99| 97在线精品| 99玖玖人人| 色色五月婷婷网| 久久九九国产精品怡红院| 极品另类| 天天噜| 99er视频在线| 五月丁香六月激情综合在线| 开心五月激情站| 激情五月开心五月在线视频| 超碰av在线| 9 1在线视频| 婷婷五月天桃花网| 五月婷婷色欲| 538在线精品| 思思热在线观看| 婷婷综合久久| enecarbon-materials.com污K127封锁请涟系@wip1688 | 婷婷六月综合在线| 丁香婷婷五月天色综合| 快乐激情五月色婷婷| 日本精品九九九| 色色丁香色五月| 黄色激情网站在线观看| 九月婷婷人人操人人舔人人爱| 99精品视频在线观看| 99这里有精品视频| 久久99热这里只频精品6学生| 色婷丁香| 五月婷婷五月| 精品国产一区二区三区四区阿崩 | 成人综合网站| 成人五月丁香花| 免费无码毛片一区二区A片| 婷婷五月天激情四射| 丁香五月在线播放| 99国产精品久久久久久久久久久| 国外亚洲成AV人片在线观看| 日韩av免费版| 4399伦理午夜| 第四色婷婷日本| 婷婷伊人綜合中文字幕小说| 精品国产va久久久久| 久热这里只有精品3| 丁香六月婷婷综情欧美| 亚洲五月丁| 亚洲免费99| 欧美25p| 色色色婷| 五月丁香激情综合| www。五月,com| 中文字幕婷婷在线| 五月婷婷丁香大陆免费| 操一操干一干| 九月丁香久久网| 久热视频97AV在线观看| AV在线大香蕉| AV五月丁香| 欧美一级色| 丁香五月亚洲激情婷婷射| 秋霞黄色一级久久| 五月丁香另类网| 亭亭五月丁香五月天激情| 99自拍视频网站| 婷婷五月天伊人网| 九九九激情网| 激情婷婷色色| 开心五月色婷婷综合开心网| 五月综合激情| AA片在线观看视频在线播放| 97人碰人操| 五月丁香花激情综合网| 亚洲无码成人性爰网| 亚洲婷婷免费| 婷婷基地爱| 日曰躁夜夜躁2026| 婷婷色五月丁香六月欧美啪| 2025天天爽天天摸| 九九操操| 玖玖伊人网| 婷婷激情五月| 色亚洲激情| 99热9| 超碰九热| 天天插综合在线| 成人丁香五月天| 天天肏视频| 影音先锋91网站在线观看| 亚洲操B视频| 婷婷激情五月天激情在线| 六月丁香久久| 亚洲性爱AV在线| 国产ava| 天天擼久久擼在线| 色五月播五月| 国产在线黄色| 久草热在线视频| 国产乱妇乱子在线播视频播放网站| 日韩在线五月天婷婷| 97干在线视频| 日韩日比视频| 99热中文字幕久久| 欧美性猛交XXXX乱大交极品| 香蕉综合网| 五月天婷婷久久| 日本色啪| 丁香五月激情视频在线| 久久草大香蕉| 久久精品婷婷| 五月丁香无码| 99狠狠色| 午夜婷婷久久 | 欧美日韩中文国产一区发布| 九九香蕉网| 婷婷狠狠97| 丁香五月婷婷综合激情哟哟哟| 99色看这里只有精品| 五月婷婷久久大香蕉| 国产女人十八水真多1| 久久五月天黄色五月天色网址| 久久99热这里只有精品| jiqingtaose五月天| 色综合久久99色| 97碰成超视频免费视频| 激情综合五| 丁香五月婷婷高清| 激情伊人五月天| 国产亚洲AV人片在线| 婷色成人| 国产一区二区av免费| 五月天六月天| 青柠影视免费高清电视剧| 五月开心婷婷中文字幕| 亚洲超碰在线| 六月色狠狠色| 人妻激情久久| 色五月激情婷婷| 伊人激情综合| 人人摸人人| 97色图片中文字幕视频在线观看| WWW,五月| 综合五月婷婷| 欧美婷婷| 激情五月婷婷色播网| 成人国产网| 99精吕视频在线观看了| 五月天伊人久久久久| 丁香五月婷婷偷拍| 久操热| 激情五月综合网| 高潮毛片遮挡费高一百度| 九九热免费视频| 人妻精品在线| 色狠狠999综合网| 日日做A爰片久久毛片A片英语| 五月色 亚洲| 羞羞嫩草视频| 色碰碰| 丁香无月在线观看| 久久久国产精品黄毛片| av五月天婷婷丁香| 91婷婷在线| 色情综合网| 97色色色视频| 久久资源网五月婷| 在线理论片| 色综合激情| 天天久综合网永久入口17v | 亚州激情网| 五月停性愛| 色婷婷国产精品综合在线观看| 开心五月婷婷激情| 日本色99网站| 九久9精品| 玖操97| 大香蕉 伊人夜| 日本三级日本三级99| 狠狠色噜噜狠狠狠888了| 午夜日韩久久久网站| 五月激情婷婷丁香| 丁香婷婷色情社区成人小说| 人人爱操| 99视频在线啪| 久色精品| 婷婷五月丁香基地| 人妻内射视频| www.狠狠操.con| 操比激情五月综合| 婷婷D区| 99热爱爱干干日| 天天日婷婷| 九九色精品| 韩日AV片| 亚洲视频一区| 综合网亚洲| 深爱激情丁香| 五月丁香色播| 天天日日夜夜爽| 丁香六月伊人| 婷婷五月俺要去| 久久久99视频| 高清国产一级婬片a免费| 婷婷五月影院| 91欧美| 无码色| 深爱1激情网| 欧美日本综合网| 激情图片99| 五月婷婷性爱网| 狠狠狠狠狠狠| 五月激情婷婷丁香| 武则天精品久久| 亚洲狠狠干| 天天日夜夜草进麻麻的子宫| 五月天另类小说亚洲| 九九大香视频| 久久婷综合网| 色九九丁香九月色九九色| 懂色av粉嫩av蜜臀av| 丁香六月婷婷| 天天干夜晚夜操| 色婷婷婷婷| 五月激情天| 天天搞天天色综合| 亚洲VA在线| 丁香伊人综合| 极品 少妇 内射| 六月丁香啪| 五月色婷婷亚洲| 婷婷五月丁香综合| 超碰免费成人| 91九色国产| 午夜色婷婷| 五月天堂婷婷| 久久久这里都是精品| 亚洲乱码在线观看| 九色91国产| 亚洲成人网在线观看| 色天使色婷婷| 99久在线视频| 异能之下短剧免费观看全集| 色五月激情视频在线综合| 久热伊人| 欧美日韓成人亚洲精品另类| 五月 丁香 欧美| 亚洲熟妇AV综合网五月丁香伊人 | 狠狠五月天激情| 日本五月视频| 激情综合五| 超碰人人99| 天天综合 99久久婷婷| 亚洲色色五月天| 最新久久网址| 五月婷婷偷| 激情五月婷婷在线区| 天天添天天摸天天天天做| 狠狠插狠狠| 久久亚洲激情五码| 色呦呦美女| 色香欲综合| 桃色成人网| 亚洲人操亚洲人| 亭亭玉月丁香| 97干在线| 五月婷婷无码专区| 丁香五月在线观看| 婷婷色情网| 伊人激情| 97偷拍在线视频| 五月天成人综合| 在线五月色播| 怡红院视频| 欧美久久婷婷| 丁香情色五月| 五月婷婷色影院| 婷婷九月激情| 五月丁香六月激情在线| 婷婷五月情| 婷婷桃色网| 丁香婷婷五月激情| site:ornaments52.com| 99爽视频| WWW嗯嗯啊啊啊啊| 久久九九中文字幕| 婷婷五月精品在线| 婷婷五月激情图片| 超碰婷婷色| 久久网日本| 欧美成人精品一区二区| 色五月综合在线| 91九九热| site:esunnet.com| 99男人的天堂| 精品自拍99| 九九热在线亚洲免费视频| 九九精品在线观看视频6| 久久这里只有精品8| 99在线爽| 六月婷婷网站| 九九在线精点品| 久久天堂婷婷五月| 婷婷激情五月综合丁| 五月丁香婷婷啪啪| 丁香五月天婷婷91| 五月丁香婷婷人体| 色999五月色| 色婷婷丁香九月| 五月花亭亭| 婷婷五月天色| 色婷视频| 夜夜资源站| 精品国产a| 超碰renrenai| 天天综合精品| 婷婷综合久久| 网色99| 六月婷婷视频| 韩国天天婷婷| 五月丁香婷婷激情图片| 五月丁香好婷婷A片网| 激情婷婷五月| 超碰人人射| 殴美综合激情五月天免费视频| 久久看九九90| 第四色婷婷五月| 欧美性做爰大片免费看办公室| 婷婷色中文字幕| 丁香五月在线自慰| 六月丁香狠狠爱| 天天爱夜夜爽| 操b视频在线观看一区二区| 麻豆五月丁香婷婷| 少妇性BBB搡BBB爽爽爽视頻| 婷婷97狠狠干| 啪啪一区| 久久99热这里只有精品23| 久久激情网| 天天人人综合| 国产亚洲99久久精品| 人人人操Av| 狠狠狠狠狠狠| 538在线| 91日韩在线| 思思99精品视频| 伊人激情| 婷婷播播五月天| 五月丁香综合精品欧美| 99热这里只有精品最新网址| 九九精品丁香花| 色五月激情婷婷| 色婷婷性爱| 丁香五月婷婷五月天| 亚洲超级碰| 色综合中文| 婷婷九月丁香| 国产亚洲在线观看| 超碰AAAAAAV| 九色亚洲| 丁香五月六月婷婷综合| 色噜噜狠狠色综合网| 婷婷色五月激情| 天天色综合天天| 欧美精品中文字幕亚洲专区| 五月婷婷免费| 欧美色色色色色色色色| 26UUU欧美激情一区二区| 丁香五月色色| 99成人| 成人精品99| 97色婷婷在线观看| 99这里| 天天干夜夜欢| 第四色五月婷婷| 亚洲激情五月| 激情色情五月天| 六月激情丁香一道本7777| 啪啪激情综合| 五月亭亭六月激情| 国产婷婷五月| 日狠狠| 久热这里只有精品在线| 丁香五月综合激情啪啪| 大香蕉婷婷| 色色色9| 色综合婷婷| 中国丰满熟女A片免费观| 综合激情站| 丁香色五月婷婷17C| aaa久久久| 变态另类9| 激情纯色婷婷五月天在线不卡视频| 激情文学 综合 九月| 99综合视频一体| 丁香激情婷婷网| 色爱综合网| 婷婷9月天| 久久久性爱视频| 丁香五月欧美激情| 婷婷成人网五月天| 亚州激情九月| 国产欧美熟妇另类久久久| 欧美五月丁香| 久久婷出差欧美色两性综合网| 日韩无码乱轮| 国产FREESEXVIDEOS性中国 | 99re这里只有精品99| 亚洲黄网在线| 婷婷五月色| 五月婷婷六月丁香五月| 色欲日日躁| 色玖玖综合网| 色色综合视频| 丁香五月天激情婷婷丁香六月| 久久99久久久久久久噜噜| 免费观看的av| 任你爽免费视频| 天天爽天天摸人妻综合网| 五月丁香六月婷婷,婷| 懂色av蜜臀av粉嫩av永陈冠希| 202丰满熟女妇大| 草一草avb| 五月婷婷激情综合网| 五月色丁香国产在线视频| 人妻综合网| 激情五月天福利| 婷婷色情 | 丁香五月婷婷基地| 久草A片| 丁香六月婷| 啪到高潮激情丁香五月| 五月天婷婷激情小说| 99色色爰| 丁香九月久久| 国产脫衣舞一区二区三区| 久久五月天丁香| 色综合77777| 亚洲情综合五月天| 久久久久人妻| 久久草大香蕉| 天天操综合网| 97人人草| 99久re热视频精品98| 天天操中文字幕| 亚洲无码99| 婷婷色五月天在线| 国产综合网在线| 久久人妻视步| www.99情趣网| 五月婷婷二月丁香| 天天日,天天射,天天舔| 亚洲 五月 婷婷 成人| 欧美97p| 亚洲五月综合色播| 丁香婷婷免费| 先锋资源996| 插插插色综合网| 五月丁综合在线观看| 丁香开心深爱| 天天射天天射一道本日本社区 | 3www激情| 亚洲天天综合| 欧美激情综合五月色丁香| 久播影院免费观看电视剧大全最新网| 思思精品久久艹| 丁香婷婷色五月合集| site:publishdd.com| 91精品国产综合久久密臀| 第一区久久网站| 秋霞三及片| 婷婷亚洲欧美丁香五月| 五月天六月色| 成人一级片| 人人摸人人搞| 国产又爽又猛又粗的视频A片| 欧美大片免费播放器| 五月丁香本色在线观看| 五月丁香色婷| 深爱激情五月婷婷| 婷婷刺激综合| 五月婷婷啪啪| 五月天综合网| 狠狠爱丁香婷| 久99在线视频| 色五月激情问网站| www.激情五月天com| 九九热这里| 91色久| 久久AV无码精品人妻系列试探| av操B网站| 九九色院| 亚洲婷婷丁香五月在线| 天天添天天摸天天天天做| 九九九九这里只有精品| 99热这里都是精品| 中文字幕网伦射乱中文| 99操不停| 中文字幕成人| 丁香五月婷婷激情视频播放| 免费视频99| 激情五月天婷婷丁香| 六月婷婷毛片| 国产脫衣舞一区二区三区| ri电影在线| 欧美色色网| 综合激情站| 丁香五月停停av| 色综合婷婷| 丁香社区婷婷五月| 久色网址| 亚洲欧美综合7777色亭亭| 久久9热| 五月天色综合服务平台| 无码色| 搡BBBB搡BBB搡五十| 色五月婷婷激情基地| 色七色九九| 欧美色色色色色色| 欧美叉叉叉BBB网站| 久久丝袜婷婷| 这里只有精品在线免费视频| 五月婷在线观看| 色色色色色色综合网| 另类专区在线| 少妇人妻综合色6699| 97在线精品| 人人操婷婷| 怕怕av| 婷婷激情在线| 九九久久9 9在线观看| 国产精品久久久久久白浆色欲| 97五月天婷婷| 婷婷综合在线| 99热精品观看| 思思热久久久在线| 99综合| 激情五月天啪啪| 色天天综合| 国外亚洲成AV人片在线观看| 91精品人妻少妇无码影院| 99性感视频| 热九九精品| 日本久久婷| 综合XX网| 午夜在线成人网站免费观看| 欧美激情五月天在线观看| 99热免费精品| 在线看黄色| 99视频在线精品免费观看2| 亚洲欧洲中文日韩久久AV乱码 | 99精品成人无码A片观看金桔| 色综合综合色| 五月婷婷影院| 久久99免费视频网站| 99热精品在线在线| 亚洲无码另类| 色色丁香五月天| 五月婷婷日本| 亚洲综合激情五月久久| 91av无码| 99久久玖玖| 国产av网| 五月婷婷人妻| 久热99中文字幕| 九九这里精品| 国产成人精品一区二三区熟女在线 | 久草九一| 99这里只有精品在线观看| 中文字幕丰满孑伦无码专区| 天天操夜夜啊| 伊人五月天| 狠狠狠婷婷五月综合| 亚洲色五月婷婷| 蜜臀AV在线成人| 五月天激情国产综合婷婷| 五月婷婷性爱| 99色在线视频| 婷婷基地成人五月天| 婷婷五月色| 五月天堂婷婷| 超碰免费成人网站| 精品九九视频| 在线免费视频caop| www激情com| AV免费在线网站| 99热99美国在线观看| 婷婷激情人妻| 色五月综合网| 99热6这里只有精品6| 国产又粗又大又爽又黄| 婷婷五月丁香色情| 丁香操逼| 我去色色网五雨天| 色婷五月天| 99热色精品| 99热这里只有国产精品| 久久久潮喷-久久久九九-成人AV| 丁香色五月天| 久久九九玖玖| 丁香六月婷| 五月婷婷伊人久久| 亚洲黄色av网站| 97干97色| 开心五月婷婷六月丁香| 91九九九九九九| WWW.桔色成人.COM| 深爱五月月天| 五月丁香综合精品欧美| 天天天天操| 婷婷五月天成人网| av一级棒av| 色噜噜狠狠色综无码久久合欧美 | 中文字幕日本最新乱码视频| 天天综合亚洲| 欧美六月| 97超碰,人人舔,人人操,人人摸| 色婷婷裸体色性在线| 婷婷97碰碰| 熟妇人妻中文字幕无码老熟妇 | 五月丁香| 99亚洲色| 在线中文字幕av| 江苏少妇性BBB搡BBB爽爽爽| 丁香婷婷色五月激情综合| 婷婷综合五月| 婷久久高清| 五月色色色| 男女久久婷婷五月天| 色情婷| 精品夜夜澡人妻无码AV| 亚洲精品国产精品乱码视99| 天天做天天爱天天搞| 五月激情四射网站| 99视频久久| 丁香婷婷六月在线资源观看| 超碰免费99| 91狼友视频在线观看| 久久久婷婷婷| 99免费视频网| 中文字幕婷婷五月天| 久久一操| 99精品偷自拍| 天天干天天操天天射| 五月婷婷co.m| 五月丁香色色| 97人人操人人拍| 超碰久热| 色婷婷a v| 99色在线观看视频| 99热99ai| 五月天婷婷AV| 性爱激情综合网| 色色99| 开心婷婷中文字幕| 伊人狠狠综合| 色五月成人婷婷| 丁香五月婷婷激情四射| 波多婷婷久久| 午夜不卡久久精品无码免费 | 五月激情丁香六月狠狠干| 久久影视婷婷五月| 久久婷婷五月天丁香| 五月激情天| 五月综合激情| 婷婷久久色| 婷婷五月六月激情| WWW.桔色成人.COM入口| 九九色精品| 午夜九九九九九九九九九九九九九| Www.sesese丁香| 午夜少妇在线观看视频| 91一起操| 五月婷婷色综图片| 激情五月天婷婷五月天| 久久精品66| 久久婷婷五月综合色播| 丁香五月婷婷亚洲色图| 狠狠丁香| 激情六月婷婷| 神马欧美精| 狠狠九九婷婷韩| 九热av| 伊人大香蕉爱聚| av网址在线播放| 99免费超碰在线| 嫩草AV久久伊人妇女超级A| 综合网激情| 成人丁香五月天| www婷婷| 亚洲中文字幕AV| 久久六月天| 色五月天堂| 成人 在线 日韩| 婷婷丁香熟妇综合网| 日韩综合天堂| 91男同| 91久久久久久久久18| 97在线碰| 五月天婷婷在线播放| 丁香五月色情| 高清无码入口| 97干在线视频| 成人做爰A片免费看网站找不到了 噼里啪啦在线观看免费完整版视频 | 操操操www.com| 激情综合国产| 久久9RE热视频精品98| 97超喷视频在线观看| 久久久精品免费啪啪国| 五月丁香久久综合91| 五月婷视频| 久久精品一区二区三区四区| 成人无码精品1区2区3区免费看 | 国产99久久久国产精品免费看 | 午夜激情五月天| 五月婷婷性| se影音资源在线观看| 激情丁香五月天| 国产色网站| 综合久久婷婷| 99ri视频| 在线中文AV| 伊人影院久久网| 超碰97免费在线| 色情五月综合婷婷| 色情五月丁香婷婷网| 色色色欧美色色| 婷婷五月天第三页| 成人av中文字幕| 丁香五月偷拍| 黄色国久久| 中文字幕亚洲-区久久99婷婷| 大香蕉九九热| 久久精品爱爱| 毛片新网地| 色99色| 亚洲激情AV| 熟女少妇内射日韩亚洲| 日韩 mm 不卡| 五月婷婷激情网| 欧美性爱特黄一级aaaassss| www99热| 五月婷婷综合网| 99免费超碰在线| 日本色色网站| 精品色情一区二区三区四区| 五月婷导航| 最新久久网址| 欧美顶级少妇做爰HD| 激情丁香五月AV| 久久久久久久丁香五月天婷婷| 99综合99| 精品女人九九九| 河北真实伦对白精彩脏话| 婷婷五月天综合AV| 亚洲avjiujiur91| 亚洲五月停停| 五月婷婷综合网| 性爱人人网| 丁香婷婷免费| 激情 婷婷| 欧美性生交XXXXX无码小说| 婷婷爱五月| 色欲日日躁| 黄网免费看| 亚洲传媒在线观看| 一区色色色色网| 色五月六月| 天天爽天天爽| 日本人人干| 六月丁香五月激情婷婷| 秋霞性爱AV| 超碰自拍天堂| 色五月之第四色| 98色花堂98t.R| 人人操人人妻| 麻豆科斗777| 在线视频99| 91九九九色在| 综合婷婷六月| 丁香五月91| 亚洲婷婷丁香五月| 五月婷色丁香| 五月丁香综合在线| 激情九色| 婷婷丁香人妻天天| 欧亚成人A片一区二区| 大香蕉天堂| 五月天婷婷综合免费| 伊人久久大香线蕉精品| 丁香 婷婷 激情 综合 五月 | 婷婷91| 欧美色宗和激情| 人妻啪啪啪| 亚洲狠狠爱婷婷| 99爱免费在线观看| 九九这里都是精品| 久久久婷丁香五月天激情综合| 99热99热| 搡BBBB搡BBB搡五十| 天天做天天爱天天搞| 色99在线视频| 98永久精品| 婷婷激情小说| 青青久久91| 激情久久综合网| 一本大道伊人AV久久综合| 亚洲 综合中文| 五月丁香婷婷成人网| 台湾无码A片一区二区| 丁香五月天堂网| 超热久碰.com| 97色色色色色| 最熟少妇乱码| 丁香六月婷婷综合在线| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 99色免费观看全部| 蒲京久久无码视频| 六月色国内综合| 婷婷97色| 99久久综合精品五月天| 国产一级视频a| 这里只有精品视频看看| 做爰丰满少妇1313| 婷婷丁香人妻| 国产人妻777人伦精品HD| 熟女五月天久久综合| 大陆极品少妇内射AAAAAA| 色婷婷婷综合五月天| 免费无码毛片一区二区A片| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 欧美va在线| 激情 婷婷| 无码人妻电影|