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