单片机电子密码锁_(可以修改设置密码)——基于51单片机与AT24C02与LCD1602显示

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机电子密码锁(可以修改设置密码)——基于51单片机与AT24C02与LCD1602显示

其电路图连接如下:本人已经用硬件实验,程序可用。正确~~

本程序特点:装载后读者可以自改密码,然后需要再次载入程序时:可以把主程序aa=Sendstring(0xa0,1,table2,6);这一句去掉。然后程序的电子锁密码就是你个人设置的密码。

程序代码为:

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LCDIO P2

#define delay4us() _nop_();_nop_();_nop_();_nop_();

uchar buffer[6]={0};

sbit sda=P3^7;

sbit scl=P3^6;

sbit beep=P3^5;

bit flag=0,aa; //用户蹲渊义定时溢出标志位

uchar DSY_BUFFER[16]=" ";

uchar DSY_BUFFER1[16]=" ";

uchar Userpassword[6]={0};

sbit rs=P0^4;

sbit rd=P0^3;

sbit lcden=P0^2;

sbit led=P3^0;

uchar code table2[]="123456";

uchar code table[]="Your Password...";

void delayms(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void delay() //短延时,两个机器周期,做总线的延时用{;;}

void write_com(uchar com)

{

rs=0;

rd=0;

lcden=0;

P2=com;

delayms(3);

lcden=1;

delayms(3);

lcden=0;

}

void write_date(uchar date)

{

rs=1;

rd=0;

lcden=0;

P2=date;

delayms(3);

lcden=1;

delayms(3);

lcden=0;

}

void Display_String(uchar *p,uchar com)

{ uchar i;

write_com(com);

for(i=0;i<16;i++)

{

write_date(p[i]);

}

}

void init_lcd()

{

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

Display_String(table,0x80);

Display_String("Lock OK! ",0xc0); }

void start()

{

sda=1;

scl=1;

delay4us();

sda=0;

delay4us();

scl=0;

}

void stop()

{

sda=0;

scl=1;

delay4us();

sda=1;

delay4us();

scl=0;

}

void init() //初始化{

sda=1;

delay();

scl=1;

delay();

}

void ack()

{

sda=0;

scl=1;

delay4us();

scl=0;

sda=1;

}

void noack()

{

sda=1;

scl=1;

delay4us();

scl=0;

sda=0;

}

uchar recbyte()

{

uchar i,rd;

rd=0x00;

sda=1;

for(i=0;i<8;i++)

{

scl=1;

rd<<=1;

rd|=sda;

delay4us();

scl=0;

delay4us();

}

scl=0;

delay4us();

return rd;

}

uchar sendbyte(uchar wd) {

uchar i;

bit ack0;

for(i=0;i<8;i++)

{

sda=(bit)(wd&0x80);

_nop_();

_nop_();

scl=1;

delay4us();

scl=0;

相关文档
最新文档