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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于新唐M453 MCU的智能家居程序源碼-集成語音播報,指紋識別,射頻識別技術

[復制鏈接]
跳轉到指定樓層
樓主
基于M453的智能家居系統設計概要:
       使用先進新唐M453MCU為主控制器,集成了語音播報,生物識別技術,以及RFID(射頻識別技術)設計的一款高端智能家居終端Demo,讓用戶可以以指紋識別和RFID兩種高效安全的技術使生活更加便捷。同時3.2寸彩色觸摸液晶及友好的人機交互帶給用戶更加完美的體驗。語音及燈控,電機控制等外設模塊設計的鎖具終端
基于M453的智能家居設計詳細說明:
       本設計使用新唐提供的M451-Tiny作為基礎,然后在上面進行擴展,連接了各種外設模塊,如人機交互的帶觸摸3.2寸彩色液晶屏,成都方程式的生物識別傳感器(光學指紋傳感器),DC控制的繼電器,電機驅動芯片+電機,RC522 RFID讀卡器,SPI_Flash(W25X16)芯片等。產品的特點是操作便捷,安全性高。以指紋為例,將本套系統安裝后,門鎖外面只有傳感器與用戶接觸,除了對應的注冊手指外不能進行功能性操作,這款指紋傳感器帶有唯一的身份識別ID,可防止不法份子更換指紋傳感器來開門;并且安裝類類似指紋鎖后,用戶回家就不用帶鑰匙了,而且這個可比鑰匙方便多了不是嗎?為了進一步提高門鎖的安全性,我們可以使用IC卡和指紋識別組合開門的方式……

制作出來的實物圖如下:


