stm32两个按键控制10个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谢谢,看到代码有思路了,