历史上的今天
今天是:2025年02月26日(星期三)
2020年02月26日 | 单片机密码锁程序+仿真+详细注释
2020-02-26 来源:51hei
程序名:密码锁
编写人:
编写时间:
硬件支持: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?imageView2/2/w/550
下载附件 保存到相册
此图片仅供参考
后来用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(); //矩阵键盘扫面
}
复制代码
锁.c :
#include "config.h"
#include "LCD1602.h"
#include "eeprom.h"
#include "delay.h"
#include "KEY.h"
#include "LOCK.h"
bit pass=0; //密码正确标志
bit ReInputIx=0; //重置密码功能标志
bit ReInputEn=0; //重置密码输入允许标志
bit key_disable=0; //锁定键盘标志
史海拾趣
|
2440中UART0寄存器对应的物理地址为 0x50000000,对应的虚拟地址在g_oalAddressTable表中为0x91000000 g_oalAddressTable DCD 0x91000000, 0x50000000, 1 &nb ...… 查看全部问答> |
|
我的机子装不了eVC4,安装到配置wince platform manager 4.0 时,就死机了 重启后就出现未识别的硬件和硬件安装向导, 提示什么虚拟PC的 只要安装也就卡机了. 这是怎么回事? 我电脑是SP3的,台式机一样的系统都安装得好好的… 查看全部问答> |
|
VB中,sItem = Split(s, \",\") CString s; CString sItem[13]; byte pItem; byte p1, p2; s += \",\"; p1 = 0; pItem = 0; for (p2 = 0; p2 < s.GetLength(); p2++) { if (s.GetAt(p2) == \',\') &nb ...… 查看全部问答> |
|
经常会有朋友问到200万高清网络机是多少分辨率,或者1600*1200是多少万像素?今天刚好从网上找到一篇这样的文章,希望对大家有帮助。 1.什么是像素?简单的说,我们通常所说的像素,就是CCD上光电感应元件的数量,一个感光元件经过感光 ...… 查看全部问答> |
|
这组图片是三个星期以前拍的,回来之后就马不停蹄的赶项目进度,推迟到现在才发上来。本人拍照水平很菜,加上展品放在玻璃柜里面,拍出来相片实在一般般,大家将就一下。 对这次展会的总体印象是规格高,规模大,在一定程度上反映出了中国物联网 ...… 查看全部问答> |




