关于当按键按下见哦按后,在数码管上一次显示0-F,6个数....

2019-07-15 18:46发布

请求高人指点一下,自己针对手里的板子做的关于顺序按下矩阵键盘后,在数码管上依次显示0——F,8个数码管同时显示即可。
我已经写好了程序,编译没有问题,但是为什么按键按下去,显示没有按照顺序呢?(我采用的板子是用P0口与74HC573连接做段选,573的是能控制端在P1.0口上,采用P2口做位选,P3口为键盘输入口,)
       
          #include<reg52.h>
       
         #define uchar unsigned char
           #define uint unsigned int
           #include <intrins.h>

           sbit LE = P1^0;  //定义输出使能控制脚在P1.0上


           uchar code   table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //段码控制       
           void delayms(uint xms)

                        { uint i,j;
                         for (i=xms;i>0;i--)
                           for(j=110;j>0;j--);
       
                        }

                     void display(uchar num)

                   {  
                  
                     LE=1;
                            P0=table[num];
                    LE=0;
                   }




            void matrixkeyscan()
                          {
                                uchar temp, key;
                                P3=0xfe;
                                temp=P3;
                                temp=P3&0xf0;
                                if (temp!=0xf0)
                                         {
                                           delayms(10);
                                           temp=P3;
                                           temp=P3&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=P3&0xf0;
                                                          
                                                                         }
                                                           display(key);
                                                  }



                                           }
                                       
                                       
                                       
                                       
                                          P3=0xfd;
                                          
                                          temp=P3;
                                temp=P3&0xf0;
                                if (temp!=0xf0)
                                         {
                                           delayms(10) ;
                                           temp=P3;
                                           temp=P3&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=P3&0xf0;
                                                          
                                                                         }
                                                           display(key)  ;
                                                  }



                                           }
                                       

                                                  
                                          P3=0xfb;
                                          
                                          temp=P3;
                                temp=P3&0xf0;
                                if (temp!=0xf0)
                                         {
                                           delayms(10);
                                           temp=P3;
                                           temp=P3&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=P3&0xf0;
                                                          
                                                                         }
                                                           display(key) ;
                                                  }



                                           }
                                       
                                            P3=0xf7;
                                          
                                          temp=P3;
                                temp=P3&0xf0;
                                if (temp!=0xf0)
                                         {
                                           delayms(10) ;
                                           temp=P3;
                                           temp=P3&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=P3&0xf0;
                                                          
                                                                         }
                                                           display(key)  ;
                                                  }



                                           }
                                       
                                           }


        void main()
        {                               
                                               
                       
                                  LE=1;
                            P0=0;         //关闭所有数码管段选
               
                            LE=0;
                                P2=0x00;//位选中所有数码管
                        while(1)
                                {
                               
                                   matrixkeyscan() ;
                               
                               
                                }


          }

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