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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3818|回復: 3
收起左側

AS608+stm32指紋鎖源程序(德飛萊核心板)

[復制鏈接]
ID:439585 發表于 2019-12-5 13:03 | 顯示全部樓層 |閱讀模式
指紋模塊:AS608
單片機:德飛萊stm32f103zet6(M3S)
需要中文字庫。
自己學習弄的,as608模塊給的是正點原子32的例程,沒有德飛萊32的,因此在正點原子戰艦版例程上進行了修改,可以在德飛萊板子上運行。
因為水平有限,改的很粗糙,只是基本保留了功能,望見諒。
有錯誤請留言。
有疑問請留言。
侵刪

新建:
newxxx                  接收   0x6e 0x65 0x77
fir         st                發送   0x66 0x69 0x72
sec       ond             發送   0x73 0x65 0x63
suc       cess            發送    0x73 0x75 0x63
fai      l                   發送    0x66 0x61 0x69
nof       inger          發送    0x6e 0x6f 0x66
dif      發送       兩次指紋不一
sam   發送       兩次指紋一致
識別:
rec        ognize-xxx   發送   0x72 0x65 0x63
yes
no

刪除:
delxxx                 接收   0x64 0x65 0x6c
delall                  接收   0x64 0x65 0x6c 0x61 0x6C 0x6C  
com      plete            發送   0x63 0x6f 0x6d

連接失敗      error       發送  0x65 0x72 0x72

