?? 程序掃描(線反轉(zhuǎn)).c
字號:
//-----------------------函數(shù)聲明,變量定義--------------------------------------------------------
#include <reg51.h>
#define KEY P1
//-----------------------變量聲明---------------------------------------------------------------------
void program_SCANkey(); //程序掃描鍵盤,供主程序調(diào)用
void delay(unsigned int N) ;//延時子程序,實現(xiàn)(16*N+24)us的延時
bit judge_hitkey(); //判斷是否有鍵按下,有返回1,沒有返回0
unsigned char scan_key(); //掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
void key_manage(unsigned char keycode); //鍵盤散轉(zhuǎn)
void manage_key1(void); //按鍵1處理程序
void manage_key2(void); //按鍵2處理程序
void manage_key3(void); //按鍵3處理程序
void manage_key4(void); //按鍵4處理程序
//...........每個按鍵對應(yīng)一個處理程序,這里
//-------------------------------- ------------------------------------------------------------------
// 函數(shù)名稱: program_SCANkey
// 函數(shù)功能: 程序掃描鍵盤,
// 有鍵按下完成按鍵處理,無鍵按下直接返回
//--------------------------------------------------------------------------------------------------
void program_SCANkey()
{
unsigned char key_code;
if(judge_hitkey()) //判斷是否有鍵按下
{
delay(1000); //延時20ms左右,消除抖動干擾
if(judge_hitkey()) //判斷是否有效按鍵
{
key_code=scan_key();
while(judge_hitkey()); //等待按鍵釋放
key_manage(key_code); //鍵盤掃描、鍵盤散轉(zhuǎn)、按鍵處理
}
}
}
//-------------------------------- ------------------------------------------------------------------
// 函數(shù)名稱: delay
// 入口參數(shù): N
// 函數(shù)功能:延時子程序,實現(xiàn)(16*N+24)us的延時
// 系統(tǒng)采用11.0592MHz的時鐘時,延時滿足要求,其它情況需要改動
//--------------------------------------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: system_init()
// 函數(shù)功能: 初始化設(shè)置
// 設(shè)定INT0、INT1及T0、T1的工作方式
//--------------------------------------------------------------------------------------------------
/* void system_init(void )
{
TMOD=0x55; //定時器1和定時器0工作在方式1,的計數(shù)模式
TR0=1; //定時器1和定時器0開始計數(shù)
TR1=1;
ET0=1; //定時器1和定時器0中斷允許
ET1=1;
IT1=0; //選擇INT0和INT1為電平觸發(fā)方式
IT0=0;
EX0=1; //外部中斷允許
EX1=0;
EA=1; //系統(tǒng)中斷允許
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: INT0_intrupt
// 函數(shù)功能: 外部中斷0處理程序
//--------------------------------------------------------------------------------------------------
void INT0_intrupt() interrupt 0 using 1
{
EA=0; //系統(tǒng)中斷禁止
delay(1000); //鍵盤消抖動
if(INT_0==0) //判斷是否干擾
{ //的確有健按下
while(INT_0==0);//等待鍵盤釋放
delay(1000); //鍵盤消抖動
manage_key1();
}
EA=1;
}*/
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: judge_hitkey
// 函數(shù)功能: //判斷是否有鍵按下,有返回1,沒有返回0
//--------------------------------------------------------------------------------------------------
bit judge_hitkey() //判斷是否有鍵按下,有返回1,沒有返回0
{
unsigned char scancode,keycode;
scancode=0x0F; //P1.4~P1.7輸出全1則無鍵閉合
KEY=scancode;
keycode=KEY; //讀P1.0~P1.3的狀態(tài)
if(keycode==0x0F)
return(0); //全1則無鍵閉合
else
return(1); //否則有鍵閉合
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: scan_key
// 函數(shù)功能: //掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
//--------------------------------------------------------------------------------------------------
unsigned char scan_key() //掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
{
unsigned char scancode,keycode,keycode_line,keycode_row;
scancode=0xF0; //列置低,行置高
KEY=scancode; //輸入掃描碼,掃描行
keycode_line=KEY;
scancode=0xF0; //列置高,行置低
KEY=scancode; //輸入掃描碼,掃描列
keycode_row=KEY;
keycode(((keycode_line<<4)&0xF0)|(keycode_row&0x0F));
return(keycode);
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: key_manage
// 入口參數(shù): keycode 掃描鍵盤返回的鍵值(高四位代表行,低四位代表列)
// 函數(shù)功能: 鍵盤散轉(zhuǎn)
//--------------------------------------------------------------------------------------------------
void key_manage(unsigned char keycode)
{
switch(keycode)
{
case 0x11:manage_key1();break;
case 0x12: manage_key2();break;
case 0x14: manage_key3();break;
case 0x18: manage_key4();break;
case 0x21:manage_key5();break;
case 0x22: manage_key6();break;
case 0x24: manage_key7();break;
case 0x28: manage_key8();break;
case 0x41:manage_key9();break;
case 0x42: manage_key10();break;
case 0x44: manage_key11();break;
case 0x48: manage_key12();break;
case 0x81:manage_key13();break;
case 0x82: manage_key14();break;
case 0x84: manage_key15();break;
case 0x88: manage_key16();break;
// default:
}
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: manage_key1
// 函數(shù)功能: 按鍵1處理程序
//--------------------------------------------------------------------------------------------------
void manage_key1(void)
{
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -