北京中科白癜风医院优惠活动 http://baidianfeng.39.net/a_yufang/171022/5781298.html

实验准备

STC90C51单片机一台P2GPIO口短接矩阵键盘JP4GPIOP0短接动态数码管控制端短接译码器和动态数码管即J15和J16实验程序

voidMatrixKeyTest(){  chara=0;  intv;  KEY=0x0f;//高四位为0  if(KEY!=0x0f){//设置为高四位0,底全是1,读取一下看是不是  Delay(10);    if(KEY!=0x0f){//消抖完,再次确认一下    KEY=0x0f;//重新开始测试,列    switch(KEY){    case(0x07):v=0;break;    case(0x0b):v=1;break;case(0x0d):v=2;break;case(0x0e):v=3;break;    }    KEY=0xf0;//行    switch(KEY){    case(0x70):v=v;break;    case(0xb0):v=v+4;break;case(0xd0):v=v+8;break;case(0xe0):v=v+12;break;    }    //留大概半秒左右的松手检测,代表着半秒按键间歇,不会变化状态,实际上也不需要,因为不检测,只不过会继续循环而已    while(a50KEY!=0xf0){      Delay(20);a++;    }    while(KEY==0xf0){      LedOn2(1,(v+1)%10);if(v+19){    LedOn2(0,(v+1)/10);}    }}  }}

实验程序讲解

矩阵键盘采用行列式扫描,获得案件的序号,即程序中的v。详细过程:先经过列扫描,得到v列有按钮被选中。然后进行行扫描,得到某行按钮被按下。将列加上行*4(因为每一行一共四个按钮)即得到按钮的序号。按钮的序号通过LedOn2函数点亮动态数码管。 个参数代表点亮第几个数码管。第二个参数代表具体的数值。详细代码如下:

voidLedOn2(inti,intj){switch(i){  case(0):LSA=0;LSB=0;LSC=0;break;//显示第0位      case(1):        LSA=1;LSB=0;LSC=0;break;//显示第1位      case(2):        LSA=0;LSB=1;LSC=0;break;//显示第2位case(3):        LSA=1;LSB=1;LSC=0;break;//显示第3位      case(4):        LSA=0;LSB=0;LSC=1;break;//显示第4位      case(5):        LSA=1;LSB=0;LSC=1;break;//显示第5位      case(6):        LSA=0;LSB=1;LSC=1;break;//显示第6位      case(7):        LSA=1;LSB=1;LSC=1;break;//显示第7位  }DIG=DIG_CODEHEX[j];j=10;while(j--);DIG=0x00;}

其中LSA、LSB、LSC代表着译码器的sbit,可以根据需要自己定义对应的GPIO口。 一行是为了消隐,防止当前代码显示到其他的数码管上,可以自己做实验观察差别。

附录

数码管位码:

unsignedcharcodeDIG_CODEHEX[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};



转载请注明地址:http://www.abmjc.com/zcmbwh/1729.html