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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于AS608和51單片機的簡易指紋鎖源程序

  [復制鏈接]
跳轉到指定樓層
樓主
舍友老忘帶鑰匙 我就做了個簡易的指紋鎖,宿舍六個人用第一次上傳這個 比較簡陋哈~ 注釋我寫的很詳細(自以為)
要是能幫到大家,那就很好了


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

  3. sbit zhen=P2^0;           //電動機正轉,拉把手開門
  4. sbit fan=P2^1;           //電動機反轉,復位門把手
  5. sbit led_work=P2^2;  //單片機已經初始化完成指示LED兼檢測門把手位置指示燈
  6. sbit check=P2^3;        //干簧管位置檢測,門開為1
  7. sbit pressed=P2^6;        //指紋模塊觸摸檢測
  8. sbit wakeup=P2^7;  //指紋模塊上電控制,1為模塊上電,0為關閉
  9. sbit test=P3^3;           //測試開門


  10. //////////////////////////////////////////////////////////////////////////
  11. volatile unsigned char FPM10A_RECEICE_BUFFER[32];        //定義接收緩存區
  12. code unsigned char FPM10A_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF};  //協議包頭
  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. //                 定時                                           //
  19. /////////////////////////////////////////////
  20. void delay1s(void)   //定時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)   //定時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;                   //電動機正轉啟動
  69.         for(t=0;t<45;t++)          //50ms為一個段,共2.25s,控制最大拉動時間,防止出現意外正轉過久把手被拉壞
  70.         {
  71.         if(check==0)
  72.                 {
  73.                  delay10ms();         //等待10ms,干簧管消抖
  74.                  if(check==0)  //再次檢測
  75.                  {
  76.                  led_work=0;//檢測到把手就位,指示燈熄滅以指示
  77.                  zhen=0;  //電機停機
  78.                  delay100ms(); //等待100ms,準備反轉
  79.                  //delay500ms();//等待500ms,準備反轉
  80.                  fan=1;
  81.                  delay1_6_f();//反轉1.6s
  82.                  fan=0;
  83.                  led_work=1;//狀態指示燈復位
  84.                  check=1;
  85.                  return;//跳出循環
  86.                  }
  87.                  
  88.                 }
  89.                 else
  90.                 {
  91.                 delay50ms();//50ms每段
  92.                 continue;
  93.                 }
  94.                        
  95.         }
  96.         zhen=0;        //超出時間,停機
  97.         delay100ms();//等待100ms,準備反轉
  98.         //delay500ms(); //等待500ms,準備反轉
  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波特率設置:FDFD(9600)
  111.     TL1=0xFD;   //UART波特率設置:FDFD(9600)
  112.     TR1=1;         //允許T1計數
  113.     EA=1;         //
  114. }
  115. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



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

  124. unsigned char Uart_Receive_Byte()//UART接受一個字節
  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)   //發送通訊協議包頭
  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) //接收指紋模塊反饋數據緩沖
  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_獲得指紋圖像命令(檢測是否有指紋)
  151. {
  152.     unsigned char i;
  153.     FPM10A_Cmd_Send_Pack_Head(); //發送通信協議包頭
  154.     for(i=0;i<6;i++)
  155.         {
  156.        Uart_Send_Byte(FPM10A_Get_Img[i]);
  157.         }
  158. }
  159. //講圖像轉換成特征碼存放在Buffer1中
  160. void FINGERPRINT_Cmd_Img_To_Buffer1(void)
  161. {
  162.         unsigned char i;
  163.         FPM10A_Cmd_Send_Pack_Head(); //發送通信協議包頭      
  164.            for(i=0;i<7;i++)   //發送命令 將圖像轉換成 特征碼 存放在 CHAR_buffer1
  165.      {
  166.              Uart_Send_Byte(FPM10A_Img_To_Buffer1[i]);                  
  167.             }
  168. }

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

  179. //搜索是否有指紋,若有則認證
  180. void FPM10A_Find_Fingerprint()
  181. {
  182.   FPM10A_Cmd_Get_Img();                                         //發送獲得指紋圖像命令
  183.   FPM10A_Receive_Data(12);                                  //接收反饋數據緩沖
  184.   if(FPM10A_RECEICE_BUFFER[9]==0&&pressed==1)                 //根據反饋回來的第9位數據來判斷模塊上有無指紋,有則繼續執行無則退出
  185.   {
  186.     FINGERPRINT_Cmd_Img_To_Buffer1();          //講圖像轉換成特征碼存放在Buffer1中
  187.         FPM10A_Receive_Data(12);               
  188.         FPM10A_Cmd_Search_Finger();                                //搜索全部用戶100枚
  189.         FPM10A_Receive_Data(16);
  190.         if(FPM10A_RECEICE_BUFFER[9] == 0) //如果搜索到有相應的指紋  
  191.         {
  192.           kaisuo();         //開鎖
  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();//單片機上電,等待1s穩定
  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;           //檢測位置干簧管
  222. led_work=1;           //工作指示燈亮,提醒系統已經完成初始化  (測試為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(); //查找,對比指紋
  232.                 }
  233.                 else
  234.                 {
  235.                 if(test==0)                        //測試開鎖
  236.                 {
  237.                 kaisuo();         //開鎖
  238.             delay500ms();//延遲0.5s
  239.                 }
  240.                 else
  241.                 {
  242.                 delay100ms();         //指紋模塊沒被按下 延遲100ms
  243.                 }                 
  244.                 }       
  245.         }
  246. }
