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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機數碼管時鐘電路圖+源碼

  [復制鏈接]
跳轉到指定樓層
樓主
用STC89c52單片機,12M晶振。計時用T2定時器,16位自動重裝模式  基本功能如下: 可以顯示年份、月、日、時間,有鬧鐘功能,有倒計時功能。 上電默認顯示時間,可通過按鍵切換顯示年份、日期、鬧鐘、倒計時,顯示一定時間后自動返回到時間顯示。 在相應的顯示狀態下按設置鍵進行相應的設置。如在時間顯示時按設置鍵可調整時間。其余類推倒計時最多可以倒數99小時59分59秒,設置完倒計時時間后進入倒數狀態,閃爍顯示倒數時間,中途可按鍵退出,倒數結束后鈴響1分鐘返回時間顯示。 鬧鐘可選擇開或關,鬧鈴響1分鐘停止。

電路原理圖如下:


制作出來的實物圖如下:


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

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

  4. #define DispOFF 10;        //顯示關
  5. #define POINT 21;        //顯示小點
  6. #define F 22;
  7. #define H 23;
  8. #define M 24;
  9. #define N 25;
  10. #define O 26;

  11. sbit buzzer=P3^7;        //蜂鳴器控制腳

  12. uchar T2Count;
  13. uint T0Count;
  14. uchar key,key_new,key_old,KeyPressTime;
  15. uchar status;
  16. uchar month,day,hour,min,sec,AlarmHr,AlarmMin;
  17. uchar LastDay;
  18. uchar AlmTime,AlmCount,DispTime;
  19. uchar CountHr,CountMin,CountSec,CountSetSta=0;
  20. uint year;
  21. bit TimeAdj,AlarmAdj,AlarmSta;
  22. bit adjust,DigiBit;
  23. //數碼管顯示代碼
  24. uchar code LedCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,
  25.                       0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f,
  26.                                           0x8e,0x89,0xc8,0xab,0xa3
  27.                      };
  28. uchar Disp[4];

  29. void LedScan(void);
  30. void KeyScan(void);
  31. void years(void);
  32. void date(void);
  33. void timer(void);
  34. void alarmClock(void);
  35. void CountDown(void);
  36. void ring(void);
  37. uchar DaysCount(void);

  38. void Init(void)
  39. {
  40. TH2=0x3c;TL2=0xb0;
  41. RCAP2H=0x3c;RCAP2L=0xb0;
  42. EA=1;ET2=1;
  43. TR2=1;
  44. TMOD=0x01;
  45. //TH0=0x3c;
  46. //TL0=0xb0;
  47. ET0=1;
  48. P1=0xff;
  49. year=2011;
  50. month=1;
  51. day=1;
  52. hour=0;
  53. min=0;
  54. status=2;
  55. buzzer=1;
  56. }
  57. /************主函數*************/
  58. void main(void)
  59. {
  60. Init();
  61. while(1)
  62.    {
  63.     KeyScan();
  64.     LastDay=DaysCount();
  65.         switch(status)        //顯示狀態                               
  66.              {
  67.                   case 0:years();break;                        //顯示年
  68.                   case 1:date();break;                        //顯示日期
  69.                   case 2:timer();break;                        //顯示時間
  70.           case 3:alarmClock();break;        //顯示鬧鐘時間
  71.                   case 4:CountDown();break;                //顯示倒計時
  72.          }
  73.     LedScan();       
  74.     ring();
  75.    }
  76. }

  77. /***************定時器T0中斷函數,用于倒計時**************/
  78. void timer0(void) interrupt 1 using 2
  79. {TH0=0x3c;
  80. TL0=0xb0;
  81. T0Count++;
  82. if(CountHr||CountMin||CountSec)
  83.         {if(T0Count==20)
  84.                 {CountSec--;T0Count=0;}
  85.          if(CountSec>=60)
  86.                 {CountSec=59;CountMin--;}
  87.          if(CountMin>=60)
  88.                 {CountMin=59;CountHr--;}
  89.         }
  90. if(T0Count==1200)
  91.         {TR0=0;
  92.          T0Count=0;
  93.         }
  94. }
  95. /**************定時器T2中斷函數,用于計時**************/
  96. void timer2(void) interrupt 5 using 1
  97. {
  98. TF2=0;
  99. if(++T2Count==20)
  100.    {sec++;T2Count=0;}
  101. if(!TimeAdj)        //時間調整時,暫停計時
  102.         {if(sec==60)
  103.                    {min++;sec=0;}
  104.          if(min==60)
  105.                    {hour++;min=0;}
  106.          if(hour==24)
  107.                    {day++;hour=0;}
  108.          if(day>LastDay)
  109.                    {month++;day=1;}
  110.          if(month>12)
  111.             {year++;month=1;}
  112.         }
  113. }

  114. void delay(uchar x)
  115. {
  116. uchar k;
  117. while(x--)
  118.       for(k=0;k<123;k++);
  119. }
  120. /***********數碼管掃描顯示函數***************/
  121. void LedScan(void)
  122. {
  123. uchar i;
  124. uchar temp=0x08;
  125. for(i=0;i<4;i++)
  126.     {
  127.      P0=LedCode[Disp[i]];        //送段碼
  128.      P2=~temp;temp>>=1;                //LED顯示位控制
  129.      delay(3);                                //延時
  130.          P2=0xff;                                //關顯示
  131.     }
  132. }
  133. /**********按鍵掃描程序***************/
  134. void KeyScan(void)
  135. {
  136. if((P1&0x0f)!=0x0f)                //如果按下按鍵
  137.    {if(KeyPressTime>0)                //延時
  138.           {
  139.            switch(~(P1|0xf0))        //判斷鍵值
  140.              {
  141.               case 0x01:key_new=1;break;
  142.               case 0x02:key_new=2;break;
  143.               case 0x04:key_new=3;break;
  144.                           case 0x08:key_new=4;break;
  145.                          }
  146.           }
  147.         KeyPressTime++;                        //按鍵時間加1
  148.    }
  149. else                                                //如果沒有按鍵按下
  150.    {key_new=0;                                //鍵值清零
  151.     KeyPressTime=0;                        //按鍵時間清零
  152.    }
  153. if(key_new!=key_old)                //如果前后兩次鍵值不同
  154.     {key=key_new;                        //鍵值等于本次鍵值
  155.         }
  156. else                                                //如果前后兩次鍵值相同(按住按鍵未釋放)
  157.    {key=0;                                        //鍵值清零
  158.     if(KeyPressTime>100)        //按鍵時間大于100,差不多1秒(作長按鍵處理)
  159.           {KeyPressTime-=30;        //按鍵時間減30,當累加到100再次動作,相當于300毫秒按鍵一次,
  160.            key=key_new;                        //得到本次鍵值
  161.           }
  162.    }
  163. key_old=key_new;                   //記住本次鍵值
  164. }
  165. /***********計算本月有多少天**************/
  166. uchar DaysCount(void)                                                       
  167. {
  168. if(month==4||month==6||month==9||month==11)                //4、6、9、11月為30天
  169.    return 30;
  170. else if(month!=2)                                                                //1、3、5、7、8、10、12月為31天
  171.         return 31;
  172. if(month==2)
  173.   {if((year%4==0&&year%100!=0)||(year%400==0))
  174.       return 29;                                                                //閏年2月為29天
  175.    else
  176.       return 28;                                                                //非閏年2月為28天
  177.   }
  178. }
  179. /**************年函數**************/
  180. void years(void)
  181. {
  182. if(adjust)                //設置,調整年
  183.    {
  184.         switch(key)        //處理按鍵
  185.                 {case 1:{
  186.                              year++;                //年加1
  187.                                  break;
  188.                                 }
  189.                  case 2:{
  190.                                  year--;                //年減1
  191.                  break;
  192.                                 }
  193.                  case 3:{
  194.                                  adjust=0;                //退出設置
  195.                                  DispTime=0;
  196.                                  break;
  197.                                  }
  198.             }
  199.    }
  200. else
  201.    {
  202.     if(key==2) status++;                //顯示狀態加1,進入日期顯示
  203.         if(key==3) adjust=1;                //進入設置
  204.         if(++DispTime==200)                        //顯示時間加1,系統默認顯示時間,通過按鍵切換其他顯示一段時間后自動返回時間顯示
  205.                 {status=2;                                //利用程序循環執行一次的時間作延時,每循環一次DispTime+1,加到200后退出返回時間顯示
  206.                   DispTime=0;                        //DispTime清零
  207.                 }
  208.    }
  209. Disp[0]=year/1000;                                //年份千位
  210. Disp[1]=year/100%10;                        //年份百位
  211. Disp[2]=year/10%10;                        //年份十位
  212. Disp[3]=year%10;                                //年份個位
  213. if(T2Count<=10)
  214.    {if(adjust)                                        //如果調整年份,顯示閃爍
  215.            Disp[0]=Disp[1]=Disp[2]=Disp[3]=DispOFF;                                 
  216.    }
  217. }
  218. /***********日期函數***************/
  219. void date(void)
  220. {
  221. if(adjust)        //調整日期
  222.    {
  223.         switch(key)
  224.             {case 1:{
  225.                                  if(DigiBit==0) month++;        //月加1
  226.                                  else day++;                                //日加1
  227.                  if(month>12) month=1;                //月大于12,月份等于1
  228.                                  if(day>LastDay) day=1;                //日大于本月最后一日,日等于1
  229.                                  break;
  230.                                 }
  231.                  case 2:{
  232.                                  if(DigiBit==0) month--;        //月減1
  233.                                  else day--;                                //日減1
  234.                                  if(month==0) month=12;                //月=0,月份=12
  235.                                  if(day==0) day=LastDay;        //日=0,日等于本月最后一天
  236.                  break;
  237.                                 }
  238.                  case 3:{
  239.                                  DigiBit=~DigiBit;                        //月、日設置選擇切換
  240.                                  if(DigiBit==0)                                //DigiBit=0 選擇月 DigiBit=1 選擇日
  241.                                           {adjust=0;                               
  242.                                          DispTime=0;
  243.                                         }
  244.                                  break;
  245.                                 }
  246.                 }                         
  247.    }
  248. else
  249.    {
  250.         if(key==1) {status--;DispTime=0;}                //顯示年,顯示時間清零重新計算
  251.     if(key==2) status++;                                        //顯示時間
  252.         if(key==3) adjust=1;                                        //進入設置
  253.         if(++DispTime==200)                                                //顯示時間到,返回時間顯示
  254.                 {status=2;
  255.                   DispTime=0;
  256.                 }
  257.    }
  258. Disp[0]=month/10;
  259. Disp[1]=month%10;
  260. Disp[2]=day/10;
  261. Disp[3]=day%10+11;
  262. if(T2Count<=10)
  263.    {if(adjust)
  264.           {
  265.            if(!DigiBit)                        //如果調整日,日顯示閃爍
  266.              {
  267.                   Disp[0]=DispOFF;
  268.                   Disp[1]=DispOFF;
  269.                  }
  270.            else                                        //如果調整月,月顯示閃爍
  271.                  {
  272.                   Disp[2]=DispOFF;
  273.                   Disp[3]=POINT;
  274.                  }
  275.           }                                         
  276.    }
  277. }
  278. /**************時間函數****************/
  279. void timer(void)
  280. {
  281. if(TimeAdj)        //調整時間
  282.    {
  283.         switch(key)
  284.                 {case 1:{                        //up/加 按鍵
  285.                                  if(DigiBit==0) hour++;        //根據按鍵選擇時間、分鐘加調整
  286.                                  else min++;
  287.                  if(hour==24) hour=0;
  288.                                  if(min==60) min=0;
  289.                                  break;
  290.                                 }
  291.                  case 2:{                        //down 減 按鍵
  292.                                  if(DigiBit==0) hour--;        //時間、分鐘減調整
  293.                                  else min--;
  294.                                  if(hour>=24) hour=23;
  295.                                  if(min>=60) min=59;
  296.                  break;
  297.                                 }
  298.                  case 3:{
  299.                                  DigiBit=~DigiBit;                //DigiBit=0 小時,DigiBit=1 分鐘
  300.                                  if(DigiBit==0)                 //時間設置完后,秒清零,定時器重新計時
  301.                                          {sec=0;
  302.                                          TR2=0;
  303.                                          TH2=0x3c;TL2=0xb0;
  304.                                          T2Count=0;
  305.                                          TR2=1;
  306.                                          TimeAdj=0;
  307.                                         }
  308.                                  break;
  309.                                 }
  310.                    }
  311.    }
  312. else
  313.    {
  314.         if(key==1) {status--;DispTime=0;}
  315.     if(key==2) {status++;DispTime=80;}//進入鬧鐘顯示,顯示時間初始值為80
  316.         if(key==3) TimeAdj=1;
  317.    }
  318. Disp[0]=hour/10;
  319. Disp[1]=hour%10;
  320. Disp[2]=min/10+11;
  321. Disp[3]=min%10+11;
  322. if(T2Count<=10)
  323.    {if(TimeAdj)
  324.           {
  325.            if(!DigiBit)
  326.                  {
  327.                   Disp[0]=DispOFF;
  328.                   Disp[1]=DispOFF;
  329.                  }
  330.            else
  331.                  {
  332.                   Disp[2]=POINT;
  333.                   Disp[3]=POINT;
  334.                  }
  335.           }
  336.         else
  337.           {
  338.            Disp[2]=min/10;
  339.            Disp[3]=min%10;       
  340.           }
  341.    }
  342. }
  343. /*************鬧鐘函數***************/
  344. void alarmClock(void)
  345. {Disp[0]=AlarmHr/10;
  346. Disp[1]=AlarmHr%10;
  347. Disp[2]=AlarmMin/10+11;
  348. Disp[3]=AlarmMin%10+11;
  349. if(DispTime<80)//顯示時間<80,顯示鬧鐘開關狀態,顯示時間>=80,顯示鬧鐘時間
  350.         {if(AlarmSta)
  351.                 {Disp[0]=DispOFF;
  352.                  Disp[1]=DispOFF;
  353.                  Disp[2]=O;
  354.                  Disp[3]=N;
  355.                 }
  356.          else
  357.                  {Disp[0]=DispOFF;
  358.                  Disp[1]=O;
  359.                  Disp[2]=F;
  360.                  Disp[3]=F;
  361.                 }
  362.         }
  363. if(AlarmAdj)//設置鬧鐘時間
  364.    {
  365.         switch(key)
  366.                 {case 1:{
  367.                                  if(DigiBit==0) AlarmHr++;
  368.                                  else AlarmMin++;
  369.                  if(AlarmHr==24) AlarmHr=0;
  370.                                  if(AlarmMin==60) AlarmMin=0;
  371.                                  break;
  372.                                 }
  373.                  case 2:{
  374.                                  if(DigiBit==0) AlarmHr--;
  375.                                  else AlarmMin--;
  376.                                  if(AlarmHr>=24) AlarmHr=23;
  377.                                  if(AlarmMin>=60) AlarmMin=59;
  378.                  break;
  379.                                 }
  380.                  case 3:{
  381.                                  DigiBit=~DigiBit;
  382.                                  if(DigiBit==0)
  383.                                          {AlarmAdj=0;
  384.                                          DispTime=80;
  385.                                         }
  386.                                  break;
  387.                                 }
  388.                 }
  389.     if(T2Count<=10)
  390.           {
  391.            if(!DigiBit)
  392.                  {
  393.                   Disp[0]=DispOFF;
  394.                   Disp[1]=DispOFF;
  395.                  }
  396.            else
  397.               {
  398.                    Disp[2]=POINT;
  399.                    Disp[3]=POINT;
  400.                   }
  401.       }
  402.    }
  403. else
  404.    {
  405.         if(key==1) status--;
  406.     if(key==2)
  407.             {status++;
  408.                  DispTime=0;
  409.                 }
  410.         if(key==3) AlarmAdj=1;
  411.         if(key==4)//鬧鐘開關按鍵
  412.                 {if(DispTime<80)                //初次按下,顯示上次設置狀態
  413.                         AlarmSta=~AlarmSta;        //再按可改變設置
  414.                  DispTime=0;//每按一次,顯示時間清零,顯示鬧鐘開關狀態
  415.                 }
  416.         DispTime++;
  417.         if(DispTime==255)
  418.                 {status=2;
  419.                  DispTime=0;
  420.                 }
  421.    }

  422. }
  423. /**************倒計時函數*****************/
  424. void CountDown(void)
  425. {
  426. if(adjust)//設置倒數時間
  427.    {
  428.         switch(CountSetSta)
  429.                 {case 0:{//設置倒數小時
  430.                                  if(key==1) CountHr++;
  431.                                  if(key==2) CountHr--;
  432.                                  if(key==3) CountSetSta++;
  433.                                  if(CountHr==100) CountHr=0;
  434.                                  if(CountHr>100) CountHr=99;
  435.                                  Disp[0]=H;
  436.                                  Disp[1]=DispOFF;
  437.                                  Disp[2]=CountHr/10;
  438.                                  Disp[3]=CountHr%10;
  439.                                  break;
  440.                                 }
  441.                  case 1:{//設置倒數分鐘
  442.                                  if(key==1) CountMin++;
  443.                                  if(key==2) CountMin--;
  444.                                  if(key==3) CountSetSta++;
  445.                                  if(CountMin==60) CountMin=0;
  446.                                  if(CountMin>60) CountMin=59;
  447.                                  Disp[0]=M;
  448.                                  Disp[1]=DispOFF;
  449.                                  Disp[2]=CountMin/10;
  450.                                  Disp[3]=CountMin%10;
  451.                                  break;
  452.                                 }
  453.                  case 2:{//設置倒數秒
  454.                                  if(key==1) CountSec++;
  455.                                  if(key==2) CountSec--;
  456.                                  if(key==3) //設置鍵
  457.                                          {if(CountHr||CountMin||CountSec)//設置完成后,若倒數的時、分、秒不為零,倒計時開始
  458.                                                 {TH0=0x3c; TL0=0xb0;
  459.                                                  T0Count=0;
  460.                                                   TR0=1;
  461.                                                 }
  462.                                          CountSetSta=0;
  463.                                          adjust=0;
  464.                                          DispTime=0;
  465.                                         }
  466.                                  if(CountSec==60) CountSec=0;
  467.                                  if(CountSec>60) CountSec=59;
  468.                                  Disp[0]=5;
  469.                                  Disp[1]=DispOFF;
  470.                                  Disp[2]=CountSec/10;
  471.                                  Disp[3]=CountSec%10;
  472.                                  break;
  473.                                 }
  474.                 }
  475.    }
  476. else
  477.    {
  478.         if(key==1)                //進入鬧鐘顯示
  479.                 {status--;
  480.                  DispTime=80;
  481.                 }
  482.         if(key==3)                //設置倒數時間
  483.                 {
  484.                  TR0=0;
  485.                   CountHr=CountMin=CountSec=0;
  486.                  adjust=1;
  487.                   }
  488.         if(key==4)                //停止倒計時
  489.                 {TR0=0;
  490. ……………………

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

所有資料51hei提供下載:
單片機數碼管時鐘.rar (29.23 KB, 下載次數: 298)



評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:441230 發表于 2018-12-6 21:36 | 只看該作者
挺好的
回復

使用道具 舉報

板凳
ID:388130 發表于 2019-4-12 16:36 | 只看該作者
很好
回復

使用道具 舉報

地板
ID:399949 發表于 2019-4-15 09:23 | 只看該作者
新人拿來練手,感謝樓主
回復

使用道具 舉報

5#
ID:505337 發表于 2019-4-15 22:48 來自手機 | 只看該作者
怎么樣
回復

使用道具 舉報

6#
ID:388099 發表于 2019-4-16 13:04 | 只看該作者
正在學習單片機,感謝分享。
回復

使用道具 舉報

7#
ID:300463 發表于 2019-4-16 15:43 | 只看該作者
新人拿來練手,感謝樓主
回復

使用道具 舉報

8#
ID:505337 發表于 2019-4-16 21:53 來自手機 | 只看該作者
怎么樣
回復

使用道具 舉報

9#
ID:568565 發表于 2019-6-21 09:09 | 只看該作者
很好的資料
回復

使用道具 舉報

10#
ID:568565 發表于 2019-6-22 10:46 來自手機 | 只看該作者
非常好的資料
回復

使用道具 舉報

11#
ID:435101 發表于 2019-10-28 16:56 | 只看該作者
資料試過        很好!可是為何時間與分之間的點不能顯示????
回復

使用道具 舉報

12#
ID:435101 發表于 2019-10-28 16:56 | 只看該作者
資料試過        很好!可是為何時間與分之間的點不能顯示????
回復

使用道具 舉報

13#
ID:637741 發表于 2019-11-24 20:44 來自手機 | 只看該作者
請問四個按鈕分別什么作用
回復

使用道具 舉報

14#
ID:658691 發表于 2019-12-10 10:51 來自手機 | 只看該作者
開關按鍵的詳細操作說明能發一份嗎?
回復

使用道具 舉報

15#
ID:659682 發表于 2019-12-10 12:53 來自手機 | 只看該作者
資料非常好,如果用八聯管怎么設置,請求高手幫助
回復

使用道具 舉報

16#
ID:659463 發表于 2019-12-10 18:47 來自手機 | 只看該作者
新人剛學,課堂實驗,來參考一下,很不錯,謝謝了
回復

使用道具 舉報

17#
ID:659263 發表于 2019-12-14 11:06 | 只看該作者
怎么沒法顯示?
回復

使用道具 舉報

18#
ID:659263 發表于 2019-12-14 11:40 | 只看該作者
在仿真的時候用哪個型號的單片機?
回復

使用道具 舉報

19#
ID:359777 發表于 2020-6-27 20:14 | 只看該作者
很全面的資料,謝謝樓主分享
回復

使用道具 舉報

20#
ID:476623 發表于 2020-8-14 15:19 | 只看該作者
下載學學看
樓主辛苦了
回復

使用道具 舉報

21#
ID:245820 發表于 2020-9-9 15:37 | 只看該作者
值得學習,樓主水平很高哦
回復

使用道具 舉報

22#
ID:85480 發表于 2021-10-26 13:09 | 只看該作者
樓主威武,正好在搞這個。非常感謝分享
回復

使用道具 舉報

23#
ID:590050 發表于 2021-10-26 13:45 | 只看該作者
高手,動手能力強
回復

使用道具 舉報

24#
ID:315554 發表于 2021-10-26 21:49 | 只看該作者
謝謝分享,看圖是共陽數碼管吧,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品二区 | 免费国产精品久久久久久 | 色视频网站在线观看 | 亚洲精品国产一区 | 99精品久久久 | 欧美一区二区在线观看视频 | 欧美精品在欧美一区二区少妇 | 久久久亚洲成人 | 最新中文字幕在线播放 | 中国一级特黄真人毛片 | 免费一看一级毛片 | 亚洲欧美国产一区二区三区 | 天堂久久久久久久 | 欧美日韩视频一区二区 | 国产精品欧美一区二区三区不卡 | av一区二区三区四区 | 日韩电影一区 | 欧美一区二区在线播放 | 精品国产一区二区三区性色av | 在线亚洲一区二区 | 久久免费国产 | 成人精品视频在线观看 | 国产精品毛片一区二区在线看 | 日韩字幕一区 | 国产福利在线看 | 国产精品免费av | www.99热这里只有精品 | 日韩综合在线播放 | 日韩二三区 | 久久免费精品 | 欧美一区二区三区在线播放 | 欧美精品久久久久久久久久 | 日韩一区二区在线视频 | 野狼在线社区2017入口 | www.精品国产 | 人人看人人爽 | 成人免费区一区二区三区 | 九九精品在线 | 欧美成年人视频在线观看 | 欧美成人手机视频 | 色综合色综合 |