找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 5309|回復: 3
收起左側

stm32六位藍牙密碼鎖源碼設計

  [復制鏈接]
ID:258358 發(fā)表于 2018-12-21 10:47 | 顯示全部樓層 |閱讀模式
這是基于stm32F103RCT6的六位密碼鎖,分為兩種模式:普通模式和管理員模式 ,管理員模式下可更改密碼。密碼輸入方式:手機通過藍牙發(fā)
小白一個,大佬勿噴

接線:串口引腳(PA9,PA10)
手機軟件:BLUESPP   可以使用其他軟件
藍牙型號(HC-06)   可以使用其他藍牙模塊
數(shù)據(jù)類型:十六進制數(shù)據(jù) 其中0X0E為模式切換    0X0F為清除指令   密碼輸入只能為0-9的數(shù)字

單片機源程序如下:

  1. /********************************六位密碼鎖 *************************************************
  2. *接線:PF0~PF7
  3. *矩陣按鍵 S16 為清除數(shù)據(jù)(清屏)
  4. *矩陣按鍵 S15 為模式切換(普通模式(默認密碼 123456)和管理員模式(默認密碼666666),管理員模式可更改改密碼)
  5. *密碼只能輸入0-9的數(shù)字   其他無效
  6. *密碼正確LED0和LED1將會閃爍
  7. *輸入完6位密碼,系統(tǒng)將會自動判斷正確和錯誤
  8. *
  9. *已測試   可能存在BUG  自行修改
  10. ***************************************************************************************************/
  11. #include "sys.h"
  12. #include "delay.h"
  13. #include "usart.h"
  14. #include "led.h"                           
  15. #include "lcd.h"  
  16. #include "key.h"     
  17. #include "usmart.h"
  18. #include "malloc.h"  
  19. #include "rtc.h"
  20. #include "text.h"


  21. /*****************************************************密碼掉電丟失,恢復原始密碼*****************************************************************************/
  22. u8 open_pwd[6]={1,2,3,4,5,6};//初始密碼
  23. u8 root_pwd[6]={6,6,6,6,6,6};;//管理員密碼
  24. extern u8 Password[6];//輸入的密碼
  25. extern u8 Timer;//按鍵次數(shù)
  26. extern u8 ROOT,NEWROOT;//模式切換
  27. u8 Root,NewRoot;//管理員模式狀態(tài)標志位
  28. int main(void)
  29. {        
  30.         delay_init();                     //延時函數(shù)初始化         
  31.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
  32.          LED_Init();                                          //初始化與LED連接的硬件接口
  33.         uart_init(9600);                 //串口初始化為115200        
  34.         LCD_Init();                                           //初始化LCD   
  35.         while(font_init());         //檢查字庫
  36.         while(RTC_Init());                //RTC初始化        ,一定要初始化成功
  37.         while(1)
  38.         {  
  39.          if(NEWROOT!=ROOT)LCD_Clear(WHITE); NEWROOT=ROOT;  //清屏        
  40.                 Usart_ReceiveData() ;
  41.                 LCD_ShowString(10,10,200,16,16,"    -  -     ");           
  42.           LCD_ShowString(150,10,200,16,16,"  :  :  ");                 
  43.                 LCD_ShowNum(5,10,calendar.w_year,4,16);                                                                          
  44.                 LCD_ShowNum(45,10,calendar.w_month,2,16);                                                                          
  45.                 LCD_ShowNum(70,10,calendar.w_date,2,16);         
  46.                         switch(calendar.week)
  47.                         {
  48.                                 case 0:
  49.                                         LCD_ShowString(95,10,200,16,16,"Sunday   ");
  50.                                         break;         
  51.                                 case 1:         
  52.                                         LCD_ShowString(95,10,200,16,16,"Monday   ");
  53.                                         break;         
  54.                                 case 2:         
  55.                                         LCD_ShowString(95,10,200,16,16,"Tuesday  ");
  56.                                         break;         
  57.                                 case 3:         
  58.                                         LCD_ShowString(95,10,200,16,16,"Wednesday");
  59.                                         break;         
  60.                                 case 4:         
  61.                                         LCD_ShowString(95,10,200,16,16,"Thursday ");
  62.                                         break;         
  63.                                 case 5:         
  64.                                         LCD_ShowString(95,10,200,16,16,"Friday   ");
  65.                                         break;         
  66.                                 case 6:         
  67.                                         LCD_ShowString(95,10,200,16,16,"Saturday ");
  68.                                         break;  
  69.                         }
  70.                         LCD_ShowNum(150,10,calendar.hour,2,16);                                                                          
  71.                         LCD_ShowNum(174,10,calendar.min,2,16);                                                                          
  72.                         LCD_ShowNum(198,10,calendar.sec,2,16);                        
  73.                
  74.   /*****************************************************普     通     用    戶   模    式*****************************************************************************/
  75.                 if(ROOT==0)
  76.          {
  77.                 if(Timer<6)
  78.                 {
  79.                 POINT_COLOR=RED;
  80.           Show_Str(80,45,200,16,"普通模式      ",16,0);
  81.           Show_Str(40,70,200,16,"請輸入您的六位密碼       ",16,0);
  82.     Show_Str(40,110,200,16,"密碼為:",16,0);        
  83.                 }
  84.                 if(Timer==6)
  85.                 {
  86.                         if((Password[0]==open_pwd[0])&&(Password[1]==open_pwd[1])&&(Password[2]==open_pwd[2])&&(Password[3]==open_pwd[3])&&(Password[4]==open_pwd[4])&&(Password[5]==open_pwd[5]))
  87.                         {
  88.                                 Show_Str(40,70,200,16,"密碼正確,歡迎使用       ",16,0);
  89.                                 LED0=!LED0;LED1=!LED1;
  90.                         }
  91.                  else
  92.                         {
  93.                                 Show_Str(40,70,200,16,"密碼錯誤,請重新輸入",16,0);
  94.                         }
  95.     }               
  96.         }

  97.         
  98.          /*****************************************************管      理     員     模       式**********************************************************************/
  99. else   //管理員模式
  100. {
  101.   POINT_COLOR=BLUE;
  102.   Show_Str(80,45,200,16,"管理員模式         ",16,0);
  103.   if(Root==0)Show_Str(40,70,200,16,"請輸入管理員密碼    ",16,0);
  104.   if(Root<2)Show_Str(40,110,200,16,"密碼為:",16,0);
  105.         if(Root!=NewRoot) LCD_Fill(0,90,250,180,WHITE ); //狀態(tài)發(fā)生改變  清屏
  106.         NewRoot=Root;
  107.          if((Timer==6)||(Root==1))
  108.                 {
  109.                         if((Password[0]==root_pwd[0])&&(Password[1]==root_pwd[1])&&(Password[2]==root_pwd[2])&&(Password[3]==root_pwd[3])&&(Password[4]==root_pwd[4])&&(Password[5]==root_pwd[5]))
  110.                         {
  111.                                 if((Timer==6)&&(Root==0))Timer=0;Root=1;
  112.                                 Show_Str(40,70,200,16,"密碼正確,請輸入新密碼       ",16,0);
  113.                         }
  114.                   else
  115.                         {
  116.                                 Show_Str(40,70,200,16,"密碼錯誤,請重新輸入      ",16,0);Root=2;
  117.                                 LCD_Fill(0,100,250,250,WHITE );
  118.                         }
  119.     }               
  120. }         
  121. }
  122. }
復制代碼
0.png
所有資料51hei提供下載:
六位密碼鎖 藍牙.7z (4.2 MB, 下載次數(shù): 107)



評分

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

查看全部評分

回復

使用道具 舉報

ID:337376 發(fā)表于 2018-12-23 18:57 | 顯示全部樓層
謝謝分享,O(∩_∩)O
回復

使用道具 舉報

ID:454897 發(fā)表于 2018-12-25 21:26 | 顯示全部樓層
請問這個怎么接線��??
回復

使用道具 舉報

ID:849033 發(fā)表于 2020-11-29 11:35 | 顯示全部樓層
請問是怎么連線的呀
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表