51单片机实现电子密码锁设计

使用51单片机实现一个电子密码锁,可以实现修改密码,三次错误输入锁定等功能。

说明

  • 仿真工具:Proteus 8,keil5
  • 利用c语言编程
  • 仿真图根据51单片机实验板绘制,实物可以使用
  • 使用模块:矩阵键盘,LCD1602


一、实现方法原理

笔者参考普中51单片机开发攻略,根据单片机内部电路模块连接方法来设计的程序。虽然电子密码锁之类的程序单片机设计已经比较基础,但是笔者认为自己亲自动手编程,从电路实际情况出发,去了解原理,去最终实现功能这个独立思考动手操作的过程是非常有必要的。

二、电子密码锁各功能模块介绍

1.矩阵键盘

以下参考《普中51单片机开发攻略》

本章以4*4矩阵键盘为例讲解其工作原理和检测方法。在我们的51实验开发板上将16个按键排成4行4列,将每一行的一端以及每一列的另一端都连接在一起,这样便一共有8根线,正好与我们单片机的8个I/O口上,通过程序扫描就可以检测这16个按键。
本文参考的键盘检测方法是行列扫描法,以下为开源的程序代码:
51单片机实现电子密码锁设计_第1张图片

 在Proteus仿真中可以这样进行连线。

u8 key_matrix_ranks_scan(void) { 
u8 key_value=0; 
KEY_MATRIX_PORT=0xf7;//给第一列赋值 0,其余全为 1 
if(KEY_MATRIX_PORT!=0xf7)//判断第一列按键是否按下 
{ 
delay_10us(1000);//消抖 
switch(KEY_MATRIX_PORT)//保存第一列按键按下后的键值
{ 
case 0x77: key_value=1;break; 
case 0xb7: key_value=5;break; 
case 0xd7: key_value=9;break; 
case 0xe7: key_value=13;break; 
} 
}
while(KEY_MATRIX_PORT!=0xf7);//等待按键松开 
KEY_MATRIX_PORT=0xfb;//给第二列赋值 0,其余全为 1 
if(KEY_MATRIX_PORT!=0xfb)//判断第二列按键是否按下 
{ 
delay_10us(1000);//消抖 
switch(KEY_MATRIX_PORT)//保存第二列按键按下后的键值 
{ 
case 0x7b: key_value=2;break; 
case 0xbb: key_value=6;break; 
case 0xdb: key_value=10;break; 
case 0xeb: key_value=14;break; 
} 
}
while(KEY_MATRIX_PORT!=0xfb);//等待按键松开 
KEY_MATRIX_PORT=0xfd;//给第三列赋值 0,其余全为 1 
if(KEY_MATRIX_PORT!=0xfd)/

你可能感兴趣的:(51单片机,c语言)