基于51单片机的简易智能密码锁设计

2024-07-03 907阅读

目录

一、设计任务与要求

1.设计任务:

2.设计要求:

二、方案设计与论证

总体方案设计: 

各硬件电路方案设计及论证:

1.单片机内部软件资源分配

2.单片机外围晶振和复位电路

3.按键阵列扫描电路

4.数码管显示电路

5.报警提示和开锁电路

三、总原理图及元器件清单

四、程序流程图

五、性能测试与分析

六、设计作品图片  

七、结论与心得

八、程序代码

 

一、设计任务与要求

1.设计任务:

利用STC89C52单片机搭配合理的外围电路,在各方面参数合理的情况下,制作一个简易的智能密码锁,该智能密码锁能够进行仿真模拟密码的输入、报警提示和锁打开及关闭。同时,装置还具有密码显示和系统锁定的功能,在搭建继电器等相关装置之后,具有实物的锁定功能。

2.设计要求:

  1. 对于单片机的按键输入密码的有效位数为6位;
  2. 单片机中的密码与当前单片机定时器系统时间相关,每隔1分钟,密码自动更新;
  3. 如果密码正确,蜂鸣器响0.5秒,开锁继电器吸合,5秒后开锁继电器关;
  4. 密码尝试5次出错,则停止尝试1分钟。

二、方案设计与论证

总体方案设计: 

 本作品设计的简易智能密码锁是一种应用于安全领域的电子设备,广泛应用于家庭、办公场所、酒店、银行等各种场合。它通过电子技术和密码算法,取代了传统的机械锁,提供更高的安全性和便捷性。

 本简易智能密码锁在设计之初,采用两种设计方案,在综合实际的代码编写、焊接、材料成本之后,采用了第二种设计方案。

方案一:在界面信息显示界面,用一个LCD1602显示屏幕来完成相关输入密码信息和开锁提示信息的显示,可以用于输入字符和数字信息;操作按键采用16位矩阵按键装置,采用动态扫描的方式来完成输入;在单片机外部设定一个DS1302的实时时钟芯片,用于每隔1分钟,密码自动更新;报警、提醒和开锁电路采用扬声器、LED灯泡和继电器装置来完成。

方案二:在界面信息显示界面,用一个较为普通的6段共阴极数码管来显示密码,应用动态扫描完成信息显示;操作按键共设12个,除0~9这10个数字键外,还有随机数显示按键和密码输入按键;在单片机内部设定定时器运行,用于与单片机自身的系统时钟保持同步,并在每隔1分钟,密码自动更新;报警、提醒和开锁电路采用扬声器、LED灯泡和继电器完成。

选择方案二的原因:对比上面两种方案,采用方案二的性价比会更高。首先,由于本装置只需要完成0~9数字和相关特定字符的显示,采用一个较为普通的6段共阴极数码管便可以完成需求,不用使用较为昂贵的LCD显示屏。此外,本装置只需要使用12个按键,利用矩阵按键会造成资源的浪费,虽然12个按键会使用较多的IO口,但是本实验可以满足设计的要求。最后,可以直接使用单片机内部的定时器时钟来完成随机数的更新,由于系统是属于独立工作的状态,不需要实时显示时间,因此可以舍弃DS1302实时时钟芯片,便可以满足要求。由此,综合上面的分析和比较,选择方案二是最佳的,因此舍弃方案一。

基于51单片机的简易智能密码锁设计

各硬件电路方案设计及论证:

1.单片机内部软件资源分配

装置的整体控制器采用STC89C52单片机,它有着以下的众多优点,高性能:STC89C52单片机采用了高速的8051内核,最高主频可达33MHz,具有快速的运算能力和响应速度。 低功耗:STC89C52单片机采用了低功耗设计,工作电流仅为1-10mA,具有较低的功耗和较长的电池寿命。

其中,包含按键阵列扫描函数、数码管扫描显示函数、随机数产生函数(采用单片机内部定时器和随机数算法)、输入密码比对函数、报警提示和开锁函数、正确密码生成函数、主函数。其中,主函数连接各个函数,实现简易智能密码锁。方案条理清晰,设计依照上述的流程进行,方案设计合理。