單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "lcd.h"
  5. #include "key.h"
  6. #include "beep.h"
  7. #include "touch.h"         
  8. #include "malloc.h"
  9. #include "usmart.h"  
  10. #include "sdio_sdcard.h"   
  11. #include "w25qxx.h"   
  12. #include "ff.h"  
  13. #include "exfuns.h"   
  14. #include "fontupd.h"
  15. #include "text.h"        
  16. #include "usart2.h"
  17. #include "AS608.h"
  18. #include "timer.h"
  19. #include "adc.h"
  20. #include "switch.h"


  21. #define usart2_baund  57600//串口2波特率,根據指紋模塊波特率更改

  22. SysPara AS608Para;//指紋模塊AS608參數
  23. u16 ValidN;//模塊內有效指紋個數
  24. u8** kbd_tbl;

  25. u8 unlock=0;
  26. u8 lock=0;
  27. float ADC_ConvertedValueLocal;
  28. extern __IO uint16_t ADC_ConvertedValue;  

  29. const  u8* kbd_menu[15]={"刪指紋"," : ","錄指紋","1","2","3","4","5","6","7","8","9","DEL","0","Enter",};//按鍵表
  30. const  u8* kbd_delFR[15]={"返回"," : ","清空指紋","1","2","3","4","5","6","7","8","9","DEL","0","Enter",};//按鍵表

  31. void Add_FR(u8 fingerid);        //錄指紋
  32. void Del_FR(void);        //刪除指紋
  33. void press_FR(void);//刷指紋
  34. void ShowErrMessage(u8 ensure);//顯示確認碼錯誤信息
  35. void AS608_load_keyboard(u16 x,u16 y,u8 **kbtbl);//加載虛擬鍵盤
  36. u8  AS608_get_keynum(u16 x,u16 y);//獲取鍵盤數
  37. u16 GET_NUM(void);//獲取數值

  38. int main(void)
  39. {   
  40.         u8 ensure;
  41. //        u8 key_num;
  42.         char *str;        
  43.         ADC1_Init();
  44.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
  45.         delay_init();          //初始化延時函數
  46.         uart_init(115200);        //初始化串口1波特率為115200,用于支持USMART
  47.         usart2_init(usart2_baund);//初始化串口2,用于與指紋模塊通訊
  48. //        usart4_init(9600);//初始化串口3上位機
  49.         PS_StaGPIO_Init();        //初始化FR讀狀態引腳
  50.         BEEP_Init();                          //初始化蜂鳴器
  51.         KEY_Init();                                        //按鍵初始化
  52.          LCD_Init();                                        //LCD初始化         
  53.         W25QXX_Init();                        //初始化W25Q128
  54.         tp_dev.init();                        //初始化觸摸屏
  55.         usmart_dev.init(72);                //初始化USMART
  56.         my_mem_init(SRAMIN);                //初始化內部內存池
  57.         exfuns_init();                        //為fatfs相關變量申請內存  
  58.          f_mount(fs[1],"1:",1);  //掛載FLASH.
  59.         POINT_COLOR=RED;
  60.         while(font_init())                         //檢查字庫
  61.         {            
  62.                 LCD_ShowString(60,50,240,16,16,"Font Error!");
  63.                 delay_ms(200);                                 
  64.                 LCD_Fill(60,50,240,66,WHITE);//清除顯示
  65.                 delay_ms(200);        
  66.         }
  67.         if(!(tp_dev.touchtype&0x80))//如果是電阻屏
  68.         {
  69. //                Show_Str_Mid(0,30,"是否進行觸摸屏校準",16,240);
  70. //                POINT_COLOR=BLUE;
  71. //                Show_Str_Mid(0,60,"是:KEY2   否:KEY0",16,240);        
  72. //                while(1)
  73. //                {
  74. //                        key_num=KEY_Scan(0);
  75. //                        if(key_num==KEY0_PRES)
  76. //                                break;
  77. //                        if(key_num==KEY2_PRES)
  78. //                        {
  79. //                                LCD_Clear(WHITE);
  80. //                                TP_Adjust();           //屏幕校準
  81. //                                TP_Save_Adjdata();//保存校準參數
  82. //                                break;                                
  83. //                        }
  84. //                }
  85.         }
  86.         /*加載指紋識別實驗界面*/
  87.         LCD_Clear(WHITE);
  88.         POINT_COLOR=RED;
  89.         Show_Str_Mid(0,0,"AS608指紋識別模塊測試程序",16,240);                                                
  90.         //Show_Str_Mid(0,20,"正點原子 @ALIENTEK",16,240);                                             
  91.          POINT_COLOR=BLUE;
  92.         Show_Str_Mid(0,40,"與AS608模塊握手....",16,240);        
  93.         while(PS_HandShake(&AS608Addr))//與AS608模塊握手
  94.         {
  95.                 delay_ms(400);
  96.                 LCD_Fill(0,40,240,80,WHITE);
  97.                 Show_Str_Mid(0,40,"檢測到模塊!!!",16,240);
  98.                 delay_ms(800);
  99.                 LCD_Fill(0,40,240,80,WHITE);
  100.                 Show_Str_Mid(0,40,"嘗試連接模塊...",16,240);                  
  101.         }
  102.         LCD_Fill(30,40,240,100,WHITE);
  103.         Show_Str_Mid(0,40,"通訊成功!!!",16,240);
  104.         printf("連接成功");
  105.         str=mymalloc(SRAMIN,30);
  106.         sprintf(str,"波特率:%d   地址:%x",usart2_baund,AS608Addr);
  107.         Show_Str(0,60,240,16,(u8*)str,16,0);
  108.         ensure=PS_ValidTempleteNum(&ValidN);//讀庫指紋個數
  109.         if(ensure!=0x00)
  110.                 ShowErrMessage(ensure);//顯示確認碼錯誤信息        
  111.         ensure=PS_ReadSysPara(&AS608Para);  //讀參數
  112.         if(ensure==0x00)
  113.         {
  114.                 mymemset(str,0,50);
  115.                 sprintf(str,"庫容量:%d     對比等級: %d",AS608Para.PS_max-ValidN,AS608Para.PS_level);
  116.                 Show_Str(0,80,240,16,(u8*)str,16,0);
  117.         }
  118.         else
  119.                 ShowErrMessage(ensure);        
  120.         myfree(SRAMIN,str);
  121.         AS608_load_keyboard(0,170,(u8**)kbd_menu);//加載虛擬鍵盤
  122.         while(1)
  123.         {
  124. //                key_num=AS608_get_keynum(0,170);        
  125. //                if(key_num)
  126. //                {
  127. //                        if(key_num==1)Del_FR();                //刪指紋
  128. //                        if(key_num==3)Add_FR();                //錄指紋                                                                        
  129. //                }
  130. //                GPIO_SetBits(GPIOB,GPIO_Pin_9);
  131. //                GPIO_ResetBits(GPIOB,GPIO_Pin_9);
  132.                
  133.                
  134.                 ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*3.3;
  135.                 LCD_ShowxNum(0,120,ADC_ConvertedValueLocal*100,20,16,0);        
  136.                 information();
  137.                 if(PS_Sta)         //檢測PS_Sta狀態,如果有手指按下
  138.                 {
  139.                         press_FR();//刷指紋                        
  140.                 }                        
  141. delay_ms(500);

  142.                
  143.                
  144.                

  145.                
  146.         }         
  147. }


  148. //加載按鍵界面(尺寸x,y為240*150)
  149. //x,y:界面起始坐標(240*320分辨率的時候,x必須為0)
  150. void AS608_load_keyboard(u16 x,u16 y,u8 **kbtbl)
  151. {
  152.         u16 i;
  153.         POINT_COLOR=RED;
  154.         kbd_tbl=kbtbl;
  155.         LCD_Fill(x,y,x+240,y+150,WHITE);
  156.         LCD_DrawRectangle(x,y,x+240,y+150);                                                   
  157.         LCD_DrawRectangle(x+80,y,x+160,y+150);         
  158.         LCD_DrawRectangle(x,y+30,x+240,y+60);
  159.         LCD_DrawRectangle(x,y+90,x+240,y+120);
  160.         POINT_COLOR=BLUE;
  161.         for(i=0;i<15;i++)
  162.         {
  163.                 if(i==1)//按鍵表第2個‘:’不需要中間顯示
  164.                         Show_Str(x+(i%3)*80+2,y+7+30*(i/3),80,30,(u8*)kbd_tbl[i],16,0);        
  165.                 else
  166.                         Show_Str_Mid(x+(i%3)*80,y+7+30*(i/3),(u8*)kbd_tbl[i],16,80);
  167.         }
  168. }
  169. //按鍵狀態設置
  170. //x,y:鍵盤坐標
  171. //key:鍵值(0~14)
  172. //sta:狀態,0,松開;1,按下;
  173. void AS608_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
  174. {                  
  175.         u16 i=keyx/3,j=keyx%3;
  176.         if(keyx>16)return;
  177.         if(sta &&keyx!=1)//按鍵表第2個‘:’不需要清除
  178.                 LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,GREEN);
  179.         else if(keyx!=1)
  180.                 LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,WHITE);
  181.         if(keyx!=1)//不是‘:’
  182.                 Show_Str_Mid(x+j*80,y+7+30*i,(u8*)kbd_tbl[keyx],16,80);        
  183. }
  184. //得到觸摸屏的輸入
  185. //x,y:鍵盤坐標
  186. //返回值:(1~15,對應按鍵表)
  187. u8 AS608_get_keynum(u16 x,u16 y)
  188. {
  189.         u16 i,j;
  190.         static u8 key_x=0;//0,沒有任何按鍵按下
  191.         u8 key=0;
  192.         tp_dev.scan(0);                  
  193.         if(tp_dev.sta&TP_PRES_DOWN)//觸摸屏被按下
  194.         {        
  195.                 for(i=0;i<5;i++)
  196.                 {
  197.                         for(j=0;j<3;j++)
  198.                         {
  199.                                  if(tp_dev.x[0]<(x+j*80+80)&&tp_dev.x[0]>(x+j*80)&&tp_dev.y[0]<(y+i*30+30)&&tp_dev.y[0]>(y+i*30))
  200.                                 {        
  201.                                         key=i*3+j+1;         
  202.                                         break;                           
  203.                                 }
  204.                         }
  205.                         if(key)
  206.                         {           
  207.                                 if(key_x==key)key=0;
  208.                                 else
  209.                                 {
  210.                                         AS608_key_staset(x,y,key_x-1,0);
  211.                                         key_x=key;
  212.                                         AS608_key_staset(x,y,key_x-1,1);
  213.                                 }
  214.                                 break;
  215.                         }
  216.           }  
  217.         }else if(key_x)
  218.         {
  219.                 AS608_key_staset(x,y,key_x-1,0);
  220.                 key_x=0;
  221.         }
  222.         return key;
  223. }
  224. //獲取鍵盤數值
  225. u16 GET_NUM(void)
  226. {
  227.         u8  key_num=0;
  228.         u16 num=0;
  229.         while(1)
  230.         {
  231.                 key_num=AS608_get_keynum(0,170);        
  232.                 if(key_num)
  233.                 {
  234.                         if(key_num==1)return 0xFFFF;//‘返回’鍵
  235.                         if(key_num==3)return 0xFF00;//               
  236.                         if(key_num>3&&key_num<13&&num<99)//‘1-9’鍵(限制輸入3位數)
  237.                                 num =num*10+key_num-3;               
  238.                         if(key_num==13)num =num/10;//‘Del’鍵                        
  239.                         if(key_num==14&&num<99)num =num*10;//‘0’鍵
  240.                         if(key_num==15)return num;  //‘Enter’鍵
  241.                 }
  242.                 LCD_ShowNum(80+15,170+7,num,6,16);
  243.         }        
  244. }
  245. //顯示確認碼錯誤信息
  246. void ShowErrMessage(u8 ensure)
  247. {
  248.         LCD_Fill(0,120,lcddev.width,160,WHITE);
  249.         Show_Str_Mid(0,120,(u8*)EnsureMessage(ensure),16,240);
  250.         
  251. }
  252. //錄指紋
  253. void Add_FR(u8 fingerid)
  254. {
  255.         u8 i,ensure ,processnum=0;
  256.         u16 ID;
  257.         while(1)
  258.         {
  259.                 switch (processnum)
  260.                 {
  261.                         case 0:
  262.                                 i++;
  263.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  264.                                 Show_Str_Mid(0,100,"請按指紋",16,240);
  265.                         if(i==1)
  266.                         {printf("fir");}
  267.                                 ensure=PS_GetImage();
  268.                                 if(ensure==0x00)
  269.                                 {
  270.                                         BEEP=1;
  271.                                         ensure=PS_GenChar(CharBuffer1);//生成特征
  272.                                         BEEP=0;
  273.                                         if(ensure==0x00)
  274.                                         {
  275.                                                 LCD_Fill(0,120,lcddev.width,160,WHITE);
  276.                                                 Show_Str_Mid(0,120,"指紋正常",16,240);
  277.                                                 i=0;
  278.                                                 processnum=1;//跳到第二步                                                
  279.                                         }else ShowErrMessage(ensure);                                
  280.                                 }else ShowErrMessage(ensure);                                                
  281.                                 break;
  282.                         
  283.                         case 1:
  284.                                 i++;
  285.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  286.                                 Show_Str_Mid(0,100,"請按再按一次指紋",16,240);
  287.                           if(i==1)
  288.                           {printf("sec");}  
  289.                                 ensure=PS_GetImage();
  290.                                 if(ensure==0x00)
  291.                                 {
  292.                                         BEEP=1;
  293.                                         ensure=PS_GenChar(CharBuffer2);//生成特征
  294.                                         BEEP=0;
  295.                                         if(ensure==0x00)
  296.                                         {
  297.                                                 LCD_Fill(0,120,lcddev.width,160,WHITE);
  298.                                                 Show_Str_Mid(0,120,"指紋正常",16,240);
  299.                                                 i=0;
  300.                                                 processnum=2;//跳到第三步
  301.                                         }else ShowErrMessage(ensure);        
  302.                                 }else ShowErrMessage(ensure);               
  303.                                 break;

  304.                         case 2:
  305.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  306.                                 Show_Str_Mid(0,100,"正在對比兩次指紋",16,240);
  307.                                 ensure=PS_Match();
  308.                                 if(ensure==0x00)
  309.                                 {
  310.                                         LCD_Fill(0,120,lcddev.width,160,WHITE);
  311.                                         Show_Str_Mid(0,120,"對比成功,兩次指紋一樣",16,240);
  312.                                         printf("sam");
  313.                                         processnum=3;//跳到第四步
  314.                                 }
  315.                                 else
  316.                                 {
  317.                                         LCD_Fill(0,100,lcddev.width,160,WHITE);
  318.                                         Show_Str_Mid(0,100,"對比失敗,請重新錄入指紋",16,240);
  319.                                         printf("dif");
  320.                                         ShowErrMessage(ensure);
  321.                                         i=0;
  322.                                         processnum=0;//跳回第一步               
  323.                                 }
  324.                                 delay_ms(1200);
  325.                                 break;

  326.                         case 3:
  327.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  328.                                 Show_Str_Mid(0,100,"生成指紋模板",16,240);
  329.                                 ensure=PS_RegModel();
  330.                                 if(ensure==0x00)
  331.                                 {
  332.                                         LCD_Fill(0,120,lcddev.width,160,WHITE);
  333.                                         Show_Str_Mid(0,120,"生成指紋模板成功",16,240);                                       
  334.                                         processnum=4;//跳到第五步
  335.                                 }else {processnum=0;ShowErrMessage(ensure);}
  336.                                 delay_ms(1200);
  337.                                 break;
  338.                                 
  339.                         case 4:        
  340. //                                LCD_Fill(0,100,lcddev.width,160,WHITE);
  341. //                                Show_Str_Mid(0,100,"請輸入儲存ID,按Enter保存",16,240);
  342. //                                Show_Str_Mid(0,120,"0=< ID <=299",16,240);
  343.                                 do
  344. //                                        ID=GET_NUM();
  345.                                     ID=fingerid;
  346.                                 while(!(ID<AS608Para.PS_max));//輸入ID必須小于指紋容量的最大值
  347.                                 ensure=PS_StoreChar(CharBuffer2,ID);//儲存模板
  348.                                 if(ensure==0x00)
  349.                                 {                        
  350.                                         LCD_Fill(0,100,lcddev.width,160,WHITE);                                       
  351.                                         Show_Str_Mid(0,120,"錄入指紋成功",16,240);
  352.                                         printf("suc");
  353.                                         PS_ValidTempleteNum(&ValidN);//讀庫指紋個數
  354.                                         LCD_ShowNum(56,80,AS608Para.PS_max-ValidN,3,16);
  355.                                         delay_ms(1500);
  356.                                         LCD_Fill(0,100,240,160,WHITE);
  357.                                         return ;
  358.                                 }else {processnum=0;ShowErrMessage(ensure);}                                       
  359.                                 break;                                
  360.                 }
  361.                 delay_ms(500);
  362.                 if(i==8)//超過5次沒有按手指則退出
  363.                 {
  364.                         LCD_Fill(0,100,lcddev.width,160,WHITE);
  365. //                        printf("nof");
  366.                         break;        
  367.                 }                                
  368.         }
  369. }

  370. //刷指紋
  371. void press_FR(void)
  372. {
  373.         SearchResult seach;
  374.         u8 ensure;
  375.         char *str;
  376.         ensure=PS_GetImage();
  377.         if(ensure==0x00)//獲取圖像成功
  378.         {        
  379.                 BEEP=1;//打開蜂鳴器        
  380.                 ensure=PS_GenChar(CharBuffer1);
  381.                 if(ensure==0x00) //生成特征成功
  382.                 {               
  383.                         BEEP=0;//關閉蜂鳴器        
  384.                         ensure=PS_HighSpeedSearch(CharBuffer1,0,AS608Para.PS_max,&seach);
  385.                         if(ensure==0x00)//搜索成功
  386.                         {                                
  387.                                 LCD_Fill(0,100,lcddev.width,160,WHITE);
  388.                                 Show_Str_Mid(0,100,"刷指紋成功",16,240);                                
  389.                                 str=mymalloc(SRAMIN,50);
  390.                                 sprintf(str,"確有此人,ID:%d  匹配得分:%d",seach.pageID,seach.mathscore);
  391.                                 printf("rec");
  392.                                 printf("%d",(seach.pageID/100)%10);
  393.                                 printf("%d",(seach.pageID/10)%10);
  394.                                 printf("%d",seach.pageID%10);
  395.                                 Show_Str_Mid(0,140,(u8*)str,16,240);
  396.                                 myfree(SRAMIN,str);
  397.                         }
  398.                         else
  399.                                 ShowErrMessage(ensure);                                       
  400.           }
  401.                 else
  402.                         ShowErrMessage(ensure);
  403.          BEEP=0;//關閉蜂鳴器
  404.          delay_ms(600);
  405.          LCD_Fill(0,100,lcddev.width,160,WHITE);
  406.         }
  407.                
  408. }

  409. //刪除指紋
  410. void Del_FR(void)
  411. {
  412.         u8  ensure;
  413.         u16 num;
  414.         LCD_Fill(0,100,lcddev.width,160,WHITE);
  415.         Show_Str_Mid(0,100,"刪除指紋",16,240);
  416.         Show_Str_Mid(0,120,"請輸入指紋ID按Enter發送",16,240);
  417.         Show_Str_Mid(0,140,"0=< ID <=299",16,240);
  418.         delay_ms(50);
  419.         AS608_load_keyboard(0,170,(u8**)kbd_delFR);
  420.         num=GET_NUM();//獲取返回的數值
  421.         if(num==0xFFFF)
  422.                 goto MENU ; //返回主頁面
  423.         else if(num==0xFF00)
  424.                 ensure=PS_Empty();//清空指紋庫
  425.         else
  426.                 ensure=PS_DeletChar(num,1);//刪除單個指紋
  427.         if(ensure==0)
  428.         {
  429.                 LCD_Fill(0,120,lcddev.width,160,WHITE);
  430.                 Show_Str_Mid(0,140,"刪除指紋成功",16,240);
  431.     printf("com");               
  432.         }
  433.   else
  434.                 ShowErrMessage(ensure);        
  435.         delay_ms(1200);
  436.         PS_ValidTempleteNum(&ValidN);//讀庫指紋個數
  437.         LCD_ShowNum(56,80,AS608Para.PS_max-ValidN,3,16);
  438. MENU:        
  439.         LCD_Fill(0,100,lcddev.width,160,WHITE);
  440.         delay_ms(50);
  441.         AS608_load_keyboard(0,170,(u8**)kbd_menu);
  442. }
