📄 key_scan.c
字号:
#include <iom8v.h>
#include <macros.h>
#include "Io_define.h"
void Key_scan (void);
void delay_nms (unsigned int n);
void Key_control(unsigned char comm);
#pragma interrupt_handler Key_scan: iv_INT0
void Key_scan(void)
{
unsigned char key=0;
delay_nms(30); //消抖
if ((PIND&BIT(3))==0) //检查第一列
{
key=14;
}
else
if ((PIND&BIT(4))==0) //检查第二列
{
key=17;
}
else
if ((PIND&BIT(5))==0) //检查第三列
{
key=20;
}
else
if ((PIND&BIT(6))==0) //检查第三列
{
key=23;
}
DDRB &= 0b11000111; //行变为输入,高电平
PORTB |= 0b00111000;
DDRD |= 0b01111000; //列变为输出,低电平
PORTD &= ~0b01111000;
delay_nms(30); //消抖
//检查行
if ((PINB & BIT(5))==0) //检查第一行
{
key -=13 ;
}
else if ((PINB & BIT(4))==0) //检查第二行
{
key -=12 ;
}
else if ((PINB&BIT(3))==0) //检查第三行
{
key -=11 ;
}
while (!((PINB&0B00111000)==0B00111000));//按键释放检查
DDRB |= 0b00111000; //行变为低电平
PORTB&= 0b11000111;
DDRD &= ~0b01111000; //列变为高电平
PORTD |= 0b01111000;
if (( key > 0 )&&( key < 13)) //如果获得正确的key值
Key_control((key-1)+0x30);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -