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

📄 key4x4.c

📁 一个很好的按键扫描程序
💻 C
字号:
#include <reg51.h>

sfr P4=0xe8;
sbit P42=P4^2;
sbit P43=P4^3;

#define DELAYTIME  40

sbit a=P0^0;
sbit b=P0^1;
sbit c=P0^2;
sbit d=P0^3;

char test[4]={0x7f,0xbf,0xdf,0xef};

void delay(unsigned long time)
{
 while(time--);
}

unsigned char code code_table[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; 
#define WEISHU 8     //修改该处可以做到不同位数的动态显示,本程序可以做到最多8个

/*************************
硬件描述
**************************/
#define WEI_LE P43 
#define DUAN_LE P42
/*************************
全局变量
**************************/
unsigned char xdata DISP[8];


/****************************************************************
* 将int型转换为4位BCD码
****************************************************************/
void bianhuan(unsigned long x)//
{
 unsigned long temp=x;
 DISP[0]=code_table[temp/10000000];temp=x%10000000;
 DISP[1]=code_table[temp/1000000] ;temp=x%1000000 ;
 DISP[2]=code_table[temp/100000]  ;temp=x%100000  ;
 DISP[3]=code_table[temp/10000]   ;temp=x%10000   ;
 DISP[4]=code_table[temp/1000]    ;temp=x%1000    ;
 DISP[5]=code_table[temp/100]     ;temp=x%100     ;
 DISP[6]=code_table[temp/10]      ;temp=x%10      ;
 DISP[7]=code_table[temp/1]       ;temp=x%1       ;
}

/*************************
Timer 0 定时中断处理
**************************/ //timer init
void initTimer(void)
{
 TMOD=0x01;
 TH0=0xef;
 TL0=0x80;
 TR0=1;
 ET0=1;
 EA=1;
} //timer0/counter0 interrupt

void timer0(void) interrupt 1
{
 static unsigned char wei=0;
 unsigned char weixuan=0x80;
 TH0=0xef;
 TL0=0x80;
 P1=DISP[wei];
 DUAN_LE=1;
 DUAN_LE=0;
 P1=(~(weixuan>>wei));
 WEI_LE=1;
 WEI_LE=0;
 wei++;
 if(wei>=WEISHU)
 wei=0;
} 


void LED_Disp(unsigned long dat)
{
 WEI_LE=0;
 DUAN_LE=0;//锁存复位
 EA=0;
 bianhuan(dat);
 EA=1;
}

void main()
{
 int i=0;

 P0=0xff;
 delay(400);
 initTimer();
 LED_Disp(0);
 while(1)
 {
  P0=0xff;
  for(i=0;i<4;i++)
  {
   P0=0xff;
   P0=P0&test[i];
   delay(DELAYTIME);
   if(a!=1) 
     {
      delay(DELAYTIME);
      if(a!=1)
      {
       LED_Disp((3-i)*4+1);
      }
     }
   if(b!=1) 
     {
      delay(DELAYTIME);
      if(b!=1)
      {
       LED_Disp((3-i)*4+2);
      }
     }
   if(c!=1) 
     {
      delay(DELAYTIME);
      if(c!=1)
      {
       LED_Disp((3-i)*4+3);
      }
     }
   if(d!=1) 
     {
      delay(DELAYTIME);
      if(d!=1)
      {
       LED_Disp((3-i)*4+4);
      }
     }
 }
}

while(1);
}

⌨️ 快捷键说明

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