⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 io复用.c

📁 ... .. 单片机接口技术实用子程序
💻 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 + -