前言
本教程专为创龙TLT113-MiniEVM开发板编写,提供多种LED闪烁控制方法。无论您是嵌入式开发新手还是有经验工程师,都能找到适合您的解决方案。教程包含Shell脚本、C语言程序、系统服务等多种实现方式。
硬件准备
- 创龙TLT113-MiniEVM开发板
- Type-C串口线(用于终端连接)
- 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闪烁
高级功能(可选)
- 自定义闪烁频率 :
# 修改DELAY变量值后重新运行
sed -i 's/DELAY=0.5/DELAY=0.2/' led_blink.sh
./led_blink.sh
- 控制不同LED :
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_file = fopen(led_path, "w");
if(led_file) {
fputs("1", led_file);
fclose(led_file);
} else {
perror("无法打开LED设备");
return 1;
}
usleep(500000);
led_file = fopen(led_path, "w");
if(led_file) {
fputs("0", led_file);
fclose(led_file);
}
usleep(500000);
}
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
常见问题解决
-
LED不响应
# 检查LED路径是否正确
ls /sys/class/leds/
# 手动测试LED
echo 1 > /sys/class/leds/heartbeat/brightness
-
权限不足
whoami
su -
-
脚本无法执行
ls -l led_blink.sh
chmod +x led_blink.sh
-
编译错误
gcc --version
apt update
apt install build-essential
高级技巧
-
创建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
-
添加闪烁计数器
# 修改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语言程序。实际开发中可根据需求选择合适方法,或组合使用多种技术。