?? 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 + -