找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3824|回复: 17
收起左侧

求思路 单片机单按键控制8个Led灯亮灭程序,逐1-8灯或者从8-1

[复制链接]
ID:739432 发表于 2021-10-19 07:49 来自手机 | 显示全部楼层 |阅读模式
请求大侠:用一个按键来分别控制8个Led灯亮灭,逐1→8灯或者从8→1,方向任意。怎么编程?
回复

使用道具 举报

ID:311846 发表于 2021-11-4 13:56 | 显示全部楼层
为什么这么多人回复,网上例子大把!而且一个简单的入门,一看就是小白伸手党
回复

使用道具 举报

ID:332444 发表于 2021-11-4 13:38 | 显示全部楼层
午饭时灵感得横批:指学成才。指望别人指点来学习,指望抄写别人蒙混过关。有感提问的人百相。
因此改写上下联:上联,新生上学三萝卜,下联,新官上任三把火,横批,指学成才。
回复

使用道具 举报

ID:332444 发表于 2021-11-4 10:37 | 显示全部楼层
新官上任三把火(诸葛孔明上任火烧博望坡),新生上学三萝卜(还珠格格上学不求甚解只会萝卜,能把萝卜变成锣钹罗帛罗白全靠别人),横批还想不到,哈哈。。。挺有趣的。
回复

使用道具 举报

ID:453974 发表于 2021-11-3 21:50 | 显示全部楼层
设置一个变量,按下一次按键加一次数;然后用位定义,定义小灯,按下一次点亮一个,清除上一个
回复

使用道具 举报

ID:587810 发表于 2021-11-3 16:57 | 显示全部楼层
在按键按下得程序中编写一个移位得函数语句
回复

使用道具 举报

ID:332444 发表于 2021-11-3 15:22 | 显示全部楼层
本按键代码之所以能跳过抖动,妙就妙在2个判断条件安排的顺序上,只有在按键稳定期间且达到一定时间,所以延时不需要很长时间,按键非稳定期间条件就不会成立,这样显得按键灵敏度很好,所以称为经典,不喜欢写多行代码。
回复

使用道具 举报

ID:332444 发表于 2021-11-3 14:47 | 显示全部楼层
当然,可以加大延时长度用int和修改代码如

  1. if(k1==0&&++xd==0)
  2. {
  3. P0=_crol_(P0,1);
  4. while(k1==0);
  5. }
  6. else xd=0;
复制代码
回复

使用道具 举报

ID:332444 发表于 2021-11-3 14:42 | 显示全部楼层
本按键代码下载到板子上实验正常使用不曾出现抖动现象,特别老旧板子上的按键没条件测试,因为没那样的板子可用来验证。
回复

使用道具 举报

ID:332444 发表于 2021-11-3 14:33 | 显示全部楼层
我博客有众多例子代码,在理解按键代码的基础上随意复制一些代码都可轻松实现,关键是要理解代码。
按键代码逻辑当检测到按键按下后再判断是否过了消抖时间,只要有一个不符合就不会执行按键里面代码,一旦2个条件都成立(按键按下并且达到消抖时间)执行按键里面代码,并且等待按键释放,本例按键按下灯移动1位,且按键释放后才能执行下一次移位。
回复

使用道具 举报

ID:332444 发表于 2021-11-3 14:18 | 显示全部楼层

  1. sbit k1=P1^0;
  2. void main()
  3. {
  4. uchar xd=0;P0=1;
  5. while(1)
  6. {
  7. if(k1==0&&++xd==0)
  8. {
  9. P0=_crol_(P0,1);
  10. while(k1==0);
  11. }
  12. }
  13. }
复制代码
回复

使用道具 举报

ID:739432 发表于 2021-11-3 13:24 来自手机 | 显示全部楼层
xianfajushi 发表于 2021-10-19 20:24
到我博客找流水灯例子有这样切换的,用按键控制即可,经典按键代码:if(k1==0&&++xd==0){k=~k;while(k1==0) ...

在您的博客中没找到。烦劳大侠复发一份
回复

使用道具 举报

ID:964308 发表于 2021-10-20 18:42 | 显示全部楼层
随手写的一个,自己把没定义的变量和没写的函数补全吧

unsigned int p0=0x01;    //这个p是小写
void main()
{
while(1)
{
while(key);    //低电平有效
delay(30);    //延时30ms
if(p0==0x80) p0=0x01;
else p0=p0<<1;
P0=p0;
}
}
回复

使用道具 举报

ID:332444 发表于 2021-10-20 10:58 | 显示全部楼层
1.gif
回复

使用道具 举报

ID:973452 发表于 2021-10-19 22:48 | 显示全部楼层
要看你灯是怎么接的?也就是电路原理
回复

使用道具 举报

ID:130231 发表于 2021-10-19 20:29 | 显示全部楼层
用循环左移,右移,就可实现。逐1,逐2点亮也可以,或者多个也可以。
回复

使用道具 举报

ID:332444 发表于 2021-10-19 20:24 | 显示全部楼层
到我博客找流水灯例子有这样切换的,用按键控制即可,经典按键代码:if(k1==0&&++xd==0){k=~k;while(k1==0);}这样按键控制状态K即可,其余代码到我博客去抄写。https://blog.csdn.net/xianfajushi
回复

使用道具 举报

ID:624769 发表于 2021-10-19 19:51 | 显示全部楼层
你先搞明白 1 等于 亮灯,还是灭灯
再搞明白,按键按下 等于 1 还是 0
8个灯,是一个总线,还是分布各处。

电路原理搞清楚了,然后再考虑编程。不然随便给你个程序,你能成功跑起来的概率 约等于0
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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