1. 程式人生 > 其它 >51微控制器學習筆記(一)點燈/按鍵/數碼管

51微控制器學習筆記(一)點燈/按鍵/數碼管

技術標籤:51微控制器微控制器

(一)點燈/按鍵/數碼管

在此感謝b站江科大自化協up老師的細緻講授

視訊連結:江科大自化協_51微控制器入門教程P1~P12

點亮一個LED

#include"REGX52.H"

void main()
{
	P2 = 0xFE;//1111_1110
}

#include"REGX52.H"

void main()
{
	P2 = 0xFE;//1111_1110
	while(1)
	{
	
	}
}

一個亮一個滅

#include"REGX52.H"

void main()
{
	P2 = 0x55;//0101_0101
	while(1)
	{
	
	}
}

以1s為週期閃爍

#include"REGX52.H"
#include"INTRINS.H"

void Delay500ms ()     //@12.000MHz
{
	unsigned char i,j,k;
	_nop_();
	i = 4;
	j = 205;
	k = 107;
	do
	{
		do
		{
			while (--k);
		}	while (--j);
	} while (--i);
}

void main()
{	
	while(1)
	{
	P2 = 0xFE;//亮燈
	Delay500ms ();
	P2 = 0xFF;//滅燈
	Delay500ms ();
	}
}

獨立按鍵控制LED亮滅

#include"REGX52.H"

void main()
{
	while(1)
	{
		if(P3_1==0)
		{
			P2_0=0;
		}
		else
		{
			P2_0=1;
		}
	}
}

獨立按鍵控制LED移位

#include"REGX52.H"
void Delay(unsigned int xms);

unsigned char LEDNum;

void main()
{
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;
			if(LEDNum>=8)
			 	LEDNum=0;
			P2=~(0x01<<LEDNum);
		}
		
		if(P3_0==0)
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
			
			if(LEDNum==0)
				LEDNum=7
			else
				LEDNum--;
			P2=~(0x01<<LEDNum);
		}
	}
}

void Delay(unsigned int xms)
{
	unsigned char i,j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		}	while (--i);
	} 
}

靜態數碼管顯示

第四位顯示6

#include"REGX52.H"

void main()
{
	P2_4=1;
	P2_3=0;
	P2_2=0;
	P0=0x7D;
	while(1)
	{
	
	}
}

用子函式寫

#include"REGX52.H"

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0X7F,0x6F}

void Nixie(unsigned char Location,Number)
{
	switch(Location)
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];
}

void main()
{
	Nixie(2,3);
	while(1)
	{
	
	}
}

動態數碼管顯示

#include"REGX52.H"

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0X7F,0x6F}

void Delay(unsigned int xms)
{
	unsigned char i,j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		}	while (--i);
	} 
}

void Nixie(unsigned char Location,Number)
{
	switch(Location)
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];
	Delay(1);
	P0=0x00;
}

void main()
{
	
	while(1)
	{
		Nixie(1,1);
		Delay(200);
		Nixie(2,2);
		Delay(200);
		Nixie(3,3);
		Delay(200);
	}
}