• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

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

ef9bfd512f14ac62 2020-07-27 浏览量:578
用定时器做的,但是LED灯只是第一次闪烁后常亮30分钟后熄灭,第二次按按键后就是一直亮了,不知道为什么,请一些高手解答下。

测试代码如下  最重要的就是第一次定时可以 第二次就不行了   STC15W100的芯片


#include  "reg52.h"
#include  "intrins.h"
#define uchar unsigned char
#define uint unsigned int
typedef 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;
                                
                        }
                }
        }
        }
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这是51的单片机, 在使用时,定时器在每次计时完了后,要重新配置计数值,

    51单片机没有重装载功能

    • 发布于 2020-08-06
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 主主循环里定时器2也要重新初始化一下
    • 发布于2020-07-31
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

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