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

📄 main.c

📁 基于51系列单片机的一个移位显示矩阵键盘源码
💻 C
字号:
#include <reg51.h>
#include <absacc.h>
//code ledyang[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
//                  0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};     //0~9,A~F
unsigned char code seg_7[]={//定义数码管字型数据
    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,  //0123456789
    0x77,0x7C,0x39,0x5E,0x79,0x71,  //AbCdEF
    0x40,   //-
    0x00    //空白
};
unsigned char code choose[]={0xfe,0xfd,0xfb,0xf7}; //位选
unsigned char data counter[]={0,0,0,0};
unsigned char data buffer[]={0,0,0,0};
unsigned char k, c=0;
unsigned int num=0,KT=0;	 
void delay(unsigned char m)
   {
    	unsigned char i,j;
		  for(i=0;i<m;i++)
		    for(j=0;j<120;j++);
	  }
void getch()
{
	 unsigned char X,Y,Z,cc;
	  P2=0xff;
	  P2=0x0f; //行置1
	  if(P2!=0x0f) //可能有键按下
	  {
	   delay(20);
	   if(P2!=0x0f) //确实有键按下
	    {
	     X=P2;     //保存P2的值
		 P2=0xf0;	//列置1
		 Y=P2;
		 Z=X|Y;	 //取键盘值
		 c++;		//标志位
		 //if(c==17) c=0;
		 if(c==17) c=0;
		 switch(Z)
		  {
		    case 0x7e: k=0;break;
		    case 0x7d: k=1;break;
		    case 0x7b: k=2;break;
		    case 0x77: k=3;break;
		    case 0xbe: k=4;break;
		    case 0xbd: k=5;break;
		    case 0xbb: k=6;break;
		    case 0xb7: k=7;break;
		    case 0xde: k=8;break;
		    case 0xdd: k=9;break;
		    case 0xdb: KT=10;break;
		    case 0xd7: KT=11;break;
		    case 0xee: KT=12;break;
		    case 0xed: KT=13;break;
		    case 0xeb: KT=14;break;
		    case 0xe7: KT=15;break;						 
		   }

		 for(cc=c;cc-1>0;cc--)
  		   counter[cc-1]=counter[cc-2];
		   counter[0]=k; 

		 while(P2!=0xf0);//检测案件是否弹起
	    }
    }
 }

void display_number()
   {
    unsigned char i;
    for(i=0;i<4;i++)
     {   					
     P0=seg_7[counter[i]];
	 P1=choose[i];
	 delay(1);
	 P1=0xff;
     }
}	

void display()
{
 unsigned int i;
 num=counter[0]*1000+counter[1]*100+counter[2]*10+counter[3];
 buffer[0]=num/1000;   buffer[1]=num%1000/100;
 buffer[2]=num%100/10; buffer[3]=num%10;
 for(i=0;i<4;i++)
 { 
  num--;
  P0=seg_7[buffer[i]];
  P1=choose[i];
  delay(1);
  P1=0xff;
  
 }
} 
   
void main(void)
 {
   while(1)
    {	
	unsigned char c=0;
	P2=0xff;
	getch();
	display_number();
	if(KT>=10&&KT<=15) 
	  goto loop;
      } 
	  loop:
      while(1)
       {
        display();
       }	
}

⌨️ 快捷键说明

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