51单片机独立按键控制流水灯,按一次左流水,再按一次反向流水

1、功能描述

独立按键控制流水灯,按一次左流水,再按一次反向流水

2、实验原理

单片机的I/O口可以通过编程设置为输入或输出模式。在流水灯实验中,我们将I/O口配置为输出模式,用于控制LED灯的亮灭。同时,我们还需要一个输入口来检测按键的状态,以实现按键控制流水灯的功能。流水灯的效果是通过依次点亮LED灯来实现的。我们可以通过编程,按照一定的顺序和时间间隔来控制LED灯的亮灭,从而形成流水灯的效果。当按键被按下时,单片机会检测到输入的变化,并通过编程逻辑改变流水灯的方向。

3、编程思路

根据按键P3_1的状态来控制流水方向,按下时改变流水方向。代码中使用了一个全局变量count来标记流水方向,当count为0时表示正向流水,为1时表示反向流水。整个流程在一个无限循环中,不断地检测按键状态并控制LED的流水方向。

4、代码

cpp 复制代码
#include <REGX52.H>
#include <INTRINS.H>  
unsigned char LEDNum;
unsigned int count;
void Delay1ms(unsigned int xms) 
{
unsigned char i, j;
while (xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
 
}
}
 
void main()
{
while(1)
{
if(P3_1==0)
{
Delay1ms(20);
while(P3_1==0);
Delay1ms(20); 
P2=0xFE;
Delay1ms(500);
LEDNum = 0xFE;
while(1)
{
while(count == 0) 
{
LEDNum =_crol_(LEDNum,1);
P2 = LEDNum;
Delay1ms(500);//1
if(P3_1==0)
{
Delay1ms(20);
while(P3_1==0);
Delay1ms(20);
count = 1; 
LEDNum = LEDNum;
}
}
while(count == 1) 
{
LEDNum =_cror_(LEDNum,1);
P2 = LEDNum;
Delay1ms(500);
if(P3_1==0)
{
Delay1ms(20);
while(P3_1==0);
Delay1ms(20);
count = 0; 
LEDNum = LEDNum;
}
}
} 
}
}
}
相关推荐
芯片设计-曾工6 小时前
当精准脉冲遇上清晰视界——CH2205E模块与YL1621的“黄金搭档“
驱动开发·stm32·单片机·51单片机·硬件工程
LCG元12 小时前
STM32 硬件 SPI + DMA 驱动 OLED 显示屏(SSD1306):从原理到 112fps 高速刷新全流程
stm32·单片机·嵌入式硬件
天吾cc12 小时前
RTT-ADC
单片机·嵌入式硬件·学习
qq_4480111613 小时前
C语言中的野指针和空指针
c语言·开发语言·单片机
崇山峻岭之间14 小时前
STM32F407的FOC驱动01
stm32·单片机·嵌入式硬件
Lzh编程小栈18 小时前
【嵌入式硬核精讲】I2C通信协议万字详解(时序帧格式、同步半双工、重复起始、一对多挂载、寄存器、面试必考)
stm32·单片机·嵌入式硬件·面试
十月的皮皮19 小时前
STM32从零到量产开发:四路继电器工业控制模块开发 -上位机 Program.cs 应用程序入口设计说明
c语言·stm32·单片机·stm32cubemx·hal库
LCG元19 小时前
STM32F103+MPU6050互补滤波姿态解算与OLED实时显示实战(附完整工程代码)
stm32·单片机·嵌入式硬件
求知喻19 小时前
FM33L023D外部中断
单片机·嵌入式硬件
小帽子_12320 小时前
STM32+BMS 嵌入式开发:ADC 电压温度采集与总线通信落地教程
stm32·单片机·嵌入式硬件