用实验板TX-1C 实现矩阵键盘输入 但第一行总是采不到

2019-07-15 20:39发布


我用的是TX-1C的实验板 在做书上的习题 题目如下:实验板上电后 按顺序按下矩阵键盘后 在数码管上依次显示0~F,也就是说 4×4的键盘 与16个数 一对一对应 并且最终显示在数码管上。-----------  我自己写的程序 2,3,4横排的键盘显示正常 但只有第一横排的四个按键 按下去没有任何反应。求哪位高手帮我解解惑  谢谢!  程序如下:


#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit h1=P3^0;   //h1是第一横排
sbit h2=P3^1;   
sbit h3=P3^2;   
sbit h4=P3^3;   
sbit l1=P3^4;   //l1是第一竖列
sbit l2=P3^5;  
sbit l3=P3^6;   
sbit l4=P3^7;
sbit wela=P2^7;
sbit dula=P2^6;
uchar num,aa;
uchar code table[]={  //  0~F的数组
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void main()
{
  TMOD=0x11;
  TH0=(65536-600)/256;
  TL0=(65536-600)%256;
  TH1=(65536-600)/256;
  TL1=(65536-600)%256;
  EA=1;
  ET0=1;
  ET1=1;
  TR0=1;
  TR1=1;
  aa=0;
     P0=0xff;      
     wela=1;
     P0=0x00;    //开启数码管的位选
     wela=0;
     P0=0x00;    //清零
  while(1)
   {
     dula=1;
     P0=table[num];   // 数码管显示
     dula=0;
    }
}

void T0_timer() interrupt 3
{
  TH1=(65536-600)/256;
  TL1=(65536-600)%256;   
   aa++;
   if(aa==1)            //第一次中断时 给第一横排 一个低电平 其它横排为高电平
    {                 
     h1=0;
     h2=1;
     h3=1;
     h4=1;

    }
   if(aa==2)            //第二次中断时 给第二横排 一个低电平 其它横排为高电平
    {
     h1=1;
     h2=0;
     h3=1;
     h4=1;

    }
   if(aa==3)             //第三次中断时 给第三横排 一个低电平 其它横排为高电平
    {
     h1=1;
     h2=1;
     h3=0;
     h4=1;

     }
   if(aa==4)             //第四次中断时 给第四横排 一个低电平 其它横排为高电平
    {
     h1=1;
     h2=1;
     h3=1;
     h4=0;

     aa=0;                //aa清零 一边下一次中断来临时 从第一排开始
    }
}

void T1_timer() interrupt 1
{
  TH0=(65536-600)/256;
  TL0=(65536-600)%256;
   if(l1==0)                         //当中断连临时 检测第一竖列 有无低电平
     {                           //若有低电平 则继续判断 是哪一横排有低电平      
      if(h1==0)                     //从而确定是哪个按键
        {num=0;while(!l1);}
      if(h2==0)
        {num=4;while(!l1);}
      if(h3==0)
        {num=8;while(!l1);}
      if(h4==0)
        {num=12;while(!l1);}       //之后的3个if语句 都是跟第一句 同样的思路   
     }

   if(l2==0)
     {
      if(h1==0)
        {num=1;while(!l2);}
      if(h2==0)
        {num=5;while(!l2);}
      if(h3==0)
        {num=9;while(!l2);}
      if(h4==0)
        {num=13;while(!l2);}      
     }

   if(l3==0)
     {
      if(h1==0)
        {num=2;while(!l3);}
      if(h2==0)
        {num=6;while(!l3);}
      if(h3==0)
        {num=10;while(!l3);}
      if(h4==0)
        {num=14;while(!l3);}      
     }

   if(l4==0)
     {
      if(h1==0)
        {num=3;while(!l4);}
      if(h2==0)
        {num=7;while(!l4);}
      if(h3==0)
        {num=11;while(!l4);}
      if(h4==0)
        {num=15;while(!l4);}      
     }
}


来自小组: 电路分析设计
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。