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

標(biāo)題: 基于AS608和51單片機(jī)的簡(jiǎn)易指紋鎖源程序 [打印本頁(yè)]

作者: laopihappy123    時(shí)間: 2019-10-25 20:57
標(biāo)題: 基于AS608和51單片機(jī)的簡(jiǎn)易指紋鎖源程序
舍友老忘帶鑰匙 我就做了個(gè)簡(jiǎn)易的指紋鎖,宿舍六個(gè)人用第一次上傳這個(gè) 比較簡(jiǎn)陋哈~ 注釋我寫的很詳細(xì)(自以為)
要是能幫到大家,那就很好了


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

  3. sbit zhen=P2^0;           //電動(dòng)機(jī)正轉(zhuǎn),拉把手開(kāi)門
  4. sbit fan=P2^1;           //電動(dòng)機(jī)反轉(zhuǎn),復(fù)位門把手
  5. sbit led_work=P2^2;  //單片機(jī)已經(jīng)初始化完成指示LED兼檢測(cè)門把手位置指示燈
  6. sbit check=P2^3;        //干簧管位置檢測(cè),門開(kāi)為1
  7. sbit pressed=P2^6;        //指紋模塊觸摸檢測(cè)
  8. sbit wakeup=P2^7;  //指紋模塊上電控制,1為模塊上電,0為關(guān)閉
  9. sbit test=P3^3;           //測(cè)試開(kāi)門


  10. //////////////////////////////////////////////////////////////////////////
  11. volatile unsigned char FPM10A_RECEICE_BUFFER[32];        //定義接收緩存區(qū)
  12. code unsigned char FPM10A_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF};  //協(xié)議包頭
  13. code unsigned char FPM10A_Get_Img[6] = {0x01,0x00,0x03,0x01,0x00,0x05};    //獲得指紋圖像
  14. code unsigned char FPM10A_Img_To_Buffer1[7]={0x01,0x00,0x04,0x02,0x01,0x00,0x08}; //將圖像放入到BUFFER1
  15. code unsigned char FPM10A_Search[11]={0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x00,0x64,0x00,0x72}; //搜索指紋搜索范圍0 - 999,使用BUFFER1中的特征碼搜索

  16. //////////////////////////////////////////////////////////////////////////

  17. /////////////////////////////////////////////
  18. //                 定時(shí)                                           //
  19. /////////////////////////////////////////////
  20. void delay1s(void)   //定時(shí)1S,晶振11.0592MHZ
  21. {
  22.     unsigned char a,b,c;
  23.     for(c=13;c>0;c--)
  24.         for(b=247;b>0;b--)
  25.             for(a=142;a>0;a--);
  26.     _nop_();  //if Keil,require use intrins.h
  27. }

  28. void delay100ms(void)   //定時(shí)100MS,晶振11.0592MHZ
  29. {
  30.     unsigned char a,b;
  31.     for(b=221;b>0;b--)
  32.         for(a=207;a>0;a--);
  33. }


  34. void delay500ms(void)   //500ms
  35. {
  36.     unsigned char a,b,c;
  37.     for(c=98;c>0;c--)
  38.         for(b=127;b>0;b--)
  39.             for(a=17;a>0;a--);
  40.     _nop_();
  41. }

  42. void delay1_6_f(void)   //誤差 0us
  43. {
  44.     unsigned char a,b,c;
  45.     for(c=218;c>0;c--)
  46.         for(b=131;b>0;b--)
  47.             for(a=23;a>0;a--);
  48.     _nop_();  //if Keil,require use intrins.h
  49. }

  50. void delay50ms(void)   //誤差 0us
  51. {
  52.     unsigned char a,b;
  53.     for(b=173;b>0;b--)
  54.         for(a=143;a>0;a--);
  55. }

  56. void delay10ms(void)   //誤差 0us
  57. {
  58.     unsigned char a,b,c;
  59.     for(c=1;c>0;c--)
  60.         for(b=38;b>0;b--)
  61.             for(a=130;a>0;a--);
  62. }

  63. /////////////////////////////////////////////


  64. void kaisuo(void)
  65. {
  66.         int t;
  67.         zhen=fan=0;
  68.         zhen=1;                   //電動(dòng)機(jī)正轉(zhuǎn)啟動(dòng)
  69.         for(t=0;t<45;t++)          //50ms為一個(gè)段,共2.25s,控制最大拉動(dòng)時(shí)間,防止出現(xiàn)意外正轉(zhuǎn)過(guò)久把手被拉壞
  70.         {
  71.         if(check==0)
  72.                 {
  73.                  delay10ms();         //等待10ms,干簧管消抖
  74.                  if(check==0)  //再次檢測(cè)
  75.                  {
  76.                  led_work=0;//檢測(cè)到把手就位,指示燈熄滅以指示
  77.                  zhen=0;  //電機(jī)停機(jī)
  78.                  delay100ms(); //等待100ms,準(zhǔn)備反轉(zhuǎn)
  79.                  //delay500ms();//等待500ms,準(zhǔn)備反轉(zhuǎn)
  80.                  fan=1;
  81.                  delay1_6_f();//反轉(zhuǎn)1.6s
  82.                  fan=0;
  83.                  led_work=1;//狀態(tài)指示燈復(fù)位
  84.                  check=1;
  85.                  return;//跳出循環(huán)
  86.                  }
  87.                  
  88.                 }
  89.                 else
  90.                 {
  91.                 delay50ms();//50ms每段
  92.                 continue;
  93.                 }
  94.                        
  95.         }
  96.         zhen=0;        //超出時(shí)間,停機(jī)
  97.         delay100ms();//等待100ms,準(zhǔn)備反轉(zhuǎn)
  98.         //delay500ms(); //等待500ms,準(zhǔn)備反轉(zhuǎn)
  99.         fan=1;
  100.         delay1_6_f();
  101.         fan=0;
  102. }


  103. void Uart_Init(void) //初始化
  104. {
  105.         //zhen=1;
  106.         //fan=1;
  107.     SCON=0x50;   //UART方式1:8位UART;   REN=1:允許接收
  108.     PCON=0x00;   //SMOD=0:波特率不加倍
  109.     TMOD=0x20;   //T1方式2,用于UART波特率
  110.     TH1=0xFD;          //UART波特率設(shè)置:FDFD(9600)
  111.     TL1=0xFD;   //UART波特率設(shè)置:FDFD(9600)
  112.     TR1=1;         //允許T1計(jì)數(shù)
  113.     EA=1;         //
  114. }
  115. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



  116. //UART發(fā)送和接收部分
  117. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  118. void Uart_Send_Byte(unsigned char c)//uart發(fā)送一個(gè)字節(jié)
  119. {
  120.         SBUF = c;
  121.         while(!TI);                //發(fā)送完為1
  122.         TI = 0;
  123. }

  124. unsigned char Uart_Receive_Byte()//UART接受一個(gè)字節(jié)
  125. {       
  126.         unsigned char dat;
  127.         while(!RI);         //接收完為1
  128.         RI = 0;
  129.         dat = SBUF;
  130.         return (dat);
  131. }
  132. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


  133. ////////////////////////////////////////////
  134. //         AS608/FPM10A指紋模塊命令                  //
  135. ////////////////////////////////////////////

  136. void FPM10A_Cmd_Send_Pack_Head(void)   //發(fā)送通訊協(xié)議包頭
  137. {
  138.         int i;       
  139.         for(i=0;i<6;i++)
  140.    {
  141.                 Uart_Send_Byte(FPM10A_Pack_Head[i]);   
  142.    }               
  143. }

  144. void FPM10A_Receive_Data(unsigned char ucLength) //接收指紋模塊反饋數(shù)據(jù)緩沖
  145. {
  146.   unsigned char i;

  147.   for (i=0;i<ucLength;i++)
  148.      FPM10A_RECEICE_BUFFER[i] = Uart_Receive_Byte();

  149. }

  150. void FPM10A_Cmd_Get_Img(void)                ////FINGERPRINT_獲得指紋圖像命令(檢測(cè)是否有指紋)
  151. {
  152.     unsigned char i;
  153.     FPM10A_Cmd_Send_Pack_Head(); //發(fā)送通信協(xié)議包頭
  154.     for(i=0;i<6;i++)
  155.         {
  156.        Uart_Send_Byte(FPM10A_Get_Img[i]);
  157.         }
  158. }
  159. //講圖像轉(zhuǎn)換成特征碼存放在Buffer1中
  160. void FINGERPRINT_Cmd_Img_To_Buffer1(void)
  161. {
  162.         unsigned char i;
  163.         FPM10A_Cmd_Send_Pack_Head(); //發(fā)送通信協(xié)議包頭      
  164.            for(i=0;i<7;i++)   //發(fā)送命令 將圖像轉(zhuǎn)換成 特征碼 存放在 CHAR_buffer1
  165.      {
  166.              Uart_Send_Byte(FPM10A_Img_To_Buffer1[i]);                  
  167.             }
  168. }

  169. //搜索指紋庫(kù)前100枚(可以自己改DATA區(qū)的數(shù)字 最高999個(gè))
  170. void FPM10A_Cmd_Search_Finger(void)
  171. {
  172.        unsigned char i;                       
  173.                          FPM10A_Cmd_Send_Pack_Head(); //發(fā)送通信協(xié)議包頭
  174.        for(i=0;i<11;i++)
  175.            {
  176.                   Uart_Send_Byte(FPM10A_Search[i]);    //接收指紋模塊發(fā)回的數(shù)據(jù)
  177.                       }
  178. }

  179. //搜索是否有指紋,若有則認(rèn)證
  180. void FPM10A_Find_Fingerprint()
  181. {
  182.   FPM10A_Cmd_Get_Img();                                         //發(fā)送獲得指紋圖像命令
  183.   FPM10A_Receive_Data(12);                                  //接收反饋數(shù)據(jù)緩沖
  184.   if(FPM10A_RECEICE_BUFFER[9]==0&&pressed==1)                 //根據(jù)反饋回來(lái)的第9位數(shù)據(jù)來(lái)判斷模塊上有無(wú)指紋,有則繼續(xù)執(zhí)行無(wú)則退出
  185.   {
  186.     FINGERPRINT_Cmd_Img_To_Buffer1();          //講圖像轉(zhuǎn)換成特征碼存放在Buffer1中
  187.         FPM10A_Receive_Data(12);               
  188.         FPM10A_Cmd_Search_Finger();                                //搜索全部用戶100枚
  189.         FPM10A_Receive_Data(16);
  190.         if(FPM10A_RECEICE_BUFFER[9] == 0) //如果搜索到有相應(yīng)的指紋  
  191.         {
  192.           kaisuo();         //開(kāi)鎖
  193.           //delay500ms();//延遲0.5s
  194.           delay1s();
  195.       wakeup=0;//模塊SOC斷電
  196.         }
  197.         else
  198.         {
  199.          wakeup=0;//模塊SOC斷電
  200.          //delay100ms(); //延遲100ms,跳出
  201.         }
  202.   }
  203.           else
  204.         {
  205.         wakeup=0;//模塊SOC斷電
  206.         }
  207. }


  208. //////////////////////////////////////////////

  209. //               主程序                                             //

  210. //////////////////////////////////////////////
  211. void main()         
  212. {
  213. //delay1s();//單片機(jī)上電,等待1s穩(wěn)定
  214. Uart_Init();   //初始化串口
  215. led_work=0;
  216. zhen=0;
  217. fan=0;
  218. wakeup=0;
  219. pressed=0;
  220. test=1;
  221. check=1;           //檢測(cè)位置干簧管
  222. led_work=1;           //工作指示燈亮,提醒系統(tǒng)已經(jīng)完成初始化  (測(cè)試為0)
  223.         while(1)
  224.         {
  225.                 if(pressed==1)         //指紋模塊是被按下? 按下為1 否則為0
  226.                 {
  227.                 //Uart_Init();
  228.                 wakeup=1; //模塊SOC上電
  229.                 delay500ms();//延遲0.5s//等待SOC初始化完成
  230.                 Uart_Init(); //重新初始化串口
  231.                 FPM10A_Find_Fingerprint(); //查找,對(duì)比指紋
  232.                 }
  233.                 else
  234.                 {
  235.                 if(test==0)                        //測(cè)試開(kāi)鎖
  236.                 {
  237.                 kaisuo();         //開(kāi)鎖
  238.             delay500ms();//延遲0.5s
  239.                 }
  240.                 else
  241.                 {
  242.                 delay100ms();         //指紋模塊沒(méi)被按下 延遲100ms
  243.                 }                 
  244.                 }       
  245.         }
  246. }
