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

📄 third.c

📁 键盘扫描及返回相关数据,只是读键盘与功能实现的一个接口函数
💻 C
字号:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include<stdio.h>
static     unsigned char style=0x00;//按键类型
unsigned char key_tag=0;
unsigned char key=0,key1=0;
int counter1=0,counter2=0;
//______________________________________________________
//初始化定时器T/C0
void T_INIT()
{
    ASSR|=(0<<AS0);//使用内部晶振 
    TCCR0|=(1<<CS02)|(1<<CS00);//128分频
    TCNT0=0xC0;//记数周期为1ms,F=1m
    TIMSK|=(1<<TOIE0);  //比较中断0允许
    SREG = 0x80; 
}

//初始化I/O口
void PORT_INIT()
{
   DDRC=0x00;
}
//定时器中断函数
SIGNAL(SIG_OVERFLOW0)
{
  TCNT0=0XC0;

 //对按键及按下时间进行分析
if(key_tag==0)//没有按键,对上次按键按下时间进行分析
{
 if(counter2>300)
 {
  switch(key1)
    {
	  case 0x01:
	      if(counter2>3000) style=15;
			break;//开关
      case 0x02:
	      if(counter2>300) style=16;
			break;//上翻
      case 0x03:
	      if(counter2>300) style=17;
			 break;//下翻
	  case 0x04:
	      if(counter2>300) style=18;
			 break;//确定
      case 0x05:
	        if(counter2>300) style=19;
			   break;//取消
      case 0x06:
	       if(counter2>3000) style=20;
			  break;//组合按键:取消键+确定键
      case 0x07:
	       if(counter2>3000) style=21;
			  break;//组合按键:开关键+上翻键
	  case 0x08:
	       if(counter2>3000) style=22;
			  break;//组合按键:开关键+下翻键
	  case 0x09:
	       if(counter2>3000) style=23;
			  break;//组合按键:开关键+确定键
	  case 0x10:
	       if(counter2>3000) style=24;
			 break;//组合按键:开关键+取消键
	  case 0x11:
	       if(counter2>3000) style=25;
			 break;//组合按键:上翻键+确定键
     default:break;//无按键按下
     }//end of switch
	 counter1=0;//清空计数器
	 counter2=0;
	 key=0;
	}//end of if
	}//end of if
	else
	  if(key1==key)//有键按下,并且是上一次检测到的按键
	  {
	    counter1++;
		if(counter1>7)//消除抖动
        {
	      counter2++; 
         }
	   }
	   else//有键按下,但不是上一次检测到的按键
	   {
	     key1=key;
	     counter1=0;
	     counter2=0;
	   }
} 

//读键盘
int key_read()
{
   unsigned char i;
   i=PINC&0X1f;   
   if(i==0x1e) key=0x01;//开关
     else if(i==0x1d) key=0x02;//上翻
	   else if(i==0x1b) key=0x03;//下翻
         else if(i==0x17) key=0x04;//确定
		  else if(i==0x0f) key=0x05;//取消
		    else if(i==0x07) key=0x06;//取消+确定组合键
			 else if(i==0x1c) key=0x07;//开关键及上翻键组合
               else if(i==0x1a) key=0X08;//开关键及下翻键组合
                  else if(i==0x16) key=0X09;//开关键及确定键组合
					else if(i==0x0e) key=0X10;//开关键及取消键组合
					  else if(i==0x15) key=0X11;//上翻键及确定键的组合
                        else key=0;
   return(key);
}
//扫描键盘
void key_scan(void)
{
   
   if(key_read())
     key_tag=1;
	 else key_tag=0;//有按键按下,标志位置1,否则为0
}
//主函数
int main()
{
   PORT_INIT();
   T_INIT();
   sei();
   key1=key;
   while(1)
    {
      key_scan();
    }
}

⌨️ 快捷键说明

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