第一篇部落格,部落格園註冊很久卻一直沒有好好利用,今天把以前的文章都刪掉,就當開個好頭吧。
希望在以後的時間中,自己能夠認真、努力、珍惜時間。
零基礎入門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就可以實現。
程式碼編寫:
#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
執行例項:由於程式簡單,這裡使用Proteus模擬軟體模擬執行
第二個程式: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);
}
}
實驗現象:
第三個程式:設計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);
}
}
實驗現象: