找回密码
 立即注册
查看: 332|回复: 8

《矩阵按键》求助帖子,密码锁功能 | 先用官方的程序测试,从正确开始

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2026-1-1 15:01:58 | 显示全部楼层 |阅读模式
《矩阵按键》
出现的问题:


按键只可以控制LED的灯,数码管无法显示??

##今天编写过程中发现并解决了一个代码顺序的问题,
截图202601011519038843.jpg

导致出现这种问题:


原因在于没有第一时间把单独按键的功能加在前面。所以出现这种情况

求助:
我编写的代码前面都能正常显示和编译,但是按键按下后,没有反应,数码管无变化不知道是哪里的问题,希望论坛大佬给一些解决方案,
代码如下,编译没报错

源代码:


void Task_1(void)                                //后面需要调度这个任务,所以存储io里面
{
        //矩阵按键任务调度的一个板块
                                COL1 = 0;
                            COL2 = 0;
                            COL3 = 0;
                            COL4 = 0;
                            ROW1 = 1;
                            ROW2 = 1;
                        //按键检测
        if((ROW1==0) || (ROW2==0))                        //检测到有按键按下。
        {
                if((ROW1 == 0) && (ROW2==0))        //
                {
                }
                else if (((ROW1 ==1)&&(ROW2 ==0) )|| ((ROW2 ==1)&&(ROW1==0)))
                {
                        if(ROW1 == 0)
                                Key_num = 0;
                        else if(ROW2 == 0)
                                Key_num = 4;
                                COL1 =1;
                            COL2 =1;
                            COL3 =1;
                            COL4 =1;
                            ROW1 =0;
                            ROW2 =0;
               
                if(COL1==0)
                {
//                        key_num = key_num+0;
                }
                else if((COL2==0))
                {
                        Key_num = Key_num+1;
                }
                else if((COL3==0))
                {
                        Key_num = Key_num+2;
                }
                else if((COL4==0))
                {
                        Key_num = Key_num+3;
                }
                }
        }
}




u8 password[8] = {16,16,16,16,16,16,16,16};                //密码锁
u8 SEG_no = 0;
void SEG_Task(void)                                                        //数码管对外显示函数
{

        if(SEG_no == 0)                                                                        //数码管的多端口显示
        {
                Display_Seg(SEG_num[password[0]],~T_num[0]);        //SEG_no指索引的密码的第1位
        }
        else if(SEG_no == 1)
        {
               
                Display_Seg(SEG_num[password[1]],~T_num[1]);        //SEG_no指索引的第零位
        }
        else if(SEG_no == 2)
        {
                Display_Seg(SEG_num[password[2]],~T_num[2]);        //SEG_no指索引的第零位
        }
        else if(SEG_no == 3)
        {
                Display_Seg(SEG_num[password[3]],~T_num[3]);        //SEG_no指索引的第零位
        }
        else if(SEG_no == 4)
        {
               
                Display_Seg(SEG_num[password[4]],~T_num[4]);        //SEG_no指索引的第零位
        }
        else if(SEG_no == 5)
        {
                Display_Seg(SEG_num[password[5]],~T_num[5]);        //SEG_no指索引的第零位
        }
        else if(SEG_no == 6)
        {
                                                                       
                Display_Seg(SEG_num[password[6]],~T_num[6]);        //SEG_no指索引的第零位
        }
        else if(SEG_no == 7)
        {
                Display_Seg(SEG_num[password[7]],~T_num[7]);        //SEG_no指索引的第零位
        }
        else
        {
      
        }
        SEG_no ++;
        if(SEG_no >7 )
          SEG_no = 0;
}

