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

鴻蒙Hi3861測溫濕度顯示一個新手開發調試過程

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

[[375906]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

使用的器件:Hi3861 + AHT20 + SSD1306

配好開發環境輕松做完點燈任務后,便想搞個像樣點的應用,然后……決定做一個測量溫濕度計,開始覺得這個實現比較簡單,通過Hi3861讀取AHT20測出的溫濕度值,然后通過OLED顯示出來。

首先我的嵌入式開發知識非常少,曾經做過幾年Java開發,玩過一點51單片機,在Linux上部署過一些Web服務。僅此而已,所以我的知識無法宏觀上把這個事情想的很清楚,只能一步一步的試。如果你也是新入手嵌入式開發的朋友,那我的過程可能會對你有借鑒。

先構建一個技術輪廓:每種電子傳感器都是包括3類端口,(1)第1類電源:必需要2根電源線給模塊供電,正負極,有的模塊有多組供電;(2)第2類控制:然后有的模塊會有一些控制端口,每種模塊都不經相同,有的模塊直接讀數是沒有這種控制端口的;(3)第3類通信線:跟核心單片機通信的信號端口,根據采用的通信協議不同,端口數量不同。要使用的AHT20和SSD1306采用的都是I2C通信協議,所以都是2根通信線。

我所用到的模塊都很簡單,主要涵蓋的都是這3類端口,所以不管看到模塊打扮成什么樣,所要解決的主要問題都是類似的。主要做的就是通過通信端口向模塊讀寫數據。

模塊的配置:各種模塊控制和存儲數據都是由一組組8位的寄存器控制的,每個寄存器里有8位,每一位可以存儲1或者0,組成1個字節值,每種模塊都有自己的功能設置和存儲設置,可以想象成高階語言里的關鍵字,寄存器值就是它本來的樣子,一組組數字直接看是不會看懂它代表什么意思的,所以要依靠模塊提供的技術手冊做指導,一邊看手冊一邊設置,單片機開發就這是這么樸實無華。

關于通信協議:要使用的這2個模塊采用的都是I2C通信協議,2根線一根信號一根時鐘,通信雙方就是通過互相占用通信線,相互發送高低電平傳遞消息,就是他們不能同步通信的,一方發送一方只能接收。因為用的線少所以通信過程非常繁瑣,一方喊話問某地址的模塊是否在線,然后等待,對方如果收到喊話,然后給個應答,當收到應答,再發送指令告訴他準備干什么,然后等待確認,模塊收到后發確認…………,這個過程我在51上模擬過,好痛苦啊,一個時鐘信號一個數據信號的數……,但是!!!在鴻蒙上所有的繁瑣過程都被封裝好了,我們只需要簡單的調用系統提供的I2C操作方法,具體過程完全不用考慮,經過使用,真的好用,非常好用,好簡單啊!所以I2C基本流程熟悉一下即可,在開發過程中具體的工作非常少。

SSD1306

首先是點亮屏幕,一旦能使用屏幕了,等于單片機對你打開了一扇窗戶。SSD1306并不是OLED,它是驅動OLED顯示的控制芯片,很多模塊本身就是一個復雜的單片機,我們用的OLED屏幕是128*64像素組成的,本質上你可以簡單的理解為高階點燈。對SSD1306的控制也是通過I2C實現的,雖然它支持很多種通信協議,但是惜端如金的Hi3861采用了端口占用最少的I2C。

我們只是需要向SSD1306發送數據,沒有反饋值。所以通信過程比較簡單SSD1306的地址0x78,0x00為接收命令,0x40為接收數據。把這個高度重復的過程做到1個函數里,直接調用就好。

  1. // I2C協議 讀寫函數 只有寫需求, cd = 0 寫指令 cd = 1 寫數據 byt 要寫入的值  
  2. void SSD1306_I2C_W(unsigned char cd, unsigned char byt) 
  3.  
  4.     unsigned int state = 0; // I2C 運行 狀態 
  5.  
  6.     WifiIotI2cIdx id = WIFI_IOT_I2C_IDX_0;  //I2C 通道 0 
  7.  
  8.     unsigned short deviceAddr = 0x78; // SSD1306 地址  
  9.  
  10.     WifiIotI2cData i2cData = {0};   // 接收發送信息的數組 查 wifiiot_i2c.h 看詳細說明 
  11.  
  12.     unsigned char buf[] = {0x00, byt};  //默認 0x00 寫入 指令集 byt 要寫入的指令   
  13.  
  14.     if(cd == 1)     // 輸入 數據 
  15.     { 
  16.         buf[0] = 0x40;  // 0x40 表示寫入的是數據 byt 就是要寫入的數據               
  17.     } 
  18.  
  19.     i2cData.sendBuf = buf; 
  20.     i2cData.sendLen = 2; 
  21.  
  22.     state = I2cWrite(id, deviceAddr, &i2cData); 
  23.      
  24.     if(state != WIFI_IOT_SUCCESS) 
  25.     { 
  26.         printf("[SSD1306_I2C_W] write error : < %d > !!! \r\n", state);   // 如果狀態異常 就打印 錯誤信息 
  27.     } 
  28.  
  29.     // return state;    // 也可以作為返回值  
  30.  

 驅動命令比較多,這是遇到的第一個障礙,看了手冊,還有網絡上各種例子,各式各樣,雖然大同小異但是更是一頭霧水。然后……以手冊流程圖為準自己寫。不要怕,大膽試,好不好用試了才知道。

有的設置是需要成對出現的,一個命令配一個參數,但是很多例子全部放在一起,一邊看參數一邊對照命令表……崩潰,雖然我現在也沒搞懂有些命令的功能,但是以手冊默認值為準,最后運行的很好。哈。

驅動流程:


大多例子都是默認用頁顯示的方式,開始我也是用頁顯示的方式,用用就根據自己的需要改成水平方式了,建1個2維數組存放顯示的信息,顯示函數跟畫面函數分離,這樣做畫面的時候專注做畫面。這樣還有個好處,就是以后代碼的重用會比較方便。這樣做還是為了簡單實現在任意坐標顯示,以后畫個波顯示更方便一點。

這里補充1點,我開始按以前做小游戲的習慣做的畫面控制,單片機還是模塊好像都吃不消,看來還是越簡單越好。

 

然后要用到1個輔助工具,PCtoLCD2002完美版-(字符模式),這個字模工具超好用,這里向作者表示由衷的感情,讓最繁瑣的工作變得非常輕松。使用的時候注意點選項設置,主要是方向,寫段代碼測一下就好了。


SSD1306一次接收1個字節的數據,表示對1列8個像素的開關控制,每個字節數據轉成二進制代碼,比如0xFF二進制1111 1111,每個1都代表點亮1個像素。0x00二進制0000 0000,就是關閉8個像素。

AHT20

先看一下AHT20的技術手冊,這個手冊可以百度到(國內最小的半導體溫濕度傳感器AHT20研發成功,百度的結果,哈哈),在官網還可以下載到它的例程,這個模塊功能很簡單,所以手冊看的很輕松。

列一下工作流程:

1、上電等待40ms

2、發送0x71 查看AHT20狀態指令

查看狀態值 [3] 是否為 1

如果為1可以發送測量指令

如果為0需要初始化:發送0xBE + 0x08 + 0x00初始化,初始化過程需要等待10ms

3、發送0xAC + 0x33 + 0x00測量指令,測量過程需要等待80ms

再發送0x71查看狀態值[7]是否為0,如果為0表示測量完畢,否者等待。

接收測量結果,收到7個字節的數據。

主要2個步驟,查狀態,以及測量讀結果。

我看到一個文章講I2C協議是有專利權的,所以一般的產品使用這個協議都會或多或少的改一點,但是基本過程是一樣的,并不會影響使用,這只是傳聞我并沒有證實。

AHT20地址0x38換成2進制格式 111000,向左移1位結果是1110000,如果在最后1位就是[0]位設為0(1110000),就是發送讀信息,如果[0]位設置為1(1110001)就是寫信息。

公式:0x38<<1 | 0x1 = 0x70 寫地址; 0x38<<1 |0x0 = 0x71 讀地址;

  1. // 每個參數 都寫在函數里 是為了方便理解閱讀 最后做最終版 要盡量減少冗余操作 
  2.  
  3. // i2c寫入、讀出操作; rw=0 寫入 rw=1 讀出; *buff 數據數組,讀入就是指令集,返回就是空數組; leng 數組的長度 不可以為0;  
  4. void AHT20_I2C_RW(unsigned char rw, unsigned char *buff, unsigned int leng) 
  5.     unsigned int state = 0; // I2C 運行 狀態值 ,單列出來是為了方便作為返回值 做判斷 
  6.  
  7.     WifiIotI2cIdx id = WIFI_IOT_I2C_IDX_0;  //設置I2C使用的通道 
  8.  
  9.     unsigned short writAddr = 0x70; // aht20 ((0x38<<1)|0x0)  寫入地址 
  10.     unsigned short readAddr = 0x71; // aht20 ((0x38<<1)|0x1)  讀出地址    
  11.      
  12.     WifiIotI2cData i2cData = {0};   // 參考 wiffiiot_i2c.h 的說明 位置在 \base\iot_hardware\interfaces\kits\wifiiot_lite 
  13.  
  14.     if(rw == 0) // 寫入 
  15.     { 
  16.         i2cData.sendBuf = buff;      //unsigned char*    發送 數據 指針 
  17.         i2cData.sendLen = leng;      //unsigned int      發送 數據 長度 
  18.  
  19.         state = I2cWrite(id, writAddr, &i2cData);   //i2c寫入方法 會有1個狀態返回值 WIFI_IOT_SUCCESS = 0 代表成功 出錯會返回錯誤代碼 需要加入 wifiiot_errno.h 頭文件         
  20.     } 
  21.     else if(rw == 1) // 讀出 
  22.     { 
  23.         i2cData.receiveBuf = buff;   //unsigned char*    接收 數據 指針 
  24.         i2cData.receiveLen = leng;   //unsigned int      接收 數據 長度 
  25.  
  26.         state = I2cRead(id, readAddr, &i2cData);    //i2c讀出方法        
  27.     } 
  28.  
  29.     if(state != WIFI_IOT_SUCCESS)   // 如果返回值 不等于 WIFI_IOT_SUCCESS 打印state 查詢 wifiiot_errno.h 看錯哪了 
  30.     { 
  31.         printf("[AHT20_I2C_RW] ERROR !!! %d : %d \r\n", rw, state);    // 打印 錯誤信息 
  32.     } 
  33.  

 這里要重點!重點!重點!的說一下,接收狀態值,不要!不要!不要!再發送0x71指令了,直接I2C讀,就會給你傳1個狀態值,默認的狀態值的第[7]位是0,當你發送測量指令的時候,會變成1,進入測量狀態,當測量完以后會重新置為0。開始因為一直無法讀取到正確的狀態值……#¥%&#¥%#@%#,一言難盡啊,已經過去了。

  1. // 返回 AHT20 的狀態值 i是第幾位 0~7  
  2. unsigned char AHT20_Status(unsigned char i) 
  3.     unsigned char buff[] = {0}; 
  4.     unsigned char leng = 1; 
  5.  
  6.     AHT20_I2C_RW(1, buff, leng); 
  7.  
  8.     unsigned char s;    //返回狀態值 0、1 
  9.  
  10.     s = (buff[0] >> i) & 0x01;  //狀態值是1個字節數據,我們只需要知道某位的具體值就行 i就是第幾位 
  11.  
  12.     //printf("[AHT20_Status] AHT20_Status 0x%x [%d : %d] !!! \r\n", buff4[0], i, s);    // 此行 調試用 打印 狀態值 
  13.  
  14.     return s; 

結果會返回7個字節數據,第1個字節是狀態信息,第2個、第3個、以及第4個字節的高4位[7][6][5][4]共同組成了濕度值,第4個字節的低4位[3][2][1][0]、第5位、第6位組成溫度值,最后第7個字節是效驗位。

然后效驗,主要是目的是檢驗接收到的數據是否在傳輸的過程中出現錯誤,具體原理和公式以及代碼不仔細說了,過程太碎了,幾次測試,代碼沒問題,具體過程百度一下好多資料,檢驗的時候一定要包括第1個狀態字節。

檢驗這步驟不是必須的,但是我開始的時候發現讀到的數錯的離譜,開始不清楚是我代碼寫的問題還是模塊本身的問題,然后就把檢驗這個步驟也寫上了,最后發現模塊沒問題,代碼也沒問題,問題是模塊上有個氣體傳感器會發熱,所以溫度值高。真的好暈。

最后一步就是就是把讀到的數值轉化為正常的10進制值。

技術手冊濕度的公式后面有個%號,那個是濕度百分比的意思,我還糾結過×100%有啥意義呢?當你沒最后完全走通的時候就像在黑暗里摸索,一個小坑都能把你絆的夠嗆。

轉化的過程要注意數值的類型,本來這個取值就是取很小的零頭,如果類型用錯了,就給抹掉了。哈。

  1. // AHT20 測量溫濕度值 
  2. unsigned char AHT20_Measure(float *ht) 
  3.     // 發送 測量指令 
  4.     unsigned char buff1[] = {0xac, 0x33, 0x00}; 
  5.     unsigned char leng1 = 3; 
  6.  
  7.     AHT20_I2C_RW(0, buff1, leng1);  // 默認狀態值第[7]位是0,發送完測量指令后狀態值[7]會置1 
  8.  
  9.     usleep(80*1000); //等待 80ms 時鐘偏快的 所以這個時間內 總是不能完成測量 
  10.  
  11.     unsigned char t = 10;    //等待時間的值 
  12.  
  13.     while(AHT20_Status(7) != 0) //檢查 狀態值第[7]位是否從1變為0,如果沒變就等待5ms,如果已經置0說明測量完成 
  14.     { 
  15.         usleep(10*1000);   //10ms 這個時間不要設置太長,也不要設置太短,太長時間,小器件很難長時間存儲測量結果,太短反復應答也能會影響測量的穩定性,一般情況等1次就會過  
  16.  
  17.         if(--t == 0)  // 如果等待時間很長依然沒有變0,說明設備可能出現異常,為了避免死機,返回0,重新測量 這個情況我還沒遇到 
  18.         { 
  19.             return 0; 
  20.         } 
  21.     } 
  22.  
  23.     // 接收 測量結果 
  24.     unsigned char buff2[7] = {0}; 
  25.     unsigned char leng2 = 7; 
  26.  
  27.     AHT20_I2C_RW(1, buff2, leng2);  // 讀返回結果,一共7個字節,第1個字節是狀態值 最后1個字節是效驗值 
  28.  
  29.     unsigned char i, j; 
  30.     unsigned char crc = 0xFF;   // 效驗 初值 
  31.  
  32.     // CRC 效驗 固定算法  
  33.     for(i=0; i<6; i++) 
  34.     { 
  35.         crc ^= (buff2[i]); 
  36.          
  37.         for(j=8; j>0; --j) 
  38.         { 
  39.             if(crc & 0x80) 
  40.             { 
  41.                 crc = (crc << 1) ^ 0x31; 
  42.             } 
  43.             else 
  44.             { 
  45.                 crc = (crc << 1); 
  46.             }  
  47.         } 
  48.     } 
  49.  
  50.     if(buff2[6] != crc) //CRC值不對 說明傳輸過程可能有干擾 出錯了 
  51.     { 
  52.         //printf(" CRC8 NO \r\n"); 
  53.         return 0;   // 效驗不正確 回執1個錯誤信息 
  54.     } 
  55.  
  56.     unsigned int dat1 = 0;  // 濕度 
  57.     unsigned int dat2 = 0;  // 溫度 
  58.  
  59.     dat1 = (dat1 | buff2[1]) << 8; 
  60.     dat1 = (dat1 | buff2[2]) << 8; 
  61.     dat1 = (dat1 | buff2[3]) >> 4; 
  62.  
  63.     dat2 = (dat2 | buff2[3]) << 8; 
  64.     dat2 = (dat2 | buff2[4]) << 8; 
  65.     dat2 = (dat2 | buff2[5]) & 0xfffff; 
  66.  
  67.     // 這1大段搬來搬去的 主要是因為 buff2[3] 前4位屬于濕度 后4位屬于 溫度 
  68.     // 單片機處理能力有限,主要是針對寄存器值的處理,使用位運算,這樣能節省算力 
  69.     // 處理數據 單列出來 便于理解,代碼寫的太簡練 不容易看懂 最終 不需要這么繁瑣 
  70.  
  71.     float hum = 0;  // 溫度 
  72.     float tem = 0;  // 濕度 
  73.  
  74.     // 2^20=1048576 要先類型轉換 暫時先這么寫 以后再改得順溜點 
  75.     hum = ((float)dat1 / (float)1048576) * (float)100;                 // 濕度 
  76.     tem = ((float)dat2 / (float)1048576) * (float)200 - (float)50;     // 溫度 
  77.  
  78.     ht[0] = hum; 
  79.     ht[1] = tem; 
  80.  
  81.     return 1;   // 測量完畢 
  82.  

 軟復位,無需關閉再次打開電源的情況下重新啟動傳感器。就是軟重啟,長時間停用的再次訪問的時候使用,我這個小應用基本用不到,但是還是寫上吧。輸入指令0xBA需要等待20ms。

剩下工作就是把AHT20的代碼和SSD1306的代碼整合到一起。這里要說1點,I2C支持串聯多個設備,所以AHT20和SSD1306在一條I2C線上共同使用是沒有問題的。


C語言從來不是我主要的使用語言,所以超級菜啊,一邊寫一邊看C 語言教程。裝個Dev-C++編譯器,有些功能先寫個測試代碼看看。開始寫代碼,不要考慮效率問題,就只想怎么更適合閱讀。開始寫主要的目的是試錯,寫一步編譯一步,不要一次寫全所有功能。

我覺得鴻蒙系統編譯報錯功能非常好,我的每個錯誤都能被準確的指出來。開始專用的查BUG功能對新手來說很難,可以用printf串口打印功能就行,真的好用,因為鴻蒙是多任務系統,所有的功能都是一個單獨的任務,即使你的代碼運行跑壞了,但是系統不會崩,打印功能依然會給你打印出信息來。第一次用真覺得好高級,能直接看到單片機的回話了。

最后不斷對代碼迭代優化,最終的目的讓代碼可以更好的被重用。以后還要用的嘛,重復的工作就不要做了。編程過程對我這種新手來說,真是經歷情況太多,開發過程發生的各種事以后以后單開一篇碎碎念再講吧。

知識有限又剛剛嘗試,所以肯定會有很多錯誤,歡迎給我指正。開始覺得弄這個很簡單,但是很快被現實教育,然后開始認真讀各位大佬的教程,收獲很大,這里由衷的感謝。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2023-04-24 15:11:51

系統開發鴻蒙

2020-11-26 12:02:07

OneNet平臺

2020-10-30 17:12:05

Hi3861

2020-11-27 11:52:40

OneNet

2023-05-26 16:07:14

Hi3861Wifi模塊

2020-10-30 09:48:03

Hi3861開發板get請求

2023-03-03 13:45:00

數據中心傳感器

2020-11-18 11:56:06

鴻蒙Hi3861

2020-11-06 10:15:16

HiBurn

2020-12-08 12:36:41

Hi3861 ADC驅動開發

2020-10-30 09:31:16

2G

2021-05-06 11:40:54

MQTT物聯網網關開發物聯網

2020-10-14 09:37:03

HiBurn鴻蒙.bin文件

2020-12-02 11:48:05

TFTP

2020-10-16 09:50:37

Hi3861WiFi熱點

2023-03-22 09:23:53

I2C總線溫度傳感器

2020-12-21 09:57:52

OLED溫濕度計hi3861

2023-05-30 14:58:05

智能開發鴻蒙

2021-03-10 09:32:21

鴻蒙HarmonyOS應用開發

2020-11-02 12:07:11

鴻蒙 GPIO
點贊
收藏

51CTO技術棧公眾號

日本道在线观看| 亚洲v在线观看| 麻豆tv在线| 国产成人精品亚洲日本在线桃色| 国内精品视频久久| 中文字幕av久久爽一区| 精品一区二区三区亚洲| 五月婷婷另类国产| 亚洲欧美久久234| 亚洲精品久久久久久动漫器材一区 | 国内在线观看一区二区三区| 亚洲老板91色精品久久| 久久精品一卡二卡| 原纱央莉成人av片| 亚洲免费视频中文字幕| 你懂的网址一区二区三区| 一卡二卡三卡在线观看| 亚洲经典三级| 久久久精品在线| 亚洲第一页av| 伊人www22综合色| 欧美亚洲国产bt| 欧美性潮喷xxxxx免费视频看| 国产乱子伦三级在线播放| 成人午夜视频在线观看| 国产欧美日韩中文字幕| 老熟妇仑乱一区二区av| 亚洲网址在线| 久久亚洲影音av资源网| 女人又爽又黄免费女仆| 精品福利网址导航| 欧美成人精品3d动漫h| 欧美日韩亚洲自拍| 亚洲一区资源| 亚洲成a天堂v人片| 国产欧美综合一区| 中文字幕在线播放| 久久精品综合网| 精品中文字幕人| 精品国产无码一区二区| 久久精品国产久精国产爱| 欧美中文字幕第一页| 免费日韩在线视频| 亚洲欧美亚洲| 免费91麻豆精品国产自产在线观看| 97人妻精品一区二区免费| 久久久亚洲欧洲日产| 欧美成人精品二区三区99精品| 做a视频在线观看| 黑人一区二区三区| 精品视频在线免费观看| the porn av| 国产精品无码久久久久| 在线中文字幕不卡| 久草福利视频在线| 澳门av一区二区三区| 色av综合在线| 日本免费观看网站| 国产麻豆一区| 欧美福利视频一区| 超碰中文字幕在线观看| 北岛玲精品视频在线观看| 欧美疯狂做受xxxx富婆| 欧美国产日韩另类| 日韩精品三级| 精品免费日韩av| 97人妻精品一区二区三区免费| 一区二区中文字幕在线观看| 亚洲аv电影天堂网| av无码一区二区三区| 天天躁日日躁狠狠躁欧美巨大小说| 亚洲精品国产免费| 欧洲女同同性吃奶| 97国产精品| 欧美裸体xxxx极品少妇| 日本一区二区不卡在线| 久久不射网站| 国产色婷婷国产综合在线理论片a| 亚洲自拍第二页| 国产一区二区0| 国产一区二区精品免费| 色视频在线观看福利| 国产日韩精品一区| 美女黄色片网站| 国产黄大片在线观看| 色999日韩国产欧美一区二区| 亚洲77777| 综合中文字幕| 亚洲精品一二区| 四虎永久免费地址| 亚洲性人人天天夜夜摸| 日本欧美精品在线| 国产视频在线观看免费| 99re66热这里只有精品3直播| 日韩免费中文专区| 天堂亚洲精品| 欧美在线视频你懂得| 亚洲色图偷拍视频| 日本欧美三级| 久久精品最新地址| 久久国产精品波多野结衣| 亚洲免费中文| 91久久国产综合久久蜜月精品 | 超碰国产精品一区二页| 亚洲成人av在线播放| 人人妻人人澡人人爽| 欧美久色视频| 国产精品一区二区女厕厕| 国产91绿帽单男绿奴| 中文字幕欧美国产| 男人插女人视频在线观看| 狠狠久久综合| 亚洲毛片一区二区| 国产亚洲小视频| 美女国产一区二区三区| 精品无人乱码一区二区三区的优势| 亚洲搞黄视频| 色偷偷成人一区二区三区91| 伊人久久久久久久久| 不卡在线一区| 欧美一区二区三区免费观看| 亚洲av无码一区二区三区dv| 中文字幕av在线一区二区三区| 欧美在线观看www| 日韩一区二区三区色| 在线日韩中文字幕| 4438国产精品一区二区| 成人免费视频视频| 国产一区二区三区播放| 青草综合视频| 在线观看日韩欧美| 亚洲熟妇无码乱子av电影| 丁香网亚洲国际| 精品国产一区二区三区在线| 日韩一区二区三区免费视频| 日韩久久精品成人| 日韩欧美亚洲一区二区三区| 国产成人自拍网| 综合久久国产| 韩国成人在线| 一区二区三区日韩在线| 久久久精品福利| 91日韩一区二区三区| 男人添女人荫蒂免费视频| 日韩在线成人| 久久99国产精品久久久久久久久| 国产精品欧美亚洲| 亚洲欧洲日韩av| 99热一区二区| 99久久99视频只有精品| 国产精品爽爽爽爽爽爽在线观看| 成人在线免费公开观看视频| 在线观看日韩精品| 五月激情四射婷婷| 日本v片在线高清不卡在线观看| 奇米精品在线| 亚洲伦乱视频| 少妇高潮 亚洲精品| 一级黄色大片免费| 亚洲欧美色图小说| 91性高潮久久久久久久| 在线成人h网| 久久久人人爽| 日韩一区二区三区在线免费观看| 一本色道久久88综合日韩精品| 免费看污视频的网站| 日本一区二区三区久久久久久久久不 | 亚洲天堂电影网| 9999精品| 国内精品久久久| 日本护士...精品国| 在线免费观看成人短视频| 欧美亚洲色综久久精品国产| 黑人巨大精品欧美黑白配亚洲| 日本免费黄色小视频| 北条麻妃一区二区三区在线| 日本久久久久久久| 欧美96在线| 亚洲成人网在线| 激情网站在线观看| 亚洲女人的天堂| 特黄特色免费视频| 免费在线成人| 中文字幕黄色大片| 青青草久久爱| 国产免费一区二区三区在线能观看 | 97精品伊人久久久大香线蕉| 国产在线观看精品一区| 制服丝袜成人动漫| 免费黄色网址在线| 国产精品国产a级| 日本一卡二卡在线| 久久精品二区亚洲w码| 日本黄色片一级片| 欧美日韩在线播放视频| 产国精品偷在线| 欧洲成人一区| 久久久久久久久久久免费精品 | 婷婷综合成人| 91久久爱成人| 成人在线视频免费| 欧美又大粗又爽又黄大片视频| 欧美a免费在线| 亚洲人午夜精品| 国精产品乱码一区一区三区四区| 在线视频欧美区| 免费毛片一区二区三区| 国产精品美女久久久久久2018| 性欧美18—19sex性高清| 麻豆精品精品国产自在97香蕉| 内射国产内射夫妻免费频道| 亚洲免费二区| 手机看片福利永久国产日韩| 另类图片第一页| 亚洲iv一区二区三区| 国产蜜臀一区二区打屁股调教| 国产亚洲精品久久久久久777| 亚洲经典一区二区三区| 欧美伊人精品成人久久综合97| 美国黄色小视频| 国产精品色哟哟| 精品人妻一区二区三区日产乱码卜| 蜜桃视频一区二区| 99久久久无码国产精品6| 久久久久久久久国产一区| 久久99导航| 午夜视频一区二区在线观看| 成人激情在线观看| 91精品产国品一二三产区| 久久影院在线观看| 男人的天堂在线免费视频| 亚洲成人激情在线| 国产成人精品一区二区无码呦| 在线欧美日韩国产| 日本中文字幕在线观看视频| 亚洲va韩国va欧美va精品| 欧美精品久久久久久久久46p| 国产91综合一区在线观看| 欧美成人手机在线视频| 日本人妖一区二区| 欧美三级一级片| 国产亚洲精品久久久久婷婷瑜伽| 日本免费黄色小视频| 五月久久久综合一区二区小说| 日韩中文字幕av在线| 精品久久电影| 免费成人在线观看av| 韩国女主播一区二区三区| 国产伦精品一区二区三| 精品国产亚洲一区二区在线观看 | 精品国产三级a在线观看| 国产一区二区三区在线观看| 欧美体内she精视频| 免费看污视频的网站| 欧美性xxxxxxxx| 国产又粗又猛又爽又| 日本乱码高清不卡字幕| 成人免费视频国产免费| 在线观看91视频| 亚洲免费视频二区| 色综合亚洲欧洲| 最新中文字幕免费| 欧美日韩美女一区二区| 中国女人真人一级毛片| 欧美一区二区精美| 亚洲AV午夜精品| 精品粉嫩aⅴ一区二区三区四区| 无码精品黑人一区二区三区| 亚洲国产精品热久久| 男人天堂av网| 亚洲国产精品人久久电影| 玖玖综合伊人| 中文日韩电影网站| 无遮挡的视频在线观看| 欧美床上激情在线观看| 国产丝袜视频在线播放| 美女av一区二区三区 | 台湾佬美性中文| 不卡区在线中文字幕| 国产肉体xxxx裸体784大胆| 欧美国产精品一区| 91免费公开视频| 一区二区三区中文免费| 免费人成在线观看| 亚洲成人久久影院| 日韩黄色在线播放| 黑丝美女久久久| 97在线视频人妻无码| 欧美不卡一区二区三区四区| 天天摸天天碰天天爽天天弄| 中文字幕日韩免费视频| 亚洲第一图区| 欧亚精品在线观看| 天堂久久av| 麻豆精品传媒视频| 国产二区精品| 黑鬼大战白妞高潮喷白浆| 久久精品国产**网站演员| 国产精品99精品无码视亚| 国产日产欧美一区二区三区| 曰本女人与公拘交酡| 欧美日韩国产精品| 97成人在线观看| 亚洲精品av在线播放| 成人福利在线| 久久久久久久久久久免费精品| 成人国产激情| 国产精品免费区二区三区观看| 成人看的视频| 妞干网视频在线观看| 日本vs亚洲vs韩国一区三区二区| 在线不卡一区二区三区| 国产精品一区二区在线看| 国产高清自拍视频| 亚洲一二三四在线| 做爰无遮挡三级| 亚洲精品久久久久久久久| 91福利国产在线观看菠萝蜜| 日本国产精品视频| 51亚洲精品| 99久久99久久精品| 蜜臀久久久久久久| 亚洲精品中文字幕在线播放| 亚洲最新视频在线播放| 狠狠躁夜夜躁人人爽视频| 精品对白一区国产伦| 在线视频国产区| 国产精品美女午夜av| 色婷婷综合久久久久久| 91精品国产91久久久久麻豆 主演| 久久超碰97中文字幕| 97伦伦午夜电影理伦片| 精品欧美aⅴ在线网站| 99草在线视频| 日韩视频第一页| 图片一区二区| 亚洲精美视频| 亚洲免费网站| 欧美偷拍一区二区三区| 精品免费在线观看| 天堂成人在线| 午夜欧美大片免费观看| 老司机亚洲精品一区二区| 免费成人进口网站| 狠狠色丁香婷综合久久| 18啪啪污污免费网站| 欧美猛男男办公室激情| 99精品老司机免费视频| 国产精品激情av在线播放| 日韩精品一区二区三区免费观看| 欧美黄色免费影院| 成人免费观看视频| 男人的天堂一区二区| 日韩的一区二区| 欧美性xxx| 日韩jizzz| 日韩精品欧美精品| 中国一级片在线观看| 欧美日韩国产成人在线免费| 爱爱爱免费视频在线观看| 国产免费成人av| 午夜精品毛片| 欧美日韩一区二区区别是什么 | 超碰中文字幕在线| 日韩精品亚洲元码| 欧美伦理91| 天堂va久久久噜噜噜久久va| 免费欧美在线视频| 国产亚洲精品熟女国产成人| 欧美日韩在线直播| 快射av在线播放一区| 91嫩草免费看| 国产精品乱看| 国产精品一二三区在线观看| 欧美精品亚洲二区| 黄a在线观看| 超碰97网站| 天堂影院一区二区| 国产在线免费av| 欧美一区二区三区视频在线观看 | 国产成人夜色高潮福利影视| 欧美国产激情视频| 国产亚洲欧美日韩日本| 国产手机视频在线| 久久久人成影片一区二区三区观看 | 国产三级在线播放| 国产 高清 精品 在线 a| 久久久久网站| av激情在线观看| 亚洲国产成人91精品| 欧美激情不卡| 男人的天堂avav| 国产欧美日韩三区| 国产wwwxxx| 欧美在线视频在线播放完整版免费观看| 日韩一区二区三区免费播放| 中国特级黄色片| 日韩欧美国产激情| 18加网站在线| 欧美日韩高清在线一区|