创龙科技
直播中

jf_05916765

1年用户 79经验值
擅长:嵌入式技术 光电显示 控制/MCU
私信 关注

【创龙TLT113-MiniEVM开发板试用体验】T113开发板LED闪烁控制终极教程

LED交替闪烁

前言

本教程专为创龙TLT113-MiniEVM开发板编写,提供多种LED闪烁控制方法。无论您是嵌入式开发新手还是有经验工程师,都能找到适合您的解决方案。教程包含Shell脚本、C语言程序、系统服务等多种实现方式。

硬件准备

  1. 创龙TLT113-MiniEVM开发板
  2. Type-C串口线(用于终端连接)
  3. TF卡(已烧录系统)

方法一:Shell脚本实现(推荐新手)

步骤1:创建脚本文件

echo '#!/bin/sh

LED_PATH="/sys/class/leds/heartbeat"
DELAY=0.5  # 闪烁间隔时间(秒)

echo "开始LED闪烁控制..."
echo "按Ctrl+C停止程序"

while true; do
    # 点亮LED
    echo 1 > $LED_PATH/brightness
    sleep $DELAY
    
    # 熄灭LED
    echo 0 > $LED_PATH/brightness
    sleep $DELAY
done' > led_blink.sh

步骤2:添加执行权限

chmod +x led_blink.sh

步骤3:运行脚本

./led_blink.sh

步骤4:停止脚本

按下 Ctrl + C 停止LED闪烁

高级功能(可选)

  1. 自定义闪烁频率
# 修改DELAY变量值后重新运行
sed -i 's/DELAY=0.5/DELAY=0.2/' led_blink.sh
./led_blink.sh
  1. 控制不同LED
# 修改LED_PATH变量
sed -i 's/heartbeat/user-led0/' led_blink.sh
./led_blink.sh

方法二:C语言程序实现(高性能)

步骤1:创建C程序文件

cat > led_blink.c << 'EOF'
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    const char *led_path = "/sys/class/leds/heartbeat/brightness";
    FILE *led_file;
    
    printf("T113 LED闪烁控制程序\n");
    printf("按Ctrl+C停止程序\n");
    
    while(1) {
        // 点亮LED
        led_file = fopen(led_path, "w");
        if(led_file) {
            fputs("1", led_file);
            fclose(led_file);
        } else {
            perror("无法打开LED设备");
            return 1;
        }
        usleep(500000);  // 500ms
        
        // 熄灭LED
        led_file = fopen(led_path, "w");
        if(led_file) {
            fputs("0", led_file);
            fclose(led_file);
        }
        usleep(500000);  // 500ms
    }
    return 0;
}
EOF

步骤2:编译程序

gcc led_blink.c -o led_blink -Wall

步骤3:运行程序

./led_blink

步骤4:停止程序

按下 Ctrl + C 停止LED闪烁

方法三:系统服务实现(开机自启)

步骤1:创建服务文件

cat > /etc/systemd/system/led-blink.service << 'EOF'
[Unit]
Description=T113 LED闪烁服务
After=network.target

[Service]
Type=simple
ExecStart=/bin/sh -c "while true; do echo 1 > /sys/class/leds/heartbeat/brightness; sleep 0.5; echo 0 > /sys/class/leds/heartbeat/brightness; sleep 0.5; done"
Restart=always
User=root

[Install]
WantedBy=multi-user.target
EOF

步骤2:启用并启动服务

systemctl daemon-reload
systemctl enable led-blink.service
systemctl start led-blink.service

步骤3:检查服务状态

systemctl status led-blink.service

步骤4:停止服务

systemctl stop led-blink.service

步骤5:禁用服务

systemctl disable led-blink.service

方法四:命令行直接运行(快速测试)

简单闪烁

while true; do 
    echo 1 > /sys/class/leds/heartbeat/brightness
    sleep 0.5
    echo 0 > /sys/class/leds/heartbeat/brightness
    sleep 0.5
done

双LED交替闪烁

while true; do
    echo 1 > /sys/class/leds/heartbeat/brightness
    echo 0 > /sys/class/leds/user-led0/brightness
    sleep 0.3
    echo 0 > /sys/class/leds/heartbeat/brightness
    echo 1 > /sys/class/leds/user-led0/brightness
    sleep 0.3
done

常见问题解决

  1. LED不响应

    # 检查LED路径是否正确
    ls /sys/class/leds/
    
    # 手动测试LED
    echo 1 > /sys/class/leds/heartbeat/brightness
    
  2. 权限不足

    # 确保以root用户运行
    whoami
    
    # 如果显示非root,切换用户
    su -
    
  3. 脚本无法执行

    # 检查执行权限
    ls -l led_blink.sh
    
    # 重新添加权限
    chmod +x led_blink.sh
    
  4. 编译错误

    # 检查gcc是否安装
    gcc --version
    
    # 安装编译工具
    apt update
    apt install build-essential
    

高级技巧

  1. 创建LED控制菜单

    cat > led_control.sh << 'EOF'
    #!/bin/sh
    
    while true; do
        clear
        echo "T113 LED控制菜单"
        echo "1. 心跳灯闪烁"
        echo "2. 用户LED0闪烁"
        echo "3. 双LED交替闪烁"
        echo "4. 退出"
        read -p "请选择: " choice
    
        case $choice in
            1)
                ./led_blink.sh heartbeat
                ;;
            2)
                ./led_blink.sh user-led0
                ;;
            3)
                while true; do
                    echo 1 > /sys/class/leds/heartbeat/brightness
                    echo 0 > /sys/class/leds/user-led0/brightness
                    sleep 0.3
                    echo 0 > /sys/class/leds/heartbeat/brightness
                    echo 1 > /sys/class/leds/user-led0/brightness
                    sleep 0.3
                done
                ;;
            4)
                exit 0
                ;;
            *)
                echo "无效选择"
                sleep 1
                ;;
        esac
    done
    EOF
    
  2. 添加闪烁计数器

    # 修改Shell脚本
    sed -i '/echo "开始LED闪烁控制..."/a COUNTER=0' led_blink.sh
    sed -i '/echo 0/a COUNTER=$((COUNTER+1))' led_blink.sh
    sed -i '/done/i echo "已闪烁次数: $COUNTER"' led_blink.sh
    

总结

本教程提供了四种在T113开发板上实现LED闪烁的方法,各有优势:

方法 优点 适用场景
Shell脚本 简单易用,无需编译 快速原型开发,初学者
C语言程序 性能高,资源占用少 产品级应用,性能要求高
系统服务 开机自启,后台运行 长期运行,无需人工干预
命令行 快速测试,无需文件 临时验证,简单调试

建议初学者从Shell脚本开始,逐步过渡到C语言程序。实际开发中可根据需求选择合适方法,或组合使用多种技术。

更多回帖

发帖
×
20
完善资料,
赚取积分