《矩阵按键》求助帖子,密码锁功能 | 先用官方的程序测试,从正确开始
《矩阵按键》出现的问题:
按键只可以控制LED的灯,数码管无法显示??
##今天编写过程中发现并解决了一个代码顺序的问题,
导致出现这种问题:
原因在于没有第一时间把单独按键的功能加在前面。所以出现这种情况
求助:
我编写的代码前面都能正常显示和编译,但是按键按下后,没有反应,数码管无变化不知道是哪里的问题,希望论坛大佬给一些解决方案,
代码如下,编译没报错
源代码:
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 = {16,16,16,16,16,16,16,16}; //密码锁
u8 SEG_no = 0;
void SEG_Task(void) //数码管对外显示函数
{
if(SEG_no == 0) //数码管的多端口显示
{
Display_Seg(SEG_num],~T_num); //SEG_no指索引的密码的第1位
}
else if(SEG_no == 1)
{
Display_Seg(SEG_num],~T_num); //SEG_no指索引的第零位
}
else if(SEG_no == 2)
{
Display_Seg(SEG_num],~T_num); //SEG_no指索引的第零位
}
else if(SEG_no == 3)
{
Display_Seg(SEG_num],~T_num); //SEG_no指索引的第零位
}
else if(SEG_no == 4)
{
Display_Seg(SEG_num],~T_num); //SEG_no指索引的第零位
}
else if(SEG_no == 5)
{
Display_Seg(SEG_num],~T_num); //SEG_no指索引的第零位
}
else if(SEG_no == 6)
{
Display_Seg(SEG_num],~T_num); //SEG_no指索引的第零位
}
else if(SEG_no == 7)
{
Display_Seg(SEG_num],~T_num); //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_num; //表示按键按下后是第几位引入,key_no
Key_no++;
if(Key_no == 0)
{
password=16;
password=16;
password=16;
password=16;
password=16;
password=16;
password=16;
password=16;
}
if(Key_no==8)
{
if((password==1) && (password==2) && (password==3)&&(password==4)&&(password==5)&&(password==6)&&(password==7)&&(password==8))
{
password=17;
password=17;
password=17;
password=17;
password=17;
password=17;
password=17;
password=1;
}
else
{
password=16;
password=16;
password=16;
password=16;
password=16;
password=16;
password=16;
password=16;
}
Key_no = 0;
}
}
else
{
Key_Vol3 = 0;
}
}
}
深圳国芯人工智能有限公司-实验箱
先用官方的程序测试,从正确开始
神农鼎 发表于 2026-1-1 15:44
深圳国芯人工智能有限公司-实验箱
先用官方的程序测试,从正确开始
好的
神农鼎 发表于 2026-1-1 15:44
深圳国芯人工智能有限公司-实验箱
先用官方的程序测试,从正确开始
你好,我把官方的测试程序HEX
下到试验箱中后,出现的程序跟姚工讲的内容不一致怎么办呢?有没有之前课上的源码,我烧录一下看看效果
《8051U深度入门到32位51大型实战视频》,【免费 + 包邮 送】实验箱@Ai8051U,100万套 - 学习打卡区 ,为集中维护,一个学习专题只发一个贴持续跟贴 国芯人工智能技术交流网站 - AI32位8051交流社区
神农鼎 发表于 2026-1-1 17:42
《8051U深度入门到32位51大型实战视频》,【免费 + 包邮 送】实验箱@Ai8051U,100万套 - 学习打卡区 ,为 ...
非常感谢管理员,找到错因了{:liulei:},,,漏了一个括号
-------------------------------------------
错误原因还是括号没有对齐,导致后面那个else语句没有用上,所以按键按下去没有反应
是:漏了一个括号;
不是:括号没有对齐 神农鼎 发表于 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的操作
htmwldex 发表于 2026-1-2 16:58
管理员你好,我有个问题想请教一下,
在《周期性任务调度》中数码管章节里面的
真正的定义只有P00 P01这些
#define COL1 P00
COL1是宏定义,宏定义的作用是预编译时期替换,也就是预编译时期代码中所有COL1会被编译器替换为P00
页:
[1]