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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機AS608指紋密碼鎖電路原理圖+源程序+PCB實物制作

  [復制鏈接]
跳轉到指定樓層
樓主
這是一個基于AS608+STC89C52單片機的指紋識別和鍵盤密碼鎖。
里面包括程序,原理圖,pcb圖和實物圖。
話不多說直接上圖
制作出來的實物圖如下:


Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機AS608源程序如下:
  1. /*********************************************************
  2. 函數名稱:bit Command(uchar *p,uchar MaxTime)
  3. 函數作用:命令解析,給模塊發送一個命令
  4. 參數說明:*p指令,MaxTime延時時長
  5. *********************************************************/
  6. bit Command(u8 *p,u8 MaxTime)
  7. {
  8.           u8 count=0,tmpdat=0,temp=0,i=0,package=0,flag=0,checksum=0;
  9.                  
  10.         bit result=0, start=0,stop=0;

  11.           UART_send_char(0xef);//數據包包頭識別碼
  12.            UART_send_char(0x01);//數據包包頭識別碼
  13.           i=p[0];//數組的第“0”個元素、里面存放了本數組的長度,把這個長度給變量i,方便進行操作

  14.         for(count=2; count<i;count++)//發送數據包
  15.             UART_send_char(p[count]);       //將數據發送出去
  16.          
  17.           result=TURE; //發送完成,結果為真 (真為1)          
  18.           FifoNumber=0;//清除接收的數據個數
  19.         for(count=0;count<=MAX_NUMBER;count++)//清空所有FIFO[]數組里面的內容,寫入0X00
  20.                  FIFO[count]=0x00;
  21.           if(result)   
  22.            {               
  23.              result=FALSE;
  24.               start =FALSE;
  25.                    stop  =FALSE;
  26.                count=0;
  27.                clk0=0;        //清零CL0計數
  28.                
  29.      do /////////////////////////////do的內容////////////////////////////////
  30.                 {       
  31.                         restart0:                               
  32.                  if (RI==1)//如果接收到數據
  33.                       {                                
  34.                                   tmpdat=SBUF;//先把接收到的數據放到tmpdat中
  35.                     RI=0;                //軟件清除接收標志
  36.                     if((tmpdat==0xef)&&(start==FALSE))//這個數據為第一個傳回來的數據,也就是“指令應答”的第一個字節
  37.                     {
  38.                                         count=0;
  39.                                     FIFO[0]=tmpdat;//讀入第一個應答字節(0XEF),存在第“0”個元素中   
  40.                                         flag=1;       
  41.                                         goto
  42.                                                 restart0;//可以用中斷方式進行                       
  43.                                
  44.                      }
  45.                                 if(flag==1)//第一個字節已經回來,所以flag==1成立
  46.                                 {  
  47.                                         if(tmpdat!=0x01)//接收數據錯誤,將重新從緩沖區接收數據
  48.                                         {         
  49.                                                 flag=0;//接收應答失敗
  50.                                                 result=FALSE;
  51.                                               start =FALSE;
  52.                                                    stop=FALSE;
  53.                                                count=0;
  54.                                                 goto
  55.                                                         restart0;                                       
  56.                                         }
  57.                                         //如果成功接收到0xef01,可以開始接收數據
  58.                                         flag=2;//flag=2;表示應答成功,可以開始接收數據了
  59.                                         count++;//現在count=1;
  60.                                         FIFO[count]=tmpdat;//讀入第二個應答字節(0X01),存在第“1”個元素中   
  61.                                         start=TURE;        //應答成功可以開始接收數據
  62.                                             goto
  63.                                                         restart0;       
  64.                                 }                  
  65.                      if((flag==2)&&(start==TURE))//flag=2;表示應答成功,可以開始接收數據了
  66.                      {                                                              
  67.                                            count++;//數據元素下標++
  68.                             FIFO[count]=tmpdat;//存入數據
  69.                                         if(count>=6)
  70.                                         {
  71.                                                 checksum=FIFO[count]+checksum;//計算校驗和
  72.                                         }
  73.                                         if(count==8)
  74.                                         {
  75.                                                 package=FIFO[7]*0X100+FIFO[8];//計算包長度                                                       
  76.                                                 stop= TURE;
  77.                                         }
  78.                                         if(stop)
  79.                                         {                                               
  80.                                                 if(count==package+8)
  81.                                                 {
  82.                                                         checksum=checksum-FIFO[count-1] - FIFO[count];
  83.                                                         if(checksum != (FIFO[count]&0xff))  
  84.                                                                 result=FALSE; //校驗失敗,置結果標志為0                                                       
  85.                                                         else
  86.                                                                 result=TURE;
  87.                                                         flag=0;
  88.                                                         break;
  89.                                                 }
  90.                                         }
  91.                      }
  92.                        }
  93.                 }
  94.                 while((clk0<=MaxTime)&&(count<=MAX_NUMBER));//由定時器以及最大接收數據來控制,保證不會在此一直循環
  95.                
  96.                 FifoNumber=count;//保存接收到的數據個數
  97.         }
  98.         return (result);//返回操作是否成功
  99. }

  100. /*********************************************************
  101. 函數名稱:uchar ImgProcess(uchar BUFID)
  102. 函數作用:發獲取圖像并生成特征文件,存入BUFID中
  103. 參數說明:BUFID為緩沖區號
  104. *********************************************************/
  105. u8 ImgProcess(u8 BUFID)
  106. {       
  107.     if(Command(GIMG,89) && (FifoNumber==11) && (FIFO[9]==0x00))//操作成功  
  108.     {
  109.                 if(BUFID==1)     //生成指紋特征1      
  110.                 {                                  
  111.                       if(Command(GENT1,60) && (FifoNumber==11) && (FIFO[9]==0x00))//操作成功                                                 
  112.                                 return 1;
  113.                 else
  114.                                   return 0;
  115.                  }
  116.                 else if(BUFID==2)//生成指紋特征2
  117.                 {
  118.                           if(Command(GENT2,60) && (FifoNumber==11) && (FIFO[9]==0x00))//操作成功                         
  119.                                 return 1;
  120.                 else
  121.                                   return 0;               
  122.                 }
  123.     }
  124.     else
  125.         return 0;  

  126.         return 0;            
  127. }
  128. /*********************************************************
  129. 函數名稱:uchar search()
  130. 函數作用:搜索指紋
  131. 參數說明:返回指紋序號
  132. *********************************************************/
  133. u8 search()
  134. {
  135.         u8 SearchBuf=0;

  136.         if (ImgProcess(1)==1)//首先讀入一次指紋  
  137.            {
  138.                 if(Command(SEAT,60) && (FifoNumber==15) && (FIFO[9]==0x00))//進行指紋比對,如果搜索到,返回搜索到的指紋序號
  139.                         return FIFO[10]*0x100+FIFO[11];
  140.                 else
  141.                         return 255;             
  142.            }
  143.    return 0;
  144. }

  145. /*********************************************************
  146. 函數名稱:bit savefingure(uchar ID)
  147. 函數作用:保存指紋
  148. 參數說明:指定保存的序號
  149. *********************************************************/
  150. bit savefingure(u8 ID)
  151. {
  152.         u8 i;
  153.         //現在開始進行存儲指紋模板的操作
  154.         for (i=0;i<16;i++)            //獲取保存指紋信息指令
  155.         {
  156.                 FIFO[i]=STOR[i];
  157.         }  
  158.         FIFO[12]=ID;            //把指紋模板存放的PAGE_ID也就是FLASH的位置
  159.         FIFO[14]=FIFO[14]+ID;   //重新計算校驗和
  160.        
  161.         if (Command(FIFO,70)==1)//成功返回1        //此處進行存放指紋模板的命令
  162.                 {return(1);}
  163.         else
  164.                 {return(0);}        //不成功返回0
  165. }
  166. /*********************************************************
  167. 函數名稱:bit dellfingure(uchar ID)
  168. 函數作用:刪除指紋
  169. 參數說明:指定序號刪除
  170. *********************************************************/
  171. bit dellfingure(u8 ID)
  172. {
  173.         u8 i;
  174.         //現在開始進行存儲指紋模板的操作
  175.         for (i=0;i<16;i++)            //獲取刪除指紋信息指令
  176.         {
  177.                 FIFO[i]=DELE_one[i];
  178.         }  
  179.         FIFO[11]=ID;            //把指紋模板存放的PAGE_ID也就是FLASH的位置
  180.         FIFO[15]=FIFO[15]+ID;   //重新計算校驗和
  181.        
  182.         if (Command(FIFO,70)==1)//成功返回1//此處進行存放指紋模板的命
  183.                 {return(1);}
  184.         else
  185.                 {return(0);}        //不成功返回0
  186. }
  187. /*********************************************************
  188. 函數名稱:bit Clear_All()
  189. 函數作用:清空指紋庫
  190. 參數說明:返回1成功,返回0失敗
  191. *********************************************************/
  192. bit Clear_All()
  193. {                               
  194.         if(Command(DELE_all,50)==1)
  195.                 return(1);
  196.         else
  197.                 return(0);               
  198. }
  199. /*********************************************************
  200. 函數名稱:uchar enroll()
  201. 函數作用:采集兩次指紋,生成1個指紋模板
  202. 參數說明:
  203. *********************************************************/
  204. u8 enroll()
  205. {
  206.         u8 temp=0,count=0;
  207.           while(1)
  208.           {
  209.                    temp=ImgProcess(1);//生成特征1   
  210.                    if (temp==1)       //生成特征文件成功            
  211.               {                       
  212.                 break;
  213.                }
  214.              else                  
  215.                {
  216.                 if (temp==0)//采集指紋沒有成功
  217.                   {
  218.                                 count++;
  219.                     if (count>=40)//如果采集了40次,還不成功,直接采集失敗,直接退出enroll函數----返回0  
  220.                                         return(0);
  221.             }
  222.         }
  223.            }
  224.         //采集第一個特征成功
  225.            count=0;  
  226.         delay1ms(500);//延時0.5S開始采集下一個特征

  227.         //開始采集第二個特征
  228.         while(1)
  229.           {
  230.                    temp=ImgProcess(2);//生成特征2   
  231.                    if (temp==1)       //生成特征文件2成功
  232.               {
  233.                 if((Command(MERG,40)&& (FifoNumber==11) && (FIFO[9]==0x00))==0) //合并不成功返回0,成功返回1
  234.                         {
  235.                                 return 0;
  236.                         }       
  237.                         else//特征文件合并生成模板,結果存于ModelBuffer
  238.                         {
  239.                      return 1;
  240.                         }       
  241.         }
  242.               else      
  243.                {       
  244.                 if (temp==1)//采集指紋沒有成功
  245.                 {
  246.                                 count++;
  247.                                
  248.                                 if (count>=25)
  249.                                
  250.                                 return(0);
  251.                        }
  252.              }
  253.            }
  254. }
復制代碼


  1. #include "all.h"

  2. /************************引腳定義************************/
  3. sbit relay=P3^6;//繼電器
  4. sbit buzz=P3^2;//蜂鳴器
  5. sbit led=P0^0;//LED指示燈

  6. /************************變量定義************************/
  7. #define MAX 6          //指紋最大數量
  8. #define ID_MAX 3//輸入ID最大位數

  9. u16 T0_num=0;

  10. u8 mode=0;   //0正常打卡,1管理界面,2注冊模式,3刪除模式,4查詢模式,5修改密碼,6校準時鐘,7工作時間

  11. u8 mode_num=0;

  12. u16 ID=0;                  //存儲輸入編號ID
  13. u8 n=0;             //輸入的位數
  14. bit zhiwen_f=0;         //1=標記進入指紋采集

  15. u8 shu;

  16. u8 a;                                                                                //存儲按鍵值
  17. u8 num;                                                                                //記錄輸入的密碼位數
  18. bit   in_f;                                                                                //輸入密碼的標志
  19. bit   reset_f;                                                                        //重設密碼的標志
  20. bit   input_f;                                                                        //六位密碼按完的標志
  21. u8 reset_num;                                                                //標記修改密碼階段,=1輸入舊密碼,=2輸入新密碼,=3再次輸入新密碼

  22. u32 low_mima=0;//系統密碼
  23. u32 in_mima=0; //暫存輸入的密碼
  24. u32 new_mima=0;//暫存輸入新密碼

  25. u8 set_f=0;
  26. u8 temp[5]="    \0";  
  27. /********************************************************
  28. 函數名稱:void delayms(uint ms)
  29. 函數作用:毫秒延時函數
  30. 參數說明:
  31. ********************************************************/
  32. void delayms(u16 ms)
  33. {
  34.         u8 i=100,j;
  35.         for(;ms;ms--)
  36.         {
  37.                 while(--i)
  38.                 {
  39.                         j=10;
  40.                         while(--j);
  41.                 }
  42.         }
  43. }

  44. /********************************************************
  45. 函數名稱:void didi(uchar i)
  46. 函數作用:蜂鳴器鳴叫
  47. 參數說明:i為鳴叫次數
  48. ********************************************************/
  49. void didi(u8 i)
  50. {
  51.         u8 j;
  52.         for(j=0;j<i;j++)
  53.         {
  54.                 led=0;
  55.                 buzz=0;
  56.                 delayms(20);
  57.                 led=1;
  58.                 buzz=1;
  59.                 delayms(15);
  60.         }
  61. }
  62. /********************************************************
  63. 函數名稱:void diaplay_mode0()
  64. 函數作用:顯示打卡主界面
  65. 參數說明:
  66. ********************************************************/
  67. void diaplay_mode0()
  68. {
  69.         LCD12864_display_string(1,1,"指紋密碼鎖");
  70.         LCD12864_display_string(0,2,"編號: ");       
  71.         LCD12864_display_string(0,3,"狀態: ");
  72. }
  73. /********************************************************
  74. 函數名稱:void xunzhiwen()
  75. 函數作用:查找指紋
  76. 參數說明:
  77. ********************************************************/
  78. void xunzhiwen()
  79. {
  80.         searchnum=search();//搜索指紋
  81.         if((searchnum>=1&&searchnum<=MAX)||searchnum==255)//最多是MAX個指紋
  82.         {          
  83.                 if(searchnum>=1&&searchnum<=MAX)//指紋識別成功
  84.                 {
  85.                         temp[0]=searchnum%1000/100+0x30;
  86.                         temp[1]=searchnum%100/10+0x30;
  87.                         temp[2]=searchnum%10+0x30;
  88.                         temp[3]=' ';
  89.                         LCD12864_display_string(3,2,temp);
  90.                         LCD12864_display_string(3,3,"指紋解鎖");
  91.                         LCD12864_display_string(1,4,"            ");
  92.                         in_mima=0;
  93.                         num=0;
  94.                         input_f=0;
  95.                         relay=0;
  96.                         T0_num=0;       
  97.                 }
  98.                 else//不正確的指紋
  99.                 {
  100.                         LCD12864_display_string(3,3,"無效指紋");
  101.                         didi(3);
  102.                 }
  103.                 delay1ms(500);
  104.                 LCD12864_display_string(3,2,"    ");
  105.                 LCD12864_display_string(3,3,"        ");
  106.         }                                                                                 
  107. }

  108. /********************************************************
  109. 函數名稱:void cunchu()
  110. 函數作用:存儲指紋
  111. 參數說明:
  112. ********************************************************/
  113. void cunchu()
  114. {
  115.         LCD12864_display_string(0,3,"狀態: ");

  116.         if(ID>0&&ID<=MAX)
  117.         {
  118.                 if(enroll()==1)//采集兩次,生成1個指紋模板成功
  119.                 {
  120.                         if(savefingure(ID)==1)//保存也成功
  121.                         {
  122.                                 LCD12864_display_string(3,3,"錄入成功");
  123.                                 AT24C02_write_date(ID,1);
  124.                         }
  125.                         else
  126.                                 LCD12864_display_string(3,3,"存儲失敗");       
  127.                 }
  128.                 else
  129.                         LCD12864_display_string(3,3,"采集失敗");       
  130.         }
  131.         else
  132.                 LCD12864_display_string(3,3,"編號錯誤");

  133.         n=0;
  134.         ID=0;
  135.         zhiwen_f=0;
  136. }
  137. /********************************************************
  138. 函數名稱:void shanchu()
  139. 函數作用:刪除指紋
  140. 參數說明:
  141. ********************************************************/
  142. void shanchu()
  143. {
  144.         u16 i;
  145.         LCD12864_display_string(0,3,"狀態: ");
  146.         if(ID>0&&ID<=MAX)
  147.         {
  148.                 if(dellfingure(ID)==1)
  149.                 {
  150.                         LCD12864_display_string(3,3,"清空成功");
  151.                         AT24C02_write_date(ID,0);
  152.                 }
  153.                 else
  154.                         LCD12864_display_string(3,3,"1清空失敗");       
  155.         }
  156.         else
  157.         {
  158.                 if(ID==999)
  159.                 {
  160.                         if(Clear_All()==1)
  161.                         {
  162.                                 for(i=1;i<6;i++)
  163.                                         AT24C02_write_date(i,0);
  164.                                 LCD12864_display_string(3,3,"清空指紋");
  165.                         }
  166.                         else
  167.                                 LCD12864_display_string(3,3,"清空失敗");       
  168.                 }
  169.                 else
  170.                         LCD12864_display_string(3,3,"編號錯誤");
  171.         }
  172.                
  173.         n=0;
  174.         ID=0;
  175.         zhiwen_f=0;                                                                         
  176. }

  177. /********************************************************
  178. 函數名稱:void display_guanli()
  179. 函數作用:顯示管理界面
  180. 參數說明:
  181. ********************************************************/
  182. void display_guanli()
  183. {
  184.         LCD12864_display_string(0,1,"  管理系統界面  ");
  185.         LCD12864_display_string(0,2,"    錄入指紋    ");
  186.   LCD12864_display_string(0,3,"    清空指紋    ");
  187.         LCD12864_display_string(0,4,"    修改密碼    ");
  188.         switch(mode_num)               
  189.         {
  190.            case 0: LCD12864_display_string(0,2," >> "); break;
  191.            case 1: LCD12864_display_string(0,3," >> "); break;
  192.            case 2: LCD12864_display_string(0,4," >> "); break;
  193.            default: break;
  194.         }
  195. }
  196. /*********************************************************
  197. 函數名稱:void chuli()
  198. 函數作用:對所按下的按鍵進行處理
  199. 參數說明:
  200. *********************************************************/
  201. void chuli()
  202. {
  203.         if(key_f==1)        //先判斷是否有按鍵按下
  204.         {         
  205.                 if(a==11&&mode==0&&in_f==0)
  206.                 {
  207.                         shu++;
  208.                         if(shu>=4)
  209.                         {
  210.                                 AT24C02_write_date(200,0);
  211.                                 AT24C02_write_date(201,0);
  212.                                 AT24C02_write_date(202,0);
  213.                                 low_mima=0;
  214.                                 shu=0;       
  215.                         }
  216.                 }       
  217.                 else
  218.                         shu=0;

  219.                 if((mode==2||mode==3)&&a<10)  //如果輸入ID狀態,并且按下的是數字鍵
  220.                 {
  221.                         if(n<ID_MAX)//判斷是否為輸入狀態,并且輸入未滿最大整數位數,才可以繼續輸入
  222.                         {
  223.                                 if(n==0)   //判斷為編號第1位                    
  224.                                 {       
  225.                                         LCD12864_display_string(3,2,"        ");
  226.                                         LCD12864_display_string(0,3,"              ");                               
  227.                                 }
  228.                                 LCD12864_display_char(3+n,2,a+0x30);//顯示出輸入的數字  ASCII[a]

  229.                                 ID=ID*10+a;//編號計算
  230.                                 n++;           //編號輸入位數+1
  231.                         }                                                                                  
  232.                 }

  233.                 if((mode==0||mode==4)&&input_f==0&&a<10)//如果在in_f=1(輸入密碼狀態),并且按下的是數字鍵
  234.                 {                       
  235.                         if(in_f==1||mode==4)
  236.                         {       
  237.                                 if(num==0)                  //清除顯示后、顯示輸入新密碼
  238.                                         LCD12864_display_string(1,3,"           ");       
  239.                                 if(reset_f==1&&reset_num>1)
  240.                                     LCD12864_display_char(num+1,2,a+0x30);//ASCII[a]
  241.                                 else
  242.                                         LCD12864_display_char(num+1,2,'*');//顯示“*”
  243.                         }
  244.                         else
  245.                                 LCD12864_display_char(num+1,4,'*');//顯示“*”
  246.                         in_mima=in_mima*10+a;//讀入密碼       
  247.                         num++;                        //密碼輸入次數加一                       
  248.                         if(num==6)                //六位密碼輸入完成                                                                                                                                                                        
  249.                                 input_f=1;        //標記六位密碼輸入完成                                                  
  250.                 }

  251.                 if(a==10)
  252.                 {
  253.                         if(mode==0&&in_f==0)//輸入密碼
  254.                         {
  255.                                 num=0;
  256.                                 in_f=1;
  257.                                 in_mima=0;
  258.                                 input_f=0;  //清除確定標志
  259.                                 write_com(0x01);
  260.                                 LCD12864_display_string(0,1,"請輸入管理密碼: ");//顯示輸入密碼
  261.                         }
  262.                 }
  263.                 if(a==15) //返回上一級菜單
  264.                 {
  265.                         if(mode>1)                          //在管理操作中
  266.                         {         
  267.                                 write_com(0x01);
  268.                                 LCD12864_clear12864();
  269.                                 mode=1;                //回到管理選擇界面
  270.                        
  271. ……………………

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

所有程序51hei提供下載,PCB在2樓:
指紋密碼鎖.zip (113.33 KB, 下載次數: 327)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:323102 發表于 2021-5-23 23:10 | 只看該作者
補發pcb

電子密碼鎖pcb.zip

1.09 MB, 下載次數: 187, 下載積分: 黑幣 -5

回復

使用道具 舉報

板凳
ID:980315 發表于 2022-6-8 14:43 | 只看該作者
感謝分享,可以請問一下初始密碼是多少嗎
回復

使用道具 舉報

地板
ID:1004248 發表于 2022-6-10 08:16 | 只看該作者
請問指紋WAK和Vt端是不是一直接高電平
回復

使用道具 舉報

5#
ID:1062491 發表于 2023-4-17 00:56 | 只看該作者
如果要添加藍牙模塊,這里面的AS608收發校驗數據包該怎么調節
回復

使用道具 舉報

6#
ID:291668 發表于 2023-4-23 11:42 | 只看該作者
51的東西還是要撿一撿了
回復

使用道具 舉報

7#
ID:1055587 發表于 2024-5-5 18:39 | 只看該作者
kiyoshimo_ 發表于 2022-6-8 14:43
感謝分享,可以請問一下初始密碼是多少嗎

他的代碼里沒有管理員密碼
回復

使用道具 舉報

8#
ID:433219 發表于 2024-5-6 09:10 | 只看該作者
AS608等 指紋模塊,,,,現在陸續都被人臉識別替代了
回復

使用道具 舉報

9#
ID:1130355 發表于 2024-8-9 14:04 | 只看該作者
drc1 發表于 2024-5-5 18:39
他的代碼里沒有管理員密碼

所以代碼能跑嗎?
回復

使用道具 舉報

10#
ID:1130355 發表于 2024-8-9 14:05 | 只看該作者
有兄弟知道這代碼能跑嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰av在线| 久久久久久久久久爱 | 情侣酒店偷拍一区二区在线播放 | 九色视频网站 | 国产一区二区精品在线观看 | 国产精品视频在线播放 | 国产激情91久久精品导航 | 91免费福利在线 | 国产激情在线观看 | 免费成人高清在线视频 | 欧产日产国产精品视频 | 精品久久久久久久久久久久久 | 91中文字幕在线观看 | 久久综合一区 | www视频在线观看 | 国产精品高潮呻吟久久 | 成人午夜| 日韩精品视频中文字幕 | 亚洲一二三区精品 | 亚洲国产成人精品女人久久久 | 精久久久久 | 久久三区 | 亚洲天天干| 色婷婷久久久亚洲一区二区三区 | www.成人在线视频 | 欧美一区二区三区小说 | 日韩欧美一级精品久久 | 日韩精品在线一区 | 欧美一级欧美一级在线播放 | 理论片免费在线观看 | 国产特级毛片aaaaaa | 亚洲区一区二区 | 免费a v网站 | 中文日韩字幕 | 国产在线视频一区二区 | 高清国产一区二区 | 国产精品国产三级国产aⅴ浪潮 | 亚洲视频国产视频 | 亚洲欧洲日韩精品 中文字幕 | 成人欧美一区二区三区在线观看 | 国产91精品久久久久久久网曝门 |