C51入门——点亮LED灯(for循环、while循环、定时器中断循环)

第一步:打开keil4,建立工程,芯片选择:AT89c52(比AT89c51多一个中断)

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;
	}
}

STC89c51有5个中断源分别是2个外部中断(0,2),2个定时器/计数器中断(1,3),1个串行口中断(4)。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_37584766/article/details/84076698