资源简介
51单片机密码锁PROTEUS仿真,51单片机密码锁PROTEUS仿真,51单片机密码锁PROTEUS仿真。
代码片段和文件信息
#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]={1234567812345678};//用户初始密码存储单元
//uchar PSWD1_0[16]={0};//读出密码缓存存储单元
uchar PSWD1_1[16]={1234567812345678};////管理员初始密码存储单元
sbit OUT=P3^5;//输出端口
sbit L1=P0^2;//上电指示
sbit L2=P0^1;//开锁指示
sbit 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==400)
{
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==400)
{
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(0x00PSWD1_116);//向24c02里读用户初始密码
//i2cWrite24LC16B(00X20);
/////////////第一次向24c02里写入初始管理员密码、用户密码、开锁次数/////////////////////
for(i=0;i<16;i++) //用一次写一个向24c02里写
{
i2cWrite24LC16B(PSWD1_1[i]i);
delay_10ms;
}
for(i=0;i<16;i++) //用一次写一个向24c02里写
{
i2cWrite24LC16B(PSWD1_1[i]0x10+i);
delay_10ms;
} //proteus仿真时用,烧程序时,第一次用,第二次不用。
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[i]=0;
}
}
/
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2946 2008-12-11 15:58 0029、密码锁\24c02.h
文件 156202 2008-12-16 18:32 0029、密码锁\Last Loaded mms.DBK
文件 6376 2005-03-22 15:22 0029、密码锁\STARTUP.A51
文件 14048 2009-03-12 22:29 0029、密码锁\STARTUP.LST
文件 749 2009-03-12 22:29 0029、密码锁\STARTUP.OBJ
文件 2148 2008-12-02 16:27 0029、密码锁\key.h
文件 34179 2009-03-12 22:29 0029、密码锁\mms
文件 156476 2009-06-03 12:48 0029、密码锁\mms.DSN
文件 20363 2009-03-12 22:29 0029、密码锁\mms.LST
文件 48300 2009-03-12 22:29 0029、密码锁\mms.M51
文件 41346 2009-03-12 22:29 0029、密码锁\mms.OBJ
文件 2427 2009-04-05 08:22 0029、密码锁\mms.Opt
文件 1171 2010-05-18 20:23 0029、密码锁\mms.PWI
文件 2247 2008-12-02 19:14 0029、密码锁\mms.Uv2
文件 8780 2009-03-12 22:29 0029、密码锁\mms.c
文件 9235 2009-03-12 22:29 0029、密码锁\mms.hex
文件 39 2009-03-12 22:29 0029、密码锁\mms.lnp
文件 170 2009-04-05 08:22 0029、密码锁\mms.plg
文件 2423 2009-03-12 22:40 0029、密码锁\mms_Opt.Bak
文件 2131 2008-12-08 10:06 0029、密码锁\xsh.h
目录 0 2010-05-21 14:25 0029、密码锁
----------- --------- ---------- ----- ----
511756 21
- 上一篇:操作系统考纲样题及试卷
- 下一篇:HFSS10的破解 版本10
评论
共有 条评论