基於微控制器的紅外電子密碼鎖程式設計思路

Kakukiri發表於2018-05-28

1 使用硬體

  • lcd1602
  • 矩陣鍵盤
  • 紅外遙控
  • 24c02記憶體儲存
  • 蜂鳴器
  • 電磁繼電器(模擬鎖開關)

2 主要引數

  1. lcd介面標識
  2. 管理員密碼
  3. 開鎖密碼
  4. 輸入密碼次數

3 各硬體主要函式

LCD

1. 顯示介面函式

void ShowPage(uchar page)//顯示介面函式

引數為4個介面

  • 輸入密碼介面 pageInPass
  • 輸入管理員密碼介面 pageInAdmin
  • 設定密碼介面 pageSetPass
  • 開鎖成功介面 pageShowOpen

錯誤介面單獨呼叫一個函式

void ShowError(uchar page,uchar mode)//呼叫錯誤介面,兩種模式,0為一直顯示,1為顯示一會兒回覆正常

2. lcd輸入密碼方式設定函式

uchar InputPassword(uchar x,uchar y,uchar num,uchar *dat,uchar mode)

按位輸入密碼(6位)
- x,y 為輸入密碼起始位置
- num為輸入的數字
- *dat 為儲存密碼的陣列
- mode 輸入密碼模式

  • 0 為輸入的時候顯示密碼
  • 1 為輸入的時候顯示*號
  • 2 為輸入的時候先顯示密碼再顯示*號

3.按鍵函式

矩陣鍵盤掃描

uchar keyScan(void)     

矩陣鍵盤掃描,返回值為按下按鍵ID(編號)檢測方式:通過行、列四次迴圈,找到按下的按鍵,通過按下按鍵所在行、列計算出按下按鍵ID

uchar GetKeyNum(uchar ID)   ;
uchar GetFunctionKey(uchar ID)  ;

從識別到的按鍵ID獲得實際要使用的數字鍵和功能鍵
功能鍵分四種

  • 設定 開鎖 關鎖 清零

4.紅外函式

uchar irKeyScan(void)

紅外來鍵盤掃描,從獲取到的紅外按鍵編碼直接返回按鍵ID

5.24c02儲存函式

void write_n_add(unsigned char * p,unsigned char address,unsigned char n);
void read_n_add(unsigned char * p,unsigned char address,unsigned char n);

讀寫密碼函式

6.mian函式中的功能函式

void SwitchPage(uchar keyID)

選擇顯示介面函式,引數為之前的四個介面

uchar checkPass(uchar *Oldpass,uchar *Newpass)

按位校驗密碼函式,oldpass為舊密碼,newpass為新密碼 ,返回值1為密碼正確,0為密碼錯誤

4 程式主要邏輯

1.各硬體初始化
2.讀取已設定密碼
3.顯示輸入密碼開始介面(初始介面)


4.讀取各個鍵(數字鍵0-9,四個功能鍵)
5.使用設定鍵切換顯示介面


6.1 當前在輸入管理員密碼介面且有數字按鍵輸入
—–6.1.1 管理員密碼正確→進入設定密碼介面
—–6.1.2 管理員密碼錯誤→顯示密碼錯誤→返回管理員密碼介面
6.2 當前在設定密碼介面且數字按鍵有輸入
—–6.2.1 向記憶體寫入新密碼→回到輸入密碼介面(初始介面)
6.3 當前在輸入密碼介面且數字按鍵有輸入
—–6.3.1 開始接收密碼,輸入6位密碼後返回一個判斷值1
6.4 當前在輸入密碼介面且開鎖按鍵有輸入
—–6.4.1 判斷值為1(已輸入6位密碼)且密碼正確→開鎖成功介面;繼電器開;錯誤計數清零
—–6.4.2 判斷值為1且密碼錯誤→密碼錯誤介面;錯誤計數+1;蜂鳴器報警→一段時間後返回輸入密碼介面
————6.4.2.1 判斷值為1且密碼錯誤且錯誤次數=3→密碼錯誤介面;蜂鳴器報警;不返回
—–6.4.3 判斷值不為1→通過一個LED燈閃爍提示
6.5 開鎖成功介面且閉鎖按鍵有輸入→返回輸入密碼介面;繼電器關;密碼位數清零
6.6 清零按鍵有輸入→當前介面密碼位數清零;返回當前介面

相關文章