2.led燈閃爍

 


P1口上的第一個發光二極管L1不停地一亮一滅,閃爍的時間間隔爲0.2

彙編:

ORG 0
START: CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY
LJMP START
DELAY: MOV R5,#20 ;
延時子程序,延時0.2
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END


C語言:

#include <AT89X51.H>


sbit L1=P1^0;

void delay02s(void) //
延時0.2秒子程序
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}

 void main(void)
{
while(1)
{
L1=0;
delay02s();
L1=1;
delay02s();
}
}

 


Lesson2_1

#include <REG52.H>


sbit P1_0=P1^0;//賦值法,第一個發光管閃爍

 

unsigned int a;//要定義變量

void main()

{while(1)

       {P1_0=0;燈亮

       a=50000;//最大值65535

       while(a--);//while語句後面需要分號

        P1_0=1;//燈滅

        a=50000;//保持

        while(a--);

       }

}

 


Lesson2_2

#include <REG52.H>

#include <intrins.H>


sbit P1_0=P1^0;

unsigned int a,b,c;

void delay(unsigned int);//第一個燈閃爍,調用子函數法

 

void main()

{while(1)

       {P1_0=0;

       delay(2000);

        P1_0=1;

         delay(2000);

       }

}

void delay(unsigned int x)

{

for(c=500;c>0;c--);

for(a=5000;a>0;a--);

for(b=x;b>0;b--);

}

 


 

 

Lesson3_3第一個燈閃爍,啓用中斷定時器法(內部中斷T1

#include<reg52.h>

sbit P11=P1^0;

unsigned char a,num;


void main()

{    

    num=0;

    EA=1;//中斷總允許

       ET1=1;//開發T1的中斷允許

       TMOD=0x10;//工作方式216位,216次方=65536

       TH1=(65536-50000)/256;//定時器高八位裝數

       TL1=(65536-50000)%256;//50ms

       TR1=1;//啓動定時器1

       while(1)

              {

                     if(num==2)//2*50ms=1s

                     { 

                            num=0;

                            P11=~P11;取反,燈滅

                    }

              }

}

void time1() interrupt 3 using 1//標號,中斷子函數無需函數聲明

{

       TH1=(65536-50000)/256;

       TL1=(65536-50000)%256;

       num++;

}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章