單片機源程序如下:
  1. #include "main.h"
  2. #include "mpr121_bsp.h"
  3. #include "stdio.h"
  4. #include "stdlib.h"
  5. #include "esp8266_bsp.h"
  6. #include "uart_tft_bsp.h"
  7. #include "w25x16_bsp.h"
  8. #include "timer_delay.h"
  9. #include "motor_bsp.h"
  10. #include "lamp_bsp.h"
  11. #include "oled_bsp.h"
  12. #include "dht11_bsp.h"    /* 溫濕度傳感器 */
  13. #include "rc522_bsp.h"
  14. #include "fp_uart_bsp.h"
  15. #include "voice_bsp.h"

  16. uint8_t IC_Card[4][5];  /* 可存4張IC卡卡號,且第二維數組每個每一個字節為有效標志0x3A時表示該號有效 */


  17. /****************************************************************************************************************
  18. *函數名稱:main
  19. *函數功能:主函數
  20. *函數參數:None
  21. *函數返回:None
  22. *使用示例:None
  23. *CreateBy:Veiko
  24. *Time:2015-5-1
  25. ****************************************************************************************************************/
  26. int main(void)
  27. {
  28.         uint8_t Key;
  29.         uint8_t LED_Stu;
  30.         unsigned int TmpID;
  31.         unsigned int err;
  32.         unsigned int MidDid;
  33.         uint8_t DHT11_data[4];
  34.         uint8_t i;
  35.         
  36.         SYS_Init();
  37.         CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HXT); /* Select SysTick clock source as HXT */
  38.         
  39.         LED_GPIO_Initize();
  40.         motor_Pin_initize();   /* 初始化電機控制引腳 */
  41.         LAMP_Pin_Initize();    /* 初始化燈控制引腳 */
  42.         Open_SPI_Flash();
  43.         TIMER0_Init_Period(0);
  44.         TIMER1_Init_Period(1);
  45.         OLED_Init();
  46.         InitRc522();
  47.         BLH3001_Initize();
  48.         Voice_SetVoice(30);
  49.         Voice_BusyPinInitize();

  50.         while(1)
  51.         {
  52.                 TFT_Function();
  53.                
  54.                 if(USER_MatchIC() == true)
  55.                 {
  56.                         Voice_playMusic(5);  /* 驗證成功 */
  57.                         Motor_Door_ZhengZhuan();
  58.                         TIMER0_DelayNPeriod(150000);  /* 開門 */
  59.                         Motor_Door_TingZhi();
  60.                         Voice_playMusic(3);  /* 門已打開請轉動把手開門 */
  61.                         TIMER0_DelayNPeriod(500000);  /* 開門延時 */
  62.                         Motor_Door_FanZhuan();
  63.                         TIMER0_DelayNPeriod(150000);  /* 開門 */
  64.                         Motor_Door_TingZhi();
  65.                 }
  66.                
  67.                 if(UserGetBLH_INT() == true)
  68.                 {
  69.                         if(Fp_match_D(0,99 ,&TmpID, &err) == FPR_OK)
  70.                         {
  71.                                 Voice_playMusic(5);  /* 驗證成功 */
  72.                                 Motor_Door_ZhengZhuan();
  73.                                 TIMER0_DelayNPeriod(150000);  /* 開門 */
  74.                                 Motor_Door_TingZhi();
  75.                                 Voice_playMusic(3);  /* 門已打開請轉動把手開門 */
  76.                                 TIMER0_DelayNPeriod(500000);  /* 開門延時 */
  77.                                 Motor_Door_FanZhuan();
  78.                                 TIMER0_DelayNPeriod(150000);  /* 開門 */
  79.                                 Motor_Door_TingZhi();
  80.                         }
  81.                         else
  82.                         {
  83.                                 Voice_playMusic(4);  /* 驗證失敗 */
  84.                                 TIMER0_DelayNPeriod(300000);  /* 延時 */
  85.                         }
  86.                 }
  87.         }
  88. }
  89. void USER_DelFP(void)
  90. {
  91.         unsigned int IDTmp,err;
  92.         
  93.         Voice_playMusic(24);  /* 請按手指刪除指紋 */
  94.         
  95.         if(Fp_match_D(0, 99 ,&IDTmp, &err)==FPR_OK)
  96.         {
  97.                 if(Fp_Delete(IDTmp, IDTmp,&err)== FPR_OK)
  98.                 {
  99.                         Voice_playMusic(27);  /* 操作成功 */
  100.                 }
  101.                 else
  102.                 {
  103.                         Voice_playMusic(28);  /* 操作失敗 */
  104.                 }
  105.         }
  106.         else
  107.         {
  108.                 Voice_playMusic(28);  /* 操作失敗 */
  109.                                 
  110.         }
  111.         TIMER0_DelayNPeriod(300000);  /* 延時 */
  112. }
  113. void USER_AddFP(void)
  114. {
  115.         unsigned int IDTmp,err;
  116.         
  117.         Voice_playMusic(7);  /* 請錄入指紋 */
  118.         
  119.         if(FP_Enroll_D(0,99,&IDTmp,&err) == FPR_OK)
  120.         {
  121.                 Voice_playMusic(14);  /* 指紋錄入成功 */
  122.         }
  123.         else
  124.         {
  125.                 Voice_playMusic(15);  /* 指紋錄入失敗 */
  126.         }
  127. }
  128. void TFT_Function(void)
  129. {
  130.         if(TFT_Command != 0) /* 表示有命令 */
  131.         {
  132.                 switch(TFT_Command)
  133.                 {
  134.                         case TFT_CommandKaiMen:
  135.                                 Voice_playMusic(5);  /* 驗證成功 */
  136.                                 Motor_Door_ZhengZhuan();
  137.                                 TIMER0_DelayNPeriod(150000);  /* 開門 */
  138.                                 Motor_Door_TingZhi();
  139.                                 Voice_playMusic(3);  /* 門已打開請轉動把手開門 */
  140.                                 TIMER0_DelayNPeriod(500000);  /* 開門延時 */
  141.                                 Motor_Door_FanZhuan();
  142.                                 TIMER0_DelayNPeriod(150000);  /* 開門 */
  143.                                 Motor_Door_TingZhi();
  144.                         
  145.                                 break;
  146.                         case TFT_CommandAddFP:
  147.                                 USER_AddFP();
  148.                                 break;
  149.                         case TFT_CommandDelFP:
  150.                                 USER_DelFP();
  151.                                 break;
  152.                         case TFT_CommandAddIC:
  153.                                 USER_AddIC_Card();
  154.                                 break;
  155.                         case TFT_CommandDelIC:
  156.                                 USER_DeleteIC_Card();
  157.                                 break;
  158.                         case TFT_CommandSWDT_LED:
  159.                                         if(LAMP1_Stu() == 1)
  160.                                         {
  161.                                                 LAMP1_ON();
  162.                                         }
  163.                                         else
  164.                                         {
  165.                                                 LAMP1_OFF();
  166.                                         }
  167.                                         break;
  168.                         case TFT_CommandSWZL_LED:
  169.                                 if(LAMP2_Stu() == 1)
  170.                                         {
  171.                                                 LAMP2_ON();
  172.                                         }
  173.                                         else
  174.                                         {
  175.                                                 LAMP2_OFF();
  176.                                         }
  177.                                         break;
  178.                         default:break;
  179.                 }
  180.                 TFT_Command = 0;
  181.         }
  182. }

  183. bool USER_MatchIC(void)
  184. {
  185.         uint8_t ArrayTmp[4];
  186.         uint8_t i,j;
  187.         
  188.         if(USER_GetRFID_ID(ArrayTmp) == true)
  189.         {
  190.                 for(i=0;i<4;i++)
  191.                 {
  192.                         if(IC_Card[i][0] != 0x3A)
  193.                                 continue;
  194.                         for(j=0;j<4;j++)
  195.                         {
  196.                                 if(ArrayTmp[j] != IC_Card[i][j+1])
  197.                                         break;
  198.                         }
  199.                         if(j==4)
  200.                         {
  201.                                 return 1;
  202.                         }
  203.                 }
  204.                 if(i==4)
  205.                 {
  206.                         Voice_playMusic(4);  /* 驗證失敗 */
  207.                         TIMER0_DelayNPeriod(300000);  /* 延時 */
  208.                         return 0;
  209.                 }
  210.         }
  211.         return 0;
  212. }
  213. void USER_DeleteIC_Card(void)
  214. {
  215.         uint8_t ArrayTmp[4];
  216.         uint8_t i,j;
  217.         Voice_playMusic(25);  /* 請刷將要刪除的IC卡 */
  218.         while(USER_GetRFID_ID(ArrayTmp) == false);
  219.         
  220.         for(i=0;i<4;i++)
  221.         {
  222.                 for(j=0;j<4;j++)
  223.                 {
  224.                         if(ArrayTmp[j] != IC_Card[i][j+1])
  225.                                 break;
  226.                 }
  227.                 if(j==4)
  228.                 {
  229.                         IC_Card[i][0] = 0xff;  /* 清除有效標志 */
  230.                         Voice_playMusic(27);  /* 操作成功 */
  231.                         break;
  232.                 }
  233.         }
  234.         if(i==4)
  235.         {
  236.                 Voice_playMusic(28);  /* 操作失敗 */
  237.         }
  238.         TIMER0_DelayNPeriod(300000);  /* 延時 */
  239. }

  240. void USER_AddIC_Card(void)
  241. {
  242.         unsigned char CT[2];//卡類型
  243.         unsigned char status;
  244.         uint8_t i,j;
  245.         for(i=0;i<4;i++)
  246.         {
  247.                 if(IC_Card[i][0] != 0x3A)
  248.                         break;
  249.         }
  250.         if(i<4)
  251.         {
  252.                 Voice_playMusic(26);  /* 請刷IC卡 */
  253.                 while(USER_GetRFID_ID(&IC_Card[i][1]) == false);
  254.                 IC_Card[i][0] = 0x3A;  /* 標志有效 */
  255.         }
  256.         Voice_playMusic(18);  /* 添加IC卡成功 */
  257.         TIMER0_DelayNPeriod(300000);  /* 延時 */
  258. }
  259. /****************************************************************************************************************
  260. *函數名稱:SYS_Init
  261. *函數功能:配置系統時鐘樹
  262. *函數參數:None
  263. *函數返回:None
  264. *使用示例:SYS_Init();
  265. *CreateBy:Veiko
  266. *Time:2015-5-1
  267. ****************************************************************************************************************/
  268. uint8_t USER_GetRFID_ID(uint8_t *ID_Array)
  269. {
  270.         unsigned char CT[2];//卡類型
  271.         unsigned char SN[4]; //卡號
  272.         unsigned char status;
  273.         
  274.         status = PcdRequest(PICC_REQALL,CT);/*掃描卡*/
  275.         status = PcdAnticoll(SN);/*防沖撞*/
  276.         if (status==MI_OK)
  277.         {
  278.                 *(ID_Array) = SN[0];
  279.                 *(ID_Array+1) = SN[1];
  280.                 *(ID_Array+2) = SN[2];
  281.                 *(ID_Array+3) = SN[3];
  282.                 return 1;
  283.         }
  284.         return 0;
  285. }

  286. /****************************************************************************************************************
  287. *函數名稱:SYS_Init
  288. *函數功能:配置系統時鐘樹
  289. *函數參數:None
  290. *函數返回:None
  291. *使用示例:SYS_Init();
  292. *CreateBy:Veiko
  293. *Time:2015-5-1
  294. ****************************************************************************************************************/
  295. void SYS_Init(void)
  296. {
  297.     /*---------------------------------------------------------------------------------------------------------*/
  298.     /* Init System Clock                                                                                       */
  299.     /*---------------------------------------------------------------------------------------------------------*/
  300.     /* Unlock protected registers */
  301.     SYS_UnlockReg();

  302.     /* Enable HIRC clock (Internal RC 22.1184MHz) */
  303.     CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

  304.     /* Wait for HIRC clock ready */
  305.     CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

  306.     /* Select HCLK clock source as HIRC and and HCLK clock divider as 1 */
  307.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

  308.     /* Enable HXT clock (external XTAL 12MHz) */
  309.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  310.     /* Wait for HXT clock ready */
  311.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  312.     /* Set core clock as HCLK_CLOCK */
  313.     CLK_SetCoreClock(HCLK_CLOCK);
  314.                
  315.                 /* Select UART module clock source as HXT and UART module clock divider as 1 */
  316.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));
  317.                 CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));
  318.                 CLK_SetModuleClock(UART2_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));
  319.                
  320.     /* Update System Core Clock */
  321.     /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
  322.     SystemCoreClockUpdate();
  323.                
  324.                 CLK_EnableModuleClock(I2C1_MODULE);    /* Enable peripheral clock */
  325.                 CLK_EnableModuleClock(UART1_MODULE);
  326.     CLK_EnableModuleClock(UART0_MODULE);
  327.                 CLK_EnableModuleClock(UART2_MODULE);


  328.     /*---------------------------------------------------------------------------------------------------------*/
  329.     /* Init I/O Multi-function                                                                                 */
  330.     /*---------------------------------------------------------------------------------------------------------*/
  331.     /* Set PD multi-function pins for UART0 RXD and TXD */
  332.     SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD0MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk);
  333.     SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD0MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD);
  334.                
  335.                 /* Set PA multi-function pins for UART1 RXD and TXD */
  336.     SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA0MFP_Msk | SYS_GPA_MFPL_PA1MFP_Msk | SYS_GPA_MFPL_PA2MFP_Msk | SYS_GPA_MFPL_PA3MFP_Msk);   
  337.     SYS->GPA_MFPL |= (SYS_GPA_MFPL_PA0MFP_UART1_TXD | SYS_GPA_MFPL_PA1MFP_UART1_RXD |SYS_GPA_MFPL_PA2MFP_GPIO
  338.                                   |SYS_GPA_MFPL_PA3MFP_GPIO);
  339.                
  340.                 /* I2C1: GPE0=SDA, GPC4=SCL*/
  341.                 SYS->GPE_MFPL &= ~(SYS_GPE_MFPL_PE0MFP_Msk);
  342.     SYS->GPE_MFPL |= SYS_GPE_MFPL_PE0MFP_I2C1_SDA;
  343.                 SYS->GPC_MFPL &= ~(SYS_GPC_MFPL_PC4MFP_Msk);
  344.     SYS->GPC_MFPL |= SYS_GPC_MFPL_PC4MFP_I2C1_SCL;
  345.                
  346.                 /* UART2:PC2  PC3 */
  347.                 SYS->GPC_MFPL &= ~(SYS_GPC_MFPL_PC2MFP_Msk | SYS_GPC_MFPL_PC3MFP_Msk);
  348.                 SYS->GPC_MFPL |=  (SYS_GPC_MFPL_PC2MFP_UART2_TXD| SYS_GPC_MFPL_PC3MFP_UART2_RXD);
  349.                
  350.                 /* PB1-WakePin */
  351.                 SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB1MFP_Msk);
  352.                 SYS->GPB_MFPL |=  (SYS_GPB_MFPL_PB1MFP_GPIO);
  353.                
  354.                 /* PB8-語音的BUSY檢測引腳
  355.                    PB9 and PB10為澆花電機控制引腳
  356.                 */
  357.                 SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB8MFP_Msk| SYS_GPB_MFPH_PB9MFP_Msk | SYS_GPB_MFPH_PB10MFP_Msk);
  358.                 SYS->GPB_MFPH |=  (SYS_GPB_MFPH_PB8MFP_GPIO | SYS_GPB_MFPH_PB9MFP_GPIO | SYS_GPB_MFPH_PB10MFP_GPIO);
  359.                
  360.     /* Lock protected registers */
  361.     SYS_LockReg();
  362.                
  363.                 UART_Open(UART0, 9600);
  364.                
  365.                 UART_Open(UART1, 9600);
  366.                 UART_EnableInt(UART1, UART_INTEN_RDAIEN_Msk);  /* 使能UART1的接收中斷功能 */
  367.                
  368.                 UART_Open(UART2, 115200);
  369.                 UART_EnableInt(UART2, UART_INTEN_RDAIEN_Msk);  /* 使能UART1的接收中斷功能 */
  370.                
  371.                 UART_Open(UART3, 115200);
  372.                 UART_EnableInt(UART3, UART_INTEN_RDAIEN_Msk);  /* 使能UART1的接收中斷功能 */
  373. }




  374. /******************************************************End*******************************************************/


  375.         
