基于51单片机矩阵键盘的密码锁设计包含密码修改

main函数

#include <REGX52.H>
#include <DELAY.H>
#include <LCD1602.H>
#include <MATRIX_KEYBOARD.H>

#define  ui unsigned int //define A B A为定义的新变量

void main()
{
    ui KeyValue;//键值
    ui Password = 0;//密码
    ui Count = 0;   //密码输入位数
    ui PASSWORD = 1234;//初始密码
    ui PASSWORDC = 0;
    ui ChangeMode = 0; //更改密码模式
    ui CountChange = 0; //更改密码输入位数
    
    LCD_Init();
    LCD_ShowString(1,1,"Password.");
    
    while(1)
    {
        KeyValue = MatrixValueShow();
        if(KeyValue)
        {
            if(ChangeMode == 0) //普通模式
            {
                if(KeyValue <= 10)//定义为密码输入区 S1-S10 1-...-9-0
                {
                    LCD_ShowString(1,13,"    ");
                    if(Count < 4)
                    {
                        Password *= 10;           //密码乘以10左移处理
                        Password += KeyValue % 10;//取余 将10取0处理 加等于 当前密码
                        Count++;
                    }
                    LCD_ShowNum(2,1,Password,4);//显示范围1~5
                }   
                if(KeyValue == 11)//S11定义为确认键
                {
                    if(Password == PASSWORD)
                    {
                        LCD_ShowString(1,13,"OK ."); Password = 0; Count = 0;//OK后边添加空格为消影操作
                        LCD_ShowNum(2,1,Password,4);//更新显示
                    }
                    else
                    {
                        LCD_ShowString(1,13,"Err.");
                        Password = 0; Count = 0;
                        LCD_ShowNum(2,1,Password,4);//更新显示
                    }
                }
                if(KeyValue == 12)//S12定义为取消键
                {
                    LCD_ShowString(1,13,"    ");
                    Password /= 10;           //密码除以10右移处理
                    LCD_ShowNum(2,1,Password,4);//更新显示
                    if (Count > 0) Count--;
                }
                if(KeyValue == 13)//S13定义为重新输入键
                {
                    LCD_ShowString(1,13,"    ");
                    Password = 0; Count = 0;
                    LCD_ShowNum(2,1,Password,4);//更新显示
                }
                if(KeyValue == 14)//S14定义为更改密码
                {
                    LCD_ShowString(1,13,"Cha.");
                    Delay1ms(100);
                    PASSWORDC = 0;
                    CountChange = 0;
                    ChangeMode = 1; // 进入更改密码模式
                }
            }
            else if(ChangeMode == 1) //更改密码模式
            {
                if(KeyValue <= 10)//定义为密码输入区 S1-S10 1-...-9-0
                {
                    LCD_ShowString(1,13,"    ");
                    if(CountChange < 4)
                    {
                        PASSWORDC *= 10;           //密码乘以10左移处理
                        PASSWORDC += KeyValue % 10;//取余 将10取0处理 加等于 当前密码
                        LCD_ShowNum(2,1,PASSWORDC,4);//更新显示
                        CountChange++;
                    }
                }
                if(KeyValue == 15 && CountChange == 4) //S15定义为确认更改密码,并且密码输入满4位
                {
                    PASSWORD = PASSWORDC;
                    LCD_ShowString(1,13,"Suc.");
                    Password = 0; Count = 0;
                    ChangeMode = 0; // 退出更改密码模式
                    LCD_ShowNum(2,1,Password,4);//更新显示
                }
            }
        }
    }
}
 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值