#include<reg52.h>
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
sbit led4=P1^4;
sbit led5=P1^5;
sbit led6=P1^6;
sbit led7=P1^7;
void main()
{ unsigned char cnt=0,num=0,c=0; led7=0; led6=1; led5=1; led4=1; led3=1; led2=1; led1=1; led0=0; TMOD=0x01; TH0=0xD8F0; TL0=0x00; TR0=1; while(1) { if(TF0==1) { TF0=0; TH0=0xD8F0; //0.01s//10ms TL0=0x00; cnt++; if(cnt>=5) //run 5times,,is 50ms { cnt=0; led0=~led0; led1=~led1; led2=~led2; led3=~led3; led4=~led4; led5=~led5; led6=~led6; led7=~led7; num++; //記錄走了多少個50ms } } if(num>=40) //不到40*50ms=2000ms不走這個程式 { TF0=0; //再次清零 TH0=0xD8F0; TL0=0x00; c++; led0=0; led1=0; led2=0; led3=0; led4=0; led5=0; led6=0; led7=0; if(c>=100) //溢位一次10ms,共溢位100次1000ms { led0=1; led1=1; led2=1; led3=1; led4=1; led5=1; led6=1; led7=1; } }
}
}
uj5u.com熱心網友回復:
#include<reg52.h>sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
sbit led4=P1^4;
sbit led5=P1^5;
sbit led6=P1^6;
sbit led7=P1^7;
void main()
{
unsigned char cnt=0,num=0,c=0;
led7=0;
led6=1;
led5=1;
led4=1;
led3=1;
led2=1;
led1=1;
led0=0;
TMOD=0x01;
TH0=0xD8F0;
TL0=0x00;
TR0=1;
while(1)
{
if(TF0==1)
{
TF0=0;
TH0=0xD8F0; //0.01s//10ms
TL0=0x00;
cnt++;
if(cnt>=5) //run 5times,,is 50ms
{
cnt=0;
led0=~led0;
led1=~led1;
led2=~led2;
led3=~led3;
led4=~led4;
led5=~led5;
led6=~led6;
led7=~led7;
num++; //記錄走了多少個50ms
}
}
if(num>=40) //不到40*50ms=2000ms不走這個程式
{
TF0=0; //再次清零
TH0=0xD8F0;
TL0=0x00;
c++;
led0=0;
led1=0;
led2=0;
led3=0;
led4=0;
led5=0;
led6=0;
led7=0;
if(c>=100) //溢位一次10ms,共溢位100次1000ms
{
led0=1;
led1=1;
led2=1;
led3=1;
led4=1;
led5=1;
led6=1;
led7=1;
}
}
}
}
uj5u.com熱心網友回復:
不知道為啥擠一塊了uj5u.com熱心網友回復:
程式里沒有互鎖邏輯,led等最多全亮250ms。樓主再把邏輯縷縷,還要注意unsigned char型別的溢位。
uj5u.com熱心網友回復:
計數的值要清零才會熄滅要不不會第二次進去轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/77204.html
標籤:單片機/工控
