1. 程式人生 > >C51--點亮LED燈(for迴圈、while迴圈、定時器中斷迴圈)

C51--點亮LED燈(for迴圈、while迴圈、定時器中斷迴圈)

第一步:開啟keil4,建立工程,at89c52。

1.點亮第一個LED燈

#include<reg52.h>
sbit led=P2^0;
void main()
{
	led=0;//低電平亮
}

2.利用延時來使LED 1秒閃爍,500ms變化
利用while(i–)

#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;
void delay(u16 i)
{
	while(i--);//大約i=1,10us。
}
void main()
{
	while(1)
	{
	led=0;//低電平亮
	delay(50000);//大約500ms。
	led=1;//高電平滅
	delay(50000);//大約500ms。
	}
}

利用for(1,2,3)

#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;
void delay(u16 i)
{
	int x,y;
	for(x=i;x>0;x--)
	for(y=110;y>0;y--);//delay(1000)大約1秒
}
void main()
{
	while(1)
	{
	led=0;//低電平亮
	delay(500);//大約500ms。
	led=1;//高電平滅
	delay(500);//大約500ms。	
	}
}

利用定時器中斷迴圈

#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;
void timer0init0()
{
	TMOD=0x01;//設定工作模式1,16位。
	TH0=(65535-5000)/256;
	TL0=(65535-5000)%256;//5000=50ms
	ET0=1;//開啟定時器中斷允許
	TR0=1;//開啟定時器
	EA=1;//開啟總中斷
}
void main()
{
timer0init0();
while(1);
}
void timer0() interrupt 1
{
	u8 a;
	TH0=(65535-5000)/256;
	TL0=(65535-5000)%256;//5000=50ms
	if(a==10)
	{
		a=0;
		led=~led;
	}
}

89c51有5箇中斷源分別是2個外部中斷(0,2),2個定時器/計數器中斷(1,3),1個序列口中斷(4)。
在這裡插入圖片描述