#include <reg52.h>

sbit buzzer = P1^0; // 蜂鸣器 sbit S1 = P2^0; // S1按键 sbit S2 = P2^1; // S2按键

void delay(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) for(j = 0; j < 123; j++); }

void main() { unsigned char led = 0x01; // 跑马灯初始状态 unsigned char direction = 1; // 跑马灯方向,默认向右 unsigned int speed = 500; // 跑马灯速度,默认低速档

while(1) {
    P0 = led; // 控制LED灯显示
    delay(speed);

    // 检测S1按键
    if(S1 == 0) {
        delay(10); // 消抖
        if(S1 == 0) {
            direction = 1; // 设置为向右
            buzzer = 1;   // 蜂鸣器响一下
            delay(100);
            buzzer = 0;
        }
        while(S1 == 0); // 等待按键释放
    }

    // 检测S2按键
    if(S2 == 0) {
        delay(10); // 消抖
        if(S2 == 0) {
            direction = 0; // 设置为向左
            buzzer = 1;   // 蜂鸣器响一下
            delay(100);
            buzzer = 0;
        }
        while(S2 == 0); // 等待按键释放
    }

    // 根据方向更新LED灯状态
    if(direction)
        led = led << 1;
    else
        led = led >> 1;

    // 边界检测
    if(led == 0x00)
        led = 0x80;
    else if(led == 0x80)
        led = 0x01;

    // 根据速度调整延时时间
    if(speed == 500) // 低速档
        speed = 1000;
    else if(speed == 1000) // 高速档
        speed = 500;
}

}

// 请注意,此代码是在假设已经正确配置了STM89C52单片机的I/O引脚和外部中断设置的基础上编写的。如果您直接复制此代码到您的项目中,可能需要根据您的硬件配置进行适当的修改和调整。


原文地址: https://www.cveoy.top/t/topic/9iG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录