找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2115|回复: 8
打印 上一主题 下一主题
收起左侧

求一个单片机检测按键控制LED运行程序的编写思路

[复制链接]
跳转到指定楼层
楼主
ID:915738 发表于 2021-5-5 01:23 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家

各位大神,求一个“通过检测按键次数进入下一个子函数的程序。”大概就是单片机接按键后,每按一下就能切换一个LED灯效的程序,能切换三种灯效就行了,灯效我能自己写,想要的是一个除了灯效外的程序壳子。就是我只要自己添加上灯效代码就能运行的那种。我用的是STC8G1K08A-36I-SOP8宏晶单片机, 应该是P5.5管脚会定义为按键脚。跪谢大神
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:554500 发表于 2021-5-5 08:02 | 只看该作者
大概思路如下:

#include "STC8G.H"

sbit key=P5^5;  //低电平触发按键

char cnt=0;  //按下按键次数

//按键扫描,只支持单次调节,不能连续,防止按键抖动
void key_scan()
{
        static char i=0,j=0;
       
        if(key==0)
        {
                if(i==0)
                {
                        if(key==0&&j++>10)  //防止按键抖动
                        {
                                i=1;
                                cnt++;
                                if(cnt==3)   //只有3种状态,所以这里要清零
                                        cnt=0;
                        }
                }
        }
        else
        {
                i=0;  //按键释放后清零
                j=0;
        }
}

//LED灯状态
void LED_state()
{
        switch(cnt)
        {
                case 0 :  break;  //状态0
                case 1 :  break;  //状态1
                case 2 :  break;  //状态2
        }
}



void main()
{

while(1)
{
         key_scan();
         LED_state();
}
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:592807 发表于 2021-5-5 08:27 | 只看该作者
void Del_key(void)
{
static key_flag = 0;
key_flag+=1;
if(key_flag > 3){key_flag = 1;}
switch(key_flag)
{
case 1:break;
case 2:breal;
case 3:break;
default:break;
}

}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:390416 发表于 2021-5-5 09:06 | 只看该作者
搞个变量 按键按一下 变量增加1  然后 SWITCH 语句 执行不同的程序段  如果你有需要 加我一下 发给你参考

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:569384 发表于 2021-5-5 09:27 | 只看该作者
楼主应该是懂一点的,我个人认为应该这种最基础的东西应该自己先尝试写一下,不行了再把代码发出来提问。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:915738 发表于 2021-5-5 09:46 来自手机 | 只看该作者
18701931930 发表于 2021-5-5 08:02
大概思路如下:

#include "STC8G.H"

跪谢大佬的回复,我LDE灯效的代码要放在哪才能运行。我是玩高达模型的,没接触过单片机,现在只会简单的做出灯效,很多基础知识都不懂,大佬别嫌烦。再次跪谢大佬
回复

使用道具 举报

7#
ID:554500 发表于 2021-5-6 10:00 | 只看该作者
小冰箱 发表于 2021-5-5 09:46
跪谢大佬的回复,我LDE灯效的代码要放在哪才能运行。我是玩高达模型的,没接触过单片机,现在只会简单的 ...


//LED灯状态
void LED_state()
{
        switch(cnt)
        {
                case 0 :  break;  //状态0
                case 1 :  break;  //状态1
                case 2 :  break;  //状态2
        }
}

这个函数里面
这个程序不完整的,只是单纯的给你个思路。
注意:除 P3.0 和 P3.1 外,其余所有 I/O 口上电后的状态均为高阻输入状态,用户在使
用 I/O 口时必须先设置 I/O 口模式
回复

使用道具 举报

8#
ID:723547 发表于 2021-5-6 11:18 | 只看该作者
小冰箱 发表于 2021-5-5 09:46
跪谢大佬的回复,我LDE灯效的代码要放在哪才能运行。我是玩高达模型的,没接触过单片机,现在只会简单的 ...

楼主没接触过单片机,而且目前的需求纯粹的电路也能实现,建议楼主选用纯电路,一个多档开关,轻松搞定
回复

使用道具 举报

9#
ID:889094 发表于 2021-5-6 23:27 | 只看该作者
如果想用单片机,楼主起码应该用几个小时把单片机的基本程序流程看一下,然后再来说程序的事,前面各位给的思路已经很清楚了,想拿来用总得有一点基础才好,补一下吧,不然怎么教会你?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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