开创云网站建设,安徽合肥建设网,网站备案去哪找接入商,落寞文学网单本多本小说wordpress主题【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示设计 1.主要功能#xff1a;讲解视频#xff1a;2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单下载链接资料下载链接#xff1a; 【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示设计 ( proteus仿真… 【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示设计 1.主要功能讲解视频2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单下载链接资料下载链接 【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示设计 ( proteus仿真程序设计报告讲解视频
仿真图proteus8.16(有低版本)
程序编译器keil 4/keil 5
编程语言C语言
设计编号P14
1.主要功能
基于51单片机AT89C51/52与AT89S51/52、AT89C51/52、STC89C51/52等51内核单片机通用
基于51单片机的密码锁LCD1602液晶显示设计
1.按键设置6位密码输入密码若密码正确则锁打开。显示open开锁指示灯点亮。
2.密码可以自己修改6位密码必须是开始状态才能改密。为防止误操作修改密码得输入两次。
3.若密码输入错误次数超过3次蜂鸣器报警并且锁定键盘需复位重新开始操作。
4.系统具有24C02有复位、掉电保存密码功能。
5.需要在Proteus软件和普中51开发板实现功能验证。
(目前仅完全适配普中开发板A234其他普中开发板型号可能需要做代码修改或接线)
需注意仿真中51单片机芯片是兼容的AT89C51,AT89C52是51单片机的具体型号内核是一样的。相同的原理图里无论stc还是at都一样引脚功能都是一样的程序是兼容的芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
讲解视频
仿真讲解实物演示代码讲解 2.仿真
开始仿真
打开仿真工程双击proteus中的单片机选择hex文件路径然后开始仿真。
1、首次使用时输入131420对密码进行初始化当显示initpassword, 证明密码初始化完成此时的密码为000000。然后可以改密了。
如密码忘记就再输入131420初始化然后密码就是000000 2.输入密码正确LCD显示open继电器导通模拟开锁动作。 3当输入密码错误后LCD显示error报警并锁定键盘3秒钟。 3. 程序代码
使用keil4或者keil5编译代码有注释可以结合报告理解代码含义。 //
//LCD1602
//#define yi 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为110000000080
#define er 0x800x40 //LCD第二行初始位置因为第二行第一个字符位置地址是0x40//----------------延时函数后面经常调用----------------------
void delay(uint xms)//延时函数有参函数
{uint x,y;for(xxms;x0;x--)for(y110;y0;y--);
}//--------------------------写指令---------------------------
void write_1602com(uchar com)//****液晶写入指令函数****
{lcd1602_rs0;//数据/指令选择置为指令lcd1602_rw0; //读写选择置为写P0com;//送入数据delay(1);lcd1602_en1;//拉高使能端为制造有效的下降沿做准备delay(1);lcd1602_en0;//en由高变低产生下降沿液晶执行命令
}//-------------------------写数据-----------------------------
void write_1602dat(uchar dat)//***液晶写入数据函数****
{lcd1602_rs1;//数据/指令选择置为数据lcd1602_rw0; //读写选择置为写P0dat;//送入数据delay(1);lcd1602_en1; //en置高电平为制造下降沿做准备delay(1);lcd1602_en0; //en由高变低产生下降沿液晶执行命令
}//-------------------------初始化-------------------------
void lcd_init(void)
{write_1602com(0x38);//设置液晶工作模式意思16*2行显示5*7点阵8位数据write_1602com(0x0c);//开显示不显示光标write_1602com(0x06);//整屏不移动光标自动右移write_1602com(0x01);//清显示
}
//
//
//将按键值编码为数值
unsigned char coding(unsigned char m)
{unsigned char k;switch(m){case (1): k1;break;case (2): k2;break;case (3): k3;break;case (4): kA;break;case (5): k4;break;case (6): k5;break;case (7): k6;break;case (8): kB;break;case (9): k7;break;case (10): k8;break;case (11): k9;break;case (12): kC;break;case (13): k*;break;case (14): k0;break;case (15): k#;break;case (16): kD;break;}return(k);
}
//按键检测并返回按键值
void delay_uint(unsigned int i)//延时
{while(i--);
}
完整代码见文末下载链接
unsigned char keynum(void)
{unsigned char i, j; // 定义变量i和j分别存储行列索引i 0; j 0;// 设置P1端口的低四位输出为0高四位保持不变准备读取键盘列信号P1 0x0f;// 判断是否有键被按下即P1端口的值不全为0x0fif(P1 ! 0x0f) {// 延时去抖等待10ms再次检测确保按键稳定delay_uint(10000);// 再次检查确认按键确实被按下if(P1 ! 0x0f) {// 根据P1的值判断是哪一行被按下switch(P1) {case 0x0e: i 3; break; // 第1行case 0x0d: i 2; break; // 第3行case 0x0b: i 1; break; // 第3行case 0x07: i 0; // 第4行}// 设置P1端口的高四位输出为0低四位保持不变准备读取键盘行信号P1 0xf0;// 根据P1的新值判断是哪一列被按下switch(P1) {case 0xe0: j 13; break; // 第1列case 0xd0: j 9; break; // 第2列case 0xb0: j 5; break; // 第3列case 0x70: j 1; // 第4列}}}// 检查新获取的按键值行列索引组合是否与上一次的不同if(key ! i j) {// 更新按键值并返回key i j;return key;} else {// 如果按键值没有变化返回0表示没有新按键事件return 0;}
}
//一声提示音表示有效输入
void OneAlam(void)
{beep_cnt1;beep_timeBEEP_TIME;}
//二声提示音表示操作成功
void TwoAlam(void)
{beep_cnt2;beep_timeBEEP_TIME;}
//三声提示音,表示错误
void ThreeAlam(void)
{beep_cnt3;beep_timeBEEP_TIME;}
//显示提示输入
void DisplayChar(void)
{unsigned char i;if(pass1){//DisplayListChar(0,1,LockOpen);write_1602com(er); //在二行开始显示for(i0;i16;i){write_1602dat(LockOpen[i]); //显示open 开锁成功}}else{if(N0){//DisplayListChar(0,1,Error);write_1602com(er);for(i0;i16;i){write_1602dat(Error[i]); //显示错误}}else{//DisplayListChar(0,1,start_line); write_1602com(er);for(i0;i16;i){write_1602dat(start_line[i]);//显示开始输入 }}}
}//重置密码
//
void ResetPassword(void)
{unsigned char i; unsigned char j;if(pass0){pass0; DisplayChar(); //显示错误ThreeAlam(); //没开锁时按下重置密码报警3声}else //开锁状态下才能进行密码重置程序{if(ReInputEn1) //开锁状态下ReInputEn置1重置密码允许{if(N6) //输入6位密码{ReInputCont; //密码次数计数 if(ReInputCont2) //输入两次密码{for(i0;i6;){if(TempPassword[i]InputData[i]) //将两次输入的新密码作对比i;else //如果两次的密码不同{//DisplayListChar(0,1,Error);write_1602com(er);for(j0;j16;j){write_1602dat(Error[j]); //显示错误Error}ThreeAlam(); //错误提示 pass0; //关锁ReInputEn0; //关闭重置功能ReInputCont0;DisplayChar();break;}} if(i6){//DisplayListChar(0,1,ResetOK);write_1602com(er);for(j0;j16;j){write_1602dat(ResetOK[j]); //密码修改成功显示}TwoAlam(); //操作成功提示WrToROM(TempPassword,0,6); //将新密码写入24C02存储ReInputEn0;}ReInputCont0;CorrectCont0;}else //输入一次密码时{OneAlam();//DisplayListChar(0, 1, again); //显示再次输入一次write_1602com(er);for(j0;j16;j){write_1602dat(again[j]); //显示再输入一次} for(i0;i6;i){TempPassword[i]InputData[i]; //将第一次输入的数据暂存起来 }}N0; //输入数据位数计数器清零}}}
}
//输入密码错误超过三过报警并锁死键盘
void Alam_KeyUnable(void)
{P10x00;{beep_cnt255;beep_timeBEEP_TIME;}
}
//取消所有操作
void Cancel(void)
{ unsigned char i;unsigned char j;//DisplayListChar(0, 1, start_line); write_1602com(er);for(j0;j16;j){write_1602dat(start_line[j]); //显示开机输入密码界面}TwoAlam(); //提示音for(i0;i6;i){InputData[i]0; //将输入密码清零}KEY1; //关闭锁pass0; //密码正确标志清零ReInputEn0; //重置输入充许标志清零ErrorCont0; //密码错误输入次数清零CorrectCont0; //密码正确输入次数清零ReInputCont0; //重置密码输入次数清零 s3_keydown0;key_disable0; //锁定键盘标志清零N0; //输入位数计数器清零
}4. 设计报告
12485字设计报告内容包括目录硬件设计、软件设计、软硬件框图、调试、结论等 20世纪80年代后随着电子锁专用集成电路的出现电子锁的体积缩小可靠性提高成本较高是适合使用在安全性要求较高的场合且需要有电源提供能量使用还局限在一定范围难以普及所以对它的研究一直没有明显进展。
目前在西方发达国家电子密码锁技术相对先进种类齐全电子密码锁已被广泛应用于智能门禁系统中通过多种更加安全
更加可靠的技术实现大门的管理。在我国电子锁整体水平尚处于国际上70年代左右电子密码锁的成本还很高市场上仍以按键电子锁为主按键式和卡片钥匙式电子锁已引进国际先进水平现国内有几个厂生产供应市场。但国内自行研制开发的电子锁其市场结构尚未形成应用还不广泛。国内的不少企业也引进了世界上先进的技术发展前景非常可观。希望通过不断的努力使电子密码锁在我国也能得到广泛应用
5. 设计资料内容清单下载链接
资料设计资料包括仿真程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
0、常见使用问题及解决方法–必读
1、仿真图
2、程序源码注释
3、功能要求
4、开题报告
5、设计报告
6、软硬件流程框图
7、烧录工具
8、讲解视频
9、实物图
Altium Designer 安装破解
KEILproteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
普中-2普中-3普中-4开发板原理图.pdf
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url 资料下载链接
https://docs.qq.com/doc/DS2pPenNRaHB6SlR1