2.单片机外围晶振和复位电路

在STC89C52单片机中,首先需要搭建外围电路,在XTAL1、XTAL2两个端口,连接12MHz的晶振和两个电容值在30pF以下的瓷片电容。同时,在单片机的RST端口连接单片机的复位电路,采用一个10k欧姆的电阻和10uF的极性电容构成。其他的端口分别设置为IO口,分配给各工作电路进行使用。

对于此连接方式,采用官方给出的数据手册进行连接,保证了单片机的正常工作,设计方案合理。

基于51单片机的简易智能密码锁设计   

3.按键阵列扫描电路

 由于单片机端口数量足够,键盘电路直接使用查询式按键扫描电路。其中,小按键开关的一端接单片机端口,另一端接地,当按下按键时,通过单片机查询来确定哪个端口键按下了,然后执行相应的控制程序。其中,2个为功能键,10个为0~9数字键,每个按键均接上拉电阻,用于防止外部干扰的扰动。端口P1.0~P1.7分别对应数字键0~7,端口P3.0、P3.1分别对应数字键8、9;端口P3.2、P3.3分别对应随机数显示和输入密码界面。在开锁时先按一下随机数显示按键,查看此时的随机数显示的情况,根据自带的密码计算算法(在本系统采用后两位数字与前两位数字更换),计算出此时的正确密码。然后再按下输入密码操作键,输人6位的数字密码,当6位密码输入完毕时,系统会自动将新密码存入存储器,用于比对密码正确性。

 在本方案中,各个按键分开独立工作,并无影响,将输入的按键信号传入单片机,方案设计合理。

图示为操作按键连接电路图:

基于51单片机的简易智能密码锁设计

4.数码管显示电路

 数码管显示采用共阴极四位一体的显示器7SEG-MPX4-CA-RED,输入6位密码,共有两个数码管。其中,P0口负责输出显示数码管的段码,端口接上拉电阻;P2口为数码管的位控扫描控制口,对每个数码管进行约1ms的轮流正电压供电,共使用6个端口来进行控制。两个数码管的左边的8个引脚分别对应段码输出最低位至最高位,DP为小数点位,而两个数码管的右边的4条引脚分别为4位数码管的阴极供电端,用于控制数码管的位控输出。

在数码管的显示控制中,分别使用单片机的P0口、P2口来完成数码管的扫描输出,合理调节扫描时间,可以正确显示数字的情况,方案设计合理。

图为数码管引脚情况和显示电路:

基于51单片机的简易智能密码锁设计

5.报警提示和开锁电路

蜂鸣器驱动电路:端口P3.5对应蜂鸣器驱动,起到信息警示,作为密码输入正确或错误的声音提示,密码正确时响一下声音,且时间较长;密码输入错误时响短暂声音,后可再次输入密码,但总共只有5次机会,5次密码错误后,系统自动锁死,60s之后便可以重新输入密码。其中,在每一次随机数进行更新时,与P3.6连接的二极管会闪烁一下,用于提示。

继电器开锁电路:端口P3.4对应继电器(使用发光二极管代替)开锁,起到开锁的作用。在本系统中,连接灯泡,用于锁开启提示,亮时表示开启成功,实际应用时可接电磁开锁线圈驱动电路,开启5s之后,灯泡闪烁,继电器关闭。

本方案在连接蜂鸣器和继电器时,要合理的参照器件特性,按照下图进行连接,方案设计合理。图示为蜂鸣器与红色发光二极管提示电路:

基于51单片机的简易智能密码锁设计

三、总原理图及元器件清单

    1.总原理图(软件proteus)

基于51单片机的简易智能密码锁设计

 

2.元件选择耗材及价格清单

元件序号

型号

主要参数

数量

单价

备注

R1~R14

RES40

10k欧姆

12

0.05元

R15~R17

RES40

1k欧姆

3

0.05元

C1~C2

CAP10

47pF

2

0.1元

C3

CAP10

10uF

1

