1、程序

// 试验景象:下载程序后,按下“独立按键”模块中K1键,管制D1指示灯亮灭    //                   ,按下“独立按键”模块中K2键,管制D2指示灯亮灭//                   ,按下“独立按键”模块中K3键,管制D3指示灯亮灭        //                   ![请增加图片形容](https://img-blog.csdnimg.cn/1b8c0ea933df48e8b275340aaa7e8804.png),按下“独立按键”模块中K4键,管制D4指示灯亮灭        #include "reg52.h"typedef unsigned int uint16;    //对系统默认数据类型进行重定义typedef unsigned char uint8;//定义独立按键管制脚sbit KEY1=P3^1; // K1sbit KEY2=P3^0; // K2sbit KEY3=P3^2; // K3sbit KEY4=P3^3; // K4//定义LED管制脚sbit LED1=P2^0; // D1sbit LED2=P2^1; // D2sbit LED3=P2^2; // D3sbit LED4=P2^3; // D4//应用宏定义独立按键按下的键值#define KEY1_PRESS    1#define KEY2_PRESS    2#define KEY3_PRESS    3#define KEY4_PRESS    4#define KEY_UNPRESS    0    /******************************************************************************** 函 数 名       : delay_10us* 函数性能        : 延时函数,ten_us=1时,大概延时10us* 输    入       : ten_us* 输    出         : 无*******************************************************************************/void delay_10us(uint16 ten_us) //消抖{    while(ten_us--);    }/******************************************************************************** 函 数 名       : key_scan* 函数性能        : 检测独立按键是否按下,按下则返回对应键值* 输    入       : mode=0:单次扫描按键                           mode=1:间断扫描按键* 输    出         : KEY1_PRESS:K1按下                           KEY2_PRESS:K2按下                           KEY3_PRESS:K3按下                           KEY4_PRESS:K4按下                           KEY_UNPRESS:未有按键按下*******************************************************************************/uint8 key_scan(uint8 mode){    static uint8 key=1;    if(mode)key=1;//间断扫描按键    if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))//任意按键按下    {        delay_10us(1000);//消抖10ms        key=0;        if(KEY1==0)            return KEY1_PRESS;        else if(KEY2==0)            return KEY2_PRESS;        else if(KEY3==0)            return KEY3_PRESS;        else if(KEY4==0)            return KEY4_PRESS;        }    else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)    //无按键按下    {        key=1;                }    return KEY_UNPRESS;        }/******************************************************************************** 函 数 名       : main* 函数性能         : 主函数* 输    入       : 无* 输    出         : 无*******************************************************************************/void main(){        uint8 key=0;    while(1)    {           key=key_scan(0);        if(key==KEY1_PRESS)//检测按键K1是否按下            LED1=!LED1;//LED1状态翻转            else if(key==KEY2_PRESS)//检测按键K2是否按下            LED2=!LED2;//LED1状态翻转            else if(key==KEY3_PRESS)//检测按键K3是否按下            LED3=!LED3;//LED1状态翻转            else if(key==KEY4_PRESS)//检测按键K4是否按下            LED4=!LED4;//LED1状态翻转        }        }

2、后果