基于51单片机的用户密码锁

摘要:利用51单片机制作一个掉电可保留数据的密码锁,要求密码器系统由一个超级用户和四个普通用户组成,普通用户可控制锁的开关和修改用户密码,超级用户可以添加和删除普通用户。

一、元件选择 

       主控芯片选择51系列stc89c51,使用at24c02存储密码锁的数据信息,使用LCD1602液晶屏显示用户界面。输入信号由一个4X4的矩阵键盘发出。

二、电路搭建

        以下是用proteus搭建的电路图

三、代码的实现

(一)、LCD1602

1.接口定义

2.读操作时序

3.写操作时序 

 4.51代码
#include "headfile.h"

sbit rs=P2^0;
sbit rw=P2^1;
sbit ep=P2^2;

//写位置
void writeposition(uchar position)
{
    rs = 0;    
    P0 = position;
    ep = 1;
    _nop_();
    ep = 0;
    delay(1);
}

//写数据:RS=1, RW=0;
void writeData(uchar dat)
{
    rs = 1;
    P0 = dat;
    ep = 1;
    _nop_();
    ep = 0;
    delay(1);
}

//清屏初始化
void lcd_init()
{
   rw=0;
   writeposition(0x38);
   writeposition(0x0c); 
   writeposition(0x06);
   writeposition(0x01); 
}

//写数组
void print_string(uchar *str,uchar posit)
{  
    int i;
    writeposition(posit); 
    for(i=0;str[i]!=0;i++)  
    {          
        writeData(str[i]);  
    }  
}

(二)AT24C02

        AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,采用先进CMOS技术实质上减少了器件的功耗。AT24C02有一个8字节页写缓冲器,该器件通过IIC总线接口进行操作,有一个专门的写保护功能。 

        有关AT24C02的具体说明,在此就不多解释了,大家可以自行查看其芯片手册IDCHIP-AT24C02.pdf (semiee.com)icon-default.png?t=N7T8https://www.semiee.com/file/Source10/IDCHIP-AT24C02.pdf

 部分代码:

void IIC_Start(void)
{
    SDA = 1;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 0;
    IIC_Delay(DELAY_TIME);
    SCL = 0;	
}

void IIC_Stop(void)
{
    SDA = 0;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

bit IIC_WaitAck(void)
{
    bit ackbit;
	
    SCL  = 1;
    IIC_Delay(DELAY_TIME);
    ackbit = SDA;
    SCL = 0;
    IIC_Delay(DELAY_TIME);
    return ackbit;
}

void IIC_SendByte(unsigned char byt)
{
    unsigned char i;

    for(i=0; i<8; i++)
    {
        SCL  = 0;
        IIC_Delay(DELAY_TIME);
        if(byt & 0x80) SDA  = 1;
        else SDA  = 0;
        IIC_Delay(DELAY_TIME);
        SCL = 1;
        byt <<= 1;
        IIC_Delay(DELAY_TIME);
    }
    SCL  = 0;  
}

unsigned char IIC_RecByte(void)
{
    unsigned char i, da;
    for(i=0; i<8; i++)
    {   
    	SCL = 1;
		IIC_Delay(DELAY_TIME);
		da <<= 1;
		if(SDA) da |= 1;
		SCL = 0;
		IIC_Delay(DELAY_TIME);
    }
    return da;    
}

(三)主体代码

主体思路:

单片机开机时,先完成所有初始化,读取AT24C02的数据,将用户信息读入相应的数组。后进入人机操作的代码循环,扫描按键动作。并在LCD屏上显示,操作者确认后,比较输入的数据和存储用户的数组里的数据做对比,对比通过后,进入下一个人机界面的循环,在后续循环中,如扫描按下返回健,使用break;语句返回上级循环。

部分代码展示:

 

四、视频演示

基于51单片机的用户密码锁设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值