没有合适的资源?快使用搜索试试~ 我知道了~
首页基于89C51电子密码锁设计程序
基于89C51电子密码锁设计程序
4星 · 超过85%的资源 需积分: 12 7 下载量 63 浏览量
更新于2023-03-16
评论
收藏 167KB DOC 举报
基于89C51电子密码锁设计程序;希望大家可以尝试自己实现,制作成电子小饰品
资源详情
资源评论
资源推荐
/*连接线图:
---------------------------------------------------
| LCM-----51 | LCM-----51 | LCM------51 |
| ----------------------------------------------- |
| DB0-----P0.0 | DB4-----P0.4 | RS-------P2.0 |
| DB1-----P0.1 | DB5-----P0.5 | RW-------P2.1 |
| DB2-----P0.2 | DB6-----P0.6 | E--------P2.2 |
| DB3-----P0.3 | DB7-----P0.7 | VLCD 接 1K 电阻到 GND |
---------------------------------------------------
接口说明:1. P1 口: 4x4 矩阵键盘
2. P2.4 工作指示灯
3. P2.5 继电器控制端
4. P3.7 蜂鸣器控制端
5. P3.3 24c02 时钟端 SCL
6. P3.4 24c02 数据端 SDA
/*接盘按键说明:
--------------------------------------------------
| 1 | 2 | 3 | A |
- - - - - - - - - - - - -
| 4 | 5 | 6 | B |
- - - - - - - - - - - - -
| 7 | 8 | 9 | C |
- - - - - - - - - - - - -
| * | 0 | # | D |
--------------------------------------------------
[注:AT89S51 使用 12M 晶振]
========================== 定义与申明==============================================
===============*/
#include "regx52.h"
#include "string.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
//*********** 引脚定义引脚
#define LCM_RS P2_0 // 数据/命令选择信号
#define LCM_RW P2_1 // 读/写选择信号
#define LCM_E P2_2 // 使能信号
#define WLED P2_4 // 工作指示灯
#define REL P2_5 // 继电器
#define BELL P3_7 // 蜂鸣器
#define SCL P3_3 // 模拟 I2C 串行时钟控制
#define SDA P3_4 // 模拟 I2C 串行数据传输
#define LCM_Data P0 // 显示数据端口
#define AddWr 0xa0 // "1010 0000B"器件地址选择及写标志
#define AddRd 0xa1 // "1010 0001B"器件地址选择及读标志
//控制字格式:
/*- - - - - - - - - - -
1 0 1 0 A2 A1 A0 R/W
- - - - - - - - - - - */
/*注:1. 前 4 位为 I2C 总线特征编码:1010
2. A2 A1 A0 为 24c02 的地址
3. R/W=0:表示写入;R/W=1:表示读出 */
//*********** 变量定义
#define Busy 0x80 // 用于检测 LCM 状态字中的 Busy 标识
uchar Count,num; // 计数器
uint con_30m; // 30min 计数器
uchar con_20s; // 10s 计数器
bit flag,mark,sign,mark0;// 常用标志位
bit flag1; // Choice_menu()调用标志
bit signx; // 循环标志
bit markx;
//************ 数组定义
uchar code O_Password[]={0x30,0x30,0x30,0x30,0x30,0x30};// 原始密码 "000000"
uchar data N_Password[]={0x00,0x00,0x00,0x00,0x00,0x00};// 新密码
uchar data T_Password[]={0x00,0x00,0x00,0x00,0x00,0x00};// 输入密码暂存
//*********** 函数声明
void Start(void); // 开始总线函数
void Stop(void); // 结束总线函数
uchar Read(void); // 读一字节数据
bit Send(uchar Data);// 发送一字节数据
uchar ReadCurrent(uchar Address);// 从指定处读出一字节
void WriteCurrent(uchar Data,uchar Address);// 在指定地址处写入一字节
void ReadFromROM(uchar Data[],uchar Address,uchar Num);// 从指定地址读出 Num 个数据
void WriteToROM(uchar Data[],uchar Address,uchar Num); // 从指定地址写入 Num 个数据
uchar ReadStatusLCM(void); // 读状态
void LCMInit(void); // LCM 初始化
void WriteDataLCM(uchar WDLCM); // 写数据
void WriteCommandLCM(uchar WCLCM,BuysC); // 写指令
void DisplayOneChar(uchar X, uchar Y, uchar DData); // 按指定位置显示一个字符
void DisplayListChar(uchar X, uchar Y, uchar code *DData); // 按指定位置显示一串字符
void PasswordComparison(bit mark);//密码比较
void Scan_starnumber(void);
void Delay5Ms(void); // 5ms 延时
void Delay400Ms(void); // 400ms 延时
void Delay1s(void); // 1s 延时
void Delay_bell(void); // 蜂鸣器发音延时
void DelayMs(uchar ms); // 延时
uchar Key_scan(void); // 按键扫描
uchar Key_switch(void); // 按键转换函数
void Choice_menu(void); // 选择菜单界面
void Reset_success(void); // 复位成功提示
void Pass_face(void); // 密码输入提示
void Password_OK(void); // 密码输入正确提示
void Welcome_face(void); // 欢迎界面
void Password_ERROR(void); // 密码输入错误提示
void Password_importation(void); // 密码输入
void NewPassword_face(void); // 输入新密码提示
void NewPassword_again(void); // 再次输入新密码提示
void NewPassword_set(void); // 新密码输入
void NewPassword_set_again(void); // 再次输入新密码
void Newpassword_OK(void); // 新密码设置成功提示
void Newpassword_ERROR(void); // 新密码设置失败提示
void Newpassword_comparison(void); // 新密码设置比较
void Beep(void); // 蜂鸣器发音
void Led_hint(void); // LED 工作指示
//========================================== 主函数部分 =============================
=====================
/*****************************************************
函 数 名:void clearmen(void)
功 能:系统初始化
说 明:对系统用的标志位和定时器进行初始化
入口参数:无
返 回 值:无
*****************************************************/
void clearmen(void)
{
flag1= 1; // Choice_menu()调用标志
signx= 1; // 循环标志
flag = 1; // 调用输入新密码提示标志位
mark = 1; // 循环标志位
markx= 1;
num = 0; // 按键错误计数器
WriteToROM(O_Password,0,6);
TH0=0x3C;TL0=0xB0; // 50ms 定时初值
TH1=0x3C;TL1=0xB0; // 50ms 定时初值
TMOD=0x11;ET0=1;TR0=0;ET1=1;TR1=0;EA=1;
}
/*****************************************************
函 数 名:main()
功 能:主函数
说 明:对按键和显示进行控制
入口参数:无
返 回 值:无
*****************************************************/
void main(void)
{
uchar Key_value;
Delay400Ms(); // 启动等待,等 LCM 讲入工作状态
LCMInit(); // LCM 初始化
Delay400Ms();
clearmen(); // 系统初始化
while(1)
{
P1=0xf0;
if(((P1&0xf0)!=0xf0)&(flag1==1)&(num<3)) // 有键按下
{
Key_value=Key_switch(); // 按键扫描
if(Key_value!=0) // 的确有键按下
{
Choice_menu(); // 调用选择程序
flag1=0; // Choice_menu()调用标志
signx=1; // 循环标志
}
while(signx==1)
{
TR0=0; // 定时器 0 关,从先开始计时
TR0=1; // 定时器 0 开
P1=0xf0; // P1 口赋值,从而判断有无按键
if((P1&0xf0)!=0xf0)
{
Key_value=Key_switch(); // 按键扫描
if(Key_value==65) // 如果按键是"A",则输入密码
{
markx=1; // 显示密码输入正确或错误提示
while(mark==1)
{
Password_importation(); // 密码输入
}
flag1=1; // Choice_menu()调用标志
signx=0; // 循环标志
}
if(Key_value==66) // 如果按键是"B",则输入新密码
{
markx=0; // 不显示密码输入正确或错误提示
while(mark==1) // 输入前比较秘密,密码正确进入新密码设置
{ // 密码错误退出密码设置
Password_importation(); // 密码输入
}
//-------------------------------
if(mark0!=0) // mark0=1:密码比较正确可以输入新密码
{ // mark0=0:密码比较错误不能输入新密码
mark=1; // 进入循环标志
while(mark==1)
{
NewPassword_set(); // 新密码设置函数
}
mark=1; // 进入循环标志
while(mark==1)
{
NewPassword_set_again(); // 再次输入密码
}
}
flag1=1; // Choice_menu()调用标志
剩余27页未读,继续阅读
Eagle___tiankong
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 27页智慧街道信息化建设综合解决方案.pptx
- 计算机二级Ms-Office选择题汇总.doc
- 单链表的插入和删除实验报告 (2).docx
- 单链表的插入和删除实验报告.pdf
- 物联网智能终端项目设备管理方案.pdf
- 如何打造品牌的模式.doc
- 样式控制与页面布局.pdf
- 武汉理工Java实验报告(二).docx
- 2021线上新品消费趋势报告.pdf
- 第3章 Matlab中的矩阵及其运算.docx
- 基于Web的人力资源管理系统的必要性和可行性.doc
- 基于一阶倒立摆的matlab仿真实验.doc
- 速运公司物流管理模式研究教材
- 大数据与管理.pptx
- 单片机课程设计之步进电机.doc
- 大数据与数据挖掘.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1