51单片机密码锁代码及仿真
时间: 2023-11-13 19:04:46 浏览: 38
作为AI语言模型,我无法提供仿真功能,以下是51单片机密码锁的代码:
```
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = {0xfe, 0xfd, 0xfb, 0xf7}; //数码管位选码
uchar code num[] = { //数码管0-9的段码
0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80, 0x98
};
uchar key;
void delay(uint i) //延时函数
{
uint j, k;
for (j = i; j > 0; j--)
for (k = 125; k > 0; k--);
}
void display(uchar n) //数码管显示函数
{
P0 = num[n % 10]; //个位数码管
P2 = table[0];
delay(5); //延时
P0 = num[n / 10]; //十位数码管
P2 = table[1];
delay(5); //延时
}
void init_key() //初始化键盘
{
P3 = 0xf0; //将P3的低四位置1
key = 0xff; //初始化按键值
}
uchar get_key() //获取键值函数
{
uchar temp;
P3 = 0xf0; //将P3的低四位置1
if (P3 != 0xf0) //有键按下
{
delay(5); //延时去抖动
if (P3 != 0xf0) //再次判断是否有键按下
{
switch (P3) //判断哪个键按下
{
case 0xe0: //第一列
temp = 0; break; //1
case 0xd0: //第二列
temp = 1; break; //2
case 0xb0: //第三列
temp = 2; break; //3
case 0x70: //第四列
temp = 3; break; //4
default:
temp = 0xff; //无效键值
}
P3 = 0x0f; //将P3的高四位置1
if (P3 != 0x0f) //有键按下
{
delay(5); //延时去抖动
if (P3 != 0x0f) //再次判断是否有键按下
{
switch (P3) //判断哪个键按下
{
case 0x0e: //第一行
temp += 0; break; //1
case 0x0d: //第二行
temp += 4; break; //2
case 0x0b: //第三行
temp += 8; break; //3
case 0x07: //第四行
temp += 12; break; //4
default:
temp = 0xff; //无效键值
}
}
}
}
}
return temp; //返回键值
}
void main()
{
uchar password[] = {1, 2, 3, 4}; //设置密码
uchar input[4] = {0, 0, 0, 0}; //输入密码
uchar i, j;
while (1)
{
init_key(); //初始化键盘
key = get_key(); //获取键值
if (key != 0xff) //有键按下
{
for (i = 0; i < 4; i++) //找到空位置
{
if (input[i] == 0) //找到空位置
{
input[i] = key; //保存输入的键值
break;
}
}
for (j = 0; j < i; j++) //显示已输入的密码
{
display(input[j]); //数码管显示
}
if (i == 3) //输入完毕
{
for (j = 0; j < 4; j++) //判断输入的密码是否正确
{
if (input[j] != password[j]) //密码错误
{
display(0xff); //数码管显示E
delay(1000); //延时1s
break;
}
}
if (j == 4) //密码正确
{
display(0x0); //数码管显示0
delay(1000); //延时1s
}
for (j = 0; j < 4; j++) //清空输入的密码
{
input[j] = 0;
}
}
while (get_key() != 0xff); //等待松开按键
}
}
}
```
注意:这只是一个简单的密码锁程序,仅供参考。实际应用中需要考虑更多的安全性问题。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)