单片机两个按钮控制八盏灯

1.有数码管,两个按键,8个led灯
2.按一下S1第一个灯亮,依次往下,按下第9次的时候全亮,按下第10次的时候全灭;
3.同时每按下一次S1的时候,数码管显示次数;
4.按下S2的时候清零。

不难
可参考


#include <reg52.h>
 
//数据段定义
unsigned char code Number[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
//定义每个按键的状态
#define K1  P1_0
#define K2  P1_1
#define K3  P1_2
 
//延时函数
void delay(unsigned int t)
{
    unsigned int i,j;
    for(i=0;i<t;i++)
        for(j=0;j<120;j++);
}
 
//循环检测按键
char KeyScan(void)
{
    if(K1 == 0) //K1按下
    {
        delay(5); //按键消抖
        if(K1 == 0) //再次确认按键按下
        {
            while(K1 == 0); //等待按键松开
            return 1;
        }
    }
    if(K2 == 0) //K2按下
    {
        delay(5); //按键消抖
        if(K2 == 0) //再次确认按键按下
        {
            while(K2 == 0); //等待按键松开
            return 2;
        }
    }
    if(K3 == 0) //K3按下
    {
        delay(5); //按键消抖
        if(K3 == 0) //再次确认按键按下
        {
            while(K3 == 0); //等待按键松开
            return 3;
        }
    }
    return 0; //无按键按下
}
 
void main()
{
    unsigned char a,counter = 0;
    unsigned long i = 0;
    
    while(1)
    {
        a = KeyScan(); //检测按键
        if(a == 1) //按下K1
        {
            counter++; //计数器加1
            if(counter == 3) //连续按下K1两次,K2一次,K3一次
            {
                P0 = Number[1]; //在数码管上显示“1”
                delay(200); //延时一段时间
                counter = 0; //计数器清零
            }
        }
        else if(a == 2 || a == 3) //按下K2或K3
        {
            counter = 0; //计数器清零
        }
        else //无按键按下
        {
            P0 = Number[0]; //在数码管上显示“0”
        }
    }
}