📄 intkeyboard_1.c
字号:
/**********************************************
* File: IntKeyboard_1.C
* Description: Int Array Keyboard Interface Example
* Created Date: 2007-10-01
* Last Modified: 2007-10-01
* Author: Jeffrey - Schicksal@126.com
* Notes: None
**********************************************/
#include "Atmel/AT89X51.h"
volatile unsigned char Row, Column;
/**********************************************
* Function: delay(unsigned int t)
* Input Variables: t
* Return Variables: None
* Usage: Common Delay Routine, t as the delay time ticks
**********************************************/
void delay(unsigned int t)
{
for(;t>0;t--); // 延时循环
}
/**********************************************
* Function: main()
* Input Variables: None
* Return Variables: None
* Usage: Program Entry
*********************************************/
#define ROW_DETECT_1 0xfff0
#define ROW_DETECT_2 0xff0f
#define ROW_DETECT_3 0xf0ff
#define ROW_DETECT_4 0x0fff
#define COLUMN_DETECT_1 0xeeee
#define COLUMN_DETECT_2 0xdddd
#define COLUMN_DETECT_3 0xbbbb
#define COLUMN_DETECT_4 0x7777
void main()
{
unsigned char LED_Status = 0xff; // 定义键值
IT0 = 1; // 设置下降边沿触发中断
EX0 = 1; // INT0中断使能
EA = 1; // 全局中断使能
while(1)
{
LED_Status = Column + Row;
P0 = ~LED_Status;
delay(100);
// 点亮相应的LED灯
//********************主程序部分*********************//
// Add your code here
//********************主程序部分*********************//
}
}
/**********************************************
* Function: Scan_Keyboard
* Input Variables: None
* Return Variables: None
* Usage: Interrupt Routine
*********************************************/
void Scan_Keyboard(void) interrupt IE0_VECTOR // 中断向量
{
unsigned int Keys_Value; // 定义键值变量
IE0 = 0; // 清除中断标志位
P2 = 0xf7; // 第四行置低,准备读取按键状态
Keys_Value = P2>>4; // 读取按键状态
Keys_Value <<= 4; // 移位
P2 = 0xfb; // 第三行置低,准备读取按键状态
Keys_Value += P2>>4; // 读取按键状态
Keys_Value <<= 4; // 移位
P2 = 0xfd; // 第二行置低,准备读取按键状态
Keys_Value += P2>>4; // 读取按键状态
Keys_Value <<= 4; // 移位
P2 = 0xfe; // 第一行置低,准备读取按键状态
Keys_Value += P2>>4; // 读取按键状态
// 判断行列位置
if(~(Keys_Value | ROW_DETECT_1))
{
Row = 1; // 第一行
}
else if(~(Keys_Value | ROW_DETECT_2))
{
Row = 2; // 第二行
}
else if(~(Keys_Value | ROW_DETECT_3))
{
Row = 4; // 第三行
}
else if(~(Keys_Value | ROW_DETECT_4))
{
Row = 8; // 第四行
}
if(~(Keys_Value | COLUMN_DETECT_1))
{
Column = 0x10; // 第一列
}
else if(~(Keys_Value | COLUMN_DETECT_2))
{
Column = 0x20; // 第二列
}
else if(~(Keys_Value | COLUMN_DETECT_3))
{
Column = 0x40; // 第三列
}
else if(~(Keys_Value | COLUMN_DETECT_4))
{
Column = 0x80; // 第四列
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -