色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32+華為云IOT實現動態口令密碼鎖

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-07-13 11:46 ? 次閱讀

1. 前言

隨機密碼鎖是一種常見的電子鎖系統,它使用數字密碼代替傳統的物理鑰匙來進行身份驗證和門鎖控制。該項目基于STM32微控制器實現一個安全可靠的隨機密碼鎖系統。

傳統的機械鎖存在一些安全和便捷性的問題。鑰匙可能會丟失、被盜或者被復制,這會給用戶帶來安全風險。而且,當需要為多個用戶提供訪問權限時,分發和管理多個物理鑰匙變得復雜。為了解決這些問題,隨機密碼鎖系統應運而生。

隨機密碼鎖系統基于STM32微控制器實現,具備以下特點:

  1. 高安全性:系統使用數字密碼進行身份驗證,密碼是隨機生成的,并且每次開鎖時會自動更換密碼。這樣可以提高安全性,防止密碼被破解或預測。
  2. 多用戶支持:系統可以為多個用戶分配不同的訪問權限和密碼。管理員可以輕松添加、刪除或修改用戶信息,并設置其對應權限。
  3. 多種開鎖方式:除了密碼輸入外,系統還可以支持其他開鎖方式,如指紋識別、刷卡等,增加了便捷性和靈活性。
  4. 電池供電:系統采用低功耗設計,可以通過電池供電,避免線路布線的限制,適用于不同的門鎖應用場景。
  5. 報警功能:系統能夠檢測異常操作或入侵,并觸發報警,提高安全性。

當前支持的開鎖方式:

(1)支持手機APP遠程開鎖。通過華為云物聯網平臺實現遠程發送指令開鎖,設備上的ESP8266通過連接家里路由器,在連接華為云物聯網平臺,可以在手機APP上對設備端的RTC時間進行校準,設備唯一ID獲取,生成隨機開鎖密碼,可以點擊APP上的開鎖按鈕,通過物聯網平臺提供的API發送指令給STM32設備完成開鎖。

(2)隨機密碼開鎖。手機APP與本地設備都采用時間、作為算法種子,采用算法生成開鎖密碼,每一串的密碼有效時間為一分鐘。查看手機APP上顯示的密碼之后,在本地設備上輸入完成密碼對比開鎖。 在這里插入圖片描述

image-20220409013820783image-20220409014126096

image-20220409014222568

2. 相關硬件

2.1 WIFI模塊

image-20220404180739654

2.2 步進電機模塊

image-20220404180810347

2.3 OLED顯示屏

image-20220404180915854

2.4 STM32開發板

image-20220404180941848

2.5 矩陣鍵盤模塊

image-20220404181013714

3. 手機APP設計

3.1 開發環境介紹

上位機軟件采用Qt框架設計,Qt是一個跨平臺的C++圖形用戶界面應用程序框架。Qt是一個1991年由Qt Company開發的跨平臺C++圖形用戶界面應用程序開發框架。它既可以開發GUI程序,也可用于開發非GUI程序,比如控制臺工具和服務器。簡單來說,QT可以很輕松的幫你做帶界面的軟件,甚至不需要你投入很大精力。

QT官網:https://www.qt.io/

image-20220314143105032

3.2 學習教程

QT入門實戰專欄: https://blog.csdn.net/xiaolong1126626497/category_11400392.html

QT5環境安裝教程:https://xiaolong.blog.csdn.net/article/details/120654599

下載QT5.12.6下載地址: https://download.qt.io/archive/qt/5.12/5.12.6/

打開鏈接后選擇:

qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details

軟件安裝時斷網安裝,否則會提示輸入賬戶。

安裝的時候,勾選一個mingw 32編譯器即可。

3.3 實現效果

在這里插入圖片描述

4. 創建云端設備

4.1 創建設備

登錄官網: https://www.huaweicloud.com/

直接搜索物聯網,打開頁面。

https://www.huaweicloud.com/product/iothub.html
1.png

選擇設備接入:

image-20211215174521654

選擇免費試用:

1.png

產品頁面,點擊右上角創建產品:

image-20211215174642960

填上產品信息:

image-20211215174937965

得到產品ID,保存好ID,點擊查看詳情:

產品ID為:61b9ba3a2b2aa20288c1e7f1.

image-20211215175007908

點擊設備頁面,注冊設備:

image-20211215175814693

填充信息進行注冊:

image-20211215180006268

保存設備密匙和設備ID,點擊保存關閉會自動下載文件保存,后面生成密碼和登錄賬號需要使用

image-20211215180041077

關閉后就看到創建好的設備了:

image-20211215180732602

點擊產品頁面,選擇剛才創建的產品:

image-20211215180939201

選擇自定義模型---創建數據模型服務:

image-20211215181036122

image-20211215181144359

選擇新增屬性,創建設備的屬性

image-20211215181424235

4.2 創建MQTT登錄賬號和密匙

設備創建完成接來下生成MQTT登錄賬號、密匙,方便設備登錄云端平臺。

官網工具地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

image-20211215181625067

打開剛才創建設備時,下載的密匙文件,把內容復制出來對應的填進去,生成即可。

image-20211215181747129

4.3 拼接主題訂閱與發布的格式

官方文檔介紹: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html

image-20211215182442581

在產品頁面可以,看到主題的全部格式:

image-20211215183137006

幫助文檔:https://support.huaweicloud.com/iothub/index.html

總結的格式如下:

格式: $oc/devices/{device_id}/sys/messages/down
 //訂閱主題: 平臺下發消息給設備
 $oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down
 ?
 ?
 格式: $oc/devices/{device_id}/sys/properties/report
 //設備上報數據
 $oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report
 ?
 上屬性的數據格式:
 //上報的屬性消息 (一次可以上報多個屬性,在json里增加就行了)
 {"services": [{"service_id": "lock","properties":{"門鎖":1}}]}

上面屬性里的服務ID和屬性里的名稱,在設備頁面,影子設備頁面查看。

image-20211215184220051

4.4 MQTT客戶端模擬設備登錄云端

下面使用MQTT客戶端模擬設備登錄服務器測試,看設備創建的是否OK。

服務器的IP地址是: 121.36.42.100

端口號是: 1883

打開MQTT客戶端軟件,按照提示,輸入相關參數后,點擊連接,然后再點擊訂閱主題,發布主題即可:

image-20211215184435114

查看云端服務器的情況: 可以看到設備已經在線了,并且收到上傳的數據。

image-20211215184612394

修改一下鎖的狀態,上報屬性再查看:

image-20211215184712687

發現云端的狀態也已經改變,現在設備上報已經OK。

image-20211215184735239

接下來測試命令下發,實現遠程開鎖關鎖的功能:

打開產品頁面,新增加命令:

image-20211215185156127

image-20211215185232075

image-20211215185302157

命令添加成功:

image-20211215185325872

在設備頁面,選擇同步命令下發:

image-20211215185445720

image-20211215185523035

點擊確定后,查看MQTT客戶端,發現已經收到數據了:

image-20211215185612755

$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497/sys/commands/request_id=88e2626f-290d-405e-962d-51554445a8fd{"paras":{"lock":1},"service_id":"lock","command_name":"lock"}

設備端解析收到的數據,就可以完成多步進電機的控制,完成開鎖關鎖。

5. STM32設備端代碼設計

STM32連接華為云IOT的工程代碼Get: https://download.csdn.net/download/xiaolong1126626497/81993720

5.1 硬件相關原理圖

image-20220408224849014

image-20220408224909656

image-20220408225637885

image-20220408225751486

5.2 程序下載配置

image-20220409014444075

5.3 硬件接線

