资源简介
基于单片机的密码锁,包括(1)设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
(3)报警、锁定键盘功能。密码输入错误数码显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。
经调试,绝对可用
代码片段和文件信息
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define lcd1602_data P0 //Lcd1602的位定义
sbit rs=P3^0;
sbit rw=P3^1;
sbit en=P3^2;
sbit BJ=P1^7;//报警位定义,当密码输入错误时报警位置1
sbit QD=P3^3;
uchar key; //存键值
uchar count=0;//用于记录输入的密码位数
uchar mima[6]={0};//存密码值
uchar mima1[6]={0};//存第一次输入密码值
uchar mima2[6]={0}; //存第二次输入密码值
uchar mimabuf[6]={0}; //存输入的数字
uchar gongneng_flag=0;//功能选择位标志,为1时为Set,为2时为Open密码正确打开
uchar mima_error_count=0;//密码按错的次数
bit key_flag=0; //有按键按下标志位
bit mima_error=0;//密码输入错误标志位
bit mima_set_error=0;//密码设置不同
bit lock_mima=0;//是否需要锁键盘,为1锁键盘,不允许任何输入
uchar code table1[]=“Welcome... “;
uchar code table2[]=“Select Mode... “;
uchar code table3[]=“1: SET 2: OPEN “;
uchar code table4[]=“Previous number “;
uchar code table5[]=“New number is: “;
uchar code table6[]=“Number is “;
uchar code table7[]=“ It is wrong!!! “;
uchar code table8[]=“Set is OK !!! “;
uchar code table9[]=“The number is OK“;
uchar code table10[]=“New number again:“;
uchar code table11[]=“Number is different“;
//判断LCD1602的状态即状态字最高位STA7
uchar Lcd1602Busy(void)
{
register unsigned char lcdbusy;
rs=0;
rw=1;
en=1;
_nop_();
lcdbusy=lcd1602_data;
_nop_();
en=0;
return(lcdbusy&0x80);
}
//向LCD1602内写命令
void WriteCmdLcd1602(unsigned char command)
{
while(Lcd1602Busy());
rs=0;
rw=0;
en=1;
_nop_();
lcd1602_data=command;
_nop_();
en=0;
}
//向LCD1602内写数据
void WriteDatLcd1602(unsigned char dat)
{
while(Lcd1602Busy());
rs=1;
rw=0;
en=1;
_nop_();
lcd1602_data=dat;
_nop_();
en=0;
}
//将坐标定位在第row行第column列
void Goto_xy(unsigned char rowunsigned char column)
{
if(row==1)
WriteCmdLcd1602(0x80+column-1);
else if(row==2)
WriteCmdLcd1602(0x80+0x40+column-1);
}
//延时约1S
void delay(void)
{
uchar ijk;
for(i=0;i<20;i++)
for(j=0;j<125;j++)
for(k=0;k<250;k++);
}
//初始化函数
void InitLcd1602(void)
{
WriteCmdLcd1602(0x38);
WriteCmdLcd1602(0x01);
WriteCmdLcd1602(0x0f);
WriteCmdLcd1602(0x06);
}
//在液晶上显示字符串
void PutStrLcd1602(char *string)
{
unsigned char i;
for(i=0;string[i]!=‘\0‘;i++)
{
WriteDatLcd1602(string[i]);
_nop_();
}
}
//延时10ms
void delay10ms(void)
{
uchar ij;
for(i=0;i<25;i++)
for(j=0;j<250;j++);
}
void KeyScan(void) //键盘扫描程序,key应定义为全局无符号字符型 //采用扫描法识别键盘
{
uchar itemptemp1=0xfe;
if(lock_mima==0)
{
for(i=0;i<4;i++)
{
P2=temp1;
temp=P2&0xf0;
if(temp!=0xf0) //若行均为高电平,说明此列无按键按下
{
delay10ms();
temp=P2&0xf0;
if(temp!=0xf0)
{
while((P2&0XF0)!=0xf0);
switch(temp)
{
case 0xe0:key=4*i+0;break;
case 0xd0:key=4*i+1;break;
case 0xb0:key=4*i+2;break;
case 0x70:key=4*i+3;break;
}
key_flag=1; //按键按下标志位置1
break;
}
}
temp1=(temp1<<1)|0x01;
}
}
}
//状态1,在第一行输出“Welcome...”
void state1(void)
{
uchar i;
Goto_xy(11);
PutStrLcd1602(table1);
Goto_xy(21);
f
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 16966 2013-03-22 11:46 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计
文件 7447 2013-03-22 11:45 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计.c
文件 3850 2013-03-22 11:46 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计.hex
文件 88 2013-03-22 11:46 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计.lnp
文件 19571 2013-03-22 11:46 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计.LST
文件 26759 2013-03-22 11:46 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计.M51
文件 20687 2013-03-22 11:46 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计.OBJ
文件 252 2013-03-22 13:56 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计.plg
文件 55325 2013-03-22 13:56 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计.uvopt
文件 13337 2011-07-31 23:44 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计.uvproj
文件 55321 2013-03-22 13:25 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计_uvopt.bak
文件 13333 2011-07-31 17:34 基于51的电子密码锁设计\Keil\基于51单片机的电子密码锁设计_uvproj.bak
文件 109991 2013-03-22 09:24 基于51的电子密码锁设计\proteus\Last Loaded 基于51单片机的电子密码锁设计.DBK
文件 109991 2013-03-22 11:17 基于51的电子密码锁设计\proteus\基于51单片机的电子密码锁设计.DSN
文件 1078 2013-03-22 13:25 基于51的电子密码锁设计\proteus\基于51单片机的电子密码锁设计.PWI
文件 0 2013-03-22 22:14 基于51的电子密码锁设计\初始密码:000000.txt
目录 0 2013-03-22 22:13 基于51的电子密码锁设计\Keil
目录 0 2013-03-22 22:13 基于51的电子密码锁设计\proteus
目录 0 2013-03-22 22:14 基于51的电子密码锁设计
----------- --------- ---------- ----- ----
453996 19
- 上一篇:p0f 被动式的指纹识别工具
- 下一篇:文件读入 画变形监测曲线
相关资源
- 基于8086的密码锁设计
- 烟雾报警器源码
- 基于单片机的烟雾报警器的设计(2
- 基于51单片机的温度采集系统
- 单片机课程设计 短跑计时器的设计
- 51单片机不同按键控制音乐
- 基于51单片机的天然气报警器的设计
- MLX90615无线测温51单片机程序
- 基于单片机的烟雾报警系统.
- 毕业设计(论文)-基于AT89C51单片机的
- PWM控制LED灯渐亮渐灭实验.zip
- 基于51单片机实时采集温度,可设置阈
- 基于51单片机空气质量检测
- 基于51单片机酒精浓度检测仪设计-源
- 基于51单片机的智能火灾报警系统-完
- 51单片机温度报警程序
- 基于AT89S51单片机的PID温度控制系统设
- VHDL数字密码锁
- 基于单片机的病房呼叫系统
- 电子密码锁verilog语言程序代码.zip
- 课程设计题十二:电子密码锁.zip
- 单片机K20使蜂鸣器唱歌的程序
- 433遥控.rar
- 温湿度、火灾气体检测,LCD1602串口双
- 51单片机多功能电梯模拟控制系统-接
- 基于单片机控制红外报警系统毕业设
- nRF24L01_的无线温湿度检测系统电路及
- 单片机MP3源码c51版
- 单片机恒温箱温度控制系统的设计
- 超声波测距仪1602显示.zip
评论
共有 条评论