程序名:密码锁
编写人:
编写时间:
硬件支持:STC89C52RC 外部12MHZ晶振
说明备注:
1、输入密码时在LCD屏幕上显示暗码(*),设置管理员密码时显示明码。
2、用户密码3组位5位密码及管理员密码1组。
3、断电保护密码不消失。
4、可手动复位管理员密码及用户密码。
5、输入管理员密码才能修改用户密码,密码不能为6个0,管理员密码需要按复位键进行设置。
6、可指定秀给任意1组的密码。
7、LCD操作步骤提示。
8、密码输入错误3次蜂鸣器报警,输入错误5次键盘锁定(需要复位解锁)。
9、输入管理员密码才能修改用户密码,密码不能为6个0,管理员密码需要按复位键进行设置。
10、按键提示音,开锁音,错误音,报警音。
11、第一次上电强制要求设置管理员密码
1.jpg
下载附件 保存到相册
此图片仅供参考
后来用STC12C5A60S2做的 用的是内部集成的eeprom 添加了刷卡开锁+更换为12864屏
因为很多功能不能仿真 没有发上来
单片机主程序:
/********************************************************************************************/
#include "config.h"
#include "lcd1602.h"
#include "eeprom.h"
#include "LOCK.h"
#include "delay.h"
#include "KEY.h"
void Timer0Init(void); //50毫秒@12.000MHz
void Timer1Init(void); //1毫秒@12.000MHz
/********************************************************************************************/
// 主程序 //
/********************************************************************************************/
void main(void){
LOCK=0; //初始化锁关闭状态
ALAM=1;
EA=1; //开启总中断
Timer0Init(); //50毫秒@12.000MHz
Timer1Init(); //1毫秒@12.000MHz
Delay1ms(400); //启动等待,等LCD讲入工作状态
Init_LCD1602(); //LCD初始化
InitLock(); //密码锁上电初始化
while(1){ //进入主循环
keyjiance(); //读取按键状态、确定要执行动作
}
}
void Timer0Init(void){ //50毫秒@12.000MHz
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xB0; //设置定时初值
TH0 = 0x3C; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 0; //定时器1停止计时
ET0 = 1; //使能T0中断
}
void InterruptTimer0() interrupt 1{
unsigned char countt0;
TL0=0xB0;
TH0=0x3C; //定时器重新赋初值
countt0++; //计时变量加,加1次时50ms
if(countt0==20){ //加到20次就是1s
countt0=0; //变量清零
second++; //秒加
if(key_disable==1){ //键盘锁状态时
if(second==3){ //秒加到1s时
TR0=0; //关定时器
TL0=0xB0; //再次赋初值
TH0=0x3C; //再次赋初值
Cancel0(); //返回--取消所有操作
second=0; //秒清零
}
}
else{ //不在键盘锁状态时
if(second==6){ //秒加到5时
TR0=0; //关闭定时器
second=0; //秒清零
Cancel0(); //返回--取消所有操作
TL0=0xB0; //重新赋初值
TH0=0x3C; //重新赋初值
}
else
TR0=1; //打开定时器
}
}
}
void Timer1Init(void){ //1毫秒@12.000MHz
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x10; //设置定时器模式
TL1 = 0x18; //设置定时初值
TH1 = 0xFC; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //使能T1中断
}
//*********************************中断服务函数**************************************
void time1_int(void) interrupt 3{//定时器T1
TL1 = 0x18; //重置定时初值
TH1 = 0xFC; //重置定时初值
KeyScan();
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』