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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3852|回復: 1
打印 上一主題 下一主題
收起左側

4位數碼管時鐘單片機程序+PCB文件可直接打樣

[復制鏈接]
跳轉到指定樓層
樓主
求高手改時鐘顯示閃爍程序 和DS3231低溫度程序   程序是在論壇里下載的 還想在修改哈  望高手幫幫忙
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include <reg52.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint  unsigned int


  5. sbit SDA=P2^7;     //數據傳送位SDA        
  6. sbit SCL=P2^6;     //時鐘控制位SCL
  7. sbit INT=P3^3;     //中斷位
  8. sbit RESET=P3^2;   //復位
  9. sbit smg4=P1^1;    //位碼1聲明 分個位
  10. sbit smg3=P1^3;    //位碼2聲明 分十位
  11. sbit smg2=P1^5;    //位碼3聲明 時個位
  12. sbit smg1=P1^7;    //位碼4聲明 時十位
  13. sbit k1=P1^4;      //按鍵k1的聲明
  14. sbit k2=P1^6;      //按鍵k2的聲明
  15. sbit k3=P3^7;      //按鍵k3的聲明
  16. sbit bell=P3^5;    //蜂鳴器聲明
  17. sbit gm=P2^1;      //測光聲明,黑暗時等于1

  18. bit gm_en=0;       //光敏使能信號;
  19. bit  ack;          //應答標志位

  20. char code dis_code[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};//數碼管沒有按a-h的順序連接,自定義的顯示字庫,0-9,A-F
  21. //0X28,0XEE,0X32,0XA2,0XE4,0XA1,0X21,0XEA,0X20,0XA0,0X60,0X25,0X37,0X26,0X31,0X71
  22. uchar bell_en=0,x=1;//鬧鐘使能信號,任意鍵關閉鈴聲標志位
  23. uchar tabtime[]={0x00,0x00,0x07,0x02,0x23,0x10,0x18};                //首次上電時默認的時間2018年 星期二 10月23日 07:00:00
  24. uchar year,month,day,week,hour,minute,second,temperature;             //從1302讀出的實時時間數據
  25. uchar gm_time=60,temp_en=0,n=0,a=0,b=0;       //gm_time光敏控制亮度值,n是按鍵標志位,a產生一個1秒的計時,b控制字符閃爍,temp_en溫度顯示標志

  26. uint  t=0;      //用來產生30秒的計時
  27. uint  TtempH,TtempL;    //定義溫度高位,低位

  28. char shi,fen,miao,b_shi=7,b_fen=0; //必須使用符號型:數據暫存單元shi/fen/miao,鬧鈴時間b_shi,b_fen,

  29. void baojing();               //報警函數
  30. void delay_50us(uint t);      //延時50*T微妙函數的聲明
  31. void Start_I2C();             //I2C總線產生起始信號函數
  32. void Stop_I2C();              //I2C總線產生停止信號函數
  33. void Ack_I2C(bit a);          //接收應答信號函數;
  34. void SendByte(uchar c);       //向I2C總線寫入一個字節的數據函數
  35. uchar RcvByte();              //字節數據接收函數
  36. uchar write_byte(uchar addr, uchar write_data);//將一個字節寫入DS3231指定地址
  37. uchar read_byte(uchar addr);  //從DS3231指定地址讀一個字節
  38. void Set_Time();              //設置時間
  39. void get_time(void);          //讀取時間
  40. void get_Temperature();       //讀取溫度
  41. void show_Temperature();      //顯示溫度
  42. void init();                  //初始化函數
  43. void timer0();                //定時器0中斷服務程序
  44. void display(uchar s,f);      //顯示子程序
  45. void key();                   //按鍵控制函數


  46. void baojing()//報警函數
  47. {
  48.    uint j=10,i=10;
  49.    bell=0;
  50.    while(i--)display(shi,fen);
  51.    bell=1;
  52.    while(j--)display(shi,fen);
  53. }



  54. //函數名稱:void delay_50US(unsigned int t)
  55. //功能: 延時50*t(us)
  56. void delay_50us(uint t)
  57. {
  58.   unsigned char j;
  59.   for(;t>0;t--)
  60.   {
  61.     for(j=19;j>0;j--);
  62.   }
  63. }


  64. void Start_I2C()            //I2C總線產生起始信號函數
  65. {
  66.     SDA=1;                  //拉高數據線,發送起始條件的數據信號
  67.     SCL=1;                  //拉高時鐘線
  68.     SDA=0;                  //在時鐘線為高電平時,拉低數據線,產生起始信號
  69.     SCL=0;                  //鉗住I2C總線,準備發送或接收數據
  70. }


  71. void Stop_I2C()             //I2C總線產生停止信號函數
  72. {
  73.     SDA=0;                  //拉低數據線,發送結束條件的數據信號
  74.     SCL=1;                  //拉高時鐘線,發送結束條件的時鐘信號
  75.     SDA=1;                  //時鐘時線為高電平時,拉高數據線,發送I2C總線結束信號
  76. }


  77. /********************************************************************
  78.                       應答子函數
  79. 函數原型:   void I2CACK(bit a);
  80. 功能:       主控器進行應答信號(可以是應答或非應答信號,由位參數a決定)
  81. ********************************************************************/

  82. void Ack_I2C(bit a)         //接收應答信號函數;a是定義的一個位變量,來暫存應答狀態。
  83. {

  84.     if(a==0)
  85.         SDA=0;              //在此發出應答或非應答信號
  86.     else
  87.         SDA=1;
  88.     SCL=1;
  89.     SCL=0;                  //清時鐘線,鉗住I2C總線以便繼續接收
  90. }




  91. /*******************************************************************
  92.                   字節數據發送函數               
  93. 函數原型:     void   SendByte(uchar c);
  94. 功能:      將數據c發送出去,可以是地址,也可以是數據,發完后等待應答,并對
  95.            此狀態位進行操作.(不應答或非應答都使ack=0)
  96.            ack=1        發送數據正常,
  97.            ack=0        被控器無應答或損壞。
  98. ********************************************************************/

  99. void SendByte(uchar c)                      //向I2C總線寫入一個字節的數據函數
  100. {
  101.     uchar BitCnt;
  102.    
  103.     for(BitCnt=0;BitCnt<8;BitCnt++)         //要傳送的數據長度為8位
  104.     {
  105.         if((c<<BitCnt)&0x80)
  106.             SDA=1;                          //判斷發送位
  107.         else
  108.             SDA=0;               

  109.           SCL=1;                            //置時鐘線為高,通知被控器開始接收數據位
  110.           SCL=0;
  111.     }
  112.    
  113.     SDA=1;                                  //8位發送完后釋放數據線,準備接收應答位
  114.     SCL=1;
  115.     if(SDA==1)
  116.         ack=0;   
  117.     else
  118.         ack=1;                              //判斷是否接收到應答信號
  119.     SCL=0;
  120. }




  121. /*******************************************************************
  122.                   字節數據接收函數               
  123. 函數原型:     uchar   RcvByte();
  124. 功能:      用來接收從器件傳來的數據,并判斷總線錯誤(不發應答信號),
  125.            發完后請用應答函數應答從機。  
  126. ********************************************************************/
  127. uchar RcvByte()    //字節數據接收函數
  128. {
  129.    uchar retc;
  130.    uchar BitCnt;

  131.    retc=0;
  132.    SDA=1;                           //置數據線為輸入方式
  133.    for(BitCnt=0;BitCnt<8;BitCnt++)
  134.    {
  135.         SCL=0;                      //置時鐘線為低,準備接收數據位
  136.         SCL=1;                      //置時鐘線為高使數據線上數據有效
  137.         retc=retc<<1;
  138.         if(SDA==1)
  139.             retc=retc+1;            //讀數據位,接收的數據位放入retc中
  140.    }
  141.    SCL=0;
  142.    return(retc);
  143. }







  144. /***********將一個字節寫入DS3231指定地址***********/

  145. uchar write_byte(uchar addr, uchar write_data)
  146. {
  147.     Start_I2C();
  148.     SendByte(0xD0);
  149.     if (ack == 0)
  150.         return 0;
  151.    
  152.     SendByte(addr);   
  153.     if (ack == 0)
  154.         return 0;
  155.    
  156.     SendByte(write_data);
  157.     if (ack == 0)
  158.         return 0;
  159.    
  160.     Stop_I2C();
  161.     return 1;
  162. }

  163. /************從DS3231指定地址讀一個字節************/
  164. uchar read_byte(uchar addr)
  165. {
  166.     uchar read_data;

  167.     Start_I2C();
  168.     SendByte(0xD0);
  169.     if(ack==0)
  170.         return(0);
  171.    
  172.     SendByte(addr);
  173.     if(ack==0)
  174.         return(0);
  175.        
  176.     Start_I2C();

  177.     SendByte(0xD1);
  178.     if(ack==0)
  179.         return(0);

  180.     read_data = RcvByte();
  181.     Ack_I2C(1);
  182.     Stop_I2C();
  183.         return read_data;
  184. }




  185. /**************************設置時間******************************************/


  186. void Set_Time()
  187. {
  188.     uchar i;
  189.     uchar ucAddr=0x00;      //秒的地址
  190.     for(i=0;i<7;i++)
  191.     {
  192.        write_byte(ucAddr,tabtime[i]);//從秒開始連續寫入秒分時星期日月年
  193.        ucAddr+=1;
  194.         }
  195. }





  196. /*********************讀取時間**********************/
  197. void get_time(void)
  198. {
  199.     hour=read_byte(0x02)/16*10+read_byte(0x02)%16;
  200.         minute=read_byte(0x01)/16*10+read_byte(0x01)%16;    //因只顯示時、分,故可只讀取時、分
  201.     year=read_byte(0x06)/16*10+read_byte(0x06)%16;
  202.        
  203.         /*
  204.     uchar i;
  205.         uchar ucCurtime[7];
  206.         uchar ucAddr = 0x00;     //秒地址

  207.         for(i=0;i<7;i++)
  208.         {ucCurtime[i]=0;}
  209.        
  210.         for(i=0; i<7; i++)
  211.         {
  212.                 ucCurtime[i] = read_byte(ucAddr);  //格式為: 從秒地址開始連續讀取,秒分時星期日月年。               
  213.                 ucAddr += 1;
  214.         }

  215.         year=ucCurtime[6]/16*10+ucCurtime[6]%16;
  216.         month=ucCurtime[5]/16*10+ucCurtime[5]%16;
  217.         day=ucCurtime[4]/16*10+ucCurtime[4]%16;
  218.         week=ucCurtime[3]/16*10+ucCurtime[3]%16;
  219.         hour=ucCurtime[2]/16*10+ucCurtime[2]%16;
  220.         minute=ucCurtime[1]/16*10+ucCurtime[1]%16;
  221.         second=ucCurtime[0]/16*10+ucCurtime[0]%16;
  222.         */
  223. }




  224. /*********************讀取溫度**********************/
  225. void get_Temperature()
  226. {
  227.     TtempH=read_byte(0X11);   //讀溫度高字節
  228.         //因數碼管位數只有四位,故溫度的小數部分不顯示,可以不用讀溫度低字節
  229.         TtempL=read_byte(0x12);  //原為注釋不用ox12   //讀溫度低字節
  230.         TtempL=(TtempL>>6)*25;   //原為注釋不用    //將BIT7,BIT6的數據移入BIT1,BIT0位;分辨率數值擴大100倍便于整數運算
  231.    
  232. }
  233. void show_Temperature()   //顯示溫度
  234. {
  235.     if((TtempH&0X80)==0x80)   //判斷首字節為1即為零下溫度
  236.     {
  237.            P0=0xBF;           //0xbf第一位數碼管顯示“-”
  238.            smg1=0;
  239.            delay_50us(gm_time);
  240.        smg1=1;
  241.           //////
  242.          P0=dis_code[TtempL/10];//送顯示斷碼  十位
  243.                 smg2=0;
  244.         delay_50us(gm_time);
  245.                 smg2=1;   
  246.          P0=dis_code[TtempL%10];//送顯示斷碼  個位
  247.         smg3=0;        
  248.     delay_50us(gm_time);
  249.     smg3=1;

  250.     P0=0xC6;               //送顯示斷碼  ℃
  251.     smg4=0;
  252.     delay_50us(gm_time);
  253.     smg4=1;  
  254.              
  255.    }


  256.         else
  257.            smg1=1;              //第一位數碼管不顯示


  258.     if((TtempH/10)==0)     //原為0 溫度低于10度時,即為個位時,第二位數碼管位不顯示
  259.        smg2=1;           //原為=1
  260.     else
  261.     {
  262.         P0=dis_code[TtempH/10];//送顯示斷碼  十位
  263.                 smg2=0;
  264.         delay_50us(gm_time);
  265.                 smg2=1;
  266.     }
  267.                        
  268.     P0=dis_code[TtempH%10];//送顯示斷碼  個位
  269.         smg3=0;        
  270.     delay_50us(gm_time);
  271.     smg3=1;

  272.     P0=0xC6;               //送顯示斷碼  ℃
  273.     smg4=0;
  274.     delay_50us(gm_time);
  275.     smg4=1;
  276.        
  277.        

  278. }


  279. void init()        //初始化函數
  280. {
  281.    write_byte(0x0e,0x00);    //設定DS3231的控制寄存器
  282.    IE=0X82;    //設定單片機的中斷允許控制寄存器,(1000 0010)
  283.    TMOD=0X01;    //0000 0001選擇定時器0的工作方式1 選擇定時器1的工作方式0
  284.    TH0=(65536-50000)/256;//初值15536定時50mS
  285.    TL0=(65536-50000)%256;
  286.    TR0=1; //設定TCON的TR0位,開啟定時器0
  287. }

  288. void timer0() interrupt 1  //定時器0中斷服務程序,用來設置冒號閃爍頻率
  289. {
  290.    TH0=(65536-50000)/256;//進入中斷重新賦初值15536
  291.    TL0=(65536-50000)%256;//計數5萬次(50毫秒)
  292.    a++;                  //標志位b,用來確定光標閃爍頻率
  293.    t++;
  294.    if(t==600)t=0;         //50ms*600次=30秒,用于溫度顯示,30秒一次
  295.    if(t>520)temp_en=1;    //溫度顯示持續3秒
  296.    else temp_en=0;
  297.    if(a==20)a=0;//a=20 時被清零  產生一個1秒的計時。
  298. }




  299. //四位數碼管顯示程序
  300. void  display(uchar s,f)
  301. {
  302.    if((s/10)<1) //小于10,第一位不顯示
  303.       smg1=1;
  304.    else
  305.    {
  306.       P0=dis_code[s/10];//送顯示斷碼  時的十位
  307.       if((n==1||n==3)&&a<5)
  308.         smg1=1;              //鎖存數據
  309.       else
  310.             smg1=0;
  311.       delay_50us(gm_time);
  312.       smg1=1;
  313.    }


  314.       P0=dis_code[s%10];      //送顯示斷碼         時的個位
  315.    if((n==1||n==3)&&a<5)         
  316.       smg2=1;
  317.    else
  318.       smg2=0;                   //鎖存數據
  319.    delay_50us(gm_time);
  320.    smg2=1;         
  321.   
  322.    
  323.    
  324.    if((n==2||n==4)&&a<5)        
  325.       P0=0x7F;            //字符閃爍,小點不閃
  326.    else if(a>=10)                        
  327.       P0=dis_code[f/10]-0x80; //小點閃爍,字符不閃
  328.    else                                   
  329.       P0=dis_code[f/10];      //送顯示斷碼  分的十位
  330.    smg3=0;
  331.    delay_50us(gm_time);
  332.    smg3=1;



  333.    if((n==2||n==4)&&a<5)        
  334.       P0=0x7F;            //字符閃爍,小點不閃
  335.    else if(a>=10)                        
  336.       P0=dis_code[f%10]-0x80; //小點閃爍,字符不閃
  337.    else                                   
  338.       P0=dis_code[f%10];      //送顯示斷碼  分的個位
  339.    smg4=0;
  340.    delay_50us(gm_time);
  341.    smg4=1;

  342. }




  343. void key()                        //按鍵控制函數
  344. {
  345.    
  346.    if(k1==0&&k2==0)          //k1k2同時按下,切換鬧鈴開關 并且在按下之后查看鬧鐘時間松手后恢復時間顯示
  347.    {
  348.       delay_50us(40);
  349.       if(k1==0&&k2==0)
  350.       {        
  351.          if(bell_en==1&&b_shi==hour&&b_fen==minute&&x==1)
  352.                x=0;                      //如果處于響零狀態,就任意鍵關閉響鈴   
  353.              shi=b_shi;
  354.          fen=b_fen;
  355.          bell_en=!bell_en;
  356.          if(bell_en==1)       //使能的話報警兩聲
  357.          {
  358.             
  359.                     baojing();
  360.                         baojing();
  361.          }
  362.                  else
  363.                  {
  364.             
  365.                     baojing();    //無效的話報警一聲
  366.                  }
  367.          while(k1==0&&k2==0)
  368.                  display(shi,fen);//等待松手
  369.          shi=hour;
  370.          fen=minute;
  371.       }
  372.    }
  373.    if(k1==0&&k3==0) //k1k3同時按下,切換光控功能
  374.    {
  375.       delay_50us(40);
  376.       if(k1==0&&k3==0)
  377.       {        
  378.          gm_en=!gm_en;
  379.                  if(bell_en==1&&b_shi==hour&&b_fen==minute&&x==1)
  380.                x=0;                      //如果處于響零狀態,就任意鍵關閉響鈴   
  381.          if(gm_en==1)       //使能的話報警兩聲
  382.          {
  383.                     baojing();
  384.                         baojing();
  385.          }
  386.          else baojing();    //無效的話報警一聲
  387.          while(k1==0&&k3==0)
  388.                  display(88,88);//等待松手
  389.       }
  390.    }
  391.    
  392.   
  393.    if(k2==0&&k3==0)                         //K2,K3同時按下,進入 調時間 和  鬧鈴狀態
  394.    {                        //功能鍵k1被按下
  395.       delay_50us(40);      //消抖延時
  396.       if(k2==0&&k3==0)
  397.           {
  398.              if(bell_en==1&&b_shi==hour&&b_fen==minute&&x==1)
  399.                x=0;                      //如果處于響零狀態,就任意鍵關閉響鈴      
  400.              while(k2==0&&k3==0)
  401.                   n=1;
  402.           
  403.       }

  404.                                //要加入數字閃爍代碼
  405.    }        

  406.    
  407.    
  408.    
  409.    
  410.    if(n==0)//狀態0,正常顯示時間
  411.    {
  412.       b=a; //b是控制小數點閃爍的
  413.       shi=hour;
  414.       fen=minute;
  415.    }


  416.    
  417.    if(n==1)    //狀態1:調節時間的"時"
  418.    {
  419.       b=10;
  420.       
  421.           if(k1==0)
  422.           {
  423.              delay_50us(40);      //消抖延時
  424.              if(k1==0)   
  425.          {
  426.                     while(k1==0)
  427.                       n=2;
  428.                  }
  429.       }
  430.           
  431.           if(k2==0)
  432.           {
  433.              delay_50us(40);      //消抖延時
  434.              if(k2==0)//k2被按下
  435.                    shi=shi+1;   //小時加一
  436.          if(shi>=24)
  437.            shi=0;   //達到24清零
  438.          while(k2==0)
  439.          display(shi,fen);
  440.       }
  441.       
  442.           if(k3==0)
  443.           {
  444.              delay_50us(40);      //消抖延時
  445.              if(k3==0) //k3被按下
  446.            shi--; //小時減一
  447.          if(shi<0)
  448.            shi=23;//小于0,重新賦值
  449.                  while(k3==0)
  450.                  display(shi,fen);
  451.       }
  452.    }
  453.   
  454.    if(n==2)//狀態2:調節時間的"分"
  455.    {        
  456.       b=10;
  457.       
  458.           if(k1==0)
  459.           {
  460.              delay_50us(40);      //消抖延時
  461.              if(k1==0)   
  462.                  {
  463.                     while(k1==0)
  464.              n=3;
  465.                  }
  466.          tabtime[2]=shi/10*16+shi%10;
  467.          tabtime[1]=fen/10*16+fen%10;
  468.       
  469.              hour=shi;
  470.          minute=fen;

  471.          Set_Time();//設置DS1302的初始時間              
  472.                  
  473.       }          
  474.           
  475.           
  476.           if(k2==0)//k2被按下
  477.       {
  478.          delay_50us(40);      //消抖延時
  479.          if(k2==0)
  480.             fen++;//分加一
  481.          if(fen>=60)
  482.             fen=0;//分到達60 分清零   
  483.                  while(k2==0)
  484.                     display(shi,fen);
  485.       }
  486.       
  487.           if(k3==0)//k3被按下
  488.       {            
  489.          delay_50us(40);      //消抖延時
  490.          if(k3==0)
  491.             fen--;//分減一
  492.          if(fen<0)
  493.             fen=59;//分小于0,分重新賦值59   
  494.                  while(k3==0)
  495.                  display(shi,fen);                                       
  496.       }

  497.   
  498.    }
  499.    
  500.    
  501.    if(n==3)//狀態三:調節鬧鈴"時"
  502.    {        

  503.       b=10;
  504.       shi=b_shi;
  505.       fen=b_fen;   
  506.    
  507.           if(k1==0)
  508.           {
  509.              delay_50us(40);      //消抖延時
  510.              if(k1==0)   
  511.                  {
  512.                     while(k1==0)
  513.                          n=4;
  514.                  }
  515.       }      
  516.           
  517.           if(k2==0)//k2被按下
  518.       {        
  519.          delay_50us(40);      //消抖延時
  520.          if(k2==0)
  521.             b_shi++;//鬧鈴時間加一
  522.          if(b_shi>=24)
  523.             b_shi=0;//鬧鈴時間清零     
  524.                  while(k2==0)
  525.                  display(shi,fen);
  526.       }
  527.       
  528.           if(k3==0)//k3被按下
  529.       {           
  530.          delay_50us(40);      //消抖延時
  531.          if(k3==0)
  532.             b_shi--;//鬧鈴時間減一
  533.          if(b_shi<0)
  534.             b_shi=23;//鬧鈴時間
  535.                  while(k3==0)
  536.                  display(shi,fen);
  537.       }

  538.    }
  539.    
  540.    
  541.    if(n==4)//狀態四 :調節鬧鈴的"分"
  542.    {      
  543.       b=10;
  544.       shi=b_shi;
  545.       fen=b_fen;
  546.       
  547.           if(k1==0)
  548.           {
  549.              delay_50us(40);      //消抖延時
  550. ……………………

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


所有資料51hei提供下載:
0.8寸數碼管 PCB 電路圖 程序.rar (3.56 MB, 下載次數: 82)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:53978 發表于 2021-10-7 15:04 | 只看該作者
本帖最后由 smartphone 于 2021-10-7 17:54 編輯

按照這個代碼在開發板上測試了可以正常顯示,但數碼管閃爍,不知道什么原因,有大神能指點一下嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天干视频网 | 成人在线小视频 | 久久av一区二区三区 | 欧美日韩在线一区二区 | 中文字幕蜜臀av | 人人做人人澡人人爽欧美 | 日本不卡视频在线播放 | 久久精品一区二区视频 | 亚洲一区二区三区四区五区中文 | 亚洲一区二区精品视频在线观看 | 中文字幕乱码一区二区三区 | 欧美一级大片免费观看 | 九九久久久 | 播放一级黄色片 | 国产sm主人调教女m视频 | 91在线精品视频 | 免费99视频 | 欧美日韩在线一区二区三区 | 欧美一级黄| 玖玖国产精品视频 | 精品欧美一区二区中文字幕视频 | 成人国产精品久久 | 激情五月婷婷综合 | 天堂一区| 操射视频 | 国产毛片在线看 | 欧美美女被c | 美国一级片在线观看 | 国产精品99久久久精品免费观看 | 精品入口麻豆88视频 | 日本一区二区高清视频 | 日韩一二三区视频 | 中文字幕免费视频 | 18av在线播放 | 国产网站在线免费观看 | 毛片电影 | 人操人人 | 久久精品国产一区二区三区不卡 | 欧美成人免费在线视频 | 亚洲欧美一区二区三区视频 | 亚洲男人的天堂网站 |