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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4034|回復: 0
收起左側

液晶MINI12864串行接口的單片機源碼(不帶字庫)

[復制鏈接]
ID:325553 發表于 2018-5-8 22:35 | 顯示全部樓層 |閱讀模式
串行LCD12864程序 驗證過可用

單片機源程序如下:
  1. /****************************************************************
  2. 通用頭文件
  3. ****************************************************************/
  4. #include <reg52.h>
  5. #include <intrins.h>
  6. #include "i2c.h"
  7. #define MAIN_Fosc                11059200UL        //宏定義主時鐘HZ

  8. /****************************************************************
  9. 已有數據類型重新定義
  10. ****************************************************************/
  11. typedef signed char int8;  //8位有符號型
  12. typedef unsigned char INT8U;
  13. typedef signed int  int16; //16位有符號型
  14. typedef unsigned char uint8;  //8位無符號型
  15. typedef unsigned char uchar;  //8位無符號型
  16. typedef unsigned int  uint16; //16位無符號型
  17. typedef unsigned int INT16U;
  18. typedef unsigned int  uint; //16位無符號型
  19. typedef unsigned long uint32; //32位無符號型

  20. /****************************************************************
  21. 硬件接口定義
  22. ****************************************************************/
  23. /*LCD12864液晶引腳*/
  24. sbit LCD12864_CS = P0^3;        //片選使能腳, L:使能片選
  25. sbit LCD12864_RST= P0^4;        //系統復位選擇腳
  26. sbit LCD12864_RS = P0^5;        //命令/數據選擇腳,L:命令 H:數據
  27. sbit LCD12864_SCL= P0^6;        //命令/數據選擇腳,L:命令 H:數據
  28. sbit LCD12864_SDA= P0^7;        //串行數據輸入/輸出腳

  29. /*數碼管*/
  30. sbit WE = P2^7;        //數碼管位選        
  31. sbit DU = P2^6;        //數碼管段選

  32. sbit LED=P1^7;
  33. sbit beep=P2^3;         //蜂鳴器引腳定義
  34. sbit FUN=P2^2;//風扇引腳定義           風扇接 + D 通過4IN接到P22控制
  35. uchar code ascii_table_8x16[95][16]; //8*16字符
  36. uchar code ascii_table_5x7[95][5];        //5*7字符
  37. //PCF
  38. #define AddWr 0x90   //寫數據地址
  39. #define AddRd 0x91   //讀數據地址

  40. extern bit ack;
  41. bit ReadADFlag;

  42. uchar MQ[4];

  43. unsigned char dispos;//設置指針
  44. unsigned char setflag;//設置標志位

  45. unsigned char Q4H,Q4L,Q6H,Q6L,Q7H,Q7L;


  46. unsigned char ReadADC(unsigned char Chl);//讀取對應通道的ADC值函數聲明

  47. /*------------------------------------------------
  48.              讀AD轉值程序
  49. 輸入參數 Chl 表示需要轉換的通道,范圍從0-3
  50. 返回值范圍0-255
  51. ------------------------------------------------*/
  52. unsigned char ReadADC(unsigned char Chl)
  53. {
  54.           unsigned char Val;
  55.            Start_I2c();               //啟動總線
  56.            SendByte(AddWr);             //發送器件地址
  57.              if(ack==0)return(0);
  58.            SendByte(Chl);            //發送器件子地址
  59.              if(ack==0)return(0);
  60.            Start_I2c();
  61.            SendByte(AddRd);
  62.               if(ack==0)return(0);
  63.            Val=RcvByte();
  64.            NoAck_I2c();                 //發送非應位
  65.            Stop_I2c();                  //結束總線
  66.           return(Val);
  67. }

  68. /*====================================
  69. 函數名        :void delay(INT16U ms)
  70. 參數        :ms,毫秒延時形參
  71. 返回值        :無
  72. 描述        :12T 51單片機自適應主時鐘毫秒級延時函數
  73. ====================================*/
  74. void delay(INT16U ms)
  75. {
  76.      INT16U i;
  77.          do{
  78.               i = MAIN_Fosc / 96000;
  79.                   while(--i);   //96T per loop
  80.      }while(--ms);
  81. }
  82. /*====================================
  83. 函數        :LcdSendCmd(uchar DAT)
  84. 參數        :DAT需要發送的命令
  85. 返回值        :無
  86. 描述        :mini12864發送命令
  87. ====================================*/
  88. void LcdSendCmd(uchar DAT)
  89. {
  90.         uchar i;
  91.         LCD12864_CS = 0;        //片選使能腳, L:使能片選
  92.         LCD12864_RS = 0; //命令/數據選擇腳,L:命令 H:數據
  93.         for(i=0; i<8; i++) //分別寫8次,每次寫1位
  94.         {
  95.                 LCD12864_SCL = 0;//拉低時鐘總線,允許SDA變化
  96.                 if(DAT & 0x80)//先寫數據最高位
  97.                         LCD12864_SDA = 1;  //寫1
  98.                 else
  99.                         LCD12864_SDA = 0;  //寫0
  100.                 LCD12864_SCL = 1;          //拉高時鐘,讓從機讀SDA
  101.                 DAT <<= 1;          //為發送下一位左移1位
  102.         }
  103. }

  104. /*====================================
  105. 函數        :LcdSendData(uchar DAT)
  106. 參數        :DAT需要發送的數據
  107. 返回值        :無
  108. 描述        :mini12864發送數據
  109. ====================================*/
  110. void LcdSendData(uchar DAT)
  111. {
  112.         uchar i;
  113.         LCD12864_CS = 0;        //片選使能腳, L:使能片選
  114.         LCD12864_RS = 1; //命令/數據選擇腳,L:命令 H:數據
  115.         for(i=0; i<8; i++) //分別寫8次,每次寫1位
  116.         {
  117.                 LCD12864_SCL = 0;//拉低時鐘總線,允許SDA變化
  118.                 if(DAT & 0x80)//先寫數據最高位
  119.                         LCD12864_SDA = 1;  //寫1
  120.                 else
  121.                         LCD12864_SDA = 0;  //寫0
  122.                 LCD12864_SCL = 1;          //拉高時鐘,讓從機讀SDA
  123.                 DAT <<= 1;          //為發送下一位左移1位
  124.         }
  125. }
  126. /*====================================
  127. 函數        :LcdAddr
  128. 參數        :page設置顯示頁地址,column設置顯示列地址
  129. 返回值        :無
  130. 描述        :mini12864顯示數據地址
  131. ====================================*/
  132. void LcdAddr(uchar page, uchar column)
  133. {
  134.         LCD12864_CS = 0;        //使能片選
  135.         column = column - 1; //我們平常所說的第1 列,在LCD 驅動IC 里是第0 列。所以在這里減去1.
  136.         /*設置頁地址。每頁是8 行。一個畫面的64 行被分成8 個頁。我們平常所說的第1 頁,
  137.         在LCD 驅動IC 里是第0 頁,所以在這里減去1*/
  138.         page = page - 1;
  139.         LcdSendCmd(0xb0+page); //設置頁地址
  140.         LcdSendCmd( ( (column >> 4) & 0x0f ) + 0x10 );//設置列地址的高4 位
  141.         LcdSendCmd(column & 0x0f);//設置列地址的低4 位        
  142. }

  143. /*====================================
  144. 函數        :LcdCls
  145. 函數        :Disp_Picture
  146. 參數        :page顯示區頁地址,column顯示區行地址,x清除顯示區域寬,y清除顯示區域高
  147. 描述        :mini12864清屏
  148. ====================================*/
  149. void LcdCls(uchar page, uchar column,uchar x,uchar y)
  150. {
  151.         uchar i,j;
  152.         LCD12864_CS = 0;        //使能片選
  153.         y = y / 8;//頁設置
  154.         for(j=0; j<y; j++)
  155.         {
  156.                 LcdAddr(page+j, column);
  157.                 for (i=0; i<x; i++)
  158.                 {
  159.                         LcdSendData(0); /*寫數據到LCD,每寫完一個8 位的數據后列地址自動加1*/
  160.                 }
  161.         }
  162.         LCD12864_CS = 1;        //片選關閉
  163. }

  164. /*====================================
  165. 函數        :Disp_16x16
  166. 參數        :page顯示頁地址,column顯示行地址, dp顯示內容
  167. 返回值        :無
  168. 描述        :mini12864顯示16x16 點陣圖像、漢字、生僻字或16x16 點陣的其他圖標
  169.                         顯示坐標設置說明16*16的字體占16行16列  對應占2頁 16列
  170. ====================================*/
  171. void Disp_16x16(uchar page, uchar column, uchar *dp)
  172. {
  173.         uchar i,j;
  174.         LCD12864_CS = 0;        //使能片選
  175.         for(j=0; j<2; j++)
  176.         {
  177.                 LcdAddr(page+j, column);
  178.                 for (i=0; i<16; i++)
  179.                 {
  180.                         LcdSendData(*dp); /*寫數據到LCD,每寫完一個8 位的數據后列地址自動加1*/
  181.                         dp++;
  182.                 }
  183.         }
  184.         LCD12864_CS = 1;        //片選關閉
  185. }
  186. /*====================================
  187. 函數        :Disp_String_8x16
  188. 參數        :page顯示頁地址,column顯示行地址, text顯示內容
  189. 返回值        :無
  190. 描述        :mini12864顯示8x16 數字,字符或8x16 點陣的其他圖標
  191.                         顯示坐標設置說明8*16的字體占8行16列  對應占1頁 16列
  192. ====================================*/
  193. void Disp_String_8x16(uchar page, uchar column, uchar *text)
  194. {
  195.         uint i=0,j,k,n;
  196.         LCD12864_CS = 0;        //使能片選
  197.         while(text[i]>0x00)
  198.         {
  199.                 if((text[i]>=0x20)&&(text[i]<=0x7e))
  200.                 {
  201.                         j=text[i]-0x20;
  202.                         for(n=0;n<2;n++)
  203.                         {
  204.                                 LcdAddr(page+n, column);
  205.                                 for(k=0;k<8;k++)
  206.                                 {
  207.                                         LcdSendData(ascii_table_8x16[j][k+8*n]);/*顯示8x16 的ASCII 字到LCD 上*/
  208.                                 }
  209.                         }
  210.                         i++;
  211.                         column+=8;
  212.                 }
  213.                 else
  214.                         i++;
  215.         }
  216.         LCD12864_CS = 1;        //片選關閉
  217. }

  218. /*====================================
  219. 函數        :Disp_String_5x7
  220. 參數        :page顯示頁地址,column顯示行地址, text顯示內容
  221. 返回值        :無
  222. 描述        :mini12864顯示5x7 數字,字符或5x7 點陣的其他圖標
  223.                         顯示坐標設置說明5*7的字體占5行7列  對應占1頁 7列
  224. ====================================*/
  225. void Disp_String_5x7(uchar page, uchar column, uchar *text)
  226. {
  227.         uint i=0,j,k;
  228.         LCD12864_CS = 0;        //使能片選
  229.         while(text[i]>0x00)
  230.         {
  231.                 if((text[i]>=0x20)&&(text[i]<0x7e))
  232.                 {
  233.                         j=text[i]-0x20;
  234.                         LcdAddr(page, column);
  235.                         for(k=0;k<5;k++)
  236.                         {
  237.                                 LcdSendData(ascii_table_5x7[j][k]);/*顯示5x7 的ASCII 字到LCD 上*/
  238.                         }
  239.                         i++;
  240.                         column+=6;
  241.                 }
  242.                 else
  243.                 i++;
  244.         }
  245.         LCD12864_CS = 1;        //片選關閉
  246. }

  247. /*====================================
  248. 函數        :Disp_Picture
  249. 參數        :page顯示頁地址,column顯示行地址,x圖片寬,y圖片高, dp顯示內容
  250. 返回值        :無
  251. 描述        :mini12864顯示圖片
  252. ====================================*/
  253. void Disp_Picture(uchar page, uchar column,uchar x,uchar y, uchar *dp)
  254. {
  255.         uchar i,j;
  256.         LCD12864_CS = 0;        //使能片選
  257.         y = y / 8;//頁設置
  258.         for(j=0; j<y; j++)
  259.         {
  260.                 LcdAddr(page+j, column);
  261.                 for (i=0; i<x; i++)
  262.                 {
  263.                         LcdSendData(*dp); /*寫數據到LCD,每寫完一個8 位的數據后列地址自動加1*/
  264.                         dp++;
  265.                 }
  266.         }
  267.         LCD12864_CS = 1;        //片選關閉
  268. }

  269. /*====================================
  270. 函數        :InitLcd()
  271. 參數        :無
  272. 返回值        :無
  273. 描述        :mini12864初始化
  274. ====================================*/
  275. void InitLcd()
  276. {
  277.         LCD12864_CS = 0;        //使能片選
  278.         LCD12864_RST= 0;        //系統復位
  279.         delay(1);
  280.         LCD12864_RST= 1; //系統復位完成
  281.         delay(1);
  282.         LcdSendCmd(0xe2);        //軟件復位,執行這條指令之后,電路進入軟件復位狀態,各寄存器值詳見復位狀態寄存器表。
  283.         LcdSendCmd(0x2f);        //為液晶屏升壓,提供所需電壓
  284.         LcdSendCmd(0x23);        //粗調對比度,可設置范圍0x20~0x27
  285.         LcdSendCmd(0x81);        //雙行指令 設置EV微調對比度的值
  286.         LcdSendCmd(0x2f);        //EV可設置范圍0x00~0x3f
  287.         LcdSendCmd(0xa2);        //1/9 偏壓比(bias)全屏顯示
  288.         LcdSendCmd(0xc8);        //行掃描順序:從上到下
  289.         LcdSendCmd(0xa0);   //列掃描順序:從左到右
  290.         LcdSendCmd(0x40);        //起始行:第一行開始
  291.         LcdSendCmd(0xaf);        //開顯示
  292.         LCD12864_CS = 1;        //片選關閉                        
  293. }


  294. void keyfun(void)   //鍵盤掃描
  295. {
  296.                     unsigned char key;
  297.                          key = P3&0X0F;        //按鍵掃描
  298.                          if(key != 0X0F)
  299.                          {                 LED=0;
  300.                                         delay(10);                //去抖動
  301.                                  
  302.                                         if(key == 0X0e)  //加鍵
  303.                                         {
  304.                                                 switch (dispos)
  305.                                                 {
  306.                                                         case 0:        if(Q4H<250)Q4H=Q4H+10;else Q4H=255;        break;
  307.                                                 
  308.                                                         case 1:        if(Q6H<250)Q6H=Q6H+10;else Q6H=255; break;
  309.                                                         
  310.                                                         case 2:        if(Q7H<250)Q7H=Q7H+10;else Q7H=255;        break;
  311.                                                         
  312.                                                         default:break;

  313.                                                 }

  314.                                         }else if(key == 0X0d) //減鍵
  315.                                         {
  316.                                                    switch (dispos)
  317.                                                 {
  318.                                                         case 0:        if(Q4H>30)Q4H=Q4H-10;else Q4H=20;        break;
  319.                                                 
  320.                                                         case 1:        if(Q6H>130)Q6H=Q6H-10;else Q6H=128; break;
  321.                                                 
  322.                                                         case 2:        if(Q7H>130)Q7H=Q7H-10;else Q7H=128;        break;
  323.                                                         
  324.                                                         default:break;

  325.                                                 }
  326.                                         }
  327.                                         else if(key == 0X0b)  //選擇設置位
  328.                                         {
  329.                                                         dispos++;
  330.                                                         dispos=dispos%3;
  331.                                         }
  332.                                         //else if(key == 0X08)  //選擇設置位
  333.                                 //        {
  334.                                 //                        dispos--;
  335.                                 //                        dispos=dispos%3;
  336.                                 //        }
  337.                                         while((P3&0X0F) != 0X0F);  //等待按鍵釋放
  338.                                          LED=1;
  339.                          }        
  340. }
  341.   /*------------------------------------------------
  342.                     定時器初始化子程序
  343. ------------------------------------------------*/
  344. void Init_Timer0(void)
  345. {
  346.          TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                     
  347.          EA=1;            //總中斷打開
  348.          ET0=1;           //定時器中斷打開
  349.          TR0=1;           //定時器開關打開
  350. }

  351. void main()
  352. {
  353.     unsigned char num=0;
  354.         unsigned char error=0;
  355.         P0 = 0XFF;
  356.         WE = 1;
  357.         WE = 0;//關閉數碼管顯示
  358.         InitLcd();//mini12864初始化
  359.         LcdCls( 1, 1, 128, 64); //清屏指定區域
  360.         Disp_String_5x7( 1, 5, "Gas detection system");
  361.         Disp_String_5x7( 4, 1, "MQ4:");//顯示5*7字符
  362.         Disp_String_5x7( 6, 1, "MQ6:");//顯示5*7字符
  363.         Disp_String_5x7( 8, 1, "MQ7:");//顯示5*7字符
  364.         Disp_String_5x7( 4, 55, "ppm");//顯示5*7字符
  365.         Disp_String_5x7( 6, 55, "ppm");//顯示5*7字符
  366.         Disp_String_5x7( 8, 55, "ppm");//顯示5*7字符
  367.         Disp_String_5x7( 4, 112, "ppm");//顯示5*7字符
  368.         Disp_String_5x7( 6, 112, "ppm");//顯示5*7字符
  369.         Disp_String_5x7( 8, 112, "ppm");//顯示5*7字符

  370.         Disp_String_5x7( 2, 34, "real");//顯示5*7字符
  371.         Disp_String_5x7( 2, 90, "set");//顯示5*7字符
  372.                
  373.         Init_Timer0();
  374.         Q4H=50;        //閾值初始值

  375.         Q6H=150;

  376.         Q7H=150;

  377.         beep=1;
  378.         FUN=0;
  379.         while(1)
  380.         {         
  381.            keyfun() ;
  382.            if(ReadADFlag==1) //定時AD采樣和屏幕掃描
  383.            {
  384.                 ReadADFlag=0;
  385.                     num=ReadADC(0);
  386.                         if(num<Q4H) //在范圍內
  387.                             error=error&0Xfe;
  388.                         else
  389.                                 error=error|0X01;
  390.                         MQ[0]=        0X30+num/100;
  391.                         MQ[1]=        0X30+num%100/10;
  392.                         MQ[2]=        0X30+num%10;
  393.                         MQ[3]=        '\0';
  394.                         Disp_String_5x7( 4, 34, MQ);//顯示5*7字符
  395.                         //delay(10);//延時
  396.                         num=ReadADC(1);
  397.                         if(num<Q6H)
  398.                            error=error&0XfD;        
  399.                         else
  400.                            error=error|0X02;
  401.                         MQ[0]=        0X30+num/100;
  402.                         MQ[1]=        0X30+num%100/10;
  403.                         MQ[2]=        0X30+num%10;
  404.                         MQ[3]=        '\0';
  405.                
  406.                         Disp_String_5x7( 6, 34, MQ);//顯示5*7字符
  407.                         //delay(10);//延時
  408.                         num=ReadADC(2);
  409.                         if(num<Q7H)
  410.                                    error=error&0XfB;
  411.                         else  
  412.                                 error=error|0X04;
  413.                         MQ[0]=        0X30+num/100;
  414.                         MQ[1]=        0X30+num%100/10;
  415.                         MQ[2]=        0X30+num%10;
  416.                         MQ[3]=        '\0';

  417.                         Disp_String_5x7( 8, 34, MQ);//顯示5*7字符
  418.                         delay(10);//延時
  419.                         
  420.                         /////////////////////////////////////
  421.                

  422.                         MQ[0]=        0X30+Q4H/100;
  423.                         MQ[1]=        0X30+Q4H%100/10;
  424.                         MQ[2]=        0X30+Q4H%10;
  425.                         MQ[3]=        '\0';
  426.                         Disp_String_5x7( 4, 90, MQ);//顯示5*7字符
  427.                 //        delay(10);//延時

  428.                         MQ[0]=        0X30+Q6H/100;
  429.                         MQ[1]=        0X30+Q6H%100/10;
  430.                         MQ[2]=        0X30+Q6H%10;
  431.                         MQ[3]=        '\0';
  432.                         Disp_String_5x7( 6, 90, MQ);//顯示5*7字符
  433.                         //delay(10);//延時

  434.                         MQ[0]=        0X30+Q7H/100;
  435.                         MQ[1]=        0X30+Q7H%100/10;
  436.                         MQ[2]=        0X30+Q7H%10;
  437.                         MQ[3]=        '\0';
  438.                         Disp_String_5x7( 8, 90, MQ);//顯示5*7字符
  439.                         //delay(10);//延時
  440.                 }
  441.                     if((error&0x07)!=0)
  442.                          {
  443.                                  beep=0;// 開蜂鳴器
  444.                                 FUN=1;//開風扇
  445.                          }else
  446.                          {
  447.                                  beep=1;// 關蜂鳴器
  448.                                 FUN=0; //關風扇
  449.                          }

  450.         }
  451. }




  452. /*------------------------------------------------
  453.                  定時器中斷子程序
  454. ------------------------------------------------*/
  455. void Timer0_isr(void) interrupt 1
  456. {
  457.          static unsigned int count;
  458.          TH0=(65536-2000)/256;                  //重新賦值 2ms
  459.          TL0=(65536-2000)%256;
  460.          
  461.          count++;
  462.          if(count==50)        //大致100ms
  463.            {
  464.             count=0;
  465.             ReadADFlag=1; //讀標志位置1
  466.                 }
  467. }


  468. uchar code ascii_table_5x7[95][5]={
  469. /*全體ASCII 列表:5x8 點陣*/
  470. 0x00,0x00,0x00,0x00,0x00,//- - //space
  471. 0x00,0x00,0x4f,0x00,0x00,//-!-
  472. 0x00,0x07,0x00,0x07,0x00,//-"-
  473. 0x14,0x7f,0x14,0x7f,0x14,//-#-
  474. 0x24,0x2a,0x7f,0x2a,0x12,//-$-
  475. 0x23,0x13,0x08,0x64,0x62,//-%-
  476. 0x36,0x49,0x55,0x22,0x50,//-&-
  477. 0x00,0x05,0x07,0x00,0x00,//-'-
  478. 0x00,0x1c,0x22,0x41,0x00,//-(-
  479. 0x00,0x41,0x22,0x1c,0x00,//-)-
  480. 0x14,0x08,0x3e,0x08,0x14,//-*-
  481. 0x08,0x08,0x3e,0x08,0x08,//-+-
  482. 0x00,0x50,0x30,0x00,0x00,//-,-
  483. 0x08,0x08,0x08,0x08,0x08,//---
  484. 0x00,0x60,0x60,0x00,0x00,//-.-
  485. 0x20,0x10,0x08,0x04,0x02,//-/-
  486. 0x3e,0x51,0x49,0x45,0x3e,//-0-
  487. 0x00,0x42,0x7f,0x40,0x00,//-1-
  488. 0x42,0x61,0x51,0x49,0x46,//-2-
  489. 0x21,0x41,0x45,0x4b,0x31,//-3-
  490. 0x18,0x14,0x12,0x7f,0x10,//-4-
  491. 0x27,0x45,0x45,0x45,0x39,//-5-
  492. 0x3c,0x4a,0x49,0x49,0x30,//-6-
  493. 0x01,0x71,0x09,0x05,0x03,//-7-
  494. 0x36,0x49,0x49,0x49,0x36,//-8-
  495. 0x06,0x49,0x49,0x29,0x1e,//-9-
  496. 0x00,0x36,0x36,0x00,0x00,//-:-
  497. 0x00,0x56,0x36,0x00,0x00,//-;-
  498. 0x08,0x14,0x22,0x41,0x00,//-<-
  499. 0x14,0x14,0x14,0x14,0x14,//-=-
  500. 0x00,0x41,0x22,0x14,0x08,//->-
  501. 0x02,0x01,0x51,0x09,0x06,//-?-
  502. 0x32,0x49,0x79,0x41,0x3e,//-@-
  503. ……………………

  504. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
1、MINI12864測試程序.rar (57.11 KB, 下載次數: 48)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.天天操.com | 久久精品一区二区 | 人人做人人澡人人爽欧美 | 免费国产一区 | 在线观看视频你懂得 | re久久| 国产乱肥老妇国产一区二 | 五月婷婷激情 | 91精品国产综合久久福利软件 | 中文字幕在线观看视频一区 | 国产精品成人在线 | 日韩国产一区二区三区 | 亚洲一区自拍 | www国产亚洲精品久久网站 | 亚洲视频1区| 中文字幕 在线观看 | 亚洲综合在线视频 | 99re视频在线 | 免费成人在线网 | a级性视频 | 91xxx在线观看| 欧美在线天堂 | 国产免费一区二区 | 九九99靖品 | 天天射网站 | 午夜精品一区 | 亚洲v日韩v综合v精品v | 一本岛道一二三不卡区 | 激情91| 日本亚洲一区 | 欧美精品成人一区二区三区四区 | 欧美三级三级三级爽爽爽 | 亚洲成av人片在线观看无码 | 美女激情av | 日日骚网 | 欧美精品乱码久久久久久按摩 | 久久国产精99精产国高潮 | 亚洲精选一区 | 在线观看国产视频 | 性欧美hd| 午夜精品一区二区三区免费视频 |