头像-369911

ef9bfd512f14ac62

个人成就

获得 0 次赞

帮助过0人

单片机如何让按键控制LED灯常亮30分钟后熄灭,下次按按键后

用定时器做的,但是LED灯只是第一次闪烁后常亮30分钟后熄灭,第二次按按键后就是一直亮了,不知道为什么,请一些高手解答下。测试代码如下  最重要的就是第一次定时可以 第二次就不行了   STC15W100的芯片#include  "reg52.h"#include  "intrins.h"#define uchar unsigned char#define uint unsigned inttypedef unsigned int u1;typedef unsigned char u2;      //unsigned char d;unsigned char n=0;uchar min=1; sec=59; //uchar flag;//sbit led2=P3^0;  //sbit led1=P3^1;  //sbit cd=P3^2;    //sbit uv=P3^3;    //sbit k1=P3^4;   bit flash;//bit  key;sfr IE2=0xAF;sfr AUXR=0x8E;sfr T2H=0xD6;sfr T2L=0xD7;void shijian(); ///@@**************************************************************************/void delay_1s()    {int ab;                for(a=1000;a>0;a--)          for(b=150;b>0;b--);}/@@**************************************************************************/                void keypros()      {if(k1==0)                {                delay_1s();                        if(k1==0)                        {                        flash=~flash;                          key=1;                        }                }                while(!k1);}/@@**************************************************************************/void ledflash(){                if(flash==1&&key==1)                {                        for(d=0;d<10;d++)                        {                  led1=0;                        delay_1s();                        led1=1;                        delay_1s();                                }                          key=0;                                led1=0;                    uv=1;                                        }    if(flash==0)                {                                led1=1;                    uv=0;                }}/@@**************************************************************************/void Int1Init()                  //{  IT0=1;        EX0=1;        EA=1;}/@@**************************************************************************/void Timer2Init()                  //{        IE2|=0x04;        T2H=(65536-50000)/256;                   T2L=(65536-50000)%256;        EA=1;   //        AUXR|=0x10; //        }/@@**************************************************************************/void main()        {         led1=1;  uv=0;        led2=1;        flash=0;          Timer2Init();        while(1)        {                         keypros();                  ledflash();                Int1Init();                        }                }/@@**************************************************************************/void Int0()    interrupt 0     //{                if(cd==0)        {        uv=0;                      //        led2=~led2;                //        }        else        {        led2=1;        }}/@@**************************************************************************/void Timer2() interrupt 12{  T2H=(65536-50000)/256;                   T2L=(65536-50000)%256;        flag++;        if(min==0&&sec==0){  uv=0;}if(flag>=20)        {        flag=0;                sec--;                if(sec<=0)                {                sec=59;                        min--;                        if(min<=0)                        {                          min=0;                                sec=0;                                AUXR|=0x00;                                                        }                }        }        }