51单片机串口密码锁密码无法修改

51单片机串口密码锁密码修改
无法修改密码

#include "reg52.h"
#include "uart.h"
#include "LCD1602.h"
#include "Delay.h"

/*指令格式说明:

*'/'为分隔符,不是必须的,可以为其他符号
*"//"为结束符,是必须的,必须以//结束指令

*/
char *Password = "123456//";
int  cnt = 0, time = 0;
void main(void)

{
    char xbuff[20];
    UART_Configure(9600);
    LCD_Init();//配置9600波特率(默认无奇偶校验,1位停止位,8位数据位)
    //UART_SendStr("输入密码\r\n");
    while (1) {
        TI = 0;
        //UART_SendStr("输入密码\r\n");
        //while(Uart.RX_OKFlag==0);
        if (Uart.RX_OKFlag == 1) { //判断串口是否接收完成
            strncpy(xbuff, Uart.RX_BUFF + 0, Uart.RX_OK_LEN); //+0表示从接收缓存的第0个字符开始截取RX_OK_LEN个字符到xbuff判断指令
            if (strncmp(xbuff, Password, Uart.RX_OK_LEN) == 0) {
                time = 0;
                //LED_ON(1);
                P2 = 0x00;
                UART_SendStr("Unlocked\r\n");
                LCD_ShowString(1, 1, "Unlocked");
                cnt = 0;
                Uart.RX_COUNT = 0;
                Uart.RX_OKFlag = 0;
                UART_RX_BUFF_Clear();
                while (Uart.RX_OKFlag == 0) {
                    time++;
                    Delay(1000);
                    if (time >= 20) {
                        UART_SendStr("Locked\r\n");
                        LCD_ShowString(1, 1, "Locked           ");
                        Uart.RX_COUNT = 0;
                        Uart.RX_OKFlag = 0;
                        UART_RX_BUFF_Clear();
                        time = 0;
                        break;
                    }
                }
                if (Uart.RX_OKFlag == 1) {
                    strncpy(xbuff, Uart.RX_BUFF + 0, Uart.RX_OK_LEN);
                    if (strncmp(xbuff, "Lock//", Uart.RX_OK_LEN) == 0) {
                        UART_SendStr("Locked\r\n");
                        LCD_ShowString(1, 1, "Locked         ");
                        Uart.RX_COUNT = 0;
                        Uart.RX_OKFlag = 0;
                        UART_RX_BUFF_Clear();
                        continue;
                    }
                    if (strncmp(xbuff, "Change//", Uart.RX_OK_LEN) == 0) {
                        UART_SendStr("Password\r\n");
                        LCD_ShowString(1, 1, "Password    ");
                        //UART_SendStr(xbuff);
                        Uart.RX_COUNT = 0;
                        Uart.RX_OKFlag = 0;
                        UART_RX_BUFF_Clear();
                        //UART_SendStr(xbuff);
                        while (Uart.RX_OKFlag == 0);
                        //if(Uart.RX_OKFlag==1){
                        strncpy(xbuff, Uart.RX_BUFF + 0, Uart.RX_OK_LEN);
                        UART_SendStr(xbuff);
                        strcpy(Password,xbuff);
                        
                        UART_SendStr("New Password\r\n");
                        UART_SendStr(Password);
                        //UART_SendStr("\r\n");
                        LCD_ShowString(1, 1, "New Passwords");
                        Uart.RX_COUNT = 0;
                        Uart.RX_OKFlag = 0;
                        UART_RX_BUFF_Clear();
                        continue;
                        //}
                    }
                }
            }
            if (strncmp(xbuff, Password, Uart.RX_OK_LEN) != 0) {
                //LED_OFF(1);
                P2 = 0xFF;
                UART_SendStr("Error\r\n");
                LCD_ShowString(1, 1, "Error          ");
                cnt++;
            }
            
            
            /*-----------必须在最下面---------------------*/
            Uart.RX_COUNT = 0;   //清除缓存接收计数
            Uart.RX_OKFlag = 0;        //清除接收完成标志
            UART_RX_BUFF_Clear();//清除接收缓存
            /*--------------------------------------------*/
        }
        if (cnt > 2) {
            UART_SendStr("Locking\r\n");
            LCD_ShowString(1, 1, "Locking");
            while (1) {
                if (Uart.RX_OKFlag == 1) {
                    strncpy(xbuff, Uart.RX_BUFF + 0, Uart.RX_OK_LEN);
                    if (strncmp(xbuff, "解锁//", Uart.RX_OK_LEN) == 0) {
                        UART_SendStr("Unlock\r\n");
                        LCD_ShowString(1, 1, "Unlock");
                        Uart.RX_COUNT = 0;
                        Uart.RX_OKFlag = 0;
                        UART_RX_BUFF_Clear();
                        break;
                    }
                    Uart.RX_COUNT = 0;
                    Uart.RX_OKFlag = 0;
                    UART_RX_BUFF_Clear();
                }
            }
            cnt = 0;
        }
    }
}

这段代码是一个密码锁的程序,在串口接收到正确的密码后会将锁打开,并在20秒内等待另一个指令,如果接收到"Lock"指令,则将锁关闭,如果接收到"Change"指令,则会要求输入新的密码,如果输入的新密码符合要求,则修改密码。


需要注意的是,在修改密码时,新密码必须包含数字和字母,并且长度必须在6~12位之间。如果您无法修改密码,可以检查一下输入的新密码是否符合要求,或者检查一下在修改密码时是否正确输入了"Change"指令。