标题: 单片机按键控制LED的实现 感谢各位大佬抽空回复 [打印本页]

作者: 79498    时间: 2020-7-24 11:04
标题: 单片机按键控制LED的实现 感谢各位大佬抽空回复
各位大佬,请教一个单片机问题,如一个按键按一次   控制一个LED常亮,并倒计时2分钟后熄灭,但是按键并未清零,下次想点亮LED的时候,还需要多按一次按键(相当于关闭), 我想问下怎么使下次点亮LED时候,只需要按一次点亮就行,是不是需要在定时器结束时候按键取反下,但是按键不是自锁式的,所以应该怎么实现呢?感谢各位大佬抽空回复
作者: 琪姐2020    时间: 2020-7-24 14:20
说一下我的思路哈。首先判断按下是否按下,按下之后产生一个LED标记。若是按键松手则复位按键。那么可以通过这个按下按键产生的LED标记去控制灯的亮灭,例如灯需要亮两分钟,那么在两分钟后将LED标记清0即可
作者: robinsonlin    时间: 2020-7-24 14:52
本帖最后由 robinsonlin 于 2020-7-24 15:18 编辑

#define K1                    P37
#define LED                    P36

unsigned long SysTick;
unsigned char KFlag;

void Delay10ms()                //@22.1184MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 1;
        j = 216;
        k = 35;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}
void Timer0Init(void)                //1毫秒@22.1184MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0x9A;                //设置定时初值
        TH0 = 0xA9;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}

void main()
{
    K1 = 1;
    LED = 0;
    KFlag = 1;      Timer0Init() ;
   EA = 1;

    while(1)
    {
         if(K1==0 && KFlag==1)
         {
             Delay10ms();
             if(K1==0 && KFlag==1)
             {
                 T1 = SysTick;
                 KFlag = 0;
                 //LFlag = 1;
                 LED = 1;
             }
         }

         if(K1==0 && LED==1)
         {
             Delay10ms();
             if(K1==0 && LED==1)
             {            
                 LFlag = 0;
                 LED = 0;
             }
         }

         if((SysTick-T1)>=120000 && LED==1)
         {
             LED = 0;
             LFlag = 0;
         }
    }
}


void tm0_isr() interrupt 1         //中断入口
{
        SysTick++;
}



作者: SKYLAR123    时间: 2020-7-24 17:22
你可以做个标志位,当按键再次按,下倒计时2分钟就清零关闭LED,不再进入倒计时2分钟,再次按下点亮并倒计时2分钟后熄灭
作者: shuisheng    时间: 2020-7-24 19:00
@坛子,找一些案例来练练就什么都整明白了,不要整天的想这样想那样又不想自己动手敲代码,是学不了什么东东的
作者: xxpp2011    时间: 2020-7-24 19:05
LED亮的条件加一个就好了,
按键按下且标志为1时LED亮2分钟同时标志置零,
按键按下且标志为0时LED不动,标志置一
作者: lxbhcy    时间: 2020-7-28 11:45
弄个变量a=0,按一下按键,a+1;判断a值,灯亮倒计时,时间到了,a清0,灯灭
作者: 79498    时间: 2020-7-28 14:43
谢谢大家回复,这个问题已经通过标志位解决,谢谢大家提供思路




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