看看这个单片机程序
以下这个程序是来控制LED灯亮一个时间,灭是一个时间。怎么亮了一次就一直灭的状态?本来是控制LED灯P2口控制亮10S
灭5S一直这样循环下去。请高手指点啊 或者直接写个样板给我看看!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void ds();
uchar T=0;
void ds()
{
TMOD = 0x01;
TH0 = 0x3c;
TL0 = 0xb0;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void main()
{
ds();
while(1);
}
void timer0() interrupt 1
{
TH0 = 0x3c; //50MS
TL0 = 0xb0;
T++;
if(T>=200) //10S
{
P2=1;
T=0;
T++;
if(T>=60)
{ P2=0;
T=0;
}
}
}
很明显,T从0开始加,加到60后,你就把T给清零了,这样T永远也到不了200,所以P2一直等于0,至于亮了一次,估计就是初始化的时候p2=1了吧,以后就一直等于0了。
T=0;
T++; 后面可能会大于2么?
你的程序混乱不堪
你光说一句混乱有什么用?如果这程序可以,我用的着来问么?你还不如别回答。
首先T自加到200后清0,在自加到60 在清0,之后返回开始T=0那
大哥这样是不是错了 你是否可以帮修改一下?
T>=60后就不会在返回原来的基础上吗?
我刚学习,什么都不会,希望大家可以多指教多鼓励,谢谢!
那个while 有问题
虚心请教 多多加油
if(T>=200) //10S
{
P2=1;
T=0;
T++;
if(T>=60)
{ P2=0;
T=0;
}
}问题就在这呢
if(T>=60)
{ P2=0;
T=0;
}这句进不去,前面将T清0了
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void ds();
uchar T=0;
uchar m=0;
void ds()
{
TMOD = 0x01;
TH0 = 0x3c;
TL0 = 0xb0;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void main()
{
ds();
while(1);
}
void timer0() interrupt 1
{
TH0 = 0x3c; //50MS
TL0 = 0xb0;
if(m==0)
{T++;
P2=1;
if(T>=200) //10S
{
T=0;
m=1;
}
}
else
{
T++;
P2=0;
if(T>=100) //10S
{
T=0;
m=0;
}
}
}
这个帖子是我以前写的,你写的这个OK。谢谢你!