?? 2x8_key.c
字號:
/*---------------------------------------
2X8鍵盤掃描程序
M16的PA5~PA7接74HC138的A.B.C輸入端,74HC138的輸出端接鍵盤的8列
M16的PC6.PC7接鍵盤的2行
用定時器0定時中斷來進行鍵盤掃描,返回鍵值,不能多鍵同時按,不能長按
-----------------------------------------*/
//定義MCU與按鍵的接口
#include <avr/io.h>
#include "2X8_key.h"
#include "type.h"
#define key_SEL_PORT PORTA
#define key_SEL_DDR DDRA
#define key_PORT PORTC
#define key_DDR DDRC
#define key_PIN PINC
#define key_SELA PA5 //portA5
#define key_SELB PA6 //portA6
#define key_SELC PA7 //portA7
#define key_KIN0 PC6 //portC6
#define key_KIN1 PC7 //portC7
/*----------------------------------------------------------
key_init :按鍵相關端口初始化函數
輸入參數 :無
輸出參數 :無
作者 :ken
日期 :2007-08-15
--------------------------------------------------------------*/
void key_init(void)
{
key_SEL_DDR|=((1<<key_SELA)|(1<<key_SELB)|(1<<key_SELC)); //設置為輸出
key_SEL_PORT&=~(1<<key_SELA);
key_SEL_PORT&=~(1<<key_SELB);
key_SEL_PORT&=~(1<<key_SELC);
key_PORT|=((1<<key_KIN0)|(1<<key_KIN1)); //設置內部上拉電阻
key_DDR&=~(1<<key_KIN0); //設置為輸入
key_DDR&=~(1<<key_KIN1);
}
/*-------------------------------------------------------------------
key :按鍵掃描函數
輸入參數 :無
輸出參數 :鍵碼
作者 :ken
日期 :2007-08-15
---------------------------------------------------------------*/
unsigned char key(void)
{
unsigned char row; //col表示行,row表示列
for(row=0;row<8;row++)
{
key_SEL_PORT&=0x1f;
key_SEL_PORT|=(row<<5); //把row值送到高3位
if((key_PIN&(1<<key_KIN1))==0) //第二行有按鍵按下
{
return(10+row); //返回第二行鍵值10-17
}
if((key_PIN&(1<<key_KIN0))==0) //第一行有按鍵按下
{
return(row); //返回第一行鍵值00-07
}
}
return(9);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -