微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stm32两个按键控制10个LED

stm32两个按键控制10个LED

时间:10-02 整理:3721RD 点击:
想写一个程序但没有思路,具体要求是:2个按键(+ -) 、10个LED,按+键LED逐个点亮(前一个熄灭),按-键LED反方向点亮。具体思路是什么?求告知一二。可以理解成遥控器的音量键调音量。

如果是按+键LED逐个点亮(前一个熄灭),按-键LED反方向点亮。这就是不循环的正、反流水灯。

局部程序,酌情删改。
uchar count=0;                //定义一个计数变量       
void delay1ms(uint k)                        //1ms延时子程序       
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=124;j>0;j--);                //1ms延时
}
void keyscan()                                        //按键识别子程序
{               
        if(key1==0)                                        //检测按键如果为0
        {
                delay1ms(20);                        //延时防抖
                if(key1==0)                                //再次检测按键如果为0
                {
                        if(count<10)
                                count++;       
                        while(!key1);                //等待释放
                }
        }
        if(key2==0)                                        //检测按键如果为0
        {
                delay1ms(20);                        //延时防抖
                if(key2==0)                                //再次检测按键如果为0
                {
                        if(count>0)
                                count--;       
                        while(!key2);                //等待释放
                }
        }
}
void xianshi()                                        //显示程序
{
        switch(count)
        {
                case 0: LED1=LED2=LED3=LED4=LED5=LED6=LED7=LED8=LED9=LED10=1;//全灭
                break;
                case 1: LED1=0;//亮
                                LED2=LED3=LED4=LED5=LED6=LED7=LED8=LED9=LED10=1;//灭
                break;
                case 2: LED2=0;//亮
                                LED1=LED3=LED4=LED5=LED6=LED7=LED8=LED9=LED10=1;//灭
                break;
                case 3: LED3=0;//亮
                                LED1=LED2=LED4=LED5=LED6=LED7=LED8=LED9=LED10=1;//灭
                break;
                case 4: LED4=0;//亮
                                LED1=LED2=LED3=LED5=LED6=LED7=LED8=LED9=LED10=1;//灭
                break;
                case 5: LED5=0;//亮
                                LED1=LED2=LED3=LED4=LED6=LED7=LED8=LED9=LED10=1;//灭
                break;
                case 6: LED6=0;//亮
                                LED1=LED2=LED3=LED4=LED5=LED7=LED8=LED9=LED10=1;//灭
                break;
                case 7: LED7=0;//亮
                                LED1=LED2=LED3=LED4=LED5=LED6=LED8=LED9=LED10=1;//灭
                break;
                case 8: LED8=0;//亮
                                LED1=LED2=LED3=LED4=LED5=LED6=LED7=LED9=LED10=1;//灭
                break;
                case 9: LED9=0;//亮
                                LED1=LED2=LED3=LED4=LED5=LED6=LED7=LED8=LED10=1;//灭
                break;
                case 10:LED10=0;//亮
                                LED1=LED2=LED3=LED4=LED5=LED6=LED7=LED8=LED9=1;//灭
                break;
        }
}

这个很简单,你需要知道是那个按键按下了,需要知道这个按键按下了几次,根据这个来决定如何点亮LED,需要知道两个边界如何处理,如LED全亮时按下+键如何处理,在LED全灭时按下-键如何处理

比如可以用移位运算啊 >>      <<

小灯定义一个变量,循环加1,循环减1,值赋值给定义变量

按+键依次点亮后面的灯(前面的相应熄灭)好处理,就是按-键怎么处理在某个状态按下-键此灯熄灭,它前面的点亮。就像遥控器的音量键一样某个状态按下音量或加 或减。

进来学习一下下了,

O(∩_∩)O谢谢,看到代码有思路了,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top