找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2136|回复: 9
收起左侧

关于51单片机用两个独立按键分别控制一个LED灯亮灭时的问题

[复制链接]
ID:1056086 发表于 2022-12-11 10:14 | 显示全部楼层 |阅读模式
            
我的思路是在我按下K1时,经过消抖后led1亮起,然后我松手,结束这个if语句,此时led1继续亮起,待我按下K2时,led熄灭,不过当我实践起来时,按下K1确实亮起,松手依然亮,但是按下K2却不会熄灭,并且按其他的(比如K1)没有反应,没有专门学过C语言,直接入手的单片机,感觉有常识性问题,求各位大佬指点。

#include <REGX52.H>

void Delay1ms(unsigned int xms)                //@12.000MHz
{
        unsigned char i, j;
        while(xms--)
{        i = 2;
        j = 239;
        do
        {
                while (--j);
        } while (--i);
}
       
}

void main()
{
        while(1)
        {
                        if(P3_1==0)
                {   Delay1ms(20);
                       
                        P2_0=0;
                       
                }       
                        if(P3_2==0)
                {
                        Delay1ms(20);
                        P2_0=1;
                }               
        }               
}       

回复

使用道具 举报

ID:86450 发表于 2022-12-11 11:10 | 显示全部楼层
加个  else
pppp.png

评分

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

查看全部评分

回复

使用道具 举报

ID:1055461 发表于 2022-12-11 13:07 | 显示全部楼层
换个if语句
回复

使用道具 举报

ID:584814 发表于 2022-12-11 14:49 | 显示全部楼层
1、消抖的写法有问题,程序在按键20ms后并不检测按键状态,仅起到延时作用;
2、貌似不是二楼加 ELSE 的问题,理论上加不加的两个条件判断都可以顺序执行。
回复

使用道具 举报

ID:401564 发表于 2022-12-11 18:13 | 显示全部楼层
虽然不是完美的代码,但逻辑上是没有问题的
加不加else都没有关系
看一下硬件电路和单片机其它的代码
最好是有原理图和全部的代码
回复

使用道具 举报

ID:213173 发表于 2022-12-11 19:26 | 显示全部楼层
void main()
{
        while(1)
        {
                if(P3_1==0)
                {
                        Delay1ms(20);
                        if(P3_1==0)//延时后再次确认按下
                        {       
                                P2_0=0;
                                while(!P3_1);//等待松手
                        }      
                }
                if(P3_2==0)
                {
                        Delay1ms(20);
                        if(P3_2==0)
                        {
                                P2_0=1;
                                while(!P3_2);
                        }               
                }               
        }   
}
回复

使用道具 举报

ID:1056086 发表于 2022-12-13 16:31 | 显示全部楼层

谢谢指点,谢谢
回复

使用道具 举报

ID:1056086 发表于 2022-12-13 16:32 | 显示全部楼层

谢谢指点,谢谢
回复

使用道具 举报

ID:1056086 发表于 2022-12-13 16:33 | 显示全部楼层
man1234567 发表于 2022-12-11 14:49
1、消抖的写法有问题,程序在按键20ms后并不检测按键状态,仅起到延时作用;
2、貌似不是二楼加 ELSE 的问 ...

谢谢指点,谢谢
回复

使用道具 举报

ID:1056086 发表于 2022-12-13 16:34 | 显示全部楼层
wulin 发表于 2022-12-11 19:26
void main()
{
        while(1)

谢谢指点,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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