用一个按键实现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;
}
你要的。
------解决方案--------------------