资源简介
基于STC89C52制作的密码锁
1.选取STC89C52单片机,单片机内部自带EEPROM,支持掉电保存密码功能,不需要外置AT24C01保存密码。
2.为简化机械装置,采取5V继电器模拟开锁过程。输入的正确时,继电器吸合2-3秒,开锁指示灯亮2-3秒,模拟开锁。
3.自动报警部分选用蜂鸣器,当三次输入密码不同时就会发生报警信息。
4.显示屏采用LCD1602。
5.6位密码,密码可重置,重置密码时,先输入原始密码,正确后输入新密码,再交输入新密码,两次输入的密码一致辞时,密码修改成功。开锁时,密码通过键盘输入,若密码正确,则将锁打开,若密码不正确时,无法开锁,密码输入错误三次时,蜂鸣器报 警并且锁定键盘,10分钟。
6.4X4矩阵键盘输入,键盘扫描程序判定按键是否按下。
7.利用keil编程控制高低电平输出来控制各种功能的实现。
代码片段和文件信息
#include
#define uint unsigned int
#define uchar unsigned char
void key_scan();
uchar count0count1count3numn=0tempajcount4;
uchar mima[8]; //初始密码存储区
uchar tab_key[50]; //输入密码存储区
uchar code table[]={
0x3f0x060x5b0x4f
0x660x6d0x7d0x07
0x7f0x6f0x770x7c
0x390x5e0x790x71};
bit enterflag; //确认键按下与否的标志
bit mimaflag; //密码正确与否的标志
bit xiugaiflag; //修改密码标志
bit enter1flag; //修改密码确认键标志
sbit red=P3^7;
sbit bell=P3^6;
sbit rs=P2^0;
sbit rw=P2^1;
sbit lcden=P2^2;
sbit scl=P3^4;
sbit sda=P3^5;
uchar code table1[]=“Input the passcode“;
uchar code table2[]=“Code:------“;
uchar code table3[]=“*“;
uchar code table4[]=“Right(^_^)“;
uchar code table5[]=“First error!!!“;
uchar code table6[]=“Second error!!!“;
uchar code table7[]=“Third error!!!“;
uchar code table8[]=“Use tomorrow(^_^)“;
uchar code table9[]=“Cofirm passcode“;
uchar code table10[]=“Code:------“;
uchar code table11[]=“Code is new“;
//******************************键盘消抖函数*******************************
void delay1()
{ ;; }
void delay2(uchar x)
{
uchar ab;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void delay(uint z)
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//****************************e^2room的初始化*******************************
void start() //开始信号
{
sda=1;
delay1();
scl=1;
delay1();
sda=0;
delay1();
}
void stop() //停止
{
sda=0;
delay1();
scl=1;
delay1();
sda=1;
delay1();
}
//****************************应答信号*************************************
void respond()
{
uchar i;
scl=1;
delay1();
while((sda==1)&&(i<250))i++;
scl=0;
delay1();
}
//*****************************写字节操作函数**********************************
void write_byte(uchar date)
{
uchar itemp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1; //保持最高位,左移到进位CY
scl=0;
delay1();
sda=CY;
delay1();
scl=1;
delay1();
}
scl=0;
delay1();
sda=1;//总线释放
delay1();
}
//*******************************读字节操作函数*****************************
uchar read_byte()
{
uchar ik;
scl=0;
delay1();
sda=1;
delay1();
for(i=0;i<8;i++)
{
scl=1;
delay1();
k=(k<<1)|sda; //或运算,放到最低位
相关资源
- 51 单片机 红外避障小车 大集合136
- 希尔密码加密、解密和破密
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- EDA课程设计_密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 浙江工业大学2005-2006学年单片机习题
评论
共有 条评论