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

📄 keypad._c

📁 ATmegal128的混合中断编程
💻 _C
字号:
#include <iom128v.h>
/*键盘扫描函数,没有键按下返回0x7f*/
/*如果shift按下,返回值最高位为1*/
extern void delay_ms(unsigned int time);
unsigned char scan_key(void)
   {
    unsigned char i,temp;
    unsigned shift=0;
    DDRB=0x0f;	
	PORTB=0xff;	  
    for (i=0;i<4;i++)
        {
         PORTB=~(1<<i); //键盘线扫描
         delay_1ms();   //等待低电平稳定
         temp=PINB&0xf0;//读取键盘扫描信号,屏蔽低四位
         if ((PIND&0x20)==0) temp|=01;//检查shift键
         if (temp!=0xf0)//如果有键按下,延时10ms消抖
            {           //本程序用display代替10ms延时,
             delay_ms(5); //可消除显示抖动
             temp=PINB&0xf0;//再读键盘
             if ((PIND&0x20)==0) //检查shift键
                {
                 temp|=01;
                 shift=1;
                }
             if (temp!=0xf0)
                {
                 temp&=0xf0;
                 switch (temp) //计算键值
                     {
				      case 0x70:temp=15-(3-i)*4;break;
                      case 0xb0:temp=14-(3-i)*4;break;
                      case 0xd0:temp=13-(3-i)*4;break;
                      case 0xe0:temp=12-(3-i)*4;break;
                      default:temp=0x7f;					 
                      }
                 if (shift==1) temp|=0x80; 
                 return temp;
                 }		 
       	     }
         PORTB=0xff;	 
        }
    return 0x7f;			 
    }
unsigned char keypad(void)
    {
	 unsigned char temp1,temp2;
	 temp1=scan_key();
	 if (temp1==0x7f) return 0x7f;
	 do
	   temp2=scan_key();
	 while (temp1==temp2);
	 return temp1;	 
	}		  	

⌨️ 快捷键说明

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