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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3410|回復: 2
打印 上一主題 下一主題
收起左側(cè)

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

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:410995 發(fā)表于 2020-11-20 17:46 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
stc11f02e 單片機
fm70指紋模塊 jdy-31藍牙模塊

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

輸出pwm控制舵機動作
由于ad不太會用 畫了一個比較low的板子
買的貼片 又轉(zhuǎn)成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;//模板個數(shù)
  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) //發(fā)送
  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)//發(fā)送命令
  35. {
  36.         u8 i;
  37.         for(i=0;i<6;i++)
  38.                 Uart_Send(PackHead[i]);//發(fā)送包頭
  39.         for(i=0;i<len;i++)
  40.                 Uart_Send(cmd[i]);
  41. }
  42. void Send_Char(u8 *str)//發(fā)送信息
  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()//設(shè)置指紋存儲數(shù)組
  56. {
  57.         u8 i;
  58.         u16 sum_temp=0x00; //校驗和臨時變量
  59.         AutoLogin[7]=ValidN; //低位
  60.         for(i=0;i<9;i++)   //校驗和計數(shù)
  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)//刪除指紋數(shù)據(jù)
  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;//數(shù)據(jù)和
  89.         u8 recive_temp[10];//接收數(shù)據(jù)緩存
  90.         Recive_Error=0;//校驗和標志清零
  91.         for(i=0;i<6;i++)
  92.                 Uart_Recevie();//丟棄前6個數(shù)據(jù)
  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]; //數(shù)據(jù)和計算
  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)//讀取模板個數(shù)返回包
  107.                 {
  108.                         //ValidN=recive_temp[4];
  109.                         //ValidN=(ValidN<<8)|recive_temp[5];//模板個數(shù)合并
  110.                         ValidN=recive_temp[5];//0xff 直接省略高位數(shù)據(jù)
  111.                 }                                 
  112.                 recive_num=recive_temp[3];//確認碼        
  113.         }
  114.         else
  115.         {
  116.                 Recive_Error=1;
  117.                 Send_Char("校驗和錯誤\r\n");//發(fā)送信息
  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();//設(shè)置指紋存儲數(shù)組
  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("設(shè)備異常!!!\r\n");
  182.                 Send_Char("即將重啟!!!\r\n");
  183.                 Delay400ms();Delay400ms();Delay400ms();        
  184.                 IAP_CONTR=0x40;//重啟        
  185.         }
  186.         Send_Char("\r\n系統(tǒng)加載成功!\r\n");        
  187. }
復制代碼


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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区在线 | 一区二区三区免费 | 成人在线观看网站 | 久久久噜噜噜久久中文字幕色伊伊 | 国产精品视频播放 | 国产乱码精品1区2区3区 | 欧美a∨| 久草.com | 国产视频一区二区 | 欧美日韩电影一区二区 | 国产精品毛片一区二区在线看 | 日韩av资源站 | 亚洲色图第一页 | 午夜精品久久久久久久久久久久久 | 综合激情久久 | 国产免费让你躁在线视频 | 在线中文字幕视频 | 国产精品视频在线免费观看 | 日本免费视频在线观看 | 一级黄色播放 | 在线视频亚洲 | 久久综合九色综合欧美狠狠 | 男人的天堂久久 | 亚洲成人免费 | 中文亚洲视频 | av在线免费播放 | 国产一区二区久久 | 国产韩国精品一区二区三区 | 国产精品久久久久久久久久久久 | 亚洲一区二区三区在线观看免费 | 中文字幕在线一区 | 黄视频网站免费观看 | 一区二区三区日韩 | 欧美亚洲国产一区二区三区 | 成人欧美一区二区三区视频xxx | 免费观看一级特黄欧美大片 | 高清国产午夜精品久久久久久 | 久久99精品久久久久久 | 国产精品成人一区二区 | 91精品一区二区三区久久久久久 | 国产高清免费视频 |