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

📄 sw.c

📁 AVR单片机按键处理应用
💻 C
字号:
/*********************************
*     按键应用例子   *
* 实验环境:M128   *
* 接线方式:RS=PD.0,E=PC.2   *
*           Db0-Db7=PB0-PB7   *
* 作    者:tonghe     *
* 日    期:2007年03月06日   *
* 版    本:V1.2     *
* 修改日期:2007年08月11日   *
* 编 译 器:ICCAVR6.31A    *
*********************************/
#include <iom128v.h>
#include "stdio.h"
#include <macros.h>

#define uchar unsigned char
#define uint unsigned int

//延时子程序
void delay(uchar x)
{
 uchar j;
 while((x--)!=0)
 {
 for(j=0;j<125;j++)
 {;}
}

//判断是否有键按下
keypressed()
 {
 uchar key;
 key=PINB;
 key=key|0xf0;
 if(key==0xff)
 			 x=0;
 else
  	 		x=1;
 }
 
 //键盘扫描子程序
 keyscan()
 {
  uint key=0;
  delay(15);//延时消除抖动
  if((keypressed())==1)//判断是否有键按下
  {
   key=PINB;
   key=key|0xf0;
   if(key==0xfe)
   		{ key=1;}
   else if(key==0xfd)
   		{ key=2;}
   else if(key==0xfb)
   		{ key=3;}
   else if(key==0xf8)
   		{ key=4;}
   else 
   		{ key=0;}
  }
  do
  {
  }
  while((keypressed())==1);//等待键释放
  delay(15);//延时消除抖动
 }
 // return key;
 }
 
 //主程序
 main()
 {
  uchar keycode;
  DDRB&=~BIT(PB0);
  DDRB&=~BIT(PB1);
  DDRB&=~BIT(PB2);
  DDRB&=~BIT(PB3);
  do{
  	 if((keypressed())==1)
	 keycode=keyscan();
	 switch(keycode)
	 {
	  case 1:
	  	   DDRE&=BIT(PE0);
	  case 2:
	  	   DDRE&=BIT(PE1);
	  case 3:
	  	   DDRE&=BIT(PE2);
	  case 4:
	  	   DDRE&=BIT(PE3);
	  case 0:
	  	   break;
	 }
  }while(1);
 } 

⌨️ 快捷键说明

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