C51单片机编程独立按键

问题遇到的现象和发生背景

独立按键控制单颗LED灯位移
烧录后只有D1LED灯亮;按按键没有反应

问题相关代码,请勿粘贴截图
#include <REGX52.H>
    unsigned char LEDNum;
void Delay(int t)
{
    while(t--)
    {
                unsigned char i, j;

                i = 12;
                j = 169;
                do
                {
                    while (--j);
                } while (--i);
  }
}
void mian()
{
    P2=~0x01;
    while (1)
    {
            if(P3_1==0)
            {
                Delay(20);
                while(P3_1==0);
                Delay(20);
                
                LEDNum++;
                if(LEDNum>=8)
                    LEDNum=0;
                P2=~(0x01<<LEDNum);
            }
                
                if(P3_0==0)
            {
                Delay(20);
                while(P3_0==0);
                Delay(20);
                
                if(LEDNum==00)
                    LEDNum=7;
                else
                    LEDNum--;
                P2=~(0x01<<LEDNum);
            }
        }
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

#include "STC12C5A60S2.h"//改你的单片机头文件
#include "intrins.h"

typedef unsigned char uchar;
typedef unsigned int uint;

sbit key_a=P3^1;//定义按键(从左向右)
sbit key_b=P3^0;

#define LED P2//宏定义,把整个P2口定义为LED

void delay(uchar i)
{
while(i--);
}

void main()
{
LED = 0xfe;//如果你的LED灯位高电平发亮,值就是0x01
while(1)
{
if(key_a!=1)//判断
{
delay(500);
if(key_a!=1)//再次判断
{

            delay(5000);//
            LED = _crol_(LED,1);//LED左移1位,根据LED和管脚匹配,灯右移
            while(!key_a);
        }
    }
    
    if(key_a!=1 || key_b!=1)
    {
        delay(500);
        if(key_a!=1 || key_b!=1)
        {
            if(key_a!=1)
            {
                delay(5000);
                LED = _crol_(LED,1);
                while(!key_a);
            }
            
            
            if(key_b!=1)
            {
                delay(5000);
                LED = _cror_(LED,1);//灯左移
                while(!key_b);
            }
        }
    }
}

}

你一个代码太多bug了,没有位定义,也没有按键检测,语法也有错误,构思就不好,一会我给你写这个项目我发你