//可以實作閃爍兩秒鐘,從左到右以次亮,從右到左依次滅
#include<reg52.h>
#include<intrins.h>
void delay(unsigned int c) ;
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,w=0,b=0,a=0; int i=0; P1=1; TMOD=0x01; TH0=0xD8F0; TL0=0x00; TR0=1; while(1) { if(TF0==1) { TF0=0; TH0=0xD8F0; //0.01s//10ms TL0=0x00; cnt++; //記錄溢位多少次10ms if(cnt>=10) //run 10times,,is 100ms { cnt=0; P1=~P1; num++; //記錄走了多少個100ms } if(num>=40) //不到30*100ms=3000ms不走這個程式 { TF0=0; //再次清零 TH0=0xD8F0; TL0=0x00; cnt++; a++; //a=a+1 if(a>=1) { P1=0xFF; for(i=0;i<9;i++) { delay(20); P1>>=1; } led0=1; delay(20); led1=1; delay(20); led2=1; delay(20); led3=1; delay(20); led4=1; delay(20); led5=1; delay(20); led6=1; delay(20); led7=1; delay(20); P1=0; //常亮 delay(150); led0=1; led1=1; led2=1; led3=1; led4=1; led5=1; led6=1; led7=1; //長滅 delay(100); //往上都可以正常運行 TF0=0; TH0=0xD8F0; //0.01s//10ms TL0=0x00; b=0;w=0; if(TF0==1) { b++; //記錄溢位多少次 TF0=0; TH0=0xD8F0; //0.01s//10ms TL0=0x00; if(b>=30) //30*10=300ms { P1=~P1; w++; //記錄走了多少個300ms } /* if(w>=20) //20*300=6000ms { } */ } break; } } }//if }
}
void delay(unsigned int c) { unsigned char a, b; for (;c>0;c--)
{ for (b=38;b>0;b--) { for (a=130;a>0;a--); } }
}
uj5u.com熱心網友回復:
你整理一下在發出來吧,這樣子很難看代碼uj5u.com熱心網友回復:
//可以實作閃爍兩秒鐘,從左到右以次亮,從右到左依次滅#include<reg52.h>
#include<intrins.h>
void delay(unsigned int c) ;
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,w=0,b=0,a=0;
int i=0;
P1=1;
TMOD=0x01;
TH0=0xD8F0;
TL0=0x00;
TR0=1;
while(1)
{
if(TF0==1)
{
TF0=0;
TH0=0xD8F0; //0.01s//10ms
TL0=0x00;
cnt++; //記錄溢位多少次10ms
if(cnt>=10) //run 10times,,is 100ms
{
cnt=0;
P1=~P1;
num++; //記錄走了多少個100ms
}
if(num>=40) //不到30*100ms=3000ms不走這個程式
{
TF0=0; //再次清零
TH0=0xD8F0;
TL0=0x00;
cnt++;
a++; //a=a+1
if(a>=1)
{
P1=0xFF;
for(i=0;i<9;i++)
{
delay(20);
P1>>=1;
}
led0=1;
delay(20);
led1=1;
delay(20);
led2=1;
delay(20);
led3=1;
delay(20);
led4=1;
delay(20);
led5=1;
delay(20);
led6=1;
delay(20);
led7=1;
delay(20);
P1=0; //常亮
delay(150);
led0=1;
led1=1;
led2=1;
led3=1;
led4=1;
led5=1;
led6=1;
led7=1; //長滅
delay(100);
// break; //往上都可以正常運行
TF0=0;
TH0=0xD8F0; //0.01s//10ms
TL0=0x00;
b=0;w=0;
if(TF0==1)
{
b++;
TF0=0;
TH0=0xD8F0; //0.01s//10ms
TL0=0x00;
if(b>=30) //30*10=300ms
{
P1=~P1;
w++; //記錄走了多少個300ms
}
/* if(w>=20) //20*300=6000ms
{
} */
} break;
}
}
}//if
}
}
void delay(unsigned int c)
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
uj5u.com熱心網友回復:
不好意思!沒注意!uj5u.com熱心網友回復:
操作P1口即可,無需逐個定義LED轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/77227.html
標籤:單片機/工控
