713、基于51单片机的密码锁(固定密码,4位数码管,矩阵按键)

完整资料或代做滴滴我(有偿)

目录

一、设计功能

二、proteus仿真

三、原理图

四、程序源码

五、资料包括


一、设计功能

1、单片机型号:STC89C52/51、AT89C52/51、AT89S52/51等等都可通用。

2、密码锁由4X4键盘和4位数码管组成。

3、当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示。

4、若密码不正确,则可以从新输入密码。如连续三次输入错误,则禁止输入。

二、proteus仿真

三、原理图

四、程序源码

五、资料包括

需要完整的资料可以点击下面的名片,找我要资源压缩包的百度网盘下载地址及提取码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的密码锁设计代码,使用 4x4 的矩阵键盘和 4 数码管显示屏,基于 51 单片机: ```C #include <reg52.h> sbit D1 = P2^4; // 数码管 D1 sbit D2 = P2^5; // 数码管 D2 sbit D3 = P2^6; // 数码管 D3 sbit D4 = P2^7; // 数码管 D4 sbit K1 = P1^0; // 矩阵键盘按键 K1 sbit K2 = P1^1; // 矩阵键盘按键 K2 sbit K3 = P1^2; // 矩阵键盘按键 K3 sbit K4 = P1^3; // 矩阵键盘按键 K4 sbit K5 = P1^4; // 矩阵键盘按键 K5 sbit K6 = P1^5; // 矩阵键盘按键 K6 sbit K7 = P1^6; // 矩阵键盘按键 K7 sbit K8 = P1^7; // 矩阵键盘按键 K8 unsigned char code Password[4] = {'1', '2', '3', '4'}; // 设定密码 unsigned char KeySta[4][4] = { // 矩阵键盘按键状态表 {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1} }; unsigned char KeyDown(void) { // 检测矩阵键盘是否按下 unsigned char i, j; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (KeySta[i][j] == 0) { while (!KeySta[i][j]); // 等待按键释放 switch (i) { case 0: switch (j) { case 0: return '1'; case 1: return '2'; case 2: return '3'; case 3: return 'A'; } case 1: switch (j) { case 0: return '4'; case 1: return '5'; case 2: return '6'; case 3: return 'B'; } case 2: switch (j) { case 0: return '7'; case 1: return '8'; case 2: return '9'; case 3: return 'C'; } case 3: switch (j) { case 0: return '*'; case 1: return '0'; case 2: return '#'; case 3: return 'D'; } } } } } return 0; } void Display(unsigned char dat) { // 数码管显示函数 D1 = 1; D2 = 1; D3 = 1; D4 = 1; switch (dat) { case 0: D1 = 0; break; case 1: D2 = 0; break; case 2: D3 = 0; break; case 3: D4 = 0; break; default: break; } } void main(void) { unsigned char i, j, key, cnt = 0, flag = 0; while (1) { key = KeyDown(); if (key) { if (key == Password[cnt]) { cnt++; if (cnt == 4) { cnt = 0; flag = 1; } } else { cnt = 0; } } if (flag) { // 密码正确,开锁 for (i = 0; i < 5; i++) { // 闪烁数码管 for (j = 0; j < 4; j++) { Display(j); delay_ms(50); } } flag = 0; } Display(cnt); // 显示当前输入密码数 delay_ms(50); } } ``` 代码的主要思路是:检测矩阵键盘是否按下,如果按下则获取按键值;与预设密码进行比较,如果匹配则打开锁;否则清空输入密码数并等待下一个按键输入。同时,使用数码管显示当前输入密码数,以及开锁时的闪烁效果。 需要注意的是,该代码只是一个简单的示例,密码储存在代码中,实际应用中应该使用更为安全的密码储存方式。另外,为了简化代码,该示例中使用了延时函数,实际应用中应该使用定时器等更为可靠的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值