復制代碼

Keil代碼下載(需要安裝相應芯片的庫才能打開):
MDK工程文件(程序源文件)--請合用MDK 5.15打開.7z (3.48 MB, 下載次數: 19)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 狠狠亚洲 | 日日操夜夜操视频 | 久草视频在线播放 | 一区二区三区在线免费观看视频 | 亚洲国产精品99久久久久久久久 | 日韩激情一区 | 午夜一区二区三区在线观看 | 免费午夜视频在线观看 | 精品国产不卡一区二区三区 | 一级在线观看 | 综合色播| 国产精品一区二区三区久久 | 欧美视频中文字幕 | 日韩电影免费在线观看中文字幕 | 国产精品日日做人人爱 | 在线观看www视频 | 美美女高清毛片视频免费观看 | 福利片一区二区 | 色网站入口| 亚洲精品日韩一区二区电影 | 一级片在线观看视频 | 91久久久久久 | 中文字幕国产精品视频 | 日本91av视频| 一区二区三区播放 | 蜜臀久久99精品久久久久野外 | 成人午夜看片 | 精品国产三级 | 日韩欧美高清 | 美女福利视频一区 | 天堂精品视频 | 亚洲精品免费视频 | 国产一级片久久久 | 国产精品日日做人人爱 | 色天天综合 | 久久婷婷国产麻豆91 | 成人免费大片黄在线播放 | 视频在线一区二区 | 91精品国产乱码久久久久久久久 | 黄色欧美 | 精品国产一二三区 |