标题:
单片机电子密码锁电路程序带仿真,调试通过lcd1602+24C02
[打印本页]
作者:
nihaoqisiba
时间:
2016-4-23 18:06
标题:
单片机电子密码锁电路程序带仿真,调试通过lcd1602+24C02
调试通过,,,电子密码锁,,,资料,,,,分享
lcd1602液晶屏显示 并且用24c02保存数据
0.png
(37.1 KB, 下载次数: 162)
下载附件
2016-4-24 19:32 上传
仿真图 电路图(proteus仿真文件可以从51黑本贴附件下载)
0.png
(64.86 KB, 下载次数: 169)
下载附件
2016-4-24 19:33 上传
全部资料(压缩包)下载:
密码锁单片机源程序仿真.zip
(128 KB, 下载次数: 383)
2016-4-24 19:34 上传
点击文件名下载附件
下载积分: 黑币 -5
S0-S9为密码数字键;
S10为删除键,删除上一次输入的数字;
S11为清除键,清除所有输入的数字;
S12为确认键,输入密码后按确认键确认密码是否输入正确;
S13为密码修改键。
S1-S10键按下5秒后,没有其他键按下,则发出报警声,声音持续10s;
输入密码后按确认键,若密码正确,则绿灯亮,否则则红灯亮。
下面是部分程序预览(完整版本请下载本帖附件):
//S1-S9为数字密码输入键0-9
//S10-S13为功能键
//S10为单个数字删除键,S11为所以数字清除键,S12为密码确认键,S13为修改密码键
#include<reg52.h> //包含头文件
#include"IIC.h" //包含IIC总线头文件
#include"1602.h" //包含1602头文件
#include"keyboard.h" //包含键盘扫描头文件
sbit led_red=P2^5; //位定义绿灯,密码输入正确时显示
sbit led_gre=P2^6; //位定义红灯,密码输入错误时显示
sbit spk=P2^7;
uchar ASC[]={'0','1','2','3','4','5','6','7','8','9'}; //将数字转换成字符型数据供1602显示
uchar one=0,two=1,three=2,four=3; //初始密码0123
uint t0,t1; //定时器0、1分别溢出的次数
void Init_time0(void) //定时器0初始化函数
{
TMOD=0x11;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TH1=(65535-2000)/256;
TL1=(65535-2000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=0;
TR1=0;
}
void main(void) //主函数
{
uchar flag=0,cflag=0;
//flag、cflag分别为修改密码标志和修改密码时初始密码输入正确标志(输入新密码标志)
uchar i=0,k=0;
//i为输入密码时输入数字密码的个数
//k为修改密码时输入数字密码的个数
uchar j=0,t=0,shu=1;
//j用于for循环中判断输入密码和存储密码对比
//t=0为进入修改密码状态,只要是为了修改密码时的初始显示
//shu用于输入新密码时,四位密码的地址
uchar num,newpassword[4];
//num为按键值,newpassword数组存放每次输入的数字密码S0-S13和0-13对应
Init_IIC(); //初始化IIC
Init_1602(); //初始化1602
Init_time0(); //初始化定时器0
led_red=0; //熄灭绿灯和红灯
led_gre=0;
spk=0;
write_add(1,one); //写入初始密码0123到E2PROM
delay_ms(5);
write_add(2,two);
delay_ms(5);
write_add(3,three);
delay_ms(5);
write_add(4,four);
delay_ms(5);
displaylistchar(0,0,"Input Password:"); //1602初始化后显示Input Password:
while(1)
{
/*检测是否有按键按下,若没有则不停扫描*/
num=KeyPro(); //扫描按键
if(num!=0xff) //如果有键按下
{
/*******************************************************************************************/
/*输入密码*/
if((num!=13)&&(flag==0)) //S13为修改密码键,flag为修改密码标志,flag=1时修改密码,判断是否修改密码
{
displaylistchar(0,0,"Input Password:");
if(num>=0&&num<=9) //如果是0-9按下,则输入0-9并在液晶上显示0-9
{
TR0=~TR0; //若按键后五秒内没有打开锁,则报警
t0=0;
displayonechar(i,1,ASC[num]); //显示输入的数字密码
newpassword[i++]=num;
}
if(num==10) //如果10按下,在有数字输入的情况下删除上次输入的数字
{
TR0=~TR0; //若按键后五秒内没有打开锁,则报警
t0=0;
if(i>0)
{
i=i-1;
displayonechar(i,1,' ');
}
}
if(num==11) //如果是11按下,清除所有输入的数据,重新输入
{
TR0=0;
i=0;
displaylistchar(0,1," ");//清除该行
}
if(num==12) //确认键,如果密码正确,则绿灯亮红灯熄,否则则红灯亮绿灯熄
{
TR0=0;
if(i==4) //四位密码,所以只在输入四个密码的情况下检测密码是否正确
{
for(j=0;j<4;j++)
{
if(newpassword[j]!=read_add(j+1)) //输入的密码和存储的密码对比,若有一个错误,则跳出密码对比
break;
}
if(j==i) //若j=i成立,则密码正确
{
led_gre=1; //亮绿灯
led_red=0;
displaylistchar(0,1,"Right Open!"); //显示输入正确
delay_ms(1000);
i=0; //按键输入数置0
displaylistchar(0,1," ");//清除该行
}
else //若不成立则密码不正确
{
led_gre=0; //亮红灯
led_red=1;
displaylistchar(0,1,"Wrong Retry!"); //显示输入错误
delay_ms(1000);
i=0; //按键输入数置0
displaylistchar(0,1," ");//清除该行
}
}
else //若按键输入数i不等于4,则密码肯定错误
{
led_gre=0; //亮红灯
led_red=1;
displaylistchar(0,1,"Wrong Retry!"); //显示输入错误
delay_ms(1000);
i=0; //按键输入数置0
displaylistchar(0,1," ");//清除该行
}
}
if(i==6) //虚设六位密码,数字按键输入六次后还没有按确定的话,则提示密码错误
{
TR0=0;
led_gre=0; //亮红灯
led_red=1;
displaylistchar(0,1,"Wrong Retry!"); //显示输入错误
delay_ms(1000);
i=0; //按键输入数置0
displaylistchar(0,1," ");//清除该行
}
}
/*******************************************************************************************/
/*******************************************************************************************/
/*修改密码*/
else //有S13键按下或修改密码标志flag置1
{
if(cflag==0) //修改密码时初始密码输入正确标志cflag置0时为输入初始密码检测状态,类似前面的密码输入
{
i=0; //按键输入数置0
flag=1; //S13键按下,修改密码标志置1
if(t==0) //t=0为进入修改密码状态,只要是为了修改密码时的初始显示
{
displaylistchar(0,0,"Change Password:");
delay_ms(500);
displaylistchar(0,1,"Old Password:");
delay_ms(500);
displaylistchar(0,1," ");//清除该行
}
t++; //正在修改密码状态,则不用再次进入修改密码状态
if(num>=0&&num<=9) //如果是0-9按下,则输入0-9并在液晶上显示0-9
{
TR0=~TR0; //若按键后五秒内没有打开锁,则报警
t0=0;
displayonechar(k,1,ASC[num]);
newpassword[k++]=num;
}
if(num==10) //单个密码删除键,和输入密码时一样
{
TR0=~TR0; //若按键后五秒内没有打开锁,则报警
t0=0;
if(k>0)
{
k=k-1;
displayonechar(i,1,' ');
}
}
if(num==11) //所以密码清除键,和输入密码时一样
{
TR0=0;
k=0;
flag=0;
displaylistchar(0,1," ");//清除该行
}
if(num==12) //确认键,和输入密码时一样
{
TR0=0;
if(k==4)
{
for(j=0;j<4;j++)
{
if(newpassword[j]!=read_add(j+1))
break;
}
if(j==k) //若初始密码输入正确后提示输入新密码,并将输入新密码标志cflag置1
{
led_gre=1;
led_red=0;
displaylistchar(0,1,"Right Open!");
delay_ms(500);
displaylistchar(0,1," ");//清除该行
displaylistchar(0,1,"New Password:");
delay_ms(500);
displaylistchar(0,1," ");//清除该行
k=0;
cflag=1;
}
else //若输入错误,则跳出密码修改,flag=0
{
led_gre=0;
led_red=1;
displaylistchar(0,1,"Wrong Retry!");
delay_ms(1000);
k=0;
flag=0;
displaylistchar(0,1," ");//清除该行
displaylistchar(0,0," ");//清除该行
displaylistchar(0,0,"Input Password:");
}
}
else //修改密码时输入原密码数不等于4,显然密码错误,跳出密码修改
{
led_gre=0;
led_red=1;
displaylistchar(0,1,"Wrong Retry!");
delay_ms(1000);
k=0;
flag=0;
displaylistchar(0,1," ");//清除该行
displaylistchar(0,0," ");//清除该行
displaylistchar(0,0,"Input Password:");
}
}
if(k==6) //数字按键输入六次后还没有按确定的话,则提示密码错误 ,跳出密码修改
{
TR0=0;
led_gre=0;
led_red=1;
displaylistchar(0,1,"Wrong Retry!");
delay_ms(1000);
k=0;
flag=0;
displaylistchar(0,1," ");//清除该行
displaylistchar(0,0," ");//清除该行
displaylistchar(0,0,"Input Password:");
}
}
else //输入新密码标志置1,输入新密码并显示新输入的密码
{
if(num>=0&&num<=9)
{
write_add(shu,num);
displayonechar(shu-1,1,ASC[num]);
shu++;
if(shu==5)
{
t=0;
shu=1;
cflag=0;
flag=0;
displaylistchar(0,1,"Change Success!");
delay_ms(500);
displaylistchar(0,0," ");//清除该行
displaylistchar(0,1," ");//清除该行
displaylistchar(0,0,"Input Password:");
}
}
}
}
}
}
}
void time0(void) interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
t0++;
if(t0==100)
{
t0=0;
TR0=0;
TR1=1;
}
}
void time1(void) interrupt 3
{
TH1=(65535-2000)/256;
TL1=(65535-2000)%256;
t1++;
spk=~spk;
if(t1==5000)
{
t1=0;
TR1=0;
}
}
复制代码
作者:
牙签
时间:
2016-12-20 11:25
还差1分 才能下
作者:
faridzled
时间:
2017-2-28 09:17
thanks for sharing
作者:
faridzled
时间:
2017-2-28 09:21
thanks for sharing
作者:
songjingjun1314
时间:
2017-3-27 17:12
thanks for sharing
作者:
zgh035
时间:
2017-5-21 10:23
下载不了
作者:
漫步_xw
时间:
2017-11-20 15:17
谢谢分享!不过积分不够~~~
作者:
1245794447
时间:
2018-5-28 06:11
下载不了,求补附件
作者:
加油兄弟
时间:
2018-6-7 10:57
不错我可以学习到真正意义上的知识了
作者:
jxhjjm
时间:
2018-6-7 18:01
thanks for sharing
作者:
亲爱的h
时间:
2018-7-18 16:01
学习下24c02存储程序
作者:
FGH116
时间:
2018-10-9 15:36
多谢。。。。。。。
作者:
嗒嗒嗒2
时间:
2018-10-12 18:08
很好谢谢
作者:
茶树康宁
时间:
2018-12-30 22:54
楼主厉害
作者:
方山里
时间:
2019-1-10 12:23
还差点分,加油
作者:
zyx910
时间:
2019-2-27 11:59
这是六位密码吗,有仿真的图和程序的吗
作者:
2633675861
时间:
2020-12-22 19:32
学习24c02存储程序
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1