单片机电子密码锁C程序完整代码【独家分享】
这里提供电子密码锁设计的完整代码程序,可以满足电子密码锁毕业设计、电子密码锁产品设计的要求。欢迎大家提出改进建议。
完整代码程序这里下载:
- #include
- #include"intrins.h"
- #include"key.h"
- #include"xsh.h"
- #include"24c02.h"
- #define ulong unsigned long
- bit BJCB=0;//报警标志
- XG=0,//修改密码标志位
- BJ=0,//报警标志位
- SJ=0;//锁键盘标志位
- // xg=0;//修改密码标志位
- uchar PSWD0_0[16]={0};//密码输入缓存存储单元
- //uchar code PSWD0_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};//用户初始密码存储单元
- //uchar PSWD1_0[16]={0};//读出密码缓存存储单元
- uchar PSWD1_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};//管理员初始密码存储单元
- ***it OUT=P3^5;//输出端口
- ***it L1=P0^2;//上电指示
- ***it L2=P0^1;//开锁指示
- ***it L3=P0^0;//报警指示
- uint mg=0,//密码个数
- KSC=0,//开锁次数
- BJC=0,//报警次数
- TCNTY=0,//用户按键定时次数累加
- TCNTG=0,//管理员输入密码定时次数
- yhsh,//用户输入标志位
- glsh,//管理员输标志位
- shw;//密码输完标志位
- void yhmimaxig();//密码修改程序
- void glmimaxig();//管理员修改程序
- void bjyin(ulong t)
- {
- ulong c;
- uint n;
- for(c=0;c
- {
- for(n=0;n<50;n++); //延时
- BEEP=~BEEP; //取反输出到喇叭的信号
- }
- }
- void delay_10ms(void)
- {
- uint i = 1000;
- while(i--);
- }
- //////////////定时中断服务函数//////////////////////////////////////
- void timer0() interrupt 1
- {
- uint i;
- TH0=(65536-50000)/256; //对TH0 TL0赋值50MS定时
- TL0=(65536-50000)%256; //重装计数初值
- if(yhsh==1)
- {
- TCNTY++;//用户定时计数
- if(shw==1)
- {
- TR0=0;
- TCNTY=0;
- }
- if(TCNTY==200)
- {
- TR0=0;//关闭T0定时器
- TCNTY=0;
- mg=0;//密码个数清零
- L1=1;
- for(i=0;i<2;i++)//声光报警电路
- {
- L3=0;
- bjyin(1000);
- L3=1;
- delay(1000);
- }
- L1=0;
- }
- }
- else if(glsh==1)
- {
- TCNTG++;//管理员定时计数
- if(shw==1)
- {
- TR0=0;
- TCNTG=0;
- }
- if(TCNTG==160)
- {
- TR0=0;//关闭T0定时器
- TCNTG=0;
- mg=0;//密码个数清零
- L1=1;
- for(i=0;i<2;i++)//声光报警电路
- {
- L3=0;
- bjyin(1000);
- L3=1;
- delay(1000);
- }
- L1=0;
- }
- }
- }
-
- void main()
- {
- uint i;
- TMOD=0x01; //定时器工作在方式1
- ET0=1;
- EA=1;
- TH0=(65536-50000)/256; //对TH0 TL0赋值
- TL0=(65536-50000)%256; //使定时器0.05秒中断一次
- //Read_page24c02(0x00,PSWD1_1,16);//向24c02里读用户初始密码
- //i2cWrite24LC16B(0,0X20);
- /////////////第一次向24c02里写入初始管理员密码、用户密码、开锁次数/////////////////////
- KSC=i2cRead24LC16B(0X20);
- loop: L1=0;//上电红灯亮
- L2=1;//开锁成功后绿灯亮
- L3=1;//输错时黄灯亮报警
- OUT=0;//开信号关闭
- display_0(KSC);//开锁前显示
-
- ///////////密码输入/////////////////
- if(SJ==0)//锁键盘标志位为0
- {
- do
- {
- flag=0;//键盘标志位
- key();
- if(flag==1&&num==12) //判断是否为管理员功能键按下
- {
- goto gl;
- }
- if(flag==1&&num<=9)
- {
- PSWD0_0[mg]=num;
- mg++;//密码个数
- }
- if(flag==1&&num==14&&mg>=1)//输入错误删除
- {
- mg=mg-1;
- }
- if(mg==1) //有密码键按下开定时器限时
- {
- TR0=1;
- yhsh=1;
- }
- }
- while(num!=15);
- if(mg!=16)
- {
- for(i=mg;i<16;i++)
- {
- PSWD0_0=0;
- }
- }
- /////////////////密码比较电路////////////////////////////
复制代码
34
|
1 条评论
|
|
|