代码烧录后独立按钮不起作用

51单片机 独立按键
代码烧录到开发板不起作用怎么回事?

#include <regx52.h>
                    void Delay (unsigned int xms){
           unsigned char k , j;
           while(xms){
           k = 2;
           j = 236;
           do{
           while(--k);}
           while(--j);
           
               xms--;
           }
           }
                sbit k1 = P3^1; 
                   sbit k2 = P3^0;
                   sbit k3 = P3^2;
                   sbit k4 = P3^3;

 unsigned char Key(){
                   unsigned char KeyNumber = 0;
                   if(k1 == 0){Delay(10);if(k1==0){KeyNumber == 1;}while(!k1);}
                   if(k2 == 0){Delay(10);if(k2==0){KeyNumber == 2;}while(!k2);}
                   if(k3 == 0){Delay(10);if(k3==0){KeyNumber == 3;}while(!k3);}
                   if(k4 == 0){Delay(10);if(k4==0){KeyNumber == 4;}while(!k4);}
                    return KeyNumber;
                   }
            unsigned char KeyNum;
            
            int main(void){
                 
                 while (1){
                  KeyNum =  Key();
                  if(KeyNum == 1){P2 = 0xfe;}
                                        
                 }
                 }

img

img

常用惯例, P3.0, P3.1 会是 UART TX/RD.
怀疑你硬件干扰, 或是51零件本身初始化干扰。
main程序改成

int main( void )
  {
    P3 = 0xFF;   /*  初始 P3, 避免预设错误 */
    P2 = 0x00;   /*  全亮, 表示LED 驱动OK.  也确认51有动作 */   
    while (1)
     {
        KeyNum  =  Key( );
        if( 0 != KeyNum )
          {
               P2 = KeyNum;  /* 看灯号对按键  */                               
          }
      }
}

2022/08/14
这几个指令没指值 KeyNumber = 1; <- 是 = , 不是 ==
if(k1 == 0){Delay(10);if(k1==0){**KeyNumber == 1; **}while(!k1);}
if(k2 == 0){Delay(10);if(k2==0){KeyNumber == 2;}while(!k2);}
if(k3 == 0){Delay(10);if(k3==0){KeyNumber == 3;}while(!k3);}

指值用 =
P3 = 0xFF;
逻辑比较符 == , 返回 1 or 0 ( TRUE, FALSE )
( 0 == k1 ) 使用时, 要注意 “强制型别转换” 所带来的隐性错误

无图无真相,单片机代码必须结合电路图才行,不然无法给出解释