這是基于stm32F103RCT6的六位密碼鎖,分為兩種模式:普通模式和管理員模式 ,管理員模式下可更改密碼。密碼輸入方式:手機通過藍牙發
小白一個,大佬勿噴
接線:串口引腳(PA9,PA10) 手機軟件:BLUESPP 可以使用其他軟件 藍牙型號(HC-06) 可以使用其他藍牙模塊 數據類型:十六進制數據 其中0X0E為模式切換 0X0F為清除指令 密碼輸入只能為0-9的數字
單片機源程序如下:
- /********************************六位密碼鎖 *************************************************
- *接線:PF0~PF7
- *矩陣按鍵 S16 為清除數據(清屏)
- *矩陣按鍵 S15 為模式切換(普通模式(默認密碼 123456)和管理員模式(默認密碼666666),管理員模式可更改改密碼)
- *密碼只能輸入0-9的數字 其他無效
- *密碼正確LED0和LED1將會閃爍
- *輸入完6位密碼,系統將會自動判斷正確和錯誤
- *
- *已測試 可能存在BUG 自行修改
- ***************************************************************************************************/
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "lcd.h"
- #include "key.h"
- #include "usmart.h"
- #include "malloc.h"
- #include "rtc.h"
- #include "text.h"
-
- /*****************************************************密碼掉電丟失,恢復原始密碼*****************************************************************************/
- u8 open_pwd[6]={1,2,3,4,5,6};//初始密碼
- u8 root_pwd[6]={6,6,6,6,6,6};;//管理員密碼
- extern u8 Password[6];//輸入的密碼
- extern u8 Timer;//按鍵次數
- extern u8 ROOT,NEWROOT;//模式切換
- u8 Root,NewRoot;//管理員模式狀態標志位
- int main(void)
- {
- delay_init(); //延時函數初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
- LED_Init(); //初始化與LED連接的硬件接口
- uart_init(9600); //串口初始化為115200
- LCD_Init(); //初始化LCD
- while(font_init()); //檢查字庫
- while(RTC_Init()); //RTC初始化 ,一定要初始化成功
- while(1)
- {
- if(NEWROOT!=ROOT)LCD_Clear(WHITE); NEWROOT=ROOT; //清屏
- Usart_ReceiveData() ;
- LCD_ShowString(10,10,200,16,16," - - ");
- LCD_ShowString(150,10,200,16,16," : : ");
- LCD_ShowNum(5,10,calendar.w_year,4,16);
- LCD_ShowNum(45,10,calendar.w_month,2,16);
- LCD_ShowNum(70,10,calendar.w_date,2,16);
- switch(calendar.week)
- {
- case 0:
- LCD_ShowString(95,10,200,16,16,"Sunday ");
- break;
- case 1:
- LCD_ShowString(95,10,200,16,16,"Monday ");
- break;
- case 2:
- LCD_ShowString(95,10,200,16,16,"Tuesday ");
- break;
- case 3:
- LCD_ShowString(95,10,200,16,16,"Wednesday");
- break;
- case 4:
- LCD_ShowString(95,10,200,16,16,"Thursday ");
- break;
- case 5:
- LCD_ShowString(95,10,200,16,16,"Friday ");
- break;
- case 6:
- LCD_ShowString(95,10,200,16,16,"Saturday ");
- break;
- }
- LCD_ShowNum(150,10,calendar.hour,2,16);
- LCD_ShowNum(174,10,calendar.min,2,16);
- LCD_ShowNum(198,10,calendar.sec,2,16);
-
- /*****************************************************普 通 用 戶 模 式*****************************************************************************/
- if(ROOT==0)
- {
- if(Timer<6)
- {
- POINT_COLOR=RED;
- Show_Str(80,45,200,16,"普通模式 ",16,0);
- Show_Str(40,70,200,16,"請輸入您的六位密碼 ",16,0);
- Show_Str(40,110,200,16,"密碼為:",16,0);
- }
- if(Timer==6)
- {
- 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]))
- {
- Show_Str(40,70,200,16,"密碼正確,歡迎使用 ",16,0);
- LED0=!LED0;LED1=!LED1;
- }
- else
- {
- Show_Str(40,70,200,16,"密碼錯誤,請重新輸入",16,0);
- }
- }
- }
-
- /*****************************************************管 理 員 模 式**********************************************************************/
- else //管理員模式
- {
- POINT_COLOR=BLUE;
- Show_Str(80,45,200,16,"管理員模式 ",16,0);
- if(Root==0)Show_Str(40,70,200,16,"請輸入管理員密碼 ",16,0);
- if(Root<2)Show_Str(40,110,200,16,"密碼為:",16,0);
- if(Root!=NewRoot) LCD_Fill(0,90,250,180,WHITE ); //狀態發生改變 清屏
- NewRoot=Root;
- if((Timer==6)||(Root==1))
- {
- 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]))
- {
- if((Timer==6)&&(Root==0))Timer=0;Root=1;
- Show_Str(40,70,200,16,"密碼正確,請輸入新密碼 ",16,0);
- }
- else
- {
- Show_Str(40,70,200,16,"密碼錯誤,請重新輸入 ",16,0);Root=2;
- LCD_Fill(0,100,250,250,WHITE );
- }
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
六位密碼鎖 藍牙.7z
(4.2 MB, 下載次數: 107)
2018-12-22 01:47 上傳
點擊文件名下載附件
|