1. 板載ESP8266串口WIFI模塊與STM32的串口3相連接。
 PB10--RXD 模塊接收腳
 PB11--TXD 模塊發送腳
 PB8---CH-PD---懸空
 PB9---RST---懸空
 GND---GND 地
 VCC---VCC 電源(3.3V~5.0V)
 ?
 ?
 2. 觸摸按鍵使用TTP229型號的驅動芯片
 SCL接PC11
 SDA-OUT接PC10
 電源接VCC-3.3
 GND接GND
 ?
 3. ULN2003控制28BYJ-48步進電機接線:
 ?
 ULN2003接線:
 IN4: PC9   d
 IN3: PC8   c
 IN2: PC7   b
 IN1: PC6   a
 +  : 5V
 -  : GND
 ?
 4. OLED顯示屏
 D0----SCK-----PB14
 D1----MOSI----PB13
 RES—復位(低電平有效)—PB12
 DC---數據和命令控制管腳—PB1
 CS---片選引腳-----PA7
 ?
 ?
 5. 板載按鍵
 KEY1---PA0 
 KEY2---PC13
 ?
 ?
 6.板載LED燈
 LED1---PB5
 LED2---PB0
 LED3---PB1 
 ?
 7. 板載蜂鳴器
 BEEP---PA8

5.4 服務器連接核心代碼

//華為物聯網服務器的設備信息
 #define MQTT_ClientID "61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510"
 #define MQTT_UserName "61b9ba3a2b2aa20288c1e7f1_QQ1126626497"
 #define MQTT_PassWord "385ce91dfe7da5b7431868d5d87e7998163c493344040935d5a00024d6324242"
 ?
 //訂閱與發布的主題
 #define SET_TOPIC  "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down"  //訂閱
 #define POST_TOPIC "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report"  //發布
 ?
 char mqtt_message[200];//上報數據緩存區
 ?
 int main()
 {
    u32 time_cnt=0;
    u32 i;
    u8 key;
    LED_Init();
    BEEP_Init();
    KEY_Init();
    USART1_Init(115200);
    TIMER1_Init(72,20000); //超時時間20ms
    USART2_Init(9600);//串口-藍牙
    TIMER2_Init(72,20000); //超時時間20ms
    USART3_Init(115200);//串口-WIFI
    TIMER3_Init(72,20000); //超時時間20ms
    USART1_Printf("正在初始化WIFI請稍等.n");
    if(ESP8266_Init())
    {
       USART1_Printf("ESP8266硬件檢測錯誤.n");  
    }
    else
    {
       //非加密端口
       USART1_Printf("WIFI:%dn",ESP8266_STA_TCP_Client_Mode("CMCC-Cqvn","99pu58cb","121.36.42.100",1883,1));
   
    }
    
     //2. MQTT協議初始化  
     MQTT_Init(); 
     //3. 連接華為服務器        
     while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
     {
         USART1_Printf("服務器連接失敗,正在重試...n");
         delay_ms(500);
     }
     USART1_Printf("服務器連接成功.n");
     
     //3. 訂閱主題
     if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
     {
         USART1_Printf("主題訂閱失敗.n");
     }
     else
     {
         USART1_Printf("主題訂閱成功.n");
     }
     ..................
     ..................
     ...................
 }

5.5 隨機密碼生成

#include < stdio.h >
 #include < time.h >
 #include < stdlib.h >
 #include < string.h >
 #include < windows.h >
 ?
 char pwdcont[] = "0123456789abcdefghijklmn";
 ?
 char* get_Password(int pwd_size)
 {
     int i;
     int random;
     char *Password = (char *)malloc(pwd_size + 1);
 ?
     //獲取時間種子
     srand((unsigned)time(NULL));
 ?
     for (i = 0; i < pwd_size; i++)
     {
         random = rand() % (strlen(pwdcont));
         *(Password + i) = pwdcont[random];
     }
 ?
     *(Password + i) = '?';
     return Password;
 }
 ?
 int main()
 {
     int random;
     char *Password;
     srand((unsigned)time(NULL));
 ?
     for (int i = 0; i < 10; i++)
     {
         Sleep(100);
         random = rand() % 10;//密碼的長度范圍 (6-63) 
         printf("random = %dn", random);
         Password = get_Password(random);
         printf("Password = %sn", Password);
     }
     free(Password);
     return 0;
 }

5.6 RTC實時時鐘代碼

