STC89C52单片机流水灯

#include "reg52.h"

void delay(unsigned int ms) {
    // 简单的延时函数,具体实现取决于您的单片机时钟频率
    // 这里只是一个占位符,您需要根据实际情况编写延时函数
    unsigned int i, j;
    for (i = ms; i > 0; i--)
        for (j = 110; j > 0; j--);
}

void main() {
    unsigned char i = 0; // 使用unsigned char来存储LED的状态,因为只需要0-7的值
    P2 = 0xFF; // 初始化P2口所有LED为熄灭状态(假设高电平熄灭)

    while (1) {
        // 根据i的值点亮对应的LED
        switch (i) {
            case 0:
                P2 = 0xBF; // 点亮第0个LED
                break;
            case 1:
                P2 = 0xDF; // 点亮第1个LED
                break;
            case 2:
                P2 = 0xEF; // 点亮第2个LED
                break;
            case 3:
                P2 = 0xF7; // 点亮第3个LED
                break;
            case 4:
                P2 = 0xFB; // 点亮第4个LED
                break;
            case 5:
                P2 = 0xFE; // 点亮第5个LED
                break;
            case 6:
                P2 = 0x7F; // 这里应该是0x7F而不是0xFF,因为0xFF会熄灭所有LED
                // 但由于我们的逻辑是从0xBF开始的(即第0个LED点亮),
                // 所以实际上在达到0xFF之前,我们已经遍历了所有LED。
                // 因此,这里我们不需要设置P2为0x7F,而是应该让i重置为0。
                // 但是,由于我们下面会有i = 0;的语句,所以这里可以留空或设置为任意值。
                // 但为了代码清晰,我们可以选择不执行任何操作(即使用break;)。
                break;
            // 注意:我们没有case 7,因为当i=6时,我们会重置i为0。
            // 如果真的需要case 7(比如为了完整性或后续扩展),可以在这里添加。
        }

        // 延时一段时间
        delay(100); // 延时500毫秒,具体值可以根据需要调整

        // 递增i,并在达到7后重置为0
        i++;
        if (i >= 7) { // 假设我们有7个LED需要遍历(实际上从0到6是7个状态)
            i = 0; // 重置i为0,以重新开始循环
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值