按下16个矩阵键盘依次在数码管上显示1-16的平方,基于STC

2019-07-17 09:18发布

<div>#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
                    0x66,0x6f,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x77,
                                        0x39,0x5e,0x79,0x71};
uchar bai,shi,ge,num;
void delayms(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
      for(j=110;j>0;j--);
}
void display(uchar bai,uchar shi,uchar ge,uchar num)
{
   dula=1;
   P0=table[bai];
   dula=0;
   P0=0xff;
   wela=1;
   P0=0xfe;
   wela=0;
   delayms(500);
   dula=1;
   P0=table[shi];
   dula=0;
   P0=0xff;
   wela=1;
   P0=0xfd;
   wela=0;
   delayms(500);
   dula=1;
   P0=table[ge];
   dula=0;
   P0=0xff;
   wela=1;
   P0=0xfb;
   wela=0;
   delayms(500);
}
void keyscan()
{
   uchar temp,key;
   P3=0xfe;                                 
   temp=P3;
   temp=temp&0xf0;
   if(temp!=0xf0)
   {
      delayms(10);
          temp=P3;
          temp=temp&0xf0;
          if(temp!=0xf0)
          {
                  temp=P3;
                  switch(temp)
                  {
                     case 0xee:    key=0;
                                       break;
                         case 0xde:    key=1;
                                       break;
                         case 0xbe:    key=2;
                                       break;
                         case 0x7e:    key=3;
                                       break;
                  }
                  while(temp!=0xf0)
                  {
                     temp=P3;
                         temp=temp&0xf0;
                  }
                   key=key*key;
                   display(key);
     }
   }
           P3=0xfd;
           temp=P3;
           temp=temp&0xf0;
           if(temp!=0xf0)
           {
              delayms(10);
                  temp=P3;
                  temp=temp&0xf0;
                  if(temp!=0xf0)
                  {
                          temp=P3;
                          switch(temp)
                          {
                             case 0xed:    key=4;
                                               break;
                                 case 0xdd:    key=5;
                                               break;
                                 case 0xbd:    key=6;
                                               break;
                                 case 0x7d:    key=7;
                                               break;
                          }
                  while(temp!=0xf0)
                  {
                     temp=P3;
                         temp=temp&0xf0;
                  }
                  key=key*key;
                  display(key);
           }
        }
    P3=0xfb;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
        {
          delayms(10);
          temp=P3;
          temp=temp&0xf0;
          if(temp!=0xf0)
    {
      temp=P3;
          switch(temp)
          {
             case 0xeb:    key=8;
                               break;
                 case 0xdb:    key=9;
                               break;
                 case 0xbb:    key=10;
                               break;
                 case 0x7b:    key=11;
                               break;
          }
          while(temp!=0xf0)
          {
             temp=P3;
                 temp=temp&0xf0;
          }
           key=key*key;
           display(key);
    }
  }
    P3=0xf7;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
        {
           delayms(10);
           temp=P3;
           temp=temp&0xf0;
           if(temp!=0xf0)
     {
        temp=P3;
            switch(temp)
            {
             case 0xe7:    key=12;
                               break;
                 case 0xd7:    key=13;
                               break;
                 case 0xb7:    key=14;
                               break;
                 case 0x77:    key=15;
                               break;
          }
          while(temp!=0xf0)
          {
             temp=P3;
                 temp=temp&0xf0;
          }
           key=key*key;
           display(key);
    }
  }
}
void main()
{
   P0=0;
   dula=1;
   dula=0;
   P0=0xc0;
   wela=1;
   wela=0;
   while(1)
   {
      keyscan();
        }
        bai=num/100;
        shi=num%100/10;
        ge=num%10;
}


不知道错在哪里了,请各位大神指导一下,谢谢啦
</div>#include<reg52.h>
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。