51微控制器入門:LED燈控制(01)

Arciab發表於2024-11-25

第一篇部落格,部落格園註冊很久卻一直沒有好好利用,今天把以前的文章都刪掉,就當開個好頭吧。

希望在以後的時間中,自己能夠認真、努力、珍惜時間。

零基礎入門51微控制器

微控制器(Microcontroller Unit,MCU)是一種積體電路晶片,它將計算機的CPU、儲存器(RAM和ROM)、輸入/輸出介面(I/O)等整合在一個晶片上,形成一個完整的微型計算機系統。微控制器廣泛應用於嵌入式系統和自動化控制領域。

核心部件:

中央處理器(CPU)執行程式指令。

儲存器只讀儲存器(ROM)和隨機儲存器(RAM),前者用來儲存韌體或程式程式碼,後者儲存臨時資料「掉電丟失」。

I/O介面:輸入/輸出的作用是與外部裝置進行資料交換。

功能特點:微控制器具有低功耗、體積小、成本低、高效能、靈活性的特點。

總的來說現在的微控制器應用面越來越廣,可以使用微型電池供電應用在空間受限的地方,此外成本低廉適合企業大規模生產,效能也越來越接近傳統的微處理器,而且可以根據需要定製不同的功能。

在這裡我會編寫第一個例項程式:點亮一個LED燈「過於簡單,就當 Hello,World! 吧」

需要使用到工具:普中51微控制器開發版、電腦、Keil5軟體(關於Keil軟體的安裝直接B站搜尋,開發版可以暫時使用Proteus)

關於LED燈的介紹:

LED燈又叫發光二極體,和普通的二極體相同,只允許電流單向導通。

從圖中可以看到LED燈的接線方式,VCC表示高電平1,因此如果想讓LED點亮只需給微控制器P2埠低電平0就可以實現。
image

程式碼編寫:

#include<regx52.h> //REGX52.H由Keil公司提供,標頭檔案包含了對微控制器特殊功能暫存器(SFR)的宏定義
void main()
{
	P2 =0XFE; 	//1111 1110  操作微控制器P2 I/O口 點亮第一個LED
	while(1)
	{
	
	}
}

51微控制器直接操作P2埠需要使用16進位制。"0XFE" 中"0X"表示這個數字為16進位制的符合,"FE" 轉換為2進製為 "0111 1111",這個如果不熟悉可以自行學習。

10進位制:	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15
16進位制:	1	2	3	4	5	6	7	8	9	A	B	C	D	E	F
02進位制:	0001	0010	0011	0100	0101	0110	0111	1000	1001	1010	1011	1100	1101    1110	1111

image

執行例項:由於程式簡單,這裡使用Proteus模擬軟體模擬執行
image

第二個程式:LED燈閃爍

設計思路:只需要將第一個LED間隔一段時間熄滅、點亮就可以實現閃爍現象。

設計延時函式:

void Delay(unsigned int n)
{
    unsigned char j;
    while(n--)
    {
        for(j = 0; j < 113; j++)
    }
}

合併程式碼如下:

#include<regx52.h>

void Delay(unsigned int n)	// 延時函式,延時大約1ms
{
	unsigned char j;
	while(n--)
	{
		for(j = 0;j < 113; j++);
	}
}

void main()
{
	while(1)
	{
		P2 = 0XFE;	//點亮一個LED燈
		Delay(500);
		P2 = 0XFF;	//全部置高電平,熄滅
		Delay(500);
		
	}	
}

實驗現象:
image

第三個程式:設計LED流水燈

設計思路:由於是初次入門這裡只介紹最簡單的實現方式,根據前面兩個實驗知識,依次點亮、熄滅LED燈,就能實現流水燈效果。

#include<regx52.h>
void Delay(unsigned int n)
{
	unsigned char j;
	while(n--)
	{
		for(j = 0; j < 113; j++);
	}
}
void main()   
{
	while(1)  //  8 4 2 1
	{
		P2 = 0XFE; // 1111 1110
		Delay(500);
		P2 = 0XFD; // 1111 1101
		Delay(500);
		P2 = 0XFB; // 1111 1011
		Delay(500);
		P2 = 0XF7; // 1111 0111
		Delay(500);
		P2 = 0XEF; // 1110 1111
		Delay(500);
		P2 = 0XDF; // 1101 1111
		Delay(500);
		P2 = 0XBF; // 1011 1111
		Delay(500);
		P2 = 0X7F; // 0111 1111
		Delay(500);	
	}
}

實驗現象:
image

相關文章