本教程专为创龙TLT113-MiniEVM开发板编写,提供多种LED闪烁控制方法。无论您是嵌入式开发新手还是有经验工程师,都能找到适合您的解决方案。教程包含Shell脚本、C语言程序、系统服务等多种实现方式。
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
chmod +x led_blink.sh
./led_blink.sh
按下 Ctrl + C 停止LED闪烁
# 修改DELAY变量值后重新运行
sed -i 's/DELAY=0.5/DELAY=0.2/' led_blink.sh
./led_blink.sh
# 修改LED_PATH变量
sed -i 's/heartbeat/user-led0/' led_blink.sh
./led_blink.sh
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
gcc led_blink.c -o led_blink -Wall
./led_blink
按下 Ctrl + C 停止LED闪烁
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
systemctl daemon-reload
systemctl enable led-blink.service
systemctl start led-blink.service
systemctl status led-blink.service
systemctl stop led-blink.service
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
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
权限不足
# 确保以root用户运行
whoami
# 如果显示非root,切换用户
su -
脚本无法执行
# 检查执行权限
ls -l led_blink.sh
# 重新添加权限
chmod +x led_blink.sh
编译错误
# 检查gcc是否安装
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语言程序。实际开发中可根据需求选择合适方法,或组合使用多种技术。
更多回帖