?? io復用.c
字號:
//-----------------------函數聲明,變量定義--------------------------------------------------------
#include <reg51.h>
sbit KEY_1 =P1^0; // 將p1.0定義為KEY_1
sbit KEY_2 =P1^1; // 將p1.1定義為KEY_2
sbit KEY_3 =P1^2; // 將p1.2定義為KEY_3
#define KEY P1
//-----------------------變量聲明---------------------------------------------------------------------
unsigned char manage_KEY(); //完成按鍵消抖得鍵盤處理程序,供主程序調用
unsigned char SScan_key(); //掃描查詢子程序
void delay(unsigned int N) ;//延時子程序,實現(16*N+24)us的延時
//-------------------------------- ------------------------------------------------------------------
// 函數名稱: SScan_key
// 返回值: 有按鍵按下返回鍵值,無按鍵按下返回0xFF
// 函數功能:延時子程序,實現(16*N+24)us的延時
// 系統采用11.0592MHz的時鐘時,延時滿足要求,其它情況需要改動
//--------------------------------------------------------------------------------------------------
unsigned char SScan_key()
{
unsigned KEY_value;
KEY_1=1;
KEY_2=1;
KEY_3=1;
KEY_value=(KEY&0x07); //按鍵查詢
if(KEY_value==0x07) //S0~S6無鍵按下
{
KEY_1=0;
KEY_value=(KEY&0x06);
switch(KEY_value)
{
case 0x00: KEY_value=7;break; //KEY_2、KEY_3均為0
case 0x02: KEY_value=11;break; //KEY_2為1、KEY_3為0
case 0x04: KEY_value=14;break; //KEY_2為0、KEY_3為1
default: KEY_value=0xFF;
}
KEY_2=0;
KEY_value=(KEY&0x05);
switch(KEY_value)
{
case 0x00: KEY_value=10;break; //KEY_1、KEY_3均為0
case 0x01: KEY_value=8;break; //KEY_1為1、KEY_3為0
case 0x04: KEY_value=15;break; //KEY_1為0、KEY_3為1
default: KEY_value=0xFF;
}
KEY_3=0;
KEY_value=(KEY&0x03);
switch(KEY_value)
{
case 0x00: KEY_value=13;break; //KEY_1、KEY_2均為0
case 0x01: KEY_value=9;break; //KEY_1為1、KEY_2為0
case 0x02: KEY_value=12;break; //KEY_1為0、KEY_2為1
default: KEY_value=0xFF;
}
}
return(KEY_value);
}
//-------------------------------- ------------------------------------------------------------------
// 函數名稱: manage_KEY()
// 函數功能: 供主程序調用鍵盤處理程序
// 如果有鍵按下,定時消抖,如果是有效按鍵返回鍵值,無效按鍵返回0xFF
//--------------------------------------------------------------------------------------------------
unsigned char manage_KEY()
{
unsigned char key_value;
key_value=SScan_key();
if(key_value<=0x0f)
delay(1000);
if(key_value!=SScan_key())
key_value=0xFF;
return(key_value);
}
//-------------------------------- ------------------------------------------------------------------
// 函數名稱: delay
// 入口參數: N
// 函數功能:延時子程序,實現(16*N+24)us的延時
// 系統采用11.0592MHz的時鐘時,延時滿足要求,其它情況需要改動
//--------------------------------------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -