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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機fm70指紋門禁源程序PCB工程 藍牙通信輸出pwm控制舵機動作

[復制鏈接]
跳轉到指定樓層
樓主
stc11f02e 單片機
fm70指紋模塊 jdy-31藍牙模塊

藍牙發送命令 增加 刪除 查詢
沒有加入密碼 連接藍牙后可以直接發送命令

輸出pwm控制舵機動作
由于ad不太會用 畫了一個比較low的板子
買的貼片 又轉成DIP的

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


大佬勿噴  新手入門

部分單片機代碼如下:

  1. #include<fm70.h>
  2. u8 AutoLogin[11]={0x01,0x00,0x08,0x54,0x55,0x02,0x00,0x00,0x01,0x00,0x00}; //5.5s  2次 序號*2 可重復 校驗和
  3. u8 DeleteChar[10]={0x01,0x00,0x07,0x0c,0x00,0x00,0x00,0x01,0x00,0x00};//刪除
  4. u8 ValidN;//模板個數
  5. u16 MathScore;//得分
  6. u16 IDs_temp;
  7. u8 recive_num;//確認碼
  8. bit Recive_Error;//校驗和錯誤
  9. bit Open_Flag;//開門標志
  10. void Delay500us()                //@11.0592MHz
  11. {
  12.         unsigned char i, j;

  13.         i = 6;
  14.         j = 93;
  15.         do
  16.         {
  17.                 while (--j);
  18.         } while (--i);
  19. }
  20. void Uart_Send(u8 sta) //發送
  21. {
  22.         SBUF=sta;
  23.         while(!TI);
  24.         TI=0;        
  25. }
  26. u8 Uart_Recevie()//接收
  27. {
  28.         u8 sta;
  29.         while(!RI);
  30.         RI=0;
  31.         sta=SBUF;
  32.         return (sta);
  33. }
  34. void SendCmd(u8 *cmd,u8 len)//發送命令
  35. {
  36.         u8 i;
  37.         for(i=0;i<6;i++)
  38.                 Uart_Send(PackHead[i]);//發送包頭
  39.         for(i=0;i<len;i++)
  40.                 Uart_Send(cmd[i]);
  41. }
  42. void Send_Char(u8 *str)//發送信息
  43. {
  44.         u8 *s;
  45.         s=str;
  46.         AUXR1=0x80;//=1 ->P1    =0 ->P3
  47.         Delay500us();
  48.         while(*s!='\0')
  49.         {
  50.                 Uart_Send(*s);
  51.                 s++;        
  52.         }
  53.         AUXR1=0x00;//=1 ->P1    =0 ->P3
  54. }
  55. void StoreChar_SetNum()//設置指紋存儲數組
  56. {
  57.         u8 i;
  58.         u16 sum_temp=0x00; //校驗和臨時變量
  59.         AutoLogin[7]=ValidN; //低位
  60.         for(i=0;i<9;i++)   //校驗和計數
  61.                 sum_temp+=AutoLogin[i];
  62.         AutoLogin[9]=(u8)(sum_temp>>8);
  63.         AutoLogin[10]=(u8)sum_temp;        
  64. }
  65. void Delete_Finger(u8 delete_id)//刪除指紋數據
  66. {
  67.         u8 i;
  68.         u16 sum_temp=0x00;               
  69.         //DeleteChar[4]=(u8)(delete_id>>8);//PageID 高位
  70.         DeleteChar[5]=delete_id;//低位
  71.         for(i=0;i<8;i++)          //校驗和計算
  72.                 sum_temp+=DeleteChar[i];
  73.         DeleteChar[8]=(u8)(sum_temp>>8);
  74.         DeleteChar[9]=(u8)sum_temp;
  75.         SendCmd(DeleteChar,10);
  76.         ReviceCmd(6);
  77.         if(Recive_Error)//校驗和錯誤
  78.                 return;        
  79.         if(recive_num==0x10)
  80.                 Send_Char("刪除成功!!!\r\n");        
  81.         else if(recive_num==0x00)
  82.                 Send_Char("刪除失敗!!!\r\n");        
  83. }               
  84. void ReviceCmd(u8 len)//接收包處理
  85. {
  86.         u8 i;
  87.         u16 check_num=0x00;//校驗和
  88.         u16 sum_temp=0x00;//數據和
  89.         u8 recive_temp[10];//接收數據緩存
  90.         Recive_Error=0;//校驗和標志清零
  91.         for(i=0;i<6;i++)
  92.                 Uart_Recevie();//丟棄前6個數據
  93.         for(i=0;i<len;i++)
  94.                 recive_temp[i]=Uart_Recevie();
  95.         check_num=recive_temp[len-2];
  96.         check_num=(check_num<<8)|recive_temp[len-1];//校驗和合并
  97.         for(i=0;i<len-2;i++)
  98.                 sum_temp+=recive_temp[i]; //數據和計算
  99.         if(sum_temp==check_num)
  100.         {
  101.                 if(len==10)//接收的是搜索指紋返回包
  102.                 {        
  103.                         IDs_temp=(recive_temp[4]<<8)|recive_temp[5];//搜索到的指紋號
  104.                         MathScore=(recive_temp[6]<<8)|recive_temp[7];//得分                        
  105.                 }
  106.                 if(len==8)//讀取模板個數返回包
  107.                 {
  108.                         //ValidN=recive_temp[4];
  109.                         //ValidN=(ValidN<<8)|recive_temp[5];//模板個數合并
  110.                         ValidN=recive_temp[5];//0xff 直接省略高位數據
  111.                 }                                 
  112.                 recive_num=recive_temp[3];//確認碼        
  113.         }
  114.         else
  115.         {
  116.                 Recive_Error=1;
  117.                 Send_Char("校驗和錯誤\r\n");//發送信息
  118.         }
  119. }
  120. void Add_finger()//添加指紋
  121. {
  122.         u8 str[5];
  123.         if(ValidN>=100)
  124.         {
  125.                 Send_Char("指紋庫滿!!!\r\n");
  126.                 while(wake);
  127.                 return;
  128.         }
  129.         StoreChar_SetNum();//設置指紋存儲數組
  130.         ValidN=ValidN+1;//指紋加一
  131.         SendCmd(AutoLogin,11);
  132.         ReviceCmd(6);
  133.         if(Recive_Error)//校驗和錯誤
  134.                 return;        
  135.         if(recive_num!=0x56)
  136.         {
  137.                 Send_Char("第一次采集失敗!!!\r\n");
  138.                 while(wake);
  139.                 return;               
  140.         }
  141.         ReviceCmd(6);        
  142.         if(recive_num!=0x00)
  143.         {
  144.                 Send_Char("添加失敗!!!\r\n");
  145.                 while(wake);
  146.                 return;               
  147.         }
  148.         Send_Char("添加成功\r\n");
  149.         Send_Char("當前編號:");
  150.         str[0]=AutoLogin[7]/10+0x30;        
  151.         str[1]=AutoLogin[7]%10+0x30;
  152.         str[2]='\0';
  153.         Send_Char(str);
  154.         Send_Char("\r\n");
  155. }
  156. void Search_Finger()//搜索指紋
  157. {
  158.         SendCmd(AutoSearch,11);
  159.         ReviceCmd(10);           //OK_Char
  160.         if(Recive_Error)//校驗和錯誤
  161.                 return;
  162.         if(recive_num==0x09)
  163.         {
  164.                 Send_Char("你是黑戶!!!!!!!!\r\n");
  165.                 return;               
  166.         }        
  167.         else if(recive_num==0x00)
  168.         {
  169.                 Send_Char("歡迎回家!\r\n");
  170.                 Open_Door();//開門
  171.         }        
  172. }
  173. void Init_FM70()//初始化模塊
  174. {
  175.         SendCmd(GetEcho,6);        
  176.         ReviceCmd(6);//接受包處理
  177.         if(Recive_Error)//校驗和錯誤
  178.                 return;
  179.         if(recive_num!=0x55)
  180.         {
  181.                 Send_Char("設備異常。。r\n");
  182.                 Send_Char("即將重啟。!\r\n");
  183.                 Delay400ms();Delay400ms();Delay400ms();        
  184.                 IAP_CONTR=0x40;//重啟        
  185.         }
  186.         Send_Char("\r\n系統加載成功!\r\n");        
  187. }
復制代碼


全部資料51hei下載地址:
fm70.rar (18 MB, 下載次數: 31)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:308785 發表于 2021-5-9 08:12 | 只看該作者
借閱一下
回復

使用道具 舉報

板凳
ID:871775 發表于 2021-5-10 21:13 | 只看該作者
您好,我想問一下FM70和FM40這兩種指紋模塊的區別是什么?我打算用51來做,選用FM40是否可行呢?還是用AS608?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产a视频| 成人国产一区二区三区精品麻豆 | 亚洲一在线 | 毛片99| 国产精品久久久久久久久动漫 | 精品无码久久久久久久动漫 | 久久在线免费 | 午夜私人影院 | 久久亚洲精品国产精品紫薇 | 亚洲成av片人久久久 | 无码日韩精品一区二区免费 | 一级毛片视频 | 91免费版在线 | 国产视频一区二区三区四区五区 | 成人一区二区三区在线观看 | 欧美aⅴ在线观看 | 草草草草视频 | 黑人性hd| 亚洲精品一 | 久草视频观看 | 国产精品亚洲一区二区三区在线 | 国产99久久精品 | 综合精品久久久 | 久久久久中文字幕 | 日本精品久久 | 大香在线伊779 | 特黄色一级毛片 | 亚洲国产成人久久综合一区,久久久国产99 | 亚洲一区二区三区在线观看免费 | 日韩免费一区 | 久久久av一区 | 成人精品视频99在线观看免费 | 99reav| 亚洲综合一区二区三区 | 天天射影院 | 老子午夜影院 | 国产乱人伦精品一区二区 | 日韩不卡视频在线观看 | 亚洲一区二区三区免费在线 | 美女国产精品 | 美女福利视频 |