标题: 单片机矩阵按键检测数码管显示示例(Proteus仿真电路,C语言程序代码) [打印本页]

作者: abba    时间: 2020-12-1 22:15
标题: 单片机矩阵按键检测数码管显示示例(Proteus仿真电路,C语言程序代码)
矩阵按键检测示例(Proteus仿真电路,C语言程序代码)
4X4矩阵按键
按键检测按键分别从0~F
数码管显示
下面是Proteus仿真电路


(注:没画最小系统)
上图为E按键按下后

下面为C语言程序
#include<reg51.h>
char  seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
//共阳极断码表
unsigned num=16;

void delay(unsigned int n)
{
  unsigned i=0,j=0;
   for(i=0;i<n;i++)
   {
       for(j=0;j<120;j++);
   }
}

void key_scan()
{
unsigned char temp=0,temp0=0,temp1=0;
P1=0xf0;
  if(P1!=0xf0)
  {
     delay(20);
     temp0=P1;
     P1=0x0f;
     if(P1!=0x0f)
     {
         temp1=P1;
     }
  }
  temp=temp0+temp1;
  if(temp==0xee)
     num=0;
  if(temp==0xed)
     num=1;
  if(temp==0xeb)
     num=2;
  if(temp==0xe7)
     num=3;
  if(temp==0xde)
     num=4;
  if(temp==0xdd)
     num=5;
  if(temp==0xdb)
     num=6;
  if(temp==0xd7)
     num=7;
  if(temp==0xbe)
     num=8;
  if(temp==0xbd)
     num=9;
  if(temp==0xbb)
     num=10;
  if(temp==0xb7)
     num=11;
  if(temp==0x7e)
     num=12;
  if(temp==0x7d)
     num=13;
  if(temp==0x7b)
     num=14;
  if(temp==0x77)
     num=15;
}

void dis_play()
{
  P2=seg[num];
}

void main()
{
  while(1)
  {
     key_scan();
     dis_play();
   }
}



下面有仿真电路和程序
矩阵按键.zip (27.05 KB, 下载次数: 43)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1