復制代碼

所有資料51hei提供下載:
as608 defly stm32.7z (1.37 MB, 下載次數: 65)

評分

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

查看全部評分

回復

使用道具 舉報

ID:563554 發表于 2019-12-28 10:18 | 顯示全部樓層
謝謝大佬的分享,幫頂
回復

使用道具 舉報

ID:688881 發表于 2020-2-13 15:33 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:722756 發表于 2020-4-8 10:24 | 顯示全部樓層
謝謝大佬!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av在线一区二区三区 | 91免费在线 | 在线久草| 久久国产欧美日韩精品 | 99国内精品久久久久久久 | av一二三区| 精品国产乱码一区二区三区 | 亚洲 欧美 另类 综合 偷拍 | 欧美精品一区二区三区蜜桃视频 | 日韩精品影院 | 日日综合 | 噜噜噜色网 | 看一级毛片 | 一级毛片免费 | 免费精品久久久久久中文字幕 | 91免费电影 | 欧美精品一区二区三区在线播放 | 精品免费视频 | 中文字幕一区在线观看视频 | 欧美久久精品 | 欧美日韩高清 | 欧美在线视频一区二区 | 中文精品视频 | 国产精品色 | 成人精品一区二区 | 亚洲高清一区二区三区 | 国产91网址| 免费人成在线观看网站 | 日韩视频一区二区三区 | 成人亚洲综合 | 中文字幕男人的天堂 | 伊人网影院 | 天天干精品 | 青青操91| 欧美一区二区免费视频 | 午夜视频在线观看视频 | 久久久久久国产精品 | 日本在线免费 | 草b视频 | www.日本在线 | 亚洲精品国产电影 |