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