找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1600|回复: 11
收起左侧

51单片机按键控制led闪烁模式,为什么按键无法工作

  [复制链接]
ID:1072529 发表于 2024-6-24 17:27 来自触屏版 | 显示全部楼层 |阅读模式
按键控制led闪烁模式,为什么按键无法工作,led不闪烁只亮时可以切换亮的模式,加上闪烁功能后,按键不能切换
回复

使用道具 举报

ID:1080935 发表于 2024-6-24 17:54 | 显示全部楼层
估计又是延时实现的闪烁吧,有延时的主循环对按键检测有影响。
回复

使用道具 举报

ID:1109793 发表于 2024-6-24 17:55 | 显示全部楼层
问了个寂寞啊,起码要贴个代码看看吧
回复

使用道具 举报

ID:161164 发表于 2024-6-24 18:56 | 显示全部楼层
以下是一个流水灯的两种写法
看看如何实现“非阻塞延时”
  1. void main()
  2. {
  3.         uchar i;
  4.         while(1)
  5.         {
  6.                 for(i=0;i<8;i++)
  7.                 {
  8.                         P2 = ~(0x01<<i);
  9.                         delay(200);
  10.                 }
  11.         }
  12. }

  13. void main()
  14. {
  15.         uchar i = 0;
  16.         uint DelayCnt = 2000;
  17.         while(1)
  18.         {
  19.                 DelayCnt++;
  20.                 if(DelayCnt>=2000)
  21.                 {
  22.                         DelayCnt = 0;
  23.                         P2 = ~(0x01<<i);
  24.                         i++;
  25.                         if(i>=8)i=0;
  26.                 }
  27.         }
  28. }
复制代码
回复

使用道具 举报

ID:619259 发表于 2024-6-24 19:11 | 显示全部楼层
闪烁时是不是进入死循环了?
回复

使用道具 举报

ID:123289 发表于 2024-6-25 12:56 | 显示全部楼层
设法不用DELAY()
回复

使用道具 举报

ID:1110945 发表于 2024-6-26 21:36 | 显示全部楼层
DELAY()延时是“阻塞式延时”,要改成定时器延时,
在定时中断内实现LED闪烁就好了。
回复

使用道具 举报

ID:329625 发表于 2024-7-2 09:11 来自触屏版 | 显示全部楼层
延时太多的话  会检车不到按键按下  程序一直在执行延时动作
回复

使用道具 举报

ID:1125252 发表于 2024-7-10 10:34 | 显示全部楼层
实际分为两种工作状态,一种LED闪烁,一种LED亮。可以通过定时器扫描按键,避免LED闪烁占用主程序时,按键按下没有反应。
回复

使用道具 举报

ID:1128761 发表于 2024-7-11 15:02 | 显示全部楼层
贴个代码
回复

使用道具 举报

ID:1053654 发表于 2024-7-11 23:45 | 显示全部楼层
代码都没有分析个寂寞
回复

使用道具 举报

ID:332444 发表于 2024-7-12 10:15 | 显示全部楼层
lkc8210 发表于 2024-6-24 18:56
以下是一个流水灯的两种写法
看看如何实现“非阻塞延时”

对的,这就是非阻塞延时的妙用,也是高级的应用.
初学阶段用阻塞延时理解实现原理,实际项目用非阻塞,提升产品品质,也就是开发者的品质.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表