0.1元

Button1~12

Button

4脚

12

0.1元

CRYSTAL

CRYSTAL

12MHZ

1

0.3元

7SEG-MPX4--CC

S4041AS

4位共阴极

2

0.5元

AT89C52

STC89C52RC.X90C

单片机

1

2元

LED

LED

Led灯

4

0.3元

BUZZER

TMB 12A03

蜂鸣器

1

1.5元

2N5551

S 9014 C331

三极管

1

0.3元

RESPACK-8

RESPACK

排阻

1

0.2元

单面绿油板

单面绿油板

15*20cm

1

5元

导线、锡丝

导线、锡丝

导线、锡丝

若干

若干

 

 

三、总原理图及元器件清单

 

 

 

四、

四、程序流程图

基于51单片机的简易智能密码锁设计

五、性能测试与分析

指标1:对于单片机的按键输入密码的有效位数为6位;在下面的界面显示中,具有6位密码界面输入和显示。达到此性能指标。

基于51单片机的简易智能密码锁设计

指标2:单片机中的密码与当前单片机定时器系统时间相关,每隔1分钟,密码自动更新。

当前显示的随机数为361524,此时的正确密码是241536。在间隔1分钟之后,密码更新,此时的随机数显示为375892,此时的正确密码是925837。达到此性能指标。

 基于51单片机的简易智能密码锁设计

指标3:如果密码正确,蜂鸣器响0.5秒,开锁继电器吸合,5秒后开锁继电器关闭。在下面的显示中,当输入密码正确时,代表开锁继电器的灯泡会亮起,5秒之后,灯泡熄灭。达到此性能指标。

基于51单片机的简易智能密码锁设计

指标4:密码尝试5次出错,则停止尝试1分钟。达到此性能指标。

 基于51单片机的简易智能密码锁设计

其他性能指标:

在基于指标3中,在输入密码正确的情况下,加入了更加人性化的界面信息,ONONON表示此时开锁,同时,在关闭继电器时,灯泡和蜂鸣器均会闪烁,提醒使用者。

在基于指标4中,当输入密码错误时,显示ERRERR,,表示此时输入密码错误,同时,在5次输入密码错误时,系统锁定,界面显示倒计时信息,60s倒计时结束之后,可再次输入密码。

总体来说,提高部分的指标加强了本装置的人机交互的能力,将人性化的思想得到很大程度的体现。

六、设计作品图片  

基于51单片机的简易智能密码锁设计

七、结论与心得


问题1:焊接单片机的晶振和复位电路。单片机不能够进行程序烧录。

解决方法:了解到此问题之后,我在网上查阅相关的资料。资料显示单片机不能正常工作,与外围的晶振和复位电路有很大的关系。同时,在咨询老师的意见之后,我对单片机的晶振和复位电路进行了详细的检查。其中两个瓷片电容应该焊接在晶振的后面,同时晶振应该离单片机的引脚非常接近,否则电容不起振,晶振也无法正常工作,同时电容所采取的电容值应该按照说明书文档上所标注的33pF以下。

问题2:数码管电路焊接。共阴极,共阳极没有区分,同时数码管的亮度非常低。

解决方法:针对于此现象的产生,在网上查询相关的数码管使用方法,掌握了数码管共阴极,共阳极的测量方法。共阴极数码管的测量方法应该是:用电源的负极夹住数码管的位控端,同时用1V左右的电源正极依次触碰数码管的八个段码口,如果数码管此时各段正常亮起,则说明数码管是共阴极数码管,反之是共阳极数码管。在正确焊接到单片机电路板上的时候,应该检查数码管是否正常,在我使用的数码管中有一个损坏,经过多次检查才发现。同时单片机IO口输出的电流非常小,需要采取通过电流较小的数码管来进行显示,此处我采用型号为数码管S4041AS来实现以上电路。

问题3:单片机重要程序编写。在本次项目设计中,程序编写难度最大的部分,我认为应该在于数码管随机数的产生、显示以及按键密码的比对函数。

