用定时器0,控制LED的闪灯频率。按K1,LED常亮,再按K1,LED5HZ闪烁,三按K1,LED1HZ闪烁,四按K1,LED灭。第一次上电,LED工作顺序是正常的,当按到第五次K1,LED就不是常亮,是1HZ的闪烁,顺序反过来亮了,真不解,下面是我们程序,请大家帮忙看看,谢谢~~
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sfr AUXR=0x8e;
sbit LED=P3^3;
sbit key=P2^6;
unsigned char counter;
unsigned char keycnt;
unsigned char i=0;
void Delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void main()
{
//AUXR|=0x80; //定时器0为1T模式//
AUXR&=0x7f; //定时器0为12T模式//
LED=1;
key=1;
TMOD=0x00; //设置定时器0为模式0
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定时值初值
counter=0;
keycnt=2;
EA=1; //开总中断//
ET0=1; //开启内部定时器中断0;
TR0=0; //打开定时器0
while(1)
{
if(key==0)
{
Delay(10);
if(key==0)
{
i++;
if(i==1)
{
TR0=0;
LED=0;
}
if(i==2)
{
TR0=1;
}
if(i==3)
{
TR0=1;
keycnt=keycnt+28;
if(keycnt>30)
{
keycnt=2;
}
}
if(i==4)
{
TR0=0;
LED=1;
i=0;
}
}
}
while(!key);
Delay(10);
}
}
void KEYtime2() interrupt 1
{
TF0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定时值初值
counter++;
if(counter>=keycnt)
{
counter=0;
LED=~LED;
}
}
|