- 打卡等级:偶尔看看II
- 打卡总天数:22
- 最近打卡:2026-01-02 14:48:10
已绑定手机
中级会员
- 积分
- 221
|
《矩阵按键》
出现的问题:
按键只可以控制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[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;
}
}
}
|
|