解决方法:参照网上现有的资料,我认真学习单片机定时器的相关使用,同时针对于随机数的产生,我也认真的学习了相关的算法,在反复编译文件中得到此次问题的解决。同时,在密码比对函数中我创造性的提出了利用多维数组来进行密码比对,分别设置存储密码和比对的新密码,同时设定标志位,并在外围运用多次循环用于控制密码错误的次数,进而形成一个按键输入比对的函数,可以很好的被单片机来进行调用。

 

课题改进:我觉得可以将数码管显示电路替换为LCD屏幕进行多信息、多维度的展示,让人机交互界面更加的人性化。同时基于实验室现有器材可以将灯泡更换为继电器,真正让智能密码锁具有继电器开锁的相关功能。

课题背景:该项目具有广大的背景,因为在现在的生活中,安全性成为一个不可忽视的问题。生活中许多多的物品需要用“锁”来锁住。智能密码锁提供了一个很好的解决方案,它具有高效、便捷、不易被破解等相关功能,本次课题设计为这种方案的实现提供了一个很好的参考,在以后的实际应用中,更换更加坚固可靠的材料,可以将此产品真正的走向实用化。

八、程序代码

#include 
#include    //rand()函数导入,产生随机数
#include 
sbit P10 = P1 ^ 0; // 数字0  // 按键定义
sbit P11 = P1 ^ 1; // 数字1
sbit P12 = P1 ^ 2; // 数字2
sbit P13 = P1 ^ 3; // 数字3
sbit P14 = P1 ^ 4; // 数字4
sbit P15 = P1 ^ 5; // 数字5
sbit P16 = P1 ^ 6; // 数字6
sbit P17 = P1 ^ 7; // 数字7
sbit P30 = P3 ^ 0; // 数字8
sbit P31 = P3 ^ 1; // 数字9
sbit P32 = P3 ^ 2; // 随机数显示界面
 
sbit P33 = P3 ^ 3; // 密码输入界面
sbit P34 = P3 ^ 4; // 继电器驱动
sbit P35 = P3 ^ 5; // 蜂鸣器驱动
sbit P36 = P3 ^ 6; //定时器更新时,灯闪一下
sbit P37 = P3 ^ 7;   //预留口--暂时未使用
sbit P00 = P0 ^ 0; // 数码管段码
sbit P01 = P0 ^ 1;
sbit P02 = P0 ^ 2;
sbit P03 = P0 ^ 3;
sbit P04 = P0 ^ 4;
sbit P05 = P0 ^ 5;
sbit P06 = P0 ^ 6;
sbit P07 = P0 ^ 7;
sbit P20 = P2 ^ 0; // 数码管位码  工作电压值
sbit P21 = P2 ^ 1;
sbit P22 = P2 ^ 2;
sbit P23 = P2 ^ 3;
sbit P24 = P2 ^ 4;
sbit P25 = P2 ^ 5;
sbit P26 = P2 ^ 6;
sbit P27 = P2 ^ 7;
// 共阴显示段码表: 0 1 2 3 4 5 6 7 8 9 - n 不亮 三 E r  f      
char code dis_7[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,   //0~9
                       0x40, 0xb7, 0xff, 0x49, 0x79, 0x70,0x71};
// 控制七段数码管的工作电压,0x01表示最左端数码显示  从左往右显示顺序
char code scan_con[6] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf};
// 储存显示于数码管上面的值,最开始显示“888888”,顺便检验数码管有没有损坏的现象
unsigned char dia[6] = {8, 8, 8, 8, 8, 8};
// 用于储存密码和算法输入密码的数值情况,data1[0][]为算法设定的密码,data1[1][]为输入的密码
unsigned char dat1[2][6] = {0, 0, 0, 0, 0, 0};
unsigned char dat2[6]; // 显示缓存
bit flag = 0, flag1 = 0; // 标志位
int c = 0;
int count;   //随机数生成--定时器
int count1;   
int count2; // 定时器计数标志位  初始化
int a1 ;   //倒计时总时间
int n;  //延时for循环
void delay(int t) // 延时程序
{
    int i, j;
    for (i = 0; i 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]