单片机和24C02制作的可以改密码的电子密码锁

2023-11-23 00:08

本文主要是介绍单片机和24C02制作的可以改密码的电子密码锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

   4*4键盘输入,可以更改密码,有24C02存储密码。我用的是6位。也可以多几位,更改相应变量即可。很简单。24C02里面我事先写入了初始密码2 3 4 6 7  0  。调试成功,可以直接用。STC89C51RC单片机 ,万能板焊接

    //实验板上24C02已写入数据 {2,3,4,6,7,0}
#include<REG52.H>
#include <intrins.H>
#define uchar unsigned char
#define uint unsigned int
char code SKEY[16]={4,8,11,15,3,7,10,14,2,6,0,13,1,5,9,12};
char code act[4]={0xfe,0xfd,0xfb,0xf7};
char data rd[6]={1,9,8,5,1,1};
char ct=0;
sbit contel=P2^1;
sbit cin=P0^3;
sbit set=P0^4;
sbit wrong=P0^5;  
sbit SDA=P2^6;
sbit SCL=P2^7;
bdata char com_data;
sbit mos_bit=com_data^7;
sbit low_bit=com_data^0;
void delay_iic(int n);
uchar rd_24c01(char a);
void wr_24c01(char a,char b); 
void wtsec(); 
/**************************************/
void delay_iic(int n)
{
int i;
for(i=1;i<n;i++){}
}

void delay(unsigned int k)
{
unsigned int data i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
{;}
}
}

//*************************************
void start()
{
SDA=1;_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();
SDA=0;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
}
//*****************************************
void stop()
{
SDA=0;_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();
SDA=1;_nop_();_nop_();_nop_();_nop_();
}
//***********************
void ack()
{
SCL=1;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
}
//***********************
void shift8(char a)
{
data uchar i;
com_data=a;
for(i=0;i<8;i++)
{
SDA=mos_bit;
SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
com_data=com_data*2;
}
}
//******************
uchar rd_24c01(char a)
{
data uchar i,command;
SDA=1;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
start();
command=160;
shift8(command);
ack();
shift8(a);
ack();
start();
command=161;
shift8(command);
ack();
SDA=1;_nop_();_nop_();_nop_();_nop_();
for(i=0;i<8;i++)
{
com_data=com_data*2;
SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
low_bit=SDA;
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
stop();
return(com_data);
}
//*****************
void wr_24c01(char a,char b)
{
data uchar command;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
start();
command=160;
shift8(command);
ack();
shift8(a);
ack();
shift8(b);
ack();
stop();
_nop_();_nop_();_nop_();_nop_();_nop_();
}

//键盘扫描
char scan_key(void)
{
char i,j,in,ini=0,inj=0,temp,del;
bit find=0;
 P1=0x0f;
 temp=P1;
 if(temp!=0x0f)        //按键有松开过
for(del=10;del>0;del--);     //键盘去抖延迟
if(temp!=0x0f)
{
 for(i=0;i<4;i++)
 {
 P1=act[i];
 in=P1;
 in=in>>4;
 in=in|0xf0;
  for(j=0;j<4;j++)
  {
    if(act[j]==in)
    {find=1;
    inj=j;ini=i;
    }
  }
 }
}
 if(find==0)return -1;
 return (ini*4+inj);
}
//输入函数
void put_secret()
{
char wrt[6];
char et,ft;
char wt,x=1;
char *p,*t;
p=rd;
t=wrt;
for(wt=0;wt<6;)
{
 et=scan_key();
if(et!=-1)
{
wrt[wt]=SKEY[et];
wt=wt+x;
cin=0;
delay(200);
cin=1;
}
}
ct=0;
for (ft=0;ft<6;)
{
if(wrt[ft]==rd[ft])
{ct=ct+x; }

ft=ft+x;
}
if(ct==6)
 contel=1;
else
wrong=0;
}

 void  wtsec()
  {
char t[6];
char e,f,i=10;
char w,x=1;
char *m,*n;
m=rd;
n=t;
for(w=0;w<6;)
{
 e=scan_key();
if(e!=-1)
{
t[w]=SKEY[e];
w=w+x;
cin=0;
delay(200);
cin=1;
}      
}
for (f=0;f<6;)
{
wr_24c01(i,t[f]);
delay_iic(250);
rd[f]=rd_24c01(i);
delay_iic(250);
f=f+x;
i=i+x;
}      
  }
//============================
void main(void)
{
char c,f, key_val,x=1,ii=10;
contel=0;
wrong=1;
cin=1;
set=0; 
delay(2000);
for (f=0;f<6;)
{
rd[f]=rd_24c01(ii);
delay_iic(250);
f=f+x;
ii=ii+x;
}
set=1;
delay(1000);
 while(1)
 { 
 c=scan_key();
   if(c!=-1)
   key_val=SKEY[c];
   switch(key_val)  
    {  
   case 12:cin=0;delay(1000);cin=1;put_secret();break ;
      case 13:ct=0;wrong=1;contel=0;cin=1;set=1;break; 
      case 14:if(ct==6){set=0;wtsec();set=1;} set=1;ct=0;break;
      default:break;
}
}
}

  

这篇关于单片机和24C02制作的可以改密码的电子密码锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/413897

相关文章

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

mysql重置root密码的完整步骤(适用于5.7和8.0)

《mysql重置root密码的完整步骤(适用于5.7和8.0)》:本文主要介绍mysql重置root密码的完整步骤,文中描述了如何停止MySQL服务、以管理员身份打开命令行、替换配置文件路径、修改... 目录第一步:先停止mysql服务,一定要停止!方式一:通过命令行关闭mysql服务方式二:通过服务项关闭

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密