基于单片机的智能密码锁

该密码锁控制器 ,键盘上有0-9个数字按键,功能键:确认和取消等,可设置复合键。密码的位数及密码可以任意设定,,当输入数字和设置的密码相同的时候,锁打开,否则无法打开。采用IIC通信方式,密码锁的密码掉电不丢失。
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

uchar old1,old2,old3,old4,old5,old6; //原始密码000000
uchar new1,new2,new3,new4,new5,new6;  //每次MCU采集到的密码输入
uchar a=10,b=10,c=10,d=10,e=10,f=10; //送入数码管显示的变量
uchar wei,key,temp;

bit allow,genggai,ok,wanbi,retry,close;  //各个状态位,默认初始值为0

sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
sbit led=P1^0;                           //加一个流水灯,把蜂鸣器换掉
sbit sda=P2^0;                          //IO口定义
sbit scl=P2^1;

unsigned char code table[]=
{
  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x08};    //数码管显示0-9的段码

/*****************i2c芯片24C02存储器驱动程序************************************/

 /*驱动延时程序*/
void nop()                //10us延时,保证书写i2c驱动时满足大于4us
{
    _nop_();
    _nop_();
}

/*24C02读写驱动程序*/
void delay1(unsigned int m)
{   unsigned int n;
    for(n=0;n<m;n++);
}

void init()  //24c02初始化子程序
{
    scl=1;
    nop();
    sda=1;
    nop();
}

void start()        //启动I2C总线
{
    sda=1;
    nop();
    scl=1;
    nop();
    sda=0;
    nop();
    scl=0;
    nop();
}

void stop()         //停止I2C总线
{
    sda=0;
    nop();
    scl=1;
    nop();
    sda=1;
    nop();
}

void writebyte(unsigned char j)  //写一个字节
{
    unsigned char i,temp;
    temp=j;
    for (i=0;i<8;i++)
   {
       temp=temp<<1;
       scl=0;
       nop();
       sda=CY;      //temp左移时,移出的值放入了CY中
       nop();
       scl=1;       //待sda线上的数据稳定后,将scl拉高
       nop();
   }
   scl=0;
   nop();
   sda=1;
   nop();
}

unsigned char readbyte()   //读一个字节
{
   unsigned char i,j,k=0;
   scl=0; nop(); sda=1;
   for (i=0;i<8;i++)
   {  
        nop(); scl=1; nop();
        if(sda==1<
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值