用键盘控制显示1-16的平方

2019-07-15 23:06发布

/*按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,
第二个显示4...*/
要实现的功能就是这个了,程序烧进去之后,却有一点不一样,当按下第五个键,显示24,;第十个键时,显示的是99;12显示的是143;
13显示的是168,这三个比正常小1,其他正常,我用vs测试了POW函数,也没有什么问题。还有一个问题就是,在
前三个键不该显示的部分有一点隐隐,我已经在位锁存前加了P0=0xff;还是有浅浅的影子(段锁存加了0)。程序有点长,希望有人看看。3q
//2013 -8-11
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^6;
sbit wei=P2^7;
uchar code tableduan[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0xff,0x6f
};
uint tablewei[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f
};
uint getx();
void display(uint);
void yanshi(uchar z)
{
  uchar a,b;
     for(a=z;a>0;a--)
             for(b=110;b>0;b--);
}
uint temp ,x;
uint bai,shi,ge;
void main()
{
   while(1)
   {


    display(getx());                 
   }
}
uint getx()
{
      P3=0xfe;
          temp=P3;
          temp=temp&0xf0;
          if(temp!=0xf0)
            {
                  yanshi(7);
                  temp=P3;
                  temp=temp&0xf0;
                  if(temp!=0xf0)
                     {
                            temp=P3;
                                switch(temp)
                                {
                                  case 0xee:x=pow(1,2);
                                  break;
                                  case 0xde:x=pow(2,2);
                                  break;
                                  case 0xbe:x=pow(3,2);
                                  break;
                                  case 0x7e:x=pow(4,2);
                                  break;
                                }
                                if(temp!=0xf0)
                                {
                                   temp=P3;
                                   temp=temp&0xf0;
                                }
                         }
                }

                  P3=0xfd;
          temp=P3;
          temp=temp&0xf0;
          if(temp!=0xf0)
            {
                  yanshi(7);
                  temp=P3;
                  temp=temp&0xf0;
                  if(temp!=0xf0)
                     {
                            temp=P3;
                                switch(temp)
                                {
                                  case 0xed:x=pow(5,2);
                                  break;
                                  case 0xdd:x=pow(6,2);
                                  break;
                                  case 0xbd:x=pow(7,2);
                                  break;
                                  case 0x7d:x=pow(8,2);
                                  break;
                                }
                                if(temp!=0xf0)
                                {
                                   temp=P3;
                                   temp=temp&0xf0;
                                }
                         }
                }

                P3=0xfb;
          temp=P3;
          temp=temp&0xf0;
          if(temp!=0xf0)
            {
                  yanshi(7);
                  temp=P3;
                  temp=temp&0xf0;
                  if(temp!=0xf0)
                     {
                            temp=P3;
                                switch(temp)
                                {
                                  case 0xeb:x=pow(9,2);        //平方函数
                                  break;
                                  case 0xdb:x=pow(10,2);
                                  break;
                                  case 0xbb:x=pow(11,2);
                                  break;
                                  case 0x7b:x=pow(12,2);
                                  break;
                                }
                                if(temp!=0xf0)
                                {
                                   temp=P3;
                                   temp=temp&0xf0;
                                }
                         }
                }

                P3=0xf7;
          temp=P3;
          temp=temp&0xf0;
          if(temp!=0xf0)
            {
                  yanshi(7);
                  temp=P3;
                  temp=temp&0xf0;
                  if(temp!=0xf0)
                     {
                            temp=P3;
                                switch(temp)
                                {
                                  case 0xe7:x=pow(13,2);
                                  break;
                                  case 0xd7:x=pow(14,2);
                                  break;
                                  case 0xb7:x=pow(15,2);
                                  break;
                                  case 0x77:x=pow(16,2);
                                  break;
                                }
                                if(temp!=0xf0)
                                {
                                   temp=P3;
                                   temp=temp&0xf0;
                                }
                       
                         }
                }
                return x;
        }
void display(uint x)
{
   bai=x/100;
      shi=x%100/10;
      ge=x%10;
P0=0xff;
wei=1;
P0=tablewei[0];
wei=0;
P0=0xff;
duan=1;
P0=tableduan[bai];
duan=0;
yanshi(10);

P0=0xff;
wei=1;
P0=tablewei[1];
wei=0;
P0=0xff;
duan=1;
P0=tableduan[shi];
duan=0;
yanshi(10);

P0=0xff;
  wei=1;
P0=tablewei[2];
wei=0;
P0=0xff;
duan=1;
P0=tableduan[ge];
duan=0;
yanshi(10);


}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。