第十一集 矩阵按键
摘要 1.矩阵按键的原理 2.矩阵按键的程序实现 原理 任务1代码
u8 key_board_num = 0xff;
void key_board(void)
{
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)||(ROW1 == 0&&ROW2 ==1))
{
if(ROW1 == 0){key_board_num = 0;}
else if(ROW2 ==0){key_board_num = 4;}
COL1 = 1;
COL2 = 1;
COL3 = 1;
COL4 = 1;
ROW1 = 0;
ROW2 = 0;
if(COL1 == 0){key_board_num = key_board_num + 1 -1;seg_num++;}
if(COL2 == 0){key_board_num = key_board_num + 1;seg_num++;}
if(COL3 == 0){key_board_num = key_board_num + 2;seg_num++;}
if(COL4 == 0){key_board_num = key_board_num + 3;seg_num++;}
printf("%d按键按下\r\n",key_board_num);
}
COL1 = 0;
COL2 = 0;
COL3 = 0;
COL4 = 0;
ROW1 = 1;
ROW2 = 1;
}
else
{
key_board_num = 0xff;
}
}
void key_Seg(void)
{
seg_num++;
if(seg_num >= 8) seg_num = 0; //8位结束回0
Display_Seg(~SEG_W[0],SEG_D[key_board_num]);
}
程序实现 代码
void key_board(void)
{
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))||((ROW1 == 0)&&(ROW2 ==1)))
{
if(ROW1 == 0){key_board_num = 0;}
else if(ROW2 ==0){key_board_num = 4;}
COL1 = 1;
COL2 = 1;
COL3 = 1;
COL4 = 1;
ROW1 = 0;
ROW2 = 0;
if(COL1 == 0){key_board_num = key_board_num + 1 -1;}
if(COL2 == 0){key_board_num = key_board_num + 1;}
if(COL3 == 0){key_board_num = key_board_num + 2;}
if(COL4 == 0){key_board_num = key_board_num + 3;}
//printf("%d按键按下\r\n",key_board_num);
}
COL1 = 0;
COL2 = 0;
COL3 = 0;
COL4 = 0;
ROW1 = 1;
ROW2 = 1;
}
else
{
key_board_num = 0xff;
}
}
void key_Seg(void)
{
Display_Seg(~SEG_W[led_num],SEG_D[possward[led_num]]);
led_num++;
if(led_num >= 8) led_num = 0; //8位结束回0
}
void write_pow(void)
{
if(key_board_num < 0xff)
{
key_num ++;
if(key_num == 5)
{
if(seg_num == 0)
{
possward[0] = 16;
possward[1] = 16;
possward[2] = 16;//o
possward[3] = 16;//p
possward[4] = 16;//e
possward[5] = 16;//n
possward[6] = 16;
possward[7] = 16;
}
possward[seg_num] = key_board_num;
seg_num ++;
if(seg_num == 8)
{
if(possward[0] == 1&&possward[1] == 2&&possward[2] == 3&&possward[3] == 4&&possward[4] == 5&&possward[5] == 6&&possward[6] == 7&&possward[7] == 0)
{
possward[0] = 17;
possward[1] = 1;
possward[2] = 17;//o
possward[3] = 1;//p
possward[4] = 17;//e
possward[5] = 1;//n
possward[6] = 17;
possward[7] = 1;
}
else
{
possward[0] = 16;
possward[1] = 16;
possward[2] = 16;//o
possward[3] = 16;//p
possward[4] = 16;//e
possward[5] = 16;//n
possward[6] = 16;
possward[7] = 16;
}
seg_num = 0;
}
}
}
else
{
key_num = 0;
}
}
拓展 代码包含洗衣机拓展
--哪怕梦想让我们拼的遍体鳞伤,这一次我们也要勇往直前
|