#include "rtc.h"
 ?
 //定義RTC標準結構體
 struct RTC_CLOCK rtc_clock; 
 ?
 /*
 函數功能: RTC初始化函數
 */
 void RTC_Init(void)
 {
      if(BKP- >DR1!=0xAB) //表示RTC第一次初始化
      {
             //1. 備份寄存器時鐘
             RCC- >APB1ENR|=1< < 27; //備份時鐘接口
             RCC- >APB1ENR|=1< < 28; //電源時鐘接口
             PWR- >CR|=1< < 8;           //允許寫入RTC和后備寄存器
           
           //2. 配置RTC時鐘源
             RCC- >BDCR|=1< < 0;     //開啟外部32.768K時鐘
           while(!(RCC- >BDCR&1< < 1)){} //等待時鐘就緒
             RCC- >BDCR&=~(0x3< < 8);  //清空時鐘配置
             RCC- >BDCR|=0x1< < 8;     //選擇外部32.768K時鐘
             
             //3. 配置RTC核心寄存器
             RCC- >BDCR|=1< < 15;     //開啟RTC時鐘
       while(!(RTC- >CRL&1< < 5)){} //判斷上一次寄存器是否寫完成
             RTC- >CRL|=1< < 4;  //進入配置模式
             RTC- >PRLH=0;      //預分頻高位
             RTC- >PRLL=0x7FFF; //32767   預分頻低位
             RTC- >CNTH=0;      //計數器高位
             RTC- >CNTL=0;      //計數器低位
             RTC- >ALRH=0;      //鬧鐘寄存器高位
             RTC- >ALRL=60;      //鬧鐘寄存器低位
             RTC- >CRL&=~(1< < 4);//退出配置模式  
             while(!(RTC- >CRL&1< < 5)){} //判斷上一次寄存器是否寫完成
             BKP- >DR1=0xAB;      //表示配置成功了   
         }
 ?
         RTC- >CRH|=1< < 0; //秒中斷
         RTC- >CRH|=1< < 1; //鬧鐘中斷
         STM32_SetPriority(RTC_IRQn,2,2); //優先級
         
         RTC_SetTime(2022,4,9,0,36,1);
 }
 ?
 extern void Update_FrameShow(void);
 /*
 函數功能: RTC鬧鐘中斷服務函數
 */
 void RTC_IRQHandler(void)
 {
       u32 SecCnt;
         if(RTC- >CRL&1< < 0)
         {
                 SecCnt=RTC- >CNTH< < 16;//獲取高位
                 SecCnt|=RTC- >CNTL;   //獲取低位
                 RTC_GetTime(SecCnt); //轉換標準時間
                 RTC_GetWeek(SecCnt);
              // printf("%d-%d-%d %d:%d:%d week:%dn",rtc_clock.year,rtc_clock.mon,rtc_clock.day,rtc_clock.hour,rtc_clock.min,rtc_clock.sec,rtc_clock.week);
                 Update_FrameShow(); //更新顯示
                 RTC- >CRL&=~(1< < 0); //清除秒中斷標志位
         }
         
         if(RTC- >CRL&1< < 1)
         {
 //              printf("鬧鐘時間到達!....n");
 //            BEEP=1;
 //            DelayMs(500);
 //              BEEP=0;
                 RTC- >CRL&=~(1< < 1); //清除鬧鐘中斷標志位
         }
 }
 ?
 ?
 ?
 //閏年的月份
 static int mon_r[12]={31,29,31,30,31,30,31,31,30,31,30,31};
 //平年的月份
 static int mon_p[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 ?
 ?
 /*
 函數功能: 設置RTC時間
 函數形參:
     u32 year;   2018
       u32 mon;     8
       u32 day;
         u32 hour;
         u32 min;
       u32 sec;
 */
 void RTC_SetTime(u32 year,u32 mon,u32 day,u32 hour,u32 min,u32 sec)
 {
         u32 i;
       u32 SecCnt=0; //總秒數
         /*1. 累加已經過去的年份*/
         for(i=2017;i< year;i++)  //基準年份:20170101000000
       {
                 if(RTC_GetYearState(i))
                 {
                         SecCnt+=366*24*60*60; //閏年一年的秒數
                 }
                 else
                 {
                         SecCnt+=365*24*60*60; //平年一年的秒數
                 }
         }
         /*2. 累加過去的月份*/
         for(i=0;i< mon-1;i++)
         {
               if(RTC_GetYearState(year))
                 {
                         SecCnt+=mon_r[i]*24*60*60; //閏年一月的秒數
                 }
                 else
                 {
                         SecCnt+=mon_p[i]*24*60*60; //平年一月的秒數
                 }   
         }
         
         /*3. 累加過去的天數*/
         SecCnt+=(day-1)*24*60*60;
         
         /*4. 累加過去小時*/
         SecCnt+=hour*60*60;
         
         /*5. 累加過去的分鐘*/
         SecCnt+=min*60;
         
         /*6. 累加過去的秒*/
         SecCnt+=sec;
         
         /*7. 設置RTC時間*/
         RCC- >APB1ENR|=1< < 27; //備份時鐘接口
         RCC- >APB1ENR|=1< < 28; //電源時鐘接口
         PWR- >CR|=1< < 8;           //允許寫入RTC和后備寄存器
         while(!(RTC- >CRL&1< < 5)){} //判斷上一次寄存器是否寫完成
         RTC- >CRL|=1< < 4;           //進入配置模式
         RTC- >CNTH=SecCnt > >16;     //計數器高位
         RTC- >CNTL=SecCnt&0xFFFF;  //計數器低位
         RTC- >CRL&=~(1< < 4);//退出配置模式  
         while(!(RTC- >CRL&1< < 5)){} //判斷上一次寄存器是否寫完成
 }
 ?
 ?
 /*
 函數功能: 獲取RTC時間
 函數參數: u32 sec 秒單位時間
 */
 void RTC_GetTime(u32 sec)
 {
         u32 i;
         rtc_clock.year=2017; //基準年份
         
       /*1. 計算當前的年份*/
       while(1)
         {
               if(RTC_GetYearState(rtc_clock.year))
                 {
                         if(sec >=366*24*60*60) //夠一年
                         {
                                 sec-=366*24*60*60;
                                 rtc_clock.year++;
                         }
                         else break;
                 }
                 else
                 {
                         if(sec >=365*24*60*60) //夠一年
                         {
                                 sec-=365*24*60*60;
                                 rtc_clock.year++;
                         }
                         else break;
                 }
         }
         
         /*2. 計算當前的月份*/
         rtc_clock.mon=1;
         for(i=0;i< 12;i++)
         {
                 if(RTC_GetYearState(rtc_clock.year))
                 {
                         if(sec >=mon_r[i]*24*60*60)
                         {
                              sec-=mon_r[i]*24*60*60;
                              rtc_clock.mon++;
                         }
                         else break;     
                 }
                 else
                 {
                         if(sec >=mon_p[i]*24*60*60)
                         {
                              sec-=mon_p[i]*24*60*60;
                              rtc_clock.mon++;
                         }
                         else break; 
                 }
         }
         
         /*3. 計算當前的天數*/
         rtc_clock.day=1;
         while(1)
         {
                 if(sec >=24*60*60)
                 {
                         sec-=24*60*60;
                         rtc_clock.day++;
                 }
                 else break;
         }
         
         /*4. 計算當前的小時*/
         rtc_clock.hour=0;
         while(1)
         {
                 if(sec >=60*60)
                 {
                         sec-=60*60;
                         rtc_clock.hour++;
                 }
                 else break;
         }
         
         /*5. 計算當前的分鐘*/
         rtc_clock.min=0;
         while(1)
         {
                 if(sec >=60)
                 {
                         sec-=60;
                         rtc_clock.min++;
                 }
                 else break;
         }
         
         /*6. 計算當前的秒*/
         rtc_clock.sec=sec;
 }
 ?
 ?
 /*
 函數功能: 判斷年份是否是平年、閏年
 返回值  : 0表示平年 1表示閏年
 */
 u8 RTC_GetYearState(u32 year)
 {
      if((year%4==0&&year%100!=0)||year%400==0)
      {
          return 1;
      }
      return 0;
 }
 ?
 ?
 /*
 函數功能: 獲取星期
 */
 void RTC_GetWeek(u32 sec)
 {
     u32 day1=sec/(60*60*24); //將秒單位時間轉為天數
     switch(day1%7)
     {
         case 0:
             rtc_clock.week=0;
             break;
         case 1:
             rtc_clock.week=1;
             break;
         case 2:
             rtc_clock.week=2;
             break;
         case 3:
             rtc_clock.week=3;
             break;
         case 4:
             rtc_clock.week=4;
             break;
         case 5:
             rtc_clock.week=5;
             break;
         case 6:
             rtc_clock.week=6;
             break;
     }
 }
 ?
 /*
 將標準時間轉為秒單位時間
 思路: 全程加法
 時間基準點: 1970年1月1日0時0分0秒
 返回值: 得到的秒單位時間
 */
 unsigned int TimeToSec(int year, int mon, int mdeay, int hour, int min)
 {
     int i;
     int sec_cnt = 0; //記錄秒單位的時間
     /*1. 轉換年*/
     for (i = 1970; i < year; i++)
     {
         if (RTC_GetYearState(i)) //閏年
         {
             sec_cnt += 366 * 24 * 60 * 60;
         }
         else
         {
             sec_cnt += 365 * 24 * 60 * 60;
         }
     }
 ?
     /*2. 轉換月*/
     for (i = 0; i < mon - 1; i++)
     {
         if (RTC_GetYearState(year)) //閏年
         {
             sec_cnt += mon_r[i] * 24 * 60 * 60;
         }
         else
         {
             sec_cnt += mon_p[i] * 24 * 60 * 60;
         }
     }
 ?
     /*3. 轉換天數*/
     sec_cnt += (mdeay - 1) * 24 * 60 * 60;
 ?
     /*4. 轉換小時*/
     sec_cnt += hour * 60 * 60;
 ?
     /*5. 轉換分鐘*/
     sec_cnt += min * 60;
     return sec_cnt;
 }
 ?

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7542

    瀏覽量

    151316
  • 物聯網
    +關注

    關注

    2909

    文章

    44557

    瀏覽量

    372758
  • STM32
    +關注

    關注

    2270

    文章

    10895

    瀏覽量

    355729
  • 密碼鎖
    +關注

    關注

    6

    文章

    249

    瀏覽量

    34993
  • 步進電機
    +關注

    關注

    150

    文章

    3109

    瀏覽量

    147443
  • 開發板
    +關注

    關注

    25

    文章

    5032

    瀏覽量

    97371
  • Qt
    Qt
    +關注

    關注

    1

    文章

    302

    瀏覽量

    37899
  • IOT
    IOT
    +關注

    關注

    187

    文章

    4202

    瀏覽量

    196684
  • 華為云
    +關注

    關注

    3

    文章

    2445

    瀏覽量

    17408
收藏 人收藏

    評論

    相關推薦

    基于單片機的紅外遙控密碼鎖的設計與實現

    基于單片機的紅外遙控密碼鎖的設計與實現:Design and Realization of the Code LockControlled by Infrared Based on Single Chip 本文設計了一種基于單片機的紅外遙控
    發表于 11-26 13:30 ?163次下載
    基于單片機的紅外遙控<b class='flag-5'>密碼鎖</b>的設計與<b class='flag-5'>實現</b>

    電話數字密碼鎖

    電話數字密碼鎖
    發表于 03-03 21:16 ?1008次閱讀
    電話數字<b class='flag-5'>密碼鎖</b>

    電子密碼鎖的設計

    電子密碼鎖的設計 設計一個電子密碼鎖,在開的狀態下輸入密碼密碼共4位,用數據開關K1K10分別代表數字1、2、…、9、
    發表于 04-29 16:23 ?5849次閱讀
    電子<b class='flag-5'>密碼鎖</b>的設計

    密碼鎖程序源代碼

    51單片機,密碼鎖。可實現密碼鎖的基本功能,開鎖,報警,修改密碼
    發表于 11-10 17:23 ?62次下載

    基于單片機的紅外遙控密碼鎖的設計與實現

    基于單片機的紅外遙控密碼鎖的設計與實現
    發表于 02-17 16:50 ?60次下載

    簡易電子密碼鎖

    簡易電子密碼鎖 四位電子密碼鎖設計 思路簡述
    發表于 06-17 16:00 ?70次下載

    電子密碼鎖的C語言程序

    這個是電子密碼鎖的C語言程序,以及電子密碼鎖的仿真圖。
    發表于 07-29 17:26 ?129次下載

    密碼鎖仿真 51密碼鎖protues仿真 密碼鎖程序仿真圖pro

    密碼鎖仿真 51密碼鎖protues仿真 密碼鎖程序仿真圖protues仿真
    發表于 01-14 22:32 ?251次下載

    基于單片機的電子密碼鎖設計與實現

    基于單片機的電子密碼鎖設計與實現
    發表于 01-21 12:00 ?27次下載

    微電腦密碼鎖設計

      介紹一下密碼鎖的優點,這一次我們要設計的是一個微電腦密碼鎖,相較于傳統機械式密碼鎖有所不同。
    發表于 09-20 12:33 ?10次下載
    微電腦<b class='flag-5'>密碼鎖</b>設計

    指紋密碼鎖的優點和缺點

     指紋密碼鎖優勢是什么?指紋密碼鎖優點有哪些?指紋密碼鎖缺點是什么?指紋密碼鎖是當前非常主流的智能配置,指紋開鎖+
    發表于 06-10 14:25 ?5.4w次閱讀

    基于STM32的指紋密碼鎖的電路方案設計

    STM32智能指紋密碼鎖密碼指紋WiFi遠程解鎖,可密碼解鎖,指紋解鎖,指紋可錄入刪除,最多存300個指紋,可連接WiFi遠程掃碼解鎖,非手機局域網本地連接,遠程網頁檢測
    的頭像 發表于 10-07 12:18 ?1.7w次閱讀

    基于ATMEGA128的密碼鎖

    基于ATMEGA128的密碼鎖題目要求題目分析仿真結果主函數代碼題目要求密碼鎖題目要求使用單片機實現簡易密碼鎖,通過輸入密碼
    發表于 11-15 10:21 ?19次下載
    基于ATMEGA128的<b class='flag-5'>密碼鎖</b>

    基于FPGA的電子按鍵密碼鎖設計

    電子密碼鎖與傳統密碼鎖相比,具有安全性高、成本低、易操作等諸多優點。正因如此,電子密碼鎖近年來發展迅速,諸如按鍵式密碼鎖、卡片式密碼鎖、以及
    的頭像 發表于 07-12 16:03 ?1912次閱讀

    基于STM32的矩陣電子密碼鎖protues仿真設計

    基于STM32的矩陣電子密碼鎖protues仿真設計
    的頭像 發表于 08-31 14:50 ?2620次閱讀
    基于<b class='flag-5'>STM32</b>的矩陣電子<b class='flag-5'>密碼鎖</b>protues仿真設計
    主站蜘蛛池模板: 2019一級特黃色毛片免費看| 婷婷激情综合色五月久久竹菊影视 | 哇嘎在线精品视频在线观看| 精品视频网站| 久亚洲AV无码专区A片| 免费国产成人| 囚禁固定在调教椅上扩张H| 久青草影院| 欧美精品XXXXBBBB| 久久在精品线影院| 欧美精品成人a多人在线观看| 日本xxxx裸体xxxx| 亚州AV中文无码乱人伦在线| 青青草原国产| 无人视频在线观看免费播放影院| 亚洲免费在线视频| 6080YYY午夜理论片在线观看| 亚洲三级黄色| 中文字幕网站在线观看| np高h肉辣一女多男| 国产精品久久久久久久久爆乳 | 99热久久久无码国产精品性麻豆| 在线观看亚洲免费视频| 97碰成视频免费| 国产成人精品永久免费视频| 好看的电影网站亚洲一区| 国产精品无码视频一区二区| 电影日本妻子| 京香在线观看| 起碰免费公开97在线视频| 亚洲AV无码国产精品色在线看 | jzz大全18| 国产一卡2卡3卡4卡孕妇网站| 国产成人精品三级在线| 国产产一区二区三区久久毛片国语 | 国产亚洲欧美在线中文BT天堂网 | 国产自啪偷啪视频在线| 国产亚洲精品久久孕妇呦呦你懂 | 日本69色视频在线观看| 青青精品国产自在线拍| 三叶草未满十八岁|