找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4254|回复: 3
收起左侧

stm32六位蓝牙密码锁源码设计

  [复制链接]
ID:258358 发表于 2018-12-21 10:47 | 显示全部楼层 |阅读模式
这是基于stm32F103RCT6的六位密码锁,分为两种模式:普通模式和管理员模式 ,管理员模式下可更改密码。密码输入方式:手机通过蓝牙发
小白一个,大佬勿喷

接线:串口引脚(PA9,PA10)
手机软件:BLUESPP   可以使用其他软件
蓝牙型号(HC-06)   可以使用其他蓝牙模块
数据类型:十六进制数据 其中0X0E为模式切换    0X0F为清除指令   密码输入只能为0-9的数字

单片机源程序如下:

  1. /********************************六位密码锁 *************************************************
  2. *接线:PF0~PF7
  3. *矩阵按键 S16 为清除数据(清屏)
  4. *矩阵按键 S15 为模式切换(普通模式(默认密码 123456)和管理员模式(默认密码666666),管理员模式可更改改密码)
  5. *密码只能输入0-9的数字   其他无效
  6. *密码正确LED0和LED1将会闪烁
  7. *输入完6位密码,系统将会自动判断正确和错误
  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;//按键次数
  26. extern u8 ROOT,NEWROOT;//模式切换
  27. u8 Root,NewRoot;//管理员模式状态标志位
  28. int main(void)
  29. {        
  30.         delay_init();                     //延时函数初始化         
  31.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  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 ); //状态发生改变  清屏
  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, 下载次数: 102)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:337376 发表于 2018-12-23 18:57 | 显示全部楼层
谢谢分享,O(∩_∩)O
回复

使用道具 举报

ID:454897 发表于 2018-12-25 21:26 | 显示全部楼层
请问这个怎么接线啊??
回复

使用道具 举报

ID:849033 发表于 2020-11-29 11:35 | 显示全部楼层
请问是怎么连线的呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表