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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15761|回復: 47
收起左側

PC機通過RS232控制單片機(Proteus仿真+代碼)

  [復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
ID:404722 發表于 2019-2-3 00:05 | 顯示全部樓層 |閱讀模式
單片機與PC機通過RS232相連,編寫一個異步串行口通信程序,實現單片機與PC機上的串口助手之間的通信。
功能實現:
1、當PC機向單片機發送字符‘1’~‘8’,打開對應的8個燈;
2、當PC機再次向單片機發送字符‘1’~‘8’時,關閉對應的燈;
3、當PC機向單片機發送字符‘d’時,會在液晶屏上刪除一個字符;
4、當PC機向單片機發送字符‘n’時,會在液晶屏上換行顯示;
5、當PC機向單片機發送字符‘c’時,會清屏顯示;
6、當PC機向單片機發送字符‘m’時,會打開音樂播放,結束后可繼續操作;
7、當PC機向單片機發送其它字符時,會顯示在1602液晶屏上;
8、當矩陣按鍵有按鍵按下時,單片機會把鍵值發送到PC機上。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

單片機源程序如下:
  1. #include<reg52.h>
  2. #include<string.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define        uint unsigned int
  6. uchar str[17];
  7. uchar ch;
  8. uchar m,n;
  9. sbit K1=P3^7;
  10. bit play=0;
  11. sbit LEN=P3^4;
  12. sbit LCDEN=P3^6;
  13. sbit RS=P3^3;
  14. sbit RW=P3^5;
  15. sbit BF=P2^7;
  16. sbit LED=P0;
  17. sbit BEEP=P3^2;
  18. uint I=0,J,K;
  19. uchar code keyval[]="123456789*0#"; //按鍵對應的符號
  20. char s[ ]="MCS-51 Microcomputer";
  21. uchar OpenLight[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  22. uchar CloseLight[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  23. uchar code T[49][2]={{0,0},
  24. {0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},
  25. {0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
  26. {0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},
  27. {0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}
  28. };
  29. uchar code music[][2]={
  30. {0,4},{20,8},{25,4},{22,4},{20,8},
  31. {20,8},{17,4},{20,4},{22,4},{25,4},
  32. {20,8},{20,8},{22,8},{20,4},{17,4},
  33. {15,8},{15,8},{17,8},{20,4},{17,4},
  34. {15,4},{17,4},{13,8},{22,8},{20,8},
  35. {22,8},{20,8},{17,8},{22,8},{20,16},
  36. {20,4},{20,4},{17,4},{15,4},{13,16},
  37. {13,4},{13,4},{15,4},{17,4},{13,16},
  38. {0xFF,0xFF}};
  39. //生日快樂歌的音符頻率表,不同頻率由不同的延時來決定
  40. uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
  41.                                                 212,212,106,126,159,169,190,119,119,126,159,142,159,0};
  42. //生日快樂歌節拍表,節拍決定每個音符的演奏長短
  43. uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,
  44. 9,3,12,12,12,12,12,9,3,12,12,12,24,0};
  45. void delay(uchar p)
  46. {
  47.     uchar i,j;
  48.     for(;p>0;p--)
  49.     for(i=181;i>0;i--)
  50.     for(j=181;j>0;j--);
  51. }
  52. void DelayMS(uint x)
  53. {
  54.         uchar t;
  55.         while(x--) for(t=0;t<120;t++);
  56. }
  57. //2¥·?oˉêy
  58. void PlayMusic2()
  59. {
  60. //        uint i=0,j,k;
  61.         if(SONG_LONG[I]!=0||SONG_TONE[I]!=0)
  62.         {        
  63.                 for(J=0;J<SONG_LONG[I]*20;J++)
  64.                 {
  65.                         BEEP=~BEEP;
  66.                         
  67.                         for(K=0;K<SONG_TONE[I]/3;K++);
  68.                 }
  69.                 DelayMS(10);
  70.                 I++;               
  71.         }
  72.         else
  73.                 I=0;
  74. }
  75. void delay_us(uchar t) //微秒延時
  76. {uchar i;
  77. for(i=0;i<=t;i++);
  78. }
  79. void Alarm(uchar t) //報警
  80. {
  81. uchar i,j,k;         
  82. for(j=0;j<t;j++)
  83. { for(i=0;i<200;i++)
  84.       {BEEP=0;delay_us(50);BEEP=1;delay_us(50);}
  85.    for(k=0;k<100;k++)
  86.       {BEEP=0;delay_us(110);BEEP=1;delay_us(110);}
  87. }
  88. }
  89. void pause()
  90. {
  91.     uchar i,j;
  92.     for(i=150;i>0;i--)
  93.     for(j=150;j>0;j--);
  94. }
  95. void delay_ms(unsigned int xms)
  96. {
  97.         int i,j;
  98.         for(i=xms;i>0;i--)
  99.                 for(j=110;j>0;j--);
  100. }
  101. void PlayMusic()
  102. {
  103.         uchar i=0;
  104.         
  105.         while(1)
  106.         {         if(i==40){ ET0=0;
  107.                         break;         }
  108.                 m=music[i][0];
  109.                 n=music[i][1];
  110.                    if(m==0x00)
  111.             {
  112.                         TR0=0;
  113.                         delay(n);
  114.                         i++;
  115.                 }
  116.             else if(m==0xFF)
  117.            {
  118.                    TR0=0;
  119.                    delay(30);
  120.                    i=0;
  121.            }
  122.            else if(m==music[i+1][0])
  123.            {
  124.                    TR0=1;
  125.                    delay(n);
  126.                    TR0=0;
  127.                    pause();
  128.                    i++;
  129.            }
  130.            else
  131.            {
  132.                    TR0=1;
  133.                    delay(n);
  134.                    i++;
  135.            }
  136.         }
  137. }
  138. uchar keypad4_3()//按鍵掃描函數:要去抖,若有按鍵按下,返回對應的按鍵值(0-11),沒有按鍵按下返回12
  139. {
  140.         uchar i,row,temp;
  141.         uchar key=12;//按鍵號,初值設置為12,目的是:沒有按鍵按下時返回12;
  142.                   //若不設初值(默認值為0),沒有按鍵按下時,將返回0,會誤認為0被按下  
  143.         row=0xef; //從第一行開始      
  144.         for(i=0;i<4;i++)
  145.         {
  146.                 P1=0xff;  
  147.                 P1=row;        //第i行信號,對應行為低,其他全為高
  148.                 row=_crol_(row,1);           //生成下一行信號
  149.                 temp=P1; //讀入掃描信號
  150.                 temp=temp&0x07; //屏蔽高5位信號,只保留低3位列信號
  151.                 if(temp!=0x07)//有按鍵被按下,因為第i行某列有按鍵按下,則低3位中有一位為低  
  152.                  {  
  153.                         delay_ms(20);  //延時去抖
  154.                         temp=P1;  
  155.                         temp=temp&0x07;  
  156.                         if(temp!=0x07)   //再次確認有按鍵被按下
  157.                           {  
  158.                         switch(temp)  //根據低3位列信號,判斷哪個按鍵被按下
  159.                     {  
  160.                             case 0x06:key=0+3*i;break; //第i行第1列按鍵被按下
  161.                         case 0x05:key=1+3*i;break; //第i行第2列按鍵被按下  
  162.                         case 0x03:key=2+3*i;break; //第i行第3列按鍵被按下                                    
  163.                     }
  164.                                 
  165.                                 do
  166.                                 {
  167.                                         temp=P1;              //再次掃描按鍵
  168.                                           temp=temp&0x07;  
  169.                                   }while(temp!=0x07); //等待按鍵釋放   
  170.                           }  
  171.              }
  172.         }  
  173.         return(key);//掃面結束,返回按鍵值
  174. }        
  175. uchar RdACAdr()//讀當前光標地址
  176. {   
  177.         uchar result;
  178.         P2 = 0xff;        //讀地址前先置高電平,防止誤判
  179.         RS = 0;
  180.         delay_ms(5);
  181.     RW = 1;
  182.         LCDEN = 1;
  183.         delay_ms(5);
  184.         result=P2&0x7f; //去掉最高位忙閑標記,只保留低7位地址值
  185.         LCDEN = 0;
  186.         return result;                     
  187. }

  188. uchar DectectBusyBit(void)//狀態判斷函數(忙/閑?)
  189. {   
  190.         bit result;
  191.         P2 = 0xff;        //讀狀態前先置高電平,防止誤判
  192.         RS = 0;
  193.         delay_ms(5);
  194.     RW = 1;
  195.         LCDEN = 1;
  196.         delay_ms(5);
  197.         result=BF; //若LCM忙,則反復測試,在此處原地踏步;當LCM閑時,才往下繼續
  198.         LCDEN = 0;
  199.         return result;                     
  200. }

  201. void WrComLCD(unsigned char ComVal)//寫命令函數
  202. {
  203.         while(DectectBusyBit()==1);         //先檢測LCM是否空閑
  204.         RS = 0;
  205.         delay_ms(1);
  206.     RW = 0;
  207.         LCDEN = 1;
  208.         P2 = ComVal;
  209.         delay_ms(1);
  210.         LCDEN = 0;        
  211. }

  212. void WrDatLCD(uchar DatVal)//寫數據函數
  213. {
  214.         while(DectectBusyBit()==1);
  215.         RS = 1;
  216.         delay_ms(1);
  217.     RW = 0;
  218.         LCDEN = 1;
  219.         P2 = DatVal;
  220.         delay_ms(1);
  221.         LCDEN = 0;        
  222. }
  223. void WrStrDat(uchar *p)//顯示英文字符串(長度不超過32)
  224. {        
  225.         uchar i=0,t;
  226.    
  227.         while(p[i]!='\0')
  228.         {  
  229.                   WrDatLCD(p[i]);
  230.                 i++;
  231.                 delay_ms(5);
  232.         
  233.                 t=RdACAdr();
  234.         if(t==0x10) WrComLCD(0xc0);//讀當前坐標,如果第1行寫完換行到第2行        
  235.                 if(t==0x50) WrComLCD(0x80);//讀當前坐標,如果第2行寫完換行到第1行        
  236.         }        
  237. }

  238. void LCD_Init(void)//1602初始化函數
  239. {
  240.         //delay(15);
  241.         WrComLCD(0x38);
  242.         //delay(5);     // 功能設定:16*2行、5*7點陣、8位數據接口
  243.         WrComLCD(0x38);
  244.         //delay(5);
  245.         WrComLCD(0x38);   
  246. //多次重復設定功能指令,因為LCD啟動后并不知道使用的是4位數據接口還是8位的,所以開始時總是默認為4位,這樣剛開始寫入功能設定指令時,低4位被忽略,為了可靠,最好多寫幾遍該指令
  247.         WrComLCD(0x01);    // 清屏
  248.         WrComLCD(0x06);    // 光標自增、屏幕不動  
  249.         delay_ms(1);              // 延時,等待上面的指令生效,下面再顯示,防止出現亂碼
  250.         WrComLCD(0x0C);    // 開顯示、關光標
  251. }

  252. void uart_init(unsigned int bps)
  253. { unsigned char t;
  254.   SCON=0x50;    //工作方式一:8位異步收發,波特率可變,允許接收數據
  255.   PCON=0x00;    //SMOD=0
  256.   TI=0;    //軟件清零,表示未發送完成
  257.   EA=1;   //開總中斷
  258.   ET1=1;
  259.   ET0=1;   //開T0
  260.   ES=1;   //開串口中斷
  261.   TMOD=0x21;   //設置T1定時器8位自動裝載模式
  262.   switch(bps)
  263.   { case 1200:t=0xe8;break;
  264.     case 2400:t=0xf4;break;
  265.     case 4800:t=0xfa;break;
  266.     case 9600:t=0xfd;break;
  267.   }
  268.   TH1=t;
  269.   TL1=t;
  270.   TR1=1;   //開啟T1
  271. }
  272. void uart_send(unsigned char ch)
  273. {
  274.   ES=0;   //關串口中斷
  275.   SBUF=ch;
  276.   while(TI==0);  //等待發送完成
  277.   TI=0;  //清除中斷標記
  278.   ES=1;   //開中斷
  279. }
  280. unsigned char receive(void)
  281. {        unsigned char dat;
  282.         while(RI==0);   //等待接收完畢
  283.         RI=0;          //將接收中斷標志RI清0,為接收下一幀數據做準備
  284.      dat=SBUF;         //將接收緩沖器中的數據存入dat
  285.      return dat;        //將接收到的數據返回
  286. }

  287. void main (void)
  288. {         uchar temp=0xff;
  289.         uchar tt=0xff;
  290.         uchar a,b=0;
  291.         uchar  keypadVal=12;
  292.         //TMOD=0x21;  EA=1; ET0=1;
  293.          //ET1=0;  
  294.         //LEN=1;
  295.         PT0=1;
  296.         //PS=1;
  297.         P0=0xff;
  298.         //LEN=0;
  299.           uart_init(9600);//串口初始化
  300.           LCD_Init();//1602液晶屏初始化
  301.           delay_ms(5);   //延時,等待初始化完成
  302.         WrComLCD(0x80);           //設置顯示地址第一行第一位:0X00(0x80+0x00)   
  303.         
  304.           while(1)
  305.     {
  306.                  
  307.                  keypadVal=keypad4_3();
  308.                 if(keypadVal<12)
  309.                 {
  310.                         uart_send(keyval[keypadVal]);
  311.                 }
  312.                 /*if(K1==0)//如按鍵按下,就發送"MCS-51 Microcomputer"
  313.         {
  314.                         b=0;//計數器清0
  315.                   a=strlen(s);//取數組長度
  316.                   for(;b<a;b++)//循環取數據發送,從0到a
  317.               { SBUF=s[b];//發送"MCS-51 Microcomputer"
  318.                 while(!TI);//沒有發送完,就等待.
  319.                 TI=0;//清發送結束標志
  320.                }
  321.            while(!K1);//如果按鍵沒有松開,等待
  322.          }*/
  323.       if(RI||a=='m')//如果接收到數據,就把接收到的數回發給PC
  324.          { uchar pos;
  325.                  
  326.                          RI=0;//清接收標志
  327.                
  328.                         //if(a!='m')
  329.            //{
  330.                                    a=SBUF ;//讀串行口數據
  331.                            SBUF=a;//把從PC機發送過來的數據返回給PC機
  332.                         //        if(a=='m')
  333.                         //        play=~play;
  334.                   // }
  335.                            
  336.                         
  337.            while(!TI);//沒有發送完等待
  338.            TI=0;//清發送完中斷標志
  339.                    if(a>'0'&&a<='8')
  340.                    {
  341.                            if(temp==a)
  342.                                    tt=tt^(_crol_(0x01,a-'0'-1));
  343.                         //P0=0x00;
  344.                         else
  345.                                 tt=tt&(~OpenLight[a-'0'-1]);
  346.                         temp=a;
  347.                         P0=tt;
  348.                    }
  349.                         else
  350.                         {
  351.                                 if(a=='n')
  352.                                 {
  353.                                 //換行
  354.                                          pos=RdACAdr();
  355.                                 if(pos>=0x00&&pos<0x10){ WrComLCD(0xc0);WrStrDat("                ");WrComLCD(0xc0);}//讀當前坐標,如果第1行寫完換行到第2行        
  356.                                         else if(pos>=0x40&&pos<0x50) { WrComLCD(0x80);WrStrDat("                ");WrComLCD(0x80);}//讀當前坐標,如果第2行寫完換行到第1行        
  357.                                 }
  358.                                 else if(a=='c')
  359.                                 {
  360.                                 WrComLCD(0x01);
  361.                                 WrComLCD(0x80);
  362.                                 }
  363.                                 else if(a=='d')
  364.                                 {
  365.                                         //刪除
  366.                                         WrComLCD(0x10);
  367.                                         WrDatLCD(' ');
  368.                                         WrComLCD(0x10);
  369.                                 }
  370.                                 else if(a=='m')
  371.                                 {        //ET0=1;
  372.                                         PlayMusic2();
  373.                                        
  374.                                         //if(play)
  375.                                         //Alarm(5);
  376.                                 }                  
  377.                                 else
  378.                                 {
  379.                                     WrDatLCD(a);
  380.                                            //WrComLCD(0x80);
  381.                                            pos=RdACAdr();
  382.                                 if(pos==0x10) WrComLCD(0xc0);//讀當前坐標,如果第1行寫完換行到第2行        
  383.                                         if(pos==0x50) WrComLCD(0x80);//讀當前坐標,如果第2行寫完換行到第1行        
  384.                                 }
  385.                                 
  386.                         }
  387.        }
  388.          
  389.   }
  390. }
  391. void T0_int() interrupt 1
  392. {
  393. BEEP=!BEEP;
  394. TH0=T[m][0]; TL0=T[m][1];
  395. }  
復制代碼

所有資料51hei提供下載:
PC機控制單片機.zip (259.53 KB, 下載次數: 345)

評分

參與人數 2黑幣 +65 收起 理由
cheng95 + 15
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:34643 發表于 2019-2-3 10:23 | 顯示全部樓層
下載下來試試。
回復

使用道具 舉報

ID:44037 發表于 2019-2-3 16:33 | 顯示全部樓層
謝謝分享   學習一下
回復

使用道具 舉報

ID:164988 發表于 2019-2-3 16:45 | 顯示全部樓層
功能挺強的,下載試試,
回復

使用道具 舉報

ID:85865 發表于 2019-2-3 17:53 | 顯示全部樓層
感覺還不錯
回復

使用道具 舉報

ID:71465 發表于 2019-2-4 23:45 | 顯示全部樓層
下載看看
回復

使用道具 舉報

ID:98767 發表于 2019-2-18 23:55 | 顯示全部樓層
下個參考學習下
回復

使用道具 舉報

ID:23844 發表于 2019-2-19 08:55 | 顯示全部樓層
功能挺強的,下載參考學習
回復

使用道具 舉報

ID:427282 發表于 2019-4-13 19:47 | 顯示全部樓層
很好的   
回復

使用道具 舉報

ID:477360 發表于 2019-4-25 10:51 | 顯示全部樓層
必須好評,認真學習一下
回復

使用道具 舉報

ID:477360 發表于 2019-4-25 10:52 | 顯示全部樓層
不錯,必須認真學習一下
回復

使用道具 舉報

ID:477360 發表于 2019-4-25 10:53 | 顯示全部樓層
看起來不錯,好好學習學習
回復

使用道具 舉報

ID:519500 發表于 2019-4-25 20:02 | 顯示全部樓層
不錯,值得借鑒
回復

使用道具 舉報

ID:545497 發表于 2019-5-23 12:52 | 顯示全部樓層

下載看看
回復

使用道具 舉報

ID:453316 發表于 2019-8-9 10:44 | 顯示全部樓層
感謝!
回復

使用道具 舉報

ID:631877 發表于 2019-10-29 10:07 | 顯示全部樓層
請問這個是可以發送命令給單片機嗎
回復

使用道具 舉報

ID:339320 發表于 2019-11-13 15:31 | 顯示全部樓層
正好需要rs232的程序,先下載下來看看。謝謝分享。
回復

使用道具 舉報

ID:282431 發表于 2019-11-13 16:33 | 顯示全部樓層
功能強大的,下載參考學習一下
回復

使用道具 舉報

ID:445115 發表于 2019-11-26 14:23 | 顯示全部樓層
感謝,值得參考
回復

使用道具 舉報

ID:728490 發表于 2020-4-13 19:48 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:695749 發表于 2020-4-14 21:42 | 顯示全部樓層
能否介紹詳細一些,讓大家愉快學習,學有所獲。
回復

使用道具 舉報

ID:611724 發表于 2020-4-15 11:33 | 顯示全部樓層
謝謝!學習一下
回復

使用道具 舉報

ID:501219 發表于 2020-5-8 09:52 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:355469 發表于 2020-5-8 10:47 | 顯示全部樓層
學習學習。
回復

使用道具 舉報

ID:282431 發表于 2020-5-8 10:49 | 顯示全部樓層
功能挺強的,謝謝!學習一下
回復

使用道具 舉報

ID:470269 發表于 2020-5-24 18:46 | 顯示全部樓層
謝謝分享♥
回復

使用道具 舉報

ID:759496 發表于 2020-5-24 23:29 | 顯示全部樓層

謝謝分享   學習一下
回復

使用道具 舉報

ID:758013 發表于 2020-5-28 18:11 | 顯示全部樓層
不錯 挺好
回復

使用道具 舉報

ID:763926 發表于 2020-5-29 03:33 | 顯示全部樓層
可以下載
試一下
回復

使用道具 舉報

ID:760741 發表于 2020-5-29 17:13 | 顯示全部樓層
這真的是非常優秀的資料
回復

使用道具 舉報

ID:787162 發表于 2020-6-22 22:31 | 顯示全部樓層
正好需要這種資料,謝謝分享
回復

使用道具 舉報

ID:788653 發表于 2020-6-24 14:03 | 顯示全部樓層
下選擇了學習一下
回復

使用道具 舉報

ID:787812 發表于 2020-6-25 09:45 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:787812 發表于 2020-6-25 11:16 | 顯示全部樓層
下載試試
回復

使用道具 舉報

ID:789431 發表于 2020-6-25 12:57 | 顯示全部樓層
正好需要這種資料,謝謝分享
回復

使用道具 舉報

ID:789431 發表于 2020-6-25 13:03 | 顯示全部樓層

正好需要rs232的程序,先下載下來看看。謝謝分享
回復

使用道具 舉報

ID:789443 發表于 2020-6-25 13:24 | 顯示全部樓層
不錯,值得借鑒
回復

使用道具 舉報

ID:600952 發表于 2020-6-26 14:17 | 顯示全部樓層
請問這個是可以發送命令給單片機嗎
正好需要rs232的程序,先下載下來看看。謝謝分享
回復

使用道具 舉報

ID:793342 發表于 2020-6-30 07:46 | 顯示全部樓層
謝謝分享,想下載學習學習
回復

使用道具 舉報

ID:28992 發表于 2021-3-2 08:23 | 顯示全部樓層
Great job, thanks for your sharing.
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线精品一区二区 | 中文字幕日本一区二区 | 91精品国产综合久久久久久丝袜 | 精品国产乱码久久久久久果冻传媒 | 天堂久久天堂综合色 | 精品亚洲一区二区三区 | 天堂网中文字幕在线观看 | 亚洲精品一区二区三区蜜桃久 | 黄色欧美 | 亚洲黄色在线免费观看 | 国产日韩欧美精品一区二区三区 | 午夜精品久久久久久久99黑人 | 婷婷久久综合 | 999视频在线播放 | 久草久| 日韩三级免费观看 | 一级片视频免费 | 美女福利视频网站 | 久久一区视频 | 伊人伊人 | 国产精品成人国产乱一区 | 一级毛片视频 | 黄色国产 | 国产精品激情在线 | 草草精品 | 最新黄色毛片 | 精品久久久久久久人人人人传媒 | 日韩在线小视频 | 久久草视频 | 麻豆久久久久久久久久 | 国产精品一区二区免费 | 免费观看的av毛片的网站 | 最新免费黄色网址 | 99免费视频| 久久伊人影院 | 欧洲在线视频 | 国产精品欧美精品 | 欧美精品一区二区在线观看 | 国产精品视频 | www.成人在线视频 | 在线播放中文字幕 |