当前位置: 代码迷 >> 单片机 >> 紧急用按键控制led亮1s灭5s,如此循环3次结束。请大侠指点
  详细解决方案

紧急用按键控制led亮1s灭5s,如此循环3次结束。请大侠指点

热度:53   发布时间:2016-04-28 15:43:57.0
紧急求救!!!用按键控制led亮1s灭5s,如此循环3次结束。请大侠指点。
用一个按键实现led亮1s灭5s,如此循环,当按键按下,则再循环3次 就结束。

下面程序当按下时,就立即停止啦,要么一直亮着,卟再循环3次, 不知道为什么。请大侠们指点,谢谢咯。

#include <AT89X52.H>//头文件
#define uchar unsigned char
#define uint unsigned int 

static uchar num,t;
sbit led2=P0^2;//位定义
sbit key1=P2^0;

void init()
{
TMOD=0x10;//TMOD设定0x01=0000 0001

TH1=(65536-45872)/256;//初值设定
TL1=(65533-45872)%256;
  EA=1;//IE设定 开放中断
ET1=1;//开启中断T0


TR1=1;
 



}

void delay(uint xms)
{  
  uint i,j;
for(i=0;i<xms;i++)
for(j=110;j>0;j--);
}

void display1()
{
if(num==20)//1s 钟
  {  
 
led2=1;//mi deng
  }
if(num==120)//5s 
  {  
  led2=0;//liang deng 
num=0;
  }
}

void keysan()
{
if(key1==0)
{  
delay(10);
if(key1==0)
{
for(t=0; t < 3;t++ )
{
display1();
}
while(1);  
}
 
 
}
else
{
display1();
}
}


void main()
{
init();

while(1)
{
  keysan();
 
};
}


void t0_time() interrupt 3//用中断1
{
TH1=(65536-45872)/256;//重新载入初值
TL1=(65536-45872)%256;
num++;//计数
}



------解决方案--------------------
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit led2=P0^2;
sbit key1=P2^0;
uchar ss;
void delay(uint xms)
{
uint i,j;
for(i=0;i<xms;i++)
for(j=110;j>0;j--);
}
void main ()
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while (1)
{

if (key1==0)
{
delay(5);
if (key1==0)
{
TR0=1;

while (key1==0);
}
}
if (ss==4)
{
TR0=0;
led2=1;
}
}
}
void t0() interrupt 1
{
char n;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n--;
if (n==120)
{
led2=0;
}
if (n==100)
{
led2=1;
ss++;
}
if (n==-1)n=121;
}
你要的。
------解决方案--------------------
探讨
楼上 dsoyy :
void keysan()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
for(t=0; t < 3;t++ )
{
display1();
}
while(1); /////////////////////////////死循环了,屏蔽掉 就是需要在这里停止,因为for循环里循环三 /////////////……
  相关解决方案