基于51单片机密码锁(修改密码,串口上锁解锁,仿真) 您所在的位置:网站首页 奈特密码锁如何更换密码 基于51单片机密码锁(修改密码,串口上锁解锁,仿真)

基于51单片机密码锁(修改密码,串口上锁解锁,仿真)

2024-06-10 19:37| 来源: 网络整理| 查看: 265

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、仿真图

二、步骤

1.矩阵按键

2.串口配置

3.串口接收数据判断

4.修改密码+密码输入

总结

前言

LCD1602+矩阵按键+串口上锁解锁+修改密码  提供参考

一、仿真图

二、步骤 1.矩阵按键

代码如下:

unsigned char MatrixKey() {     unsigned char KeyNumber=0;          P7=0xFF;     P70=0;     if(P74==0){Delay(20);while(P74==0);Delay(20);KeyNumber=1;}     if(P75==0){Delay(20);while(P75==0);Delay(20);KeyNumber=5;}     if(P76==0){Delay(20);while(P76==0);Delay(20);KeyNumber=9;}     if(P77==0){Delay(20);while(P77==0);Delay(20);KeyNumber=13;}          P7=0xFF;     P71=0;     if(P74==0){Delay(20);while(P74==0);Delay(20);KeyNumber=2;}     if(P75==0){Delay(20);while(P75==0);Delay(20);KeyNumber=6;}     if(P76==0){Delay(20);while(P76==0);Delay(20);KeyNumber=10;}     if(P77==0){Delay(20);while(P77==0);Delay(20);KeyNumber=14;}          P7=0xFF;     P72=0;     if(P74==0){Delay(20);while(P74==0);Delay(20);KeyNumber=3;}     if(P75==0){Delay(20);while(P75==0);Delay(20);KeyNumber=7;}     if(P76==0){Delay(20);while(P76==0);Delay(20);KeyNumber=11;}     if(P77==0){Delay(20);while(P77==0);Delay(20);KeyNumber=15;}          P7=0xFF;     P73=0;     if(P74==0){Delay(20);while(P74==0);Delay(20);KeyNumber=4;}     if(P75==0){Delay(20);while(P75==0);Delay(20);KeyNumber=8;}     if(P76==0){Delay(20);while(P76==0);Delay(20);KeyNumber=12;}     if(P77==0){Delay(20);while(P77==0);Delay(20);KeyNumber=16;}          return KeyNumber; } 2.串口配置

代码如下(示例):

/**   * @brief  串口初始化,[email protected]   * @param  无   * @retval 无   */ void Uart_Init(void) {     SCON = 0X50;     AUXR |= 0X40;     AUXR &= 0XFE;     TMOD &= 0X0F;     TL1 = 0XE0;     TH1 = 0XFE;     ET1 = 0;     TR1 = 1;     ES = 1;     EA = 1; } /**   * @brief  串口发送一个字节数据   * @param  Byte 要发送的一个字节数据   * @retval 无   */ void UART_SendByte(unsigned char Byte) {     SBUF=Byte;     while(TI==0);     TI=0; } 3.串口接收数据判断

这里把判断拿出来不放在串口中断中是因为LCD显示函数放在里面会造成函数重进入,具体是什么原因网上找了会资料也没解决所以我就把判断给拿出来单独弄了一个函数。

void Uart1_isr(void) interrupt 4 { if(RI) { RI = 0; LCD_clar();//清屏 temp = SBUF; } } /** * @brief 串口判断函数 * @param 上锁:0x01 解锁:0x02 * @retval */ void Uart_Control() { if(temp == 0x01)//串口值判断 { temp = 0; LCD_ShowString(1,1,"Locking!");//锁定 flag = 1; } if(temp == 0x02)//串口值判断 { temp = 0; LCD_ShowString(1,1,"Password:");//解锁 flag = 0; } } 4.修改密码+密码输入 if(KeyNum) { if(flag == 0) { if(KeyNum


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有