#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
void ring_up();
void ring_down();
uchar light(uchar);
void stream(uchar);
void light_1();
void light_2();
void light_3();
void light_4();
void light_5();
void light_6();
void light_7();
void light_8();
sbit P1_1=P1^0;
sbit P1_2=P1^1;
sbit P1_3=P1^2;
sbit P1_4=P1^3;
sbit P1_5=P1^4;
sbit P1_6=P1^5;
sbit P1_7=P1^6;
sbit P1_8=P1^7;
sbit BEEP=P2^3;
uchar temp=0xfe;
uchar tp1=0xfe;
uchar tp2=0xfc;
uchar tp3=0xf8;
uchar tp4=0xf0;
uchar tp5=0xe0;
uchar tp6=0xc0;
uchar tp7=0x80;
uchar tp8=0x00;
void main()
{
//<1>第一個燈管以間隔200ms閃爍
/*
while(1)
{
P1_1=0;
delay(2); //200ms;
P1_1=1;
delay(2);
}
*/
//<2>由上至下間隔1s流動,其中每個管亮500ms,滅500ms,亮時蜂鳴器發聲。
/*
while(1)
{
P1=temp;
delay(5);
ring_up();
temp=_crol_(temp,1);//犯了一個C語法錯誤,如果沒有temp=的話temp值是不會改變的,led1將一直亮
ring_down();
}
*/
//<3>8個發光管來回流動,併發出滴滴聲.
/*
while(1)
{
int n1,n2;
for(n1=0;n1<7;n1++)
{
P1=temp;
delay(1);
ring_up();
temp=_crol_(temp,1);
ring_down();
}
for(n2=0;n2<7;n2++)
{
P1=temp;
delay(1);
ring_up();
temp=_cror_(temp,1);
ring_down();
}
}
*/
//<4>8個發光管演示8位二進制數累加過程
while(1)
{
P1=0xff;
P1_1=0;
delay(5); //1
P1_1=1;
delay(5);
P1_1=0;
delay(5); //1+1
P1_1=1;
delay(5);
P1_2=0;
delay(5);
P1_2=1; //2
delay(5);
P1_2=0;
delay(5);
P1_2=1; //2
delay(5);
P1_1=0;
delay(5);
P1_1=1; //2+1
delay(5);
P1=0xfc;
delay(5);
P1=0xff; //3
delay(5);
P1=0xfc;
delay(5); //3
P1=0xff;
delay(5);
P1_1=0;
delay(5); //3+1
P1_1=1;
delay(5);
P1=0xfb;
delay(5);
P1=0xff; //4
delay(5);
P1=0xfb;
delay(5); //4
P1=0xff;
delay(5);
P1_1=0;
delay(5); //4+1
P1_1=1;
delay(5);
P1=0xfa;
delay(5);
P1=0xff; //5
delay(5);
P1=0xfa;
delay(5);
P1=0xff; //5
delay(5);
P1_1=0;
delay(5); //5+1
P1_1=1;
delay(5);
P1=0xf9;
delay(5);
P1=0xff; //6
delay(5);
P1=0xf9;
delay(5);
P1=0xff; //6
delay(5);
P1_1=0;
delay(5); //6+1
P1_1=1;
delay(5);
P1=0xf8;
delay(5);
P1=0xff; //7
delay(5);
P1=0xf8;
delay(5);
P1=0xff; //7
delay(5);
P1_1=0;
delay(5); //7+1
P1_1=1;
delay(5);
P1=0xf7;
delay(5);
P1=0xff; //8
delay(5);
P1=0xf7;
delay(5);
P1=0xff; //8
delay(5);
P1_1=0;
delay(5); //8+1
P1_1=1;
delay(5);
P1=0xf6;
delay(5);
P1=0xff; //9
delay(5);
P1=0xf6;
delay(5);
P1=0xff; //9
delay(5);
P1_1=0;
delay(5); //9+1
P1_1=1;
delay(5);
P1=0xf5;
delay(5);
P1=0xff; //10
delay(5);
P1=0xf5;
delay(5);
P1=0xff; //10
delay(5);
P1_1=0;
delay(5); //10+1
P1_1=1;
delay(5);
P1=0xf4;
delay(5);
P1=0xff; //11
delay(5);
P1=0xf4;
delay(5);
P1=0xff; //11
delay(5);
P1_1=0;
delay(5); //11+1
P1_1=1;
delay(5);
P1=0xf3;
delay(5);
P1=0xff; //12
delay(5);
P1=0xf3;
delay(5);
P1=0xff; //12
delay(5);
P1_1=0;
delay(5); //12+1
P1_1=1;
delay(5);
P1=0xf2;
delay(5);
P1=0xff; //13
delay(5);
P1=0xf2;
delay(5);
P1=0xff; //13
delay(5);
P1_1=0;
delay(5); //13+1
P1_1=1;
delay(5);
P1=0xf1;
delay(5);
P1=0xff; //14
delay(5);
P1=0xf1;
delay(5);
P1=0xff; //14
delay(5);
P1_1=0;
delay(5); //14+1
P1_1=1;
delay(5);
P1=0xf0;
delay(5);
P1=0xff; //15
delay(5);
P1=0xf0;
delay(5);
P1=0xff; //15
delay(5);
}
//<5>8個發光管間隔200ms由上至下,再由下至上,再重複一次,然後全部熄滅再以300ms間隔全部閃爍5次,重複次過程
/*
while(1)
{
int n,i,j,k;
for(n=0;n<2;n++)
{
for(i=0;i<7;i++)
{
P1=temp;
delay(2);
temp=_crol_(temp,1);
}
for(j=0;j<7;j++)
{
P1=temp;
delay(2);
temp=_cror_(temp,1);
}
}
P1=0xff;
for(k=0;k<5;k++)
{
P1=0x00;
delay(3);
P1=0xff;
delay(3);
}
}
*/
//<6>間隔300ms第一次一個管流動一次,第二次兩個管流動,第三次...依次到8個管亮,然後重複
/*
while(1)
{
light_1();
light_2();
light_3();
light_4();
light_5();
light_6();
light_7();
light_8();
}
*/
//<7>間隔300ms先奇數亮再偶數亮,循環3次,一個燈上下循環3次,兩個分別從兩邊往中間
//流動3次,再從中間往兩邊流動3次,8個全部閃爍3次,關閉發光管,程序停止
/*
uchar n1=3,n2=3,n3=8,n4=3,n5=3,n6=3;
while(n1--)
{
P1=0x55;
delay(5);
P1=0xAA;
delay(5);
}
while(n2--)
{
temp=0xfe;
while(n3--)
{
P1=temp;
delay(5);
temp=_crol_(temp,1);
}
n3=8;
}
while(n4--)
{
P1=0x81;
delay(5);
P1=0x42;
delay(5);
P1=0x24;
delay(5);
P1=0x18;
delay(5);
P1=0x3c;
delay(5);
P1=0x7e;
delay(5);
P1=0xff;
delay(5);
}
while(n5--)
{
P1=0x18;
delay(5);
P1=0x24;
delay(5);
P1=0x42;
delay(5);
P1=0x81;
delay(5);
P1=0xc3;
delay(5);
P1=0xe7;
delay(5);
P1=0xff;
delay(5);
}
while(n6--)
{
P1=0x00;
delay(5);
P1=0xff;
delay(5);
}
P1=0xff;
delay(10000);
*/
}
void delay(uint N) // 100ms*N
{
unsigned int i;
unsigned int j;
for(i=N;i>0;i--)
for(j=11512;j>0;j--);
}
/*
void ring_up()
{
BEEP=0;
}
void ring_down()
{
BEEP=1;
}
*/
/*
uchar light(uchar n)
{
return _crol_(temp,n-1);
}
void stream(uchar n)
{
int i;
temp=light(n);
for(i=0;i<7-n;n++)
{
P1=temp;
delay(3);
temp=_crol_(temp,1);
}
}
*/
/*
void light_1()
{
int n;
tp1=0xfe;
for(n=0;n<8;n++)
{
P1=tp1;
delay(3);
tp1=_crol_(tp1,1);
}
}
void light_2()
{
int n;
tp2=0xfc;
for(n=0;n<7;n++)
{
P1=tp2;
delay(3);
tp2=_crol_(tp2,1);
}
}
void light_3()
{
int n;
tp3=0xf8;
for(n=0;n<6;n++)
{
P1=tp3;
delay(3);
tp3=_crol_(tp3,1);
}
}
void light_4()
{
int n;
tp4=0xf0;
for(n=0;n<5;n++)
{
P1=tp4;
delay(3);
tp4=_crol_(tp4,1);
}
}
void light_5()
{
int n;
tp5=0xe0;;
for(n=0;n<4;n++)
{
P1=tp5;
delay(3);
tp5=_crol_(tp5,1);
}
}
void light_6()
{
int n;
tp6=0xc0;
for(n=0;n<3;n++)
{
P1=tp6;
delay(3);
tp6=_crol_(tp6,1);
}
}
void light_7()
{
int n;
tp7=0x80;
for(n=0;n<2;n++)
{
P1=tp7;
delay(3);
tp7=_crol_(tp7,1);
}
}
void light_8()
{
int n;
tp8=0x00;
for(n=0;n<1;n++)
{
P1=tp8;
delay(3);
tp8=_crol_(tp8,1);
}
}
*/