标题: 用单片机按键去控制流水灯的开关,求大神指点程序设计思路 [打印本页]

作者: 我爱单片机@    时间: 2019-2-21 10:42
标题: 用单片机按键去控制流水灯的开关,求大神指点程序设计思路
用按键去控制流水灯的开关。主要有以下功能: 一个按键表示左移,另一个按键表示右移,当按下相应的按键时,流水灯会往指定方向流动。


作者: bucker    时间: 2019-2-21 21:12
分别各做一个左移和右移的函数或子程序,设计一个状态机,按下相应的键就改变并保持状态,再根据状态调用各自的函数。
作者: wulin    时间: 2019-2-21 21:28
给你写一个简单的按键控制流水灯方向的程序参考
#include <reg52.h>
#include <intrins.h>//此头文件包含循环左/右移函数
sbit s1=P3^3;
sbit s2=P3^4;

void delay(unsigned int k)
{
        unsigned int i,j;
        for(i=k;i>0;i--)
                for(j=115;j>0;j--);
}
void main()
{
        unsigned char num=0;
//P1驱动8个LED
        P1=0xfe;
        while(1)
        {
                if(s1==0)
                        num=1;       
                if(s2==0)
                        num=2;       
                if(num==1)
                        P1=_crol_(P1,1);//循环左移一位
                if(num==2)
                        P1=_cror_(P1,1);//循环右移一位
                delay(500);//延时0.5秒
        }
}

作者: iofree    时间: 2019-2-22 09:01
本帖最后由 iofree 于 2019-2-22 10:08 编辑
wulin 发表于 2019-2-21 21:28
给你写一个简单的按键控制流水灯方向的程序参考
#include
#include //此头文件包含循环左/右移函数

你这按键没有消抖处理吧?
作者: wulin    时间: 2019-2-22 11:38
iofree 发表于 2019-2-22 09:01
你这按键没有消抖处理吧?

多数情况下按键是需要消抖,但不是全部,根据应用环境选择按键是否需要消抖和判断松手。在这个程序中消抖和判断松手就是多余的赘句。
作者: yzwzfyz    时间: 2019-2-22 12:47
所谓向左向右取决于你的显示排列方案,给人的感觉上是向左或向右。
预先做一套向左的显示方案,再做一套向左的方案。
跟根据按键决定采用哪个方案就可以了。
作者: iofree    时间: 2019-2-22 14:20
wulin 发表于 2019-2-22 11:38
多数情况下按键是需要消抖,但不是全部,根据应用环境选择按键是否需要消抖和判断松手。在这个程序中消抖 ...

你说得也有道理,这个场景确实不需要消抖,不过大多数按键应用都还是需要消抖,给新人建议时顺便帮他们建立起这个概念还是有必要的,以后也许能少走不少弯路
作者: wulin    时间: 2019-2-22 16:33
iofree 发表于 2019-2-22 14:20
你说得也有道理,这个场景确实不需要消抖,不过大多数按键应用都还是需要消抖,给新人建议时顺便帮他们建 ...

你说得有道理,给新人建议时更应该规范些。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1