独立按键控制 LED 流水灯方向

前言

功能要求

使用独立按键K1, 控制LED流水灯的移动方向

主要是基于这篇文章 ———— LED 流水灯

加一个 独立按键 控制移动方向的功能

新知识点主要是

  • 如何使用独立按键

  • 如何进行按键防抖

另外需要一些编程的技巧,合理命名变量、编写程序逻辑。

资料

3-2独立按键控制LED

知识点

按键引脚

独立按键 K1

对应的引脚是 P3_1

按键防抖动

需要通过 软件延时,进行按键防抖

一般延时时长在 5-10ms

程序代码

#include <REGX52.H>
#include <INTRINS.H>

void Delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

void Delay(int t){
    int i = 0;
    for(i=0;i<t;i++){
        Delay1ms();
    }
}
//定义移位方向
#define L2H 0
#define H2L 1

void main()
{
    unsigned char bitmap = 1;
    unsigned char shift_direction = L2H;
    P2 = 0;
    
    while(1){
        //P3_1 对应独立按键K1,低电平触发
        if(0 == P3_1){
            //按键防抖
            Delay(20);
            //按下的时候,死循环,不做任何操作
            while(0 == P3_1){
                //nop
            }
            Delay(20);  
            //释放的时候才做操作
            shift_direction = (shift_direction+1)%2;
        }
        
       
        bitmap = (L2H == shift_direction)?bitmap<<1:bitmap>>1;
        if(0 == bitmap){
            bitmap = (L2H == shift_direction)?0x01:0x80;
        }
        P2 = ~bitmap;
        Delay(500);
    }
}

演示效果

posted @ 2025-03-27 22:04  lucky_doog  阅读(76)  评论(0)    收藏  举报