1. 程式人生 > >STC89C52微控制器學習(一)----點亮LED

STC89C52微控制器學習(一)----點亮LED

1.通過陣列實現led流水燈

#include <reg52.h>

int m;
unsigned char code leds[8] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};

void delay(unsigned int i)
{
	unsigned int j;
	unsigned char k;

	for(j=i; j>0; j--)
		for(k=125; k>0 ;k--);
}

int main()
{		
	while(1)
	{
		for(m = 0; m < 8; m++)
		{		
			P1 = leds[m];
			delay(500);				
		}		
	}

	return 0;
}
使用if語句實現led燈的控制,i類似於標誌位控制進行迴圈轉移
i = 0;
while(1)
{
	P1 = leds[i++];
	delay(5000);
	if(i == 8) i = 0;
}

2.通過獨立按鍵實現LED燈的閃爍流動

運用獨立按鍵需I/O埠,預先置高,表示作為輸入端
#include <reg52.h>

sbit k1 = P3^4;

unsigned int m;
unsigned char code leds[8] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};

void delay(unsigned int i)
{
	unsigned int j;
	unsigned char k;

	for(j=i; j>0; j--)
		for(k=125; k>0; k--);
}

int main()
{
	k1 = 1;
		
	while(1)
	{
		for(m = 0; m < 8; )
		{
			P1 = leds[m];
			delay(500);	

			if(k1 == 0)
			{
				delay(80);
				if(k1 == 0)
				m++;	
			}			
		}		
	}

	return 0;
}

3.外部中斷1實現按鍵閃爍

1).實現部分在中斷函式裡

#include <reg52.h>

sbit p3_4 = P3^4;

unsigned int m;
unsigned char code leds[8] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};

void delay(unsigned int i)
{
	unsigned int j;
	unsigned char k;

	for(j=i; j>0; j--)
		for(k=125; k>0; k--);
}

int main()
{
	EA = 1;
	EX1 = 1;
	IT1 = 1;

	p3_4 = 0;
	P1 = leds[0];	
	while(1);

	return 0;
}

void led_key() interrupt 2
{
	if(m <= 7)
	{
		P1 = leds[m++];
		delay(500);	
		//m++;	
	}
	else
<pre name="code" class="cpp"><span style="white-space:pre">		</span>P1 = leds[0];<span style="font-family: Arial, Helvetica, sans-serif;">			</span>
}

2)實現部分在主函式中

bit flag;         //標誌位


while(1)
{
	for(m = 0; m < 8; )
	{
		P1 = leds[m];
		delay(500);	

		if(flag == 1)
		{
			delay(80);			 //去抖 -----中斷
			if(flag == 1)
				m++;	
		}			
	}		
}


void led() interrupt 0
{
	flag = 1;
}