復(fù)制代碼

以上程序51hei提供下載:
指紋鎖.zip (2.62 KB, 下載次數(shù): 149)



作者: a931173299    時(shí)間: 2019-11-11 09:03
這個(gè)程序可以成功執(zhí)行嗎?

作者: mfk.    時(shí)間: 2019-11-22 19:28
這東西可以運(yùn)行嗎??還有你的電路圖拿一些東西呢??不全面啊。
作者: 1556674662    時(shí)間: 2019-11-22 21:13
程序可以運(yùn)行嗎?
作者: mytian2000    時(shí)間: 2019-12-30 10:58
最近也在研究這個(gè),感謝分享,不知道附件資料是否齊全。
作者: fateful    時(shí)間: 2020-1-5 04:32
請(qǐng)問(wèn)有原理圖嗎
作者: Exception77    時(shí)間: 2020-6-17 16:28
這個(gè)程序的點(diǎn)擊是繼電器嗎
作者: kelai000    時(shí)間: 2021-2-2 17:38
請(qǐng)問(wèn)有原理圖嗎
作者: 1151043545    時(shí)間: 2021-5-9 10:16
怎么修改串口通信的引腳




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩三级视频 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 男女啪啪网址 | 精品国产伦一区二区三区观看方式 | 成人国产网站 | 亚洲一区电影 | 久久机热 | 成人在线精品视频 | 精品欧美乱码久久久久久 | 99免费精品 | 午夜男人天堂 | 成人毛片在线视频 | 91av视频在线播放 | 夜夜草导航 | 亚洲一区二区视频 | 亚洲精品免费在线观看 | 先锋影音资源网站 | 亚洲成人免费av | www.青娱乐| 亚洲国产精品久久 | 国产一区二区三区四区三区四 | 午夜影院在线观看视频 | 国产精品久久久久久久久免费相片 | 亚洲免费网站 | 国产成人精品一区二 | 久久亚洲一区二区三区四区 | 婷婷久久久久 | 亚洲一区中文字幕在线观看 | 日韩国产免费观看 | 天天插天天操 | 日本精品免费在线观看 | 操人网站| 欧美11一13sex性hd | 99re6在线视频精品免费 | 成人3d动漫一区二区三区91 | 一级片av | 国产精品乱码一区二区三区 | 久久久久久色 | 日韩一区二区三区在线观看 | 中文字幕免费 | 亚洲精品久久久久久久久久吃药 |