单片机可以仿真,但是灯不亮。


#include  //????  reg51.h ????
#define uchar unsigned char
#define uint   unsigned int       //????uint?????
void delay(uchar);                  //??????
uchar     KeyScan(void);            //??????????????

sbit P1_0 = 0x90^0;             //????P1_0,?????????P1.0
     P1_1 = 0x90^1;            //????P1_1,?????????P1.1 ????
     P1_2 = 0x90^2;           //????P1_2,?????????P1.2?????
     P1_3 = 0x90^3;            //????P1_3,?????????P1.3????
     P1_4 = 0x90^4;            //????P1_4,?????????P1.4?????
     P1_5 = 0x90^5;            //????P1_5,?????????P1.5?????
     P1_6 = 0x90^6;             //????P1_6,?????????P1.6????
     P1_7 = 0x90^7;            //????P1_7,?????????P1.7?????
    
void main(void)
{
    uchar KeyValue;       //????KeyValue,????????8 bit????
    
    while(1)
    {
        KeyValue=KeyScan(); //????????8 bit????           
    
        switch(KeyValue)    //?????????,??????????              
        {
            case 0x0E:       //??0???
                P1_4 =0 ;       //??D1?????
                break;
            case 0x0D:            //??1???????
                P1_5 = 0;        //??D2
                break;
            case 0x0B:            //??2????????
                P1_6 = 0;       //??D3
                break;
            case  0x07:            //??3????????
                P1_7 = 0;       //??D4
                break;
            default:        //????????,??????
               P1_4=1;                                                                                                    //??D1????
                 P1_5=1;                //??D2?????
                 P1_6=1;                    //??D3?????
                 P1_7=1;                            //??D4?????
                break;
        } 
    }
}

/********************************************/
uchar KeyScan(void)
{
    uchar TempValue ;
    TempValue=P1;                   
    TempValue&=0x0f;            
    if(TempValue!=0x0f)      
    {
        delay(10);                        
        TempValue=P1;              
        TempValue&=0x0f;       
        if(TempValue!=0x0f)   
        {
            return TempValue;         
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/753532413976181.png "#left")

        }
    }
    return 0;                         
}
void delay(uchar x)        
{  
        uchar k;
        while(x--)
        for(k=0;k<125;k++); 
}
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/236160413976194.png "#left")