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

📄 keyboard.c

📁 线反转法矩阵键盘扫描驱动七段数码LED --线反转法比普通矩阵键盘扫描算法精简许多
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
sbit ENDIS=P0^7;    //LED显示输出
sbit ENLED=P0^6;   //LED共极使能
sbit SPK=P2^7;    //喇叭输出脚

delay(int z)  //延时子程序
 { int x,y;
   for (x=z;x>0;x--)
   for (y=140;y>0;y--); 
 }

 void yin()	 	 //喇叭驱动子程序
 { 
  int i,j;
   for(i=0;i<80;i++)
   {				   
   for(j=0;j<50;j++);   //延时
      SPK=~SPK;       //取反输出到喇叭的信号
   }
   
 }
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};	//LED段码

void main()
{uchar x,y,z,num;
  num=16;
  ENLED=1;
  P2=0X00;
  ENLED=0;
  ENDIS=1;
  P1=table[num];
  ENDIS=0;
  while(1)
  {	P3=0xff;
    P3=0x0f; 
    if(P3!=0x0f)
	  { delay(5);
	    if(P3!=0x0f)
	    {  
           x=P3;          //保存行扫描时有键按下时状态
           P3=0xf0;       //列扫描
           y=P3;          //保存列扫描时有键按下时状态
           z=x|y;         //取出键值
           switch ( z )   //判断键值(哪一个键按下)
           {
            case 0xee: num=0; break; //对键值赋值
            case 0xde: num=1; break; 
            case 0xbe: num=2; break; 
            case 0x7e: num=3; break; 
            case 0xed: num=4; break; 
            case 0xdd: num=5; break; 
            case 0xbd: num=6; break; 
            case 0x7d: num=7; break; 
            case 0xeb: num=8; break; 
            case 0xdb: num=9; break;     
            case 0xbb: num=10;break; 
            case 0x7b: num=11;break; 
            case 0xe7: num=12;break; 
            case 0xd7: num=13;break; 
            case 0xb7: num=14;break; 
            case 0x77: num=15;break; 
           }   
		    while((P3&0xf0)!=0xf0);	 //等待键位释放
			yin();
		    ENLED=1;
            P2=0X00;
            ENLED=0;
            ENDIS=1;
            P1=table[num];
            ENDIS=0;
		 }
		 		
	 }

  }
}

⌨️ 快捷键说明

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