找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2695|回复: 3
收起左侧

关于51单片机的密码锁程序问题

[复制链接]
ID:1091578 发表于 2023-8-19 14:57 | 显示全部楼层 |阅读模式
代码及问题:
// main.c //
#include <regx52.h>
#include "LCD1602.h"
#include "MatrixKey.h"
#include "delay.h"
#include "key.h"
#define LED P2

unsigned char input[16]= {
        'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q',
        'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q'}; // 输入初始化
unsigned char password[16] = {
        '0', '1', '2', '3', '4', '5', '6', '7',
        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; // 储存的正确密码
unsigned char i, j, key;

void main()
{
        L1:
        // 正常来说应该把这句话加上,但是我加上以后编译就错了,不知道为什么
        // input[16]= {
        // 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q',
        // 'q', 'q', 'q', 'q', 'q', 'q', 'q', 'q'};
        i=0; j=0; key=0;
        LCD_Init();
        LCD_ShowString(1, 1, "Password:");
        LCD_ShowString(2, 1, "                ");
        while(1)
        {
                key = KeyScan(0); // 独立按键,确认键控制输入是否结束
               
                if(MatrixKeyScan(0)) // 4*4矩阵键盘输入密码
                {
                        input[ i] = MatrixKeyScan(0);
                        i++;
                        for(j=0; j<i; j++)
                        {
                                LCD_ShowChar(2, 1+j, input[j]); // 输入一位就显示一位数字
                        }
                }
               
                if(key==1 || i>16)
                {
                        key = 0;
                        for(j=0; j<16; j++)
                        {
                                if(password[j]!=input[j])
                                {
                                        LCD_ShowString(2, 1, "Wrong!          ");
                                        while(key==1)
                                        {
                                                i = 0;
                                                goto L1; // 如果密码错了再按一次确认键然后就可以重新输入
                                        }
                                }
                        }
                        LCD_ShowString(2, 1, "Access!         "); // 如果密码正确就会一直显示这个
                }
        }
}
// 问题应该全在main.c里,其他的键盘和屏幕我都测试过了,那些模块都没问题。现象和全部代码在附件里,主要的问题就是显示乱码,非常感谢。

project1.zip

58.26 KB, 下载次数: 3

全代码

回复

使用道具 举报

ID:332444 发表于 2023-8-19 17:23 | 显示全部楼层
不用看就知道输入转换错误了,看我帖子里面有荔枝,这是写秒钟更新,存到数组需要转换。
无标题.png

回复

使用道具 举报

ID:332444 发表于 2023-8-19 17:25 | 显示全部楼层
另外可以这样写:unsigned char password[16] = {”0123456789abcdef“};
回复

使用道具 举报

ID:1091578 发表于 2023-8-20 10:47 | 显示全部楼层
xianfajushi 发表于 2023-8-19 17:23
不用看就知道输入转换错误了,看我帖子里面有荔枝,这是写秒钟更新,存到数组需要转换。

好像就是数据类型的问题,我没有用字符用数字显示没有乱码,非常感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表