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

📄 read_key.c

📁 一个新颖的乐器.我参加西电星火杯的作品.里面有详细的.doc说明
💻 C
字号:
#include <iom8v.h> 
#include <macros.h>
/////////////////////////////////////read_key
#define sampling_times 2 //定义取样的次数,连续次数的取样值相同,视为有效取样。
#define sampling_interval 10  //定义每次取样的时间间隔,单位 us.
#define sapleing_way 8  //定义多少路采样。最大值为8。PB为输入.
typedef struct
{  unsigned int v_last;                  //上一次sampling_times个取样值的结果
  unsigned int v_current;               //当前sampling_times个取样值的结果
  unsigned int v[sampling_times];         //存放连续sampling_times次的取样值
  unsigned int v_temp;                    //存放比较的临时值,为1时有效,0时无效
} inputStruct;

void delay_nus(unsigned int n);            //延时函数,单位 us.
char READ_KEY(void)                            //主函数
{  
  unsigned int i;
  unsigned int j;
  inputStruct pb_input[sapleing_way];
     
  
  
	//以下的for循环,将连续sampling_times次的取样结果存放在相应的数组里
    for (i=0;i<sampling_times;i++)
	{
	    delay_nus(sampling_interval);           //每隔sampling_interval取样一次
		for(j=0;j<sapleing_way;j++)
		{
		 pb_input[j].v[i]=PINB&BIT(j);
		}		
	}


	//以下的for循环,判断连续sampling_times次的取样结果是否有效
    for(j=0;j<sapleing_way;j++)
    {
	   for (i=1;i<sampling_times;i++) 
	   {
	    if (pb_input[j].v[i-1]==pb_input[j].v[i])  //如果sampling_times次取样结果均相同,视为有效
		  pb_input[j].v_temp=1;           //sampling_times次取样有效的标志
	    else                  //否则舍弃,不作处理。
	      {
		   pb_input[j].v_temp=0;           //sampling_times次取样无效,不作处理
		   break;
		  }
 	   }
    }
	return(PINB);
	
}  // end main()


    void delay_nus(unsigned int n)//n微秒延时函数
    {
      unsigned int i;
      for (i=0;i<n;i++)
      {
          asm("nop");
      }
    }

/////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -