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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2903|回復: 1
收起左側

LM75A溫度計12864液晶顯示程序 二手溫控器改裝之旅

[復制鏈接]
ID:358930 發表于 2018-11-23 02:26 | 顯示全部樓層 |閱讀模式
TB來的二手溫控器,加裝液晶屏之旅。

制作出來的實物圖如下:
20181123_021318.jpg 20181123_021155.jpg

說明:
20181123_021212.jpg

單片機源程序如下:

  1. #include <reg52.h>
  2. #include <INTRINS.H>
  3. #include <stdio.h>
  4. #include  <intrins.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. /* ***************************************************** */
  8. // 起別名定義
  9. /* ***************************************************** */
  10. typedef unsigned char uChar8;
  11. typedef unsigned int  uInt16;
  12. typedef enum{FALSE,TRUE} BOOL;
  13. /* ***************************************************** */
  14. // 宏定義
  15. /* ***************************************************** */
  16. #define LM75ADevIDAddr 0x90         
  17. #define IIC_WRITE 0x00
  18. #define IIC_READ  0x01
  19. /* ***************************************************** */
  20. // 位定義
  21. /* ***************************************************** */
  22. sbit SCL = P2^1;//
  23. sbit SDA = P2^0;
  24. long int LM75WD;



  25. /* ***************************************************** */
  26. // 全局變量定義
  27. /* ***************************************************** */
  28. bit p_bH0L_Flag;                                        // 溫度"0"上、下標志位
  29. float p_fLM75ATemp;                                        // 溫度值

  30. /* ***************************************************** */
  31. // 函數名稱:Delay5US()
  32. // 函數功能:微秒延時
  33. // 入口參數:延時微秒數(ValUS)
  34. // 出口參數:無
  35. /* ***************************************************** */
  36. void Delay5US(void)
  37. {
  38.         _nop_();_nop_();_nop_();_nop_();
  39. }
  40. /* ***************************************************** */
  41. // 函數名稱:DelayMS()
  42. // 函數功能:毫秒延時
  43. // 入口參數:延時毫秒數(ValMS)
  44. // 出口參數:無
  45. /* ***************************************************** */
  46. void DelayMS(uInt16 ValMS)
  47. {
  48.         uInt16 uiVal,ujVal;
  49.         for(uiVal = 0; uiVal < ValMS; uiVal++)
  50.                 for(ujVal = 0; ujVal < 120; ujVal++);
  51. }



  52. /* ***************************************************** */
  53. // 函數名稱:IIC_Start()
  54. // 函數功能:IIC起動
  55. // 入口參數:無
  56. // 出口參數:無
  57. /* ***************************************************** */
  58. void IIC_Start(void)
  59. {
  60.         SDA = 1;
  61.         Delay5US();
  62.         SCL = 1;
  63.         Delay5US();
  64.         SDA = 0;
  65.         Delay5US();
  66. }
  67. /* ***************************************************** */
  68. // 函數名稱:IIC_Stop()
  69. // 函數功能:IIC停止
  70. // 入口參數:無
  71. // 出口參數:無
  72. /* ***************************************************** */
  73. void IIC_Stop(void)                     
  74. {
  75.         SDA = 0;
  76.         Delay5US();
  77.         SCL = 1;
  78.         Delay5US();
  79.         SDA =1;
  80. }
  81. /* ***************************************************** */
  82. // 函數名稱:IIC_Ack()
  83. // 函數功能:IIC應答
  84. // 入口參數:無
  85. // 出口參數:無
  86. /* ***************************************************** */
  87. void IIC_Ack(void)                     
  88. {
  89.         SCL = 0;                                // 為產生脈沖準備
  90.         SDA = 0;                                // 產生應答信號
  91.         Delay5US();                                // 延時你懂得
  92.         SCL = 1;Delay5US();  
  93.         SCL = 0;Delay5US();                // 產生高脈沖
  94.         SDA = 1;                                // 釋放總線
  95. }
  96. /* ***************************************************** */
  97. // 函數名稱:IIC_RdAck()
  98. // 函數功能:讀IIC應答
  99. // 入口參數:無
  100. // 出口參數:是否應答真值
  101. /* ***************************************************** */
  102. BOOL IIC_RdAck(void)                     
  103. {
  104.         BOOL AckFlag;
  105.         uChar8 uiVal = 0;
  106.         SCL = 0;Delay5US();   
  107.         SDA = 1;
  108.         SCL = 1;Delay5US();
  109.         while((1 == SDA) && (uiVal < 255))
  110.         {
  111.                 uiVal ++;
  112.                 AckFlag = SDA;
  113.         }
  114.         SCL = 0;  
  115.         return AckFlag;                // 應答返回:0;不應答返回:1
  116. }
  117. /* ***************************************************** */
  118. // 函數名稱:IIC_Nack()
  119. // 函數功能:IIC不應答
  120. // 入口參數:無
  121. // 出口參數:無
  122. /* ***************************************************** */
  123. void IIC_Nack(void)                    
  124. {   
  125.         SDA = 1;
  126.         SCL = 0;Delay5US();      
  127.         SCL = 1;Delay5US();      
  128.         SCL = 0;
  129. }
  130. /* ***************************************************** */
  131. // 函數名稱:OutputOneByte()
  132. // 函數功能:從IIC器件中讀出一個字節
  133. // 入口參數:無
  134. // 出口參數:讀出的一個字節(uByteVal)
  135. /* ***************************************************** */
  136. uChar8 OutputOneByte(void)        
  137. {
  138.         uChar8 uByteVal = 0;
  139.         uChar8 iCount;
  140.         SDA = 1;
  141.         for (iCount = 0;iCount < 8;iCount++)
  142.         {
  143.                 SCL = 0;
  144.                 Delay5US();
  145.                 SCL = 1;
  146.                 Delay5US();
  147.                 uByteVal <<= 1;
  148.                 if(SDA)
  149.                         uByteVal |= 0x01;
  150.         }         
  151.         SCL = 0;
  152.         return(uByteVal);
  153. }
  154. /* ***************************************************** */
  155. // 函數名稱:InputOneByte()
  156. // 函數功能:向IIC器件寫入一個字節
  157. // 入口參數:待寫入的一個字節(uByteVal)
  158. // 出口參數:無
  159. /* ***************************************************** */
  160. void InputOneByte(uChar8 uByteVal)
  161. {
  162.     uChar8 iCount;
  163.     for(iCount = 0;iCount < 8;iCount++)
  164.         {  
  165.                 SCL = 0;
  166.                 Delay5US();                        
  167.                 SDA = (uByteVal & 0x80) >> 7;
  168.                 Delay5US();         
  169.                 SCL = 1;
  170.                 Delay5US();
  171.                 uByteVal <<= 1;
  172.     }
  173.         SCL = 0;            
  174. }
  175. /* ***************************************************** */
  176. // 函數名稱:IIC_WrDevAddAndDatAdd()
  177. // 函數功能:向IIC器件寫入器件和數據地址
  178. // 入口參數:器件地址(uDevAdd),數據地址(uDatAdd)
  179. // 出口參數:寫入是否成功真值
  180. /* ***************************************************** */
  181. BOOL IIC_WrDevAddAndDatAdd(uChar8 uDevAdd,uChar8 uDatAdd)
  182. {
  183.         IIC_Start();                        // 發送開始信號
  184.         InputOneByte(uDevAdd);        // 輸入器件地址
  185.         IIC_RdAck();                          // 讀應答信號
  186.         InputOneByte(uDatAdd);        // 輸入數據地址
  187.         IIC_RdAck();                        // 讀應答信號
  188.         return TRUE;         
  189. }
  190. /* ***************************************************** */
  191. // 函數名稱:IIC_RdDatFromAdd()
  192. // 函數功能:向IIC器件讀數據
  193. // 入口參數:器件ID(uDevID)、數據存儲地址(uStaAddVal)
  194. //                         待存數據(*p)、連續存儲數據的個數(uiLenVal)
  195. // 出口參數:無
  196. /* ***************************************************** */
  197. void IIC_RdDatFromAdd(uChar8 uDevID, uChar8 uStaAddVal, uChar8 *p, uChar8 uiLenVal)
  198. {                                                   
  199.         uChar8 iCount;
  200.         IIC_WrDevAddAndDatAdd(uDevID | IIC_WRITE,uStaAddVal);  
  201.         IIC_Start();
  202.         InputOneByte(uDevID | IIC_READ);
  203.         // IIC_READ 為寫命令后綴符
  204.         IIC_RdAck();     
  205.         for(iCount = 0;iCount < uiLenVal;iCount++)
  206.         {
  207.                 *p++ = OutputOneByte();
  208.                    if(iCount != (uiLenVal - 1))
  209.                         IIC_Ack();                 
  210.         }      
  211.         IIC_Nack();        
  212.         IIC_Stop();         
  213. }
  214. /* ***************************************************** */
  215. // 函數名稱:LM75A_ReadReg()
  216. // 函數功能:讀LM75A任意寄存器值
  217. // 入口參數:寄存器地址(addr),uLenVal,讀出字節的長度
  218. // 出口參數:寄存器內容(*val)
  219. /* ***************************************************** */
  220. void LM75A_ReadReg(uChar8 addr, uChar8 *val, uChar8 uLenVal)
  221. {
  222.         IIC_RdDatFromAdd(LM75ADevIDAddr, addr, val, uLenVal);
  223. }
  224. /* ***************************************************** */
  225. // 函數名稱:LM75A_TempConv()
  226. // 函數功能:溫度轉換
  227. // 入口參數:無
  228. // 出口參數:無
  229. /* ***************************************************** */
  230. void LM75A_TempConv(void)
  231. {
  232.         uChar8 TempML[2]={0};                                                // 臨時數值,用于存放Temp的高低字節
  233.         uInt16 uiTemp;                                                                // 用于存放Temp的11位字節數據
  234.         LM75A_ReadReg(0x00,TempML,2);                                // 讀出溫度,并存于數組TempHL中
  235.         uiTemp = (uInt16)TempML[0];                                        // 將高字節存入變量uiTemp中
  236.         uiTemp = (uiTemp << 8 | TempML[1]) >> 5;        // 接著并入后3位,最后右移5位就是11位補碼數(8+3共11位)
  237.         /* ***** 首先判斷溫度是“0上”還是是“0下” ***** */        
  238.         if(!(TempML[0] & 0x80))                                                // 最高位為“0”則為“0上”
  239.         {
  240.                 p_bH0L_Flag = 0;
  241.                 p_fLM75ATemp = uiTemp * 0.125;        
  242.         }
  243.         else                                                                                // 這時為“0下”(p_fLM75ATemp)℃
  244.         {
  245.                 p_bH0L_Flag = 1;
  246.                 p_fLM75ATemp = (0x800 - uiTemp) * 0.125;// 由于計算機中負數是以補碼形式存的,所以有這樣的算法。
  247.         }
  248. }
  249. /* ***************************************************** */
  250. // 函數名稱:UART_Init()
  251. // 函數功能:串口初始化
  252. // 入口參數:無
  253. // 出口參數:無
  254. /* ***************************************************** */
  255. void UART_Init(void)
  256. {
  257.         TMOD &= 0x0f;           // 清空定時器1      
  258.         TMOD |= 0x20;                // 定時器1工作于方式2
  259.         TH1 = 0xfd;                        // 為定時器1賦初值
  260.         TL1 = 0xfd;                        // 等價于將波特率設置為9600
  261.         ET1 = 0;                        // 防止中斷產生不必要的干擾
  262.         TR1 = 1;                        // 啟動定時器1
  263.         SCON |= 0x40;                // 串口工作于方式1,不允許接收
  264. }

  265. /***************************功能定義***************************/
  266. #define LCD12864_W_COM                        0xF8        //寫指令
  267. #define LCD12864_R_COM                        0xFC        //讀指令
  268. #define LCD12864_W_DAT                        0xFA        //寫數據
  269. #define LCD12864_R_DAT                        0xFE        //讀數據
  270. #ifndef __LCD12864_H__
  271. #define __LCD12864_H__
  272. #define LCD12864_COM 0        //輸入指令
  273. #define LCD12864_DAT 1        //輸入數據
  274. #define LCD12864_CLEAR                        0x01        //清除顯示
  275. #define LCD12864_CURSOR                        0x02        //位址歸位,游標回原點
  276. #define LCD12864_CURSOR_RLF                0x04        //光標左移,整體顯示不移動
  277. #define LCD12864_CURSOR_RRF                0x06        //光標右移,整體顯示不移動
  278. #define LCD12864_CURSOR_RLN                0x05        //光標左移,整體顯示移動
  279. #define LCD12864_CURSOR_RRN                0x07        //光標右移,整體顯示移動
  280. #define LCD12864_DIS_OFF                0x08        //顯示狀態全關
  281. #define LCD12864_DIS_ON                        0x0E        //顯示狀態開
  282. #define LCD12864_DIS_CUR_ON                0x0E        //游標顯示開
  283. #define LCD12864_DIS_CURS_ON        0x0F        //游標位置顯示開
  284. #define LCD12864_CURSOR_RL                0x10        //游標左移
  285. #define LCD12864_CURSOR_RR                0x14        //游標右移
  286. #define LCD12864_CURDIS_RL                0x18        //整體顯示左移,光標跟隨
  287. #define LCD12864_CURDIS_RR                0x1C        //整體顯示又移,光標跟隨
  288. #define LCD12864_COM_BASIC                0x30        //基本指令集動作
  289. #define LCD12864_COM_PLOT_ON        0x36        //擴展指令集動作,繪圖顯示ON
  290. #define LCD12864_COM_PLOT_OFF        0x34        //擴展指令集動作,繪圖顯示OFF
  291. #define LCD12864_STAND_TO                0x31        //進入待命模式
  292. #define LCD12864_PLACE_ROLL                0x03        //允許輸入卷動位址
  293. #define LCD12864_PLACE_IRAM                0x02        //允許輸入IRAM位址
  294. #define LCD12864_REVERES_13                0x04        //選擇一、三行同時作反白顯示
  295. #define LCD12864_REVERES_24                0x05        //選擇二、四行同時作反白顯示
  296. #define LCD12864_REST_ON                0x08        //進入睡眠模式
  297. #define LCD12864_REST_OFF                0x0C        //脫離睡眠模式
  298. #define LCD12864_W_COM                        0xF8        //寫指令
  299. #define LCD12864_R_COM                        0xFC        //讀指令
  300. #define LCD12864_W_DAT                        0xFA        //寫數據
  301. #define LCD12864_R_DAT                        0xFE        //讀數據
  302. //======串口模式=======
  303. sbit LCD12864_CS = P2^7;   //片選信號輸入
  304. sbit LCD12864_STD = P2^6;  //串行數據輸入
  305. sbit LCD12864_SCLK = P2^5; //串行移位脈沖輸入
  306. sbit LCD12864_PSB = P2^4;  //串并模式選擇 0:串口,1:并口
  307. sbit LCDRST  = P2^3;
  308. unsigned char code tabe[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//查表法//0-9數字
  309. /*****************************向12864寫入8位數據*************************************/
  310. void LCD12864_Wbyte(uchar byte)
  311. {
  312.         uchar i;

  313.         for(i=0;i<8;i++)
  314.                 {
  315.                 LCD12864_SCLK = 0;
  316.                 byte <<= 1;                         //左移待寫入數據,使最高位移至CY
  317.                 LCD12864_STD = CY;        //寫入一位數據
  318.                 LCD12864_SCLK = 1;
  319.                 LCD12864_SCLK = 0;   
  320.                 }
  321. }
  322. /***************************從12864讀出8位數據***返回:sdat************************************/
  323. uchar LCD12864_Rbyte(void)
  324. {
  325.      uchar i,sdat,temp1,temp2;
  326.      temp1 = 0;
  327.      temp2 = 0;
  328. //==========12864的串行數據輸出形式是D7-D6-D5-D4-0-0-0-0-D3-D2-D1-D0-0-0-0-0,故要度兩個八位整合==============
  329.      for(i=0;i<8;i++)
  330.                 {
  331.                 temp1=temp1 << 1;
  332.                 LCD12864_SCLK = 0;
  333.                 LCD12864_SCLK = 1;            
  334.                 LCD12864_SCLK = 0;
  335.                 if( LCD12864_STD )        temp1|=0x01;        //tempe1:D7-D6-D5-D4-0-0-0-0
  336.                 }
  337.      for(i=0;i<8;i++)
  338.                 {
  339.                 temp2=temp2 << 1;
  340.                 LCD12864_SCLK = 0;
  341.                 LCD12864_SCLK = 1;            
  342.                 LCD12864_SCLK = 0;
  343.                 if( LCD12864_STD ) temp2|=0x01;   //tempe2:D3-D2-D1-D0-0-0-0-0
  344.                 }
  345.         sdat = ((temp1 & 0xf0)|(temp2 >> 4));  //取出D7\D6\D5\D4\D3\D2\D1\D0                    
  346.         return sdat;  //返回一個值(sdat)
  347. }
  348. /****************************讀忙狀態**************************************/
  349. void LCD12864_busy( void )
  350. {
  351.         do        LCD12864_Wbyte( LCD12864_R_COM );                //LCD12864_RW=11111,RW(1),RS(0),0
  352.         while( LCD12864_Rbyte() & 0x80 );         //讀BF,直到BF == 0
  353. }
  354. /*************************dat_com=0寫指令,dat_com=1寫數據*****************************************/
  355. void LCD12864_W (bit dat_com,uchar byte)
  356. {
  357.         uchar temp;
  358.         if(dat_com == 0)         //為零,寫入指令
  359.                 temp = LCD12864_W_COM;        //11111,RS(0),RW(0),0
  360.         else                            //否則,寫入數據
  361.                 temp = LCD12864_W_DAT;        //11111,RS(1),RW(0),0
  362.         LCD12864_CS = 1;                //片選使能
  363.         LCD12864_busy();                //LCD忙檢測
  364.         LCD12864_Wbyte(temp);        //寫入模式選擇,指令還是數據
  365.         LCD12864_Wbyte(byte&0xf0);        //寫入字節
  366.         LCD12864_Wbyte((byte<<4)&0xf0);        //寫入字節
  367.     LCD12864_CS = 0;                //片選關閉
  368. }
  369. /****************************LCD12864初始化**************************************/

  370. void LCD12864_Init(void)
  371. {
  372.         LCDRST=1;
  373.         LCD12864_PSB = 0;        //選擇串口模式
  374.         LCD12864_W(LCD12864_COM,0x30);        //基本指令功能.
  375.         LCD12864_W(LCD12864_COM,0x03);        //允許輸入卷動位址
  376.         LCD12864_W(LCD12864_COM,0x0c);                //脫離隨眠狀態,顯示打開,關光標,反白關.
  377.         LCD12864_W(LCD12864_COM,0x01);                //清屏指令.
  378.         LCD12864_W(LCD12864_COM,0x06);        //AC自動加一,光標右移,整體顯示不移動   
  379. }
  380. /**************************LCD12864字符位置自定義顯示****************************************/
  381. void LCD12864_WPoss(uchar x,uchar y,uchar *buff)
  382. {
  383.         uchar addr,i=0;
  384.         switch (x)
  385.                 {
  386.                 case 0:addr=0x80;break;
  387.                 case 1:addr=0x90;break;
  388.                 case 2:addr=0x88;break;
  389.                 case 3:addr=0x98;break;
  390.                 }
  391.         addr=addr+y;

  392.         LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC);        //8BitMCU,基本指令集合
  393.         LCD12864_W(LCD12864_COM,addr);                                        //顯示在自定義位置

  394.         while(buff[i]!='\0')
  395.                 {       
  396.                 LCD12864_W(LCD12864_DAT,buff[i++]);
  397.                 if(++y==16)
  398.                         {
  399.                         y=0;
  400.                         if(++x==4) x=0;

  401.                         switch (x)
  402.                                 {
  403.                                 case 0:addr=0x80;break;
  404.                                 case 1:addr=0x90;break;
  405.                                 case 2:addr=0x88;break;
  406.                                 case 3:addr=0x98;break;
  407.                                 }
  408.                         addr=addr+y;
  409.                         LCD12864_W(LCD12864_COM,addr);
  410.                         }
  411.        
  412.                 }
  413. }
  414. void Disp_img(unsigned char  *img)        //圖形方式12864顯示字模221 橫向取膜
  415. {
  416.         unsigned char i,j;
  417.         unsigned int k = 0;

  418.         LCD12864_W(0,0x36); //圖形方式
  419.         for(i=0;i<32;i++)
  420.           {
  421.                 LCD12864_W(0,0x80+i);
  422.                 LCD12864_W(0,0x80);
  423.             for(j=0;j<16;j++)
  424.                 {
  425.                         LCD12864_W(1,img[k++]);
  426.                 }
  427.           }

  428.         for(i=0;i<32;i++)
  429.           {
  430.                 LCD12864_W(0,0x80+i);
  431.                 LCD12864_W(0,0x88);
  432.             for(j=0;j<16;j++)
  433.                 {
  434.                         LCD12864_W(1,img[k++]);
  435.                   }
  436.         }
  437. }
  438. /************************顯示11************************************/

  439. void display1(long temp)
  440. {
  441.     uchar dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;
  442.         //temp=12345678;
  443.         dt1 = temp%10;//1位
  444.         dt2 = temp%100/10;//2位
  445.         dt3 = temp%1000/100;//3位
  446.         dt4 = temp%10000/1000;//4位

  447.         dt5 = temp%100000/10000;//5位
  448.         dt6 = temp%1000000/100000;//6位
  449.         dt7 = temp%10000000/1000000;//7位
  450.         dt8 = temp/10000000;//8位             最高位  

  451.         LCD12864_WPoss(3,0,"溫度:");//第1行顯示表1
  452.     // LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****)  0寫指令  1寫數據

  453.      //LCD12864_W(1,tabe[dt8]);//6位
  454.      //LCD12864_W(1,tabe[dt7]);//5位
  455.      //LCD12864_W(1,tabe[dt6]);//4位
  456.      LCD12864_W(1,tabe[dt5]);//3位       
  457.            LCD12864_W(1,tabe[dt4]);//4位
  458.                  LCD12864_W(1,0x2e);
  459.      LCD12864_W(1,tabe[dt3]);//3位
  460.            //LCD12864_W(1,tabe[dt2]);//4位
  461.      //LCD12864_W(1,tabe[dt1]);//3位
  462.      LCD12864_WPoss(3,5,"C");//第1行顯示表1
  463.                  LCD12864_WPoss(0,0,"  LM75A 溫度計");//第1行顯示表1
  464.                 LCD12864_WPoss(1,0,"IIC 地址:0X90   ");//第1行顯示表1
  465.     LCD12864_WPoss(2,0,"  傳感器:LM75A");//第1行顯示表1

  466. }
  467. /* ***************************************************** */
  468. // 函數名稱:main()
  469. // 函數功能:讀取LN75A溫度值,數碼管顯示并串口打印
  470. // 入口參數:無
  471. // 出口參數:無
  472. /* ***************************************************** */
  473. void main()
  474. {
  475.         
  476.         uChar8 i;
  477.         UART_Init();
  478.               LCD12864_Init();       
  479.         while(1)
  480.         {
  481.                                
  482.                                        
  483.                  LM75A_TempConv();//讀取溫度LM75A  
  484.                  DelayMS(200);
  485.                                        
  486.                  LM75WD = p_fLM75ATemp * 1000;// 將溫度全部轉換成整數,以便數碼管顯示                               
  487.                 display1(LM75WD);//顯示溫度 //Ok         
  488.                                        
  489.        
  490.         }
  491. }
