当前位置: 首页 > news >正文

玩转单片机之智能车小露——LED闪烁实战

用单片机点亮一颗LED非常简单,让一颗LED闪烁也很简单,比如写一段下面这样的程序:

while(1){ 				// 无限循环LED1 = 0; 			// 点亮LEDdelay_ms(300); 		// 延时300msLED1 = 1; 			// 熄灭LEDdelay_ms(300); 		// 延时300ms
}

但是在实用程序中真的会采用这样的方式让LED闪烁吗?
显然不能,空闲时间都用来延时,那单片机除了闪烁LED还能干什么呢?
不用延时,就只能使用定时器和中断控制LED点亮和熄灭。

定时中断里闪烁LED

要求LED闪烁时点亮200ms然后熄灭800ms/1800ms/4800ms,可以编写在100ms定时函数中调用的回调函数:

//在100ms定时函数中调用
void SystickCallbackLED(void){static uint8 i = 0;if(LEDMode & 0x02){			//所有闪烁模式第2位为1if(++i > 2)				//亮200ms其余时间熄灭LED = FALSE;if(i > LEDFlashCycle){i = 0;LED = TRUE;}}
}

其中LEDFlashCycle代表闪烁总周期(单位100ms),根据不同的需求进行设置。

LED模式及闪烁周期选择

使用LEDSetMode()函数设置LED模式,可选择常亮、熄灭(直接控制LED),或以不同周期闪烁(设置闪烁总周期)。

#define     LED_MODE_OFF        0x00
#define     LED_MODE_ON         0x01
#define     LED_MODE_FLASH1S    0x02
#define     LED_MODE_FLASH2S    0x03
#define     LED_MODE_FLASH5S    0x06uint8 LEDMode;
uint8 LEDFlashCycle;void LEDSetMode(uint8 mode){LEDMode = mode;switch(mode){case(LED_MODE_OFF):LED = FALSE;break;case(LED_MODE_ON):LED = TRUE;break;case(LED_MODE_FLASH_1S):LEDFlashCycle = 10;break;case(LED_MODE_FLASH_2S):LEDFlashCycle = 20;break;case(LED_MODE_FLASH_5S):LEDFlashCycle = 50;break;default:break;}
}
  • 本文采用的单片机为STC32G系列,感兴趣的朋友可以参考测试,或去Gitee上下载例程。
  • 下载地址:https://gitee.com/loganxiang/lgxsmartcar ,参考led.h/led.c。
http://www.hskmm.com/?act=detail&tid=37650

相关文章:

  • ord() 函数
  • 2025.10.23总结 - A
  • 大模型 | VLA 初识及在自动驾驶场景中的应用
  • ExPRT.AI如何预测下一个将被利用的漏洞
  • Redis中的分布式锁之SETNX底层实现
  • 攻击模拟
  • 2025家纺摄影公司推荐,南通鼎尚摄影专注产品视觉呈现
  • AI元人文构想的跨学科研究:技术实现与人文影响分析——对自由与责任的再框架化(DeepSeek基于Ai元人文系列文章研究)
  • Python---简易编程解决工作问题
  • 日总结 16
  • 比赛题解 总结
  • DM8 安装包 for linux_x86
  • MPK(Mirage Persistent Kernel)源码笔记(1)--- 基础原理
  • 模拟can通信
  • 解题报告-拯救计划(概率 DP)
  • 日志分析-IIS日志分析
  • Min_25 筛
  • 解码Linux文件IO之库的制作与应用
  • 20251023 正睿二十连测
  • 1019:浮点数向零舍入(分正负取整)
  • 二分图/忆re.
  • 《IDEA 2025长效采用配置指南:有效期配置至2099年实战之JetBrains全家桶有效》​
  • ZKW线段树
  •  pytorch 66页实验题
  • Visual Studio 插件 - 喝水提醒 - 指南
  • JAVA 排序用法
  • 10/23
  • 10月23日
  • 第3天(中等题+简单题 数组、滑动窗口)
  • esp32-usb-jtag 调试踩坑