1 使用硬件
- lcd1602
- 矩阵键盘
- 红外遥控
- 24c02内存存储
- 蜂鸣器
- 电磁继电器(模拟锁开关)
2 主要参数
- lcd界面标识
- 管理员密码
- 开锁密码
- 输入密码次数
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 清零按键有输入→当前界面密码位数清零;返回当前界面