C51--點亮LED燈(for迴圈、while迴圈、定時器中斷迴圈)
阿新 • • 發佈:2018-12-21
第一步:開啟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)。