用P1口作為輸出口,接8位用作邏輯電平顯示的發光二極管。設計程序使發光二極管間
隔300ms先奇數亮再偶數亮,循環3次;一個發光二極管亮上下循環3次;兩個分別從兩
邊向中間流動3次;再從中間向兩邊流動3次;8個全部閃爍3次;關閉全部發光二極管
,停止。綜合實驗程序:#庫定義
#include<reg52.h>
#include<intrins.h>
sbit led=P1^0; #位定義
int i,j,k,num,e,p,m;
void delay(int k) #定義延時函數
{
while(k--);
}
void timer0() #定時器0的初始化
{
TMOD=0X01; #工作模式
TR0=1;
EA=1; #開啟總中斷
ET0=1;
TH0=0XDc; #定時時間 需經過換算
TL0=0X00;
}
void Pled()
{
EA=0;
//P1=0xfe;
//delay(50000);
for(p=0;p<3;p++){
P1=0xfe;
for(num=0;num<8;num++)
{
delay(50000);
P1=_crol_(P1,1); #_crol_(左移函數)
if(num==6)
{
for(e=0;e<6;e++){
delay(50000);
P1=_cror_(P1,1); #_cror_(左移函數)
}
}
}
}
}
void flowmiddle()
{
for(m=0;m<3;m++)
{
P1=0x7e;
delay(50000);
P1=0XBD;
delay(50000);
P1=0XDB;
delay(50000);
P1=0XE7;
delay(50000);
}
for(m=0;m<3;m++)
{
P1=0XE7;
delay(50000);
P1=0XDB;
delay(50000);
P1=0XBD;
delay(50000);
P1=0x7e;
delay(50000);
}
for(m=0;m<3;m++){
P1=0xff;
delay(50000);
P1=0;
delay(50000);
}
}
void main()
{
timer0();
while(1){
if(j==7)
{ j=0;
Pled();
flowmiddle();
} if(j==0)
{
P1=0xff;
}
}
}
void time0() interrupt 1 #定時器0中斷響應
{
TH0=0Xdc;
TL0=0X00;//10ms
i++;
if(i==30)
{ i=0;
j++;
if(j%2==0){
P1=0x55;}
if(j%2!=0)
{
P1=0xaa;
}
}
}
實驗實現說明:使用定時器0設定一個計時300ms的計時器,通過判斷變量j在計時器計時到后是奇偶數,分別亮對應的小燈,當變量到7時,清除變量值,并執行通過左右移操作,以及流向中間的操作。
|