2402_84057866 2024-04-01 10:56 采纳率: 0%
浏览 28

有会的朋友吗,keil4流水灯程序

img


用的是英特尔的80/87c52
使用数组和函数调用的方式,完成如下花样灯设计
1.没有按键按下时,8个led灯交叉亮灭(01010101---10101010)
2.按键s1按下时,led灯从左往右,从右往左点亮一遍
3.按键s2按下时,led左循环三次
4.按键s3按下时,led灯由中间两个灯开始依次向两边显示,再从两边向中间依次点亮两个灯

  • 写回答

4条回答 默认 最新

  • GISer Liu 2024-04-01 11:01
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    首先,你可以使用 Keil C51 编写这个程序。下面是一个基本的程序框架,你可以根据需求进行修改和完善。
    cCopy code

    #include <reg52.h>
    sbit S1 = P1^0;  // 定义按键 S1
    sbit S2 = P1^1;  // 定义按键 S2
    sbit S3 = P1^2;  // 定义按键 S3
    sbit LED = P2;   // 定义 LED 灯端口
    void delay(unsigned int i) {
    while (i--);
    }
    // 交叉灯
    void cross_led() {
    unsigned char i, led_data;
    for (i = 0; i < 8; i++) {
    led_data = 0x55 << i | 0xAA >> i;
    LED = led_data;
    delay(10000);
    }
    }
    // 从左往右,从右往左
    void left_right_left() {
    unsigned char i;
    for (i = 0; i < 8; i++) {
    LED = 1 << i;
    delay(10000);
    }
    for (i = 6; i > 0; i--) {
    LED = 1 << i;
    delay(10000);
    }
    }
    // 左循环三次
    void left_cycle() {
    unsigned char i, j;
    for (j = 0; j < 3; j++) {
    for (i = 0; i < 8; i++) {
    LED = 1 << i;
    delay(10000);
    }
    }
    }
    // 从中间向两边
    void middle_to_side() {
    unsigned char i, led_data;
    led_data = 0x06;
    for (i = 0; i < 3; i++) {
    LED = led_data << i;
    delay(10000);
    }
    for (i = 1; i < 4; i++) {
    LED = led_data >> i;
    delay(10000);
    }
    }
    void main() {
    while (1) {
    if (!S1) {
    // S1 按下,从左往右,从右往左点亮一遍
    left_right_left();
    } else if (!S2) {
    // S2 按下,左循环三次
    left_cycle();
    } else if (!S3) {
    // S3 按下,从中间向两边
    middle_to_side();
    } else {
    // 没有按键按下,交叉亮灭
    cross_led();
    }
    }
    }
    

    以上是一个基本的程序框架,实现了你描述的四种功能。你可以根据具体需求进行修改和扩展。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 4月1日