使用 Keil 软件实现 8 个 LED 流水灯和数码管动态显示

本文将介绍使用 Keil 软件编写代码,实现 8 个 LED 流水灯和数码管动态显示的两种方法。

1. 利用串行口实现 8 个 LED 流水灯的效果

#include <reg52.h>

sbit SER = P1^0;
sbit RCLK = P1^1;
sbit SRCLK = P1^2;

void delay(unsigned int time) {
    while(time--);
}

void shiftOut(unsigned char dat) {
    unsigned char i;
    for(i = 0; i < 8; i++) {
        SER = dat & 0x80;
        dat <<= 1;
        SRCLK = 0;
        SRCLK = 1;
    }
    RCLK = 0;
    RCLK = 1;
}

void main() {
    unsigned char i, j;
    while(1) {
        for(i = 0; i < 8; i++) {
            shiftOut(1 << i);
            delay(50000);
        }
        for(j = 0; j < 8; j++) {
            shiftOut(0x80 >> j);
            delay(50000);
        }
    }
}

2. 时间间隔为 1s,实现 8 个 LED 流水灯的效果

#include <reg52.h>

sbit SER = P1^0;
sbit RCLK = P1^1;
sbit SRCLK = P1^2;

unsigned int count = 0;

void delay(unsigned int time) {
    while(time--);
}

void shiftOut(unsigned char dat) {
    unsigned char i;
    for(i = 0; i < 8; i++) {
        SER = dat & 0x80;
        dat <<= 1;
        SRCLK = 0;
        SRCLK = 1;
    }
    RCLK = 0;
    RCLK = 1;
}

void timer0() interrupt 1 {
    TH0 = (65536 - 50000) / 256;
    TL0 = (65536 - 50000) % 256;
    count++;
    if(count == 20) {
        count = 0;
        shiftOut(0xff);
        delay(50000);
        shiftOut(0x00);
        delay(50000);
    }
}

void main() {
    TMOD = 0x01;
    TH0 = (65536 - 50000) / 256;
    TL0 = (65536 - 50000) % 256;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
    while(1);
}

代码说明:

  • 代码使用 Keil 软件进行编译和调试。
  • 代码中使用了 51 单片机自带的定时器 0,实现了 1 秒的时间间隔。
  • 代码中定义了 shiftOut 函数,用于将数据写入串行口,实现 LED 的控制。
  • 代码中定义了 delay 函数,用于实现时间延时。

总结:

本文介绍了两种使用 Keil 软件实现 8 个 LED 流水灯和数码管动态显示的方法。第一种方法使用串行口进行控制,第二种方法使用定时器 0 实现时间间隔。用户可以根据自己的需求选择合适的方案进行实现。

希望本文对你有所帮助。


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

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