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

📄 keypad.c

📁 89c51平台实现4*4小键盘的扫描
💻 C
字号:
#include <REGX51.h>
#include <intrins.h>
#include <keypad.c>
void yanshi (unsigned int ms)
{
	unsigned char i,j;
	for(i=0;i<ms;i++)
		for(j=0;j<100;j++)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
}
/*code char key_code[]={0x7E,0XBE,0XBD,0XBB,0XDE,0XDD,0XDB,0XEE,0XED,0XEB,0X7D,0X7B,0XE7,0XD7,0XB7,0X77};
code ksp[4]={0x7F,0xBF,0xDF,0xEF};

void delay (void)  {                  
  unsigned char i,j;                  
     for (i=0;i<3;i++)
          for(j=0;j<255;j++)
          ;
}
char keypad_scan()
{
    char key,i;
    P3=0xF0;
    while (P3!=0xF0);
      do{
       for(i=0;i<=3;i++)
       {         
           P3=ksp[i];
           if(P3!=ksp[i])
           {
              delay();
              key=P3;
              if(key!=ksp[i])
              {
                  return(key);
              }
           }
       }
    } while(1);														
}
// 检查是否有按键按下
char gotkey()
{
     char temp,i;
     temp=keypad_scan();
     for (i=0;i<=15;i++) {
          if(temp==key_code[i]) return(i);
     }
     return(16);
}
  */


#define TIMER0_COUNT 0xEE11 /* 10000h-((12,000,000/(12*200))*/
code seven_seg[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};
code scan[4]={0X07,0X0B,0X0D,0X0E};
unsigned char counter[4]={0,0,0,0};
unsigned char timer0_tick,k=3;
static void timer0_isr(void) interrupt TF0_VECTOR using 1
{
  TR0=0;
  TL0=(TIMER0_COUNT & 0x00FF);
  TH0=(TIMER0_COUNT >> 8);
  TR0=1;
  
  P1=seven_seg[counter[k]];
  P0=scan[k];
  yanshi(1);
  P0=0xff;
  k--;
  if(k==-1) k=3;
  timer0_tick++;
  if (timer0_tick==200) timer0_tick=0;
}
static void timer0_initialize(void)
{
  EA=0;
  timer0_tick=0;
  TR0=0;
  TMOD &= 0XF0;
  TMOD |=0x01;
  TL0=(TIMER0_COUNT & 0x00FF);
  TH0=(TIMER0_COUNT >> 8);
  PT0=0;
  ET0=1;
  TR0=1;
  EA=1;
}
void main (void)  
{
  unsigned char ch,c;
  timer0_initialize();
  do{
    ch=gotkey();
    for(c=3;c>0;c--)
        counter[c]=counter[c-1];
        counter[0]=ch;
    }while(1);
}

⌨️ 快捷键说明

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