电子密码锁Word格式文档下载.docx
- 文档编号:20523950
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:15
- 大小:18.08KB
电子密码锁Word格式文档下载.docx
《电子密码锁Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电子密码锁Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
//24c04初始化函数
for(m=0;
m<
6;
m++)
mima[m]=read_add(m);
cs164
(1);
while
(1)
{
if(jianzhi==12)//设置为解锁模式
{
a=1;
//解锁
b=0;
jianzhi=88;
}
if(jianzhi==13)//设置为修改密码模式
a=0;
b=1;
//改密
cs164(5);
}
//-----------------以下为解锁程序--------------//
if(a==1)
if(jianzhi<
16)
{
if(jianzhi==11)
{
if(miao<
=10)//定时没有超出
{if(mima[0]==bijiao[0]&
&
mima[1]==bijiao[1]&
mima[2]==bijiao[2]&
mima[3]==bijiao[3]
&
mima[4]==bijiao[4]&
mima[5]==bijiao[5])//解码正确
{cs164
(2);
c=1;
}//如果解密正确,c协同进入改密模式
else//解码失败
cs164(3);
}
else//解码超时,清零比较数组和kk并关闭定时器,重新解码
{
for(m=0;
m<
m++)
bijiao[m]=0;
kk=0;
TR0=0;
miao=0;
cs164(4);
jianzhi=88;
//键值清零
}
else
if(jianzhi==10)//密码比较数组清零
cs164
(1);
jianzhi=88;
}
else//把键值给比较数组,且kk=0时启动定时器
bijiao[kk]=jianzhi;
if(kk==0)TR0=1;
kk++;
if(kk>
=6)kk=1;
}
}
//----------------以上为解锁程序------------------//
//----------------以下为改密程序--------------------//
if(b==1&
c==1)
if(jianzhi==11)//如果键值输入完毕且满足个数要求则存入24c04
{
if(mm>
=6)
write_add(0,migai[0]);
delay(10);
//往地址0中写入0xaa
write_add(1,migai[1]);
write_add(2,migai[2]);
write_add(3,migai[3]);
write_add(4,migai[4]);
write_add(5,migai[5]);
cs164(6);
//密改成功
mm=0;
else
if(jianzhi==10)//密改数组清零
migai[m]=0;
cs164(5);
//键值清零
else//修改密改数组
migai[mm]=jianzhi;
mm++;
if(mm>
=6)mm=6;
}
//----------------以上为改密程序---------------------//
voidtimer0()interrupt1
count++;
if(count>
=20)
{
miao=0;
//**************************************************************注意
if(miao>
=250)
miao=250;
}
voidtimer1()interrupt3
TL0=(65536-8000)%256;
TH0=(65536-8000)/256;
key44_scan();
///==========================1602驱动部分
/*
程序描述:
M1602的控制芯片为HD44780
PORT2.0,2.1,2.2则连接到LCD显示器的控制线,
P0口程序执行时将显示河南科技学院相关信息*/
/*******************************************************/
sbitRS=P2^2;
sbitRW=P2^1;
sbitE=P2^0;
///**************************延时函数
voiddelay(unsignedintn)
unsignedintj=0;
for(;
n>
0;
n--)
{
for(j=0;
j<
125;
j++);
}
//****************1602写指令函数
voidwrite_command(ucharcommand)
RW=0;
RS=0;
E=1;
P0=command;
delay(20);
E=0;
RW=1;
//**********************1602写数据函数
voidwrite_data(uchardate)
RS=1;
P0=date;
//***********************连续写入一行数据函数
voiddisplay_string(uchar*p)//连续写入数据——设置数据指针后可连续写入数据,但最多连续写入一行数据!
!
while(*p)
write_data(*p);
p++;
//**********************设置数据指针位置
voidgotoxy(unsignedy,unsignedx)//设置数据地址指针
if(y==1)
write_command(0x80+x);
elseif(y==2)
write_command(0x80+0x40+x);
//ox80+ox40就是0xc0,括号里面相当于0x80|(x-0x40)
//**********************1602初始化函数
voidF1602_init(void)
write_command(0x38);
//两行,每行16字符,每个字符5*7点阵
write_command(0x0C);
//不显示光标且光标不闪烁
write_command(0x06);
//读写一个字节后地址指针加以且光标加以
//***************************1602清屏函数
voidF1602_clear()
write_command(0x01);
//说句指针清零,显示清零
write_command(0x02);
//数据指针清零
//=============================按键驱动部分
//************************************本程序去掉数码管显示部分就是4*4按键的驱动程序**************************************//
//***************按键强制一位等零的数组
codeucharkey_scan[4]={0xfe,0xfd,0xfb,0xf7};
//****************键值比较数组
codeucharkey_value[16]={0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77,};
//*************************共阳数码管段选
//codeseven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
ucharjianzhi=88;
//*****************延时函数
voiddelay_ms(uintz)
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
//**************检测函数
voidkey44_scan()
staticuchari;
//此处要设为静态变量
ucharj;
P0=key_scan[i];
if(P0!
=key_scan[i])
delay_ms(5);
if(P0!
{
for(j=0;
j<
16;
j++)
if(P0==key_value[j])
jianzhi=j;
//cs164(jianzhi%10);
delay(5);
while(P0!
=key_scan[i]);
i++;
if(i>
=4)
i=0;
//=====================串口数码管驱动部分
sbitclk=P2^1;
sbitqa=P2^0;
ucharcodetable[]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x08,0x09};
//ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//*********************延时函数
/*voiddelay(uintx)
uinti,j;
for(i=0;
i<
x;
i++)
for(j=0;
j<
110;
j++);
}*/
//************164传输函数
voidcs164(ucharx)
uchari,data1;
data1=table[x];
8;
i++)
clk=0;
qa=(bit)(data1&
0x80);
clk=1;
data1=data1<
<
1;
//=======================24c04驱动部分
#include<
reg51.h>
intrins.h>
#definenop_nop_()
sbitsda=P1^7;
//SDA和单片机的P17脚相连
sbitscl=P1^1;
//SCL和单片机的P16脚相连
//定义ACC的位,利用ACC操作速度最快
sbita0=ACC^0;
sbita1=ACC^1;
sbita2=ACC^2;
sbita3=ACC^3;
sbita4=ACC^4;
sbita5=ACC^5;
sbita6=ACC^6;
sbita7=ACC^7;
//开始函数
voidstart()
sda=1;
nop;
scl=1;
sda=0;
scl=0;
//停止函数
voidstop()
//响应函数
voidack()
uchari;
while((sda==1)&
(i<
250))i++;
//写一个字节函数
voidwrite_byte(uchardd)
ACC=dd;
sda=a7;
scl=1;
scl=0;
sda=a6;
sda=a5;
sda=a4;
sda=a3;
sda=a2;
sda=a1;
sda=a0;
//读一个字节函数
ucharread_byte()
a7=sda;
a6=sda;
a5=sda;
a4=sda;
a3=sda;
a2=sda;
a1=sda;
a0=sda;
return(ACC);
//写地址和数据函数
voidwrite_add(ucharaddress,uchardate)
start();
write_byte(0xa0);
//写2404地址命令
ack();
write_byte(address);
//写地址
write_byte(date);
//写数据
stop();
//读地址、数据函数
ucharread_add(ucharaddress)
uchartemp;
//
//
write_byte(0xa1);
temp=read_byte();
return(temp);
voiddelay(uchari)
uchara,b;
for(a=0;
a<
i;
for(b=0;
b<
100;
b++);
voidinit()
/*voidmain()
//初始化函数
write_add(6,6);
//往地址5中写入0xaa
delay(100);
P0=read_add(6);
//读地址5中的数据,并送P0口驱动发光二极管显示
while
(1);
//无限循环
}*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 密码锁