復制代碼

所有資料51hei提供下載:
128顯STC89C LM75A溫度OK.zip (55.38 KB, 下載次數: 50)

評分

參與人數 3黑幣 +65 收起 理由
chentianyuan + 3 淡定
YJGG + 12 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:479459 發表于 2019-3-22 14:17 | 顯示全部樓層
終于尋到了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色大片免费观看 | 91色在线视频| 精品少妇一区二区三区日产乱码 | www.伊人.com| 一区二区高清 | 理论片免费在线观看 | 国外激情av| 国内精品视频在线 | 污书屋| 亚洲精品自拍视频 | 亚洲一区免费 | 国产成人综合一区二区三区 | 四虎最新地址 | 欧美伦理一区 | 在线观看中文字幕亚洲 | 伊人精品久久久久77777 | 雨宫琴音一区二区在线 | 欧美日韩精品 | 中文字幕在线观看国产 | 毛片一级片 | 日本在线网址 | 国产成人精品福利 | 欧美久久久网站 | 日韩在线免费视频 | 第四色播日韩第一页 | 久久日韩粉嫩一区二区三区 | 久久久综合网 | av黄色国产 | 国产一级片在线播放 | 丝袜一区二区三区 | 在线看无码的免费网站 | 欧美一区二区在线观看 | 粉嫩一区二区三区国产精品 | 日韩在线播放av | 一级一级毛片免费看 | av免费入口 | 国产成人高清 | 欧美国产日韩在线观看 | 91 在线| 国产精品欧美一区喷水 | 国产精品国产三级国产aⅴ中文 |