//加一个按键的判断,代表输入进去以后会发生变化
u8 Key_Vol3 = 0;
u8 Key_no = 0;
void PW_write_Task(void)/*利用独立按键的键值去处理,避免一直出现第一个数一直输入*/
{               
        if( Key_num <0xff)                        //如果小于这个数值代表有按钮按下
        {
                Key_Vol3++;
                if( Key_Vol3 == 5)
                {
                        password[Key_no] = Key_num;                //表示按键按下后是第几位引入,key_no
                        Key_no++;
                if(Key_no == 0)
                {
                        password[0]=16;
                        password[1]=16;      
                        password[2]=16;
                        password[3]=16;
                        password[4]=16;
                        password[5]=16;
                        password[6]=16;
                        password[7]=16;
                }
                        if(Key_no==8)
                        {
                                if((password[0]==1) && (password[1]==2) && (password[2]==3)&&(password[3]==4)&&(password[4]==5)&&(password[5]==6)&&(password[6]==7)&&(password[7]==8))
                                {
                                        password[0]=17;
                                        password[1]=17;      
                                        password[2]=17;
                                        password[3]=17;
                                        password[4]=17;
                                        password[5]=17;
                                        password[6]=17;
                                        password[7]=1;
                                }
                                else
                                {
                                        password[0]=16;
                                        password[1]=16;      
                                        password[2]=16;
                                        password[3]=16;
                                        password[4]=16;
                                        password[5]=16;
                                        password[6]=16;
                                        password[7]=16;
                                }
                                Key_no = 0;
                        }
                }
                else
                {
                        Key_Vol3 = 0;
                }
        }
}


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:370
  • 最近打卡:2026-04-04 12:33:12

844

主题

1万

回帖

2万

积分

管理员

积分
22805
发表于 2026-1-1 15:44:16 | 显示全部楼层
截图202601011543095174.jpg

深圳国芯人工智能有限公司-实验箱

先用官方的程序测试,从正确开始
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2026-1-1 16:00:37 | 显示全部楼层
神*** 发表于 2026-1-1 15:44
深圳国芯人工智能有限公司-实验箱

先用官方的程序测试,从正确开始

好的
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2026-1-1 17:21:27 | 显示全部楼层
神*** 发表于 2026-1-1 15:44
深圳国芯人工智能有限公司-实验箱

先用官方的程序测试,从正确开始

你好,我把官方的测试程序HEX
下到试验箱中后,出现的程序跟姚工讲的内容不一致怎么办呢?有没有之前课上的源码,我烧录一下看看效果
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:370
  • 最近打卡:2026-04-04 12:33:12

844

主题

1万

回帖

2万

积分

管理员

积分
22805
发表于 2026-1-1 17:42:32 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2026-1-1 20:26:44 | 显示全部楼层
神*** 发表于 2026-1-1 17:42
《8051U深度入门到32位51大型实战视频》,【免费 + 包邮 送】实验箱@Ai8051U,100万套 - 学习打卡区 ,为 ...

非常感谢管理员,找到错因了,,,漏了一个括号

截图202601012028128015.jpg
-------------------------------------------

截图202601012025501396.jpg

错误原因还是括号没有对齐,导致后面那个else语句没有用上,所以按键按下去没有反应

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:370
  • 最近打卡:2026-04-04 12:33:12

844

主题

1万

回帖

2万

积分

管理员

积分
22805
发表于 2026-1-2 09:28:36 | 显示全部楼层
是:漏了一个括号;
不是:括号没有对齐
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2026-01-02 14:48:10
已绑定手机

16

主题

42

回帖

221

积分

中级会员

积分
221
发表于 2026-1-2 16:58:29 | 显示全部楼层
神*** 发表于 2026-1-2 09:28
是:漏了一个括号;
不是:括号没有对齐

管理员你好,我有个问题想请教一下,
在《周期性任务调度》中数码管章节里面的

#define ROW1 P06
#define ROW2 P07
#define COL1 P00
#define COL2 P01
#define COL3 P02
#define COL4 P03

这些定义的引脚不也是控制LED灯的吗,是不是不能重复定义呀?这样会导致无法显示?
但是编译过程中,也没出现报错。
我的疑问点是,周期型调度的引脚控制,与中断里面重新定义灯的引脚,怎样可以做到互不影响?既让数码管可以按下,也可以控制外部中断1的操作

点评

真正的定义只有P00 P01这些 #define COL1 P00 COL1是宏定义,宏定义的作用是预编译时期替换,也就是预编译时期代码中所有COL1会被编译器替换为P00  详情 回复 发表于 2026-1-3 16:43
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:495
  • 最近打卡:2026-04-04 15:14:23
已绑定手机

104

主题

4237

回帖

9415

积分

荣誉版主

无情的代码机器

积分
9415
发表于 2026-1-3 16:43:15 | 显示全部楼层
htmw*** 发表于 2026-1-2 16:58
管理员你好,我有个问题想请教一下,
在《周期性任务调度》中数码管章节里面的

真正的定义只有P00 P01这些

#define COL1 P00
COL1是宏定义,宏定义的作用是预编译时期替换,也就是预编译时期代码中所有COL1会被编译器替换为P00
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-4 16:05 , Processed in 0.122672 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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