復制代碼

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


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:425617 發表于 2019-11-11 09:03 | 只看該作者
這個程序可以成功執行嗎?
回復

使用道具 舉報

板凳
ID:647444 發表于 2019-11-22 19:28 | 只看該作者
這東西可以運行嗎??還有你的電路圖拿一些東西呢??不全面啊。
回復

使用道具 舉報

地板
ID:647375 發表于 2019-11-22 21:13 | 只看該作者
程序可以運行嗎?
回復

使用道具 舉報

5#
ID:676417 發表于 2019-12-30 10:58 來自觸屏版 | 只看該作者
最近也在研究這個,感謝分享,不知道附件資料是否齊全。
回復

使用道具 舉報

6#
ID:681382 發表于 2020-1-5 04:32 | 只看該作者
請問有原理圖嗎
回復

使用道具 舉報

7#
ID:782179 發表于 2020-6-17 16:28 | 只看該作者
這個程序的點擊是繼電器嗎
回復

使用道具 舉報

8#
ID:882360 發表于 2021-2-2 17:38 | 只看該作者
請問有原理圖嗎
回復

使用道具 舉報

9#
ID:503677 發表于 2021-5-9 10:16 | 只看該作者
怎么修改串口通信的引腳
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色毛片在线观看 | 国产9 9在线 | 中文 | 毛片99| 一道本不卡视频 | 国产精品久久久久久久久久久免费看 | 久久久久久久av | 在线免费观看a级片 | 香蕉视频黄色 | 在线看片网站 | 国产亚洲精品精品国产亚洲综合 | 男人亚洲天堂 | 日本中文字幕在线观看 | 国产亚洲欧美另类一区二区三区 | 国产精品日韩在线 | 日韩欧美亚洲一区 | 涩涩导航 | 尹人av| 91免费观看国产 | 91影片 | 91就要激情 | 操久久 | 久久精品国产免费 | 成人深夜福利在线观看 | 久久精品99 | 超碰在线免费公开 | 91视频一区二区三区 | 成人av免费在线观看 | 国产成人精品一区二区三区视频 | 日本黄色大片免费 | 懂色av色香蕉一区二区蜜桃 | 国产精品国产三级国产aⅴ中文 | 日韩高清一区 | 成年人精品视频 | 青娱乐一区二区 | 亚洲一区二区三区免费在线 | 久久久久国产 | 国产午夜视频 | 亚洲精品福利视频 | 精品精品| 91婷婷韩国欧美一区二区 | 东京av男人的天堂 |