课程设计--密码锁程序.doc
文本预览下载声明
#includereg52.h
#includeintrins.h
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();}
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P1^2;
sbit lcdrw=P1^1;
sbit lcden=P1^0;
sbit led=P3^0; //按键输入超时报警
sbit buzzer=P1^4;
sbit disable=P1^7; //锁定键盘标志灯,也作标志位用,锁定1,解除锁定0
sbit relay=P1^3; //继电器
sbit scl=P1^5; //24C02串行时钟
sbit sda=P1^6; //24C02串行数据
bit open=0; //门状态,开1,关0
bit beset=0; //初始化密码标志位,已设置为1,未设置为0
bit change=0; //open时按下reset键为1,否则置0
bit saved=0; //密码保存完置1,否则置0
bit adminflag=1; //管理标志位,若按C键则置0
uchar code welcome[16]= WELCOME! ;
uchar code line[16]=================;
uchar code unlock[6]=UNLOCK;
uchar code lock[4]=LOCK;
uchar code usercode[10]=USER CODE:;
uchar code withchance[14]=WITH CHANCES;
uchar code chances[4]=0123;
uchar code newcode[9]=NEW CODE:;
uchar code setup[16]=SETUP SUCCESSFUL;
uchar code admincode[10]=ADMINCODE:;
uchar code correct[8]=CORRECT!;
uchar code openthedoor[13]=OPEN THE DOOR;
uchar code closethedoor[14]=CLOSE THE DOOR;
uchar code error[6]=ERROR!;
uchar code keylocked[11]=KEY LOCKED!;
uchar code managemode[11]=MANAGE MODE;
uchar code number[10]=0123456789;
uchar code star[]=*;
uchar code blank[]= ;
uchar code keytable[16]={0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};
uchar ucode[6]; //用户密码表
uchar acode[6]={9,9,9,9,9,9}; //管理员密码表
uchar kcode[6]; //输入按键密码表
uchar pt; //LCD字符指针
uchar codeposi; //每位密码在按键密码表中的位置
uchar chance; //用户输入密码的剩余机会
uchar length=0; //输入的密码位数
uchar correctcnt; //正确输入计数
uchar errorcnt=0; //用户输入密码出错次数
uchar reinputcnt=0; //重新输入计数
uchar countt0,countt1,sec8,sec16,sec30; //中断计数器,秒计数器
uchar num,l,ktable;//主函数及中断函数使用
int stop;
void delay_ms(uint t) //延时t毫秒
{
uchar a,b;
for(;t0;t--)
for(b=142;b0;b--)
for(a=2;a0;a--);
}
void relay_on()
{
relay=0;
}
void relay_off()
{
relay=1;
}
/*====键盘扫描返回1-15值,无按键返回nokey====*/
uchar key_scan()
{
uchar temp,knum,k;
P2=0xf0;
if(P2!=0xf0)
{
dela
显示全部