如何用单片机定时控制LED

陈伙宜 2020-09-01 11:07:42
如何用单片机定时控制LED,当按下K1时LED亮3秒然后熄灭,当按下K2时LED亮5秒然后熄灭,按下K3时LED亮10秒然后熄灭
...全文
56681 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiguojie19892 2020-09-22
  • 打赏
  • 举报
回复
引用 6 楼 萌新忆梦 的回复:
最简单 switch(key); //(判断按下哪个键) case 1 : led亮 延时3s led灭; case 2 : led亮 延时5s led灭; case 3 : led亮 延时10s led灭;
楼主要用定时器的方式 首先需要初始化定时器,启用更新中断,中断就是关闭led和定时器自身。 然后在按键里面设置定时器的延时时间,并启用定时器。 main() { switch(key); //(判断按下哪个键) case 1 : led=1; set TIM3 cnt 3S; enable TIM3; case 2 : led=1; set TIM3 cnt 3S; enable TIM3; case 3 : led=1; set TIM3 cnt 3S; enable TIM3; } 中断函数: led=0; disable TIM3; 中断程序:
萌新忆梦 2020-09-17
  • 打赏
  • 举报
回复
最简单 switch(key); //(判断按下哪个键) case 1 : led亮 延时3s led灭; case 2 : led亮 延时5s led灭; case 3 : led亮 延时10s led灭;
xws245925587 2020-09-04
  • 打赏
  • 举报
回复
1、使用状态机 + 定时器; 2、使用时间片
warmwinter98 2020-09-03
  • 打赏
  • 举报
回复
以51系列为例, 1、定义一个50ms的定时器(T0或T1都可以),工作方式不限(注意时间常数重置以及定时累计计数),做好初始化。 比如,用T0,方式1,采用中断方式 TMOD = 0x01; TH0 = (65536-50000) / 256; //时间常数实现方式可以多种 TL0 = (65536-50000) % 256; ET0 = 1; //T0中断允许 EA = 1; //总中断开关打开 TR0 = 1; //启动T0 2、定义一个全局变量 int lightCountDown = -1; 3、定义T0的中断响应处理函数 void t0_int(void) interrupt 1 { TH0 = (65536-50000) / 256; TL0 = (65536-50000) % 256; if (lightCountDown > 0) lightCountDown--; if (lightCountDown == 0) { lightCountDown = -1; //todo 关闭LED } } 4、在判定有按键发生时,进一步判断K1或K2或K3,分别设置lightCountDown为60或100或200,然后打开led的控制,使其亮 如果功能单一,不采用中断方式也能在前台main的while循环中达到同样的效果。也可以在判断有按键后再开启定时及中断处理。
qq_45056834 2020-09-02
  • 打赏
  • 举报
回复
判断语句就好了啊
硬件拾遗 2020-09-01
  • 打赏
  • 举报
回复
一般就是配置一个定时器,1ms进入一次中断,然后定义一个倒计时变量timeDown,如果timeDown大于零,就在定时中断里递减。
读到K1,点亮LED,设置timeDown=3000,然后在while里不断判断timeDown是否等于零,等于零就熄灭LED。其他同理。
  • 打赏
  • 举报
回复
每个按键赋予不同的时间值问题

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