本節重點
1. MCU、CPU、GPU、NPU、SOC、MPU、FPU
2. 內存、外存的區別
3. RAM和ROM的區別,單片機RAM大小
4. 三大總線及其特點
5. 發光二極管分類及其特點
6. 數碼管顯示原理
一、嵌入式
以應用為中心,以計算機技術為基礎,軟硬件可裁剪的專用計算機系統。
二、51 單片機
1980 年,由 Intel 公司推出 MCS-51 系列的8051 型號單片機(多用于工業控制領域),實現從 MCU 向類 CPU 功能的拓展。
其他廠商代表型號:
- Atmel:AT89C51;
- Philip:P89V5 系列單片機(增強型單片機,支持 ISP 在線編程);
- STC 宏晶半導體:STC89C51、STC89C52、STC89C52RC。
三、相關概念
術語 | 全稱 & 核心解釋 |
---|---|
CPU | Central Processing Unit(中央處理器):負責數據運算、指令處理;CPU 性能越高,指令處理和數據運算速度越快。 |
MCU | Micro Controller Unit(微控制器)--- 單片機:集成度高,將 CPU、RAM、ROM、定時器、UART、IO 等功能集成到單芯片中;適用于簡單控制場景,成本低。 |
MPU | Micro Processing Unit(微處理器):集成度低,僅包含單獨 CPU,需外接外設、存儲模塊;適用于復雜應用領域(如運行 Linux 系統),成本高。 |
GPU | Graphics Processing Unit(圖形處理器) ---- 顯卡:負責圖形處理、圖形渲染;GPU 性能越好,圖形顯示質量越高。 |
NPU | Neural Processing Unit(神經網絡處理器):負責 AI 推理、硬件加速、神經網絡處理(如卷積運算);例如華為 Mate60 的 “達芬奇 NPU” 可實現 AI 自動優化照片。 |
FPU | Floating Point Unit(浮點數運算單元):專門完成浮點數的運算和處理(遵循 IEEE 754 標準);大部分集成在 CPU 內部。 |
SOC | System On Chip(片上系統):集成度高,將存儲芯片、外設芯片等多個功能模塊集成到單塊芯片上。 |
四、RAM 和 ROM
- 外存:主要存放程序、代碼、指令;掉電數據不丟失,讀寫速度慢,價格便宜(如移動硬盤 1T 約 300 元)。
- 內存:主要存放程序運行過程中的臨時變量;掉電數據丟失,讀寫速度快,價格昂貴(如內存條 16G 約 300 元)。
- ROM:Read-Only Memory(只讀存儲器);存放單片機程序、指令,掉電數據不丟失。
- RAM:Random Access Memory(隨機訪問存儲器);存放臨時變量、臨時數據,掉電數據丟失。
單片機的存儲系統簡化為 “ROM+RAM”,分工明確:
- ROM(只讀存儲器):單片機的 “程序倉庫”,存放我們編寫的控制程序、指令,掉電后數據不丟失(比如你寫的 “LED 閃爍程序” 就存在這里)。
- RAM(隨機訪問存儲器):單片機的 “臨時工作臺”,存放程序運行中的臨時變量(比如計算過程中的計數器值、傳感器的實時數據),掉電后數據丟失。
注意:51 單片機的 RAM 容量很小,經典型號(如 STC89C52)的 RAM 僅為256 字節,因此編程時要避免定義過大的變量。
五、單片機內部結構:三大總線 + 核心模塊
51 單片機的內部結構像一個 “微型工廠”,各模塊協同工作,而 “三大總線” 負責連接各模塊。
1. 核心內部模塊
一塊 51 單片機芯片內部集成了以下關鍵模塊,無需外接就能實現基礎控制功能:
- CPU:核心運算單元,執行程序指令;
- RAM/ROM:存儲模塊,對應上文的 “臨時工作臺” 和 “程序倉庫”;
- Timer(定時器):實現定時功能(如 “每隔 1 秒亮一次燈”);
- PWM(脈沖寬度調制):控制輸出信號的占空比(如調節 LED 亮度、電機轉速);
- IO 口:輸入 / 輸出接口(如連接 LED、按鍵、數碼管);
- 中斷:處理緊急事件(如外部按鍵按下時,暫停當前程序優先響應按鍵);
- UART(串口):實現單片機與電腦的通信(如程序下載、數據上傳)。
2. 三大總線:連接模塊的 “橋梁”
三大總線負責在內部模塊間傳輸數據、地址和控制信號,是單片機工作的 “基礎設施”:
- 地址總線:“找位置”—— 負責傳輸 RAM 的地址,告訴 CPU “要訪問的臨時數據在 RAM 的哪個位置”。51 單片機的地址總線寬度為 8 位,最大尋址范圍為
2^8 = 256字節
(對應 RAM 容量),單向傳輸(只能從 CPU 發往 RAM)。 - 數據總線:“傳數據”—— 在 CPU 和 RAM 之間傳輸實際數據(如變量值),雙向傳輸(可從 RAM 讀數據到 CPU,也可從 CPU 寫數據到 RAM)。
- 控制總線:“發指令”—— 負責傳輸控制信號,比如 “開始讀數據”“中斷請求”“IO 口控制”,協調各模塊的工作時序(時序控制)。
六、硬件基礎:原理圖中的關鍵元素
要讓單片機工作,必須先看懂基礎原理圖,核心關注 “MCU 封裝”“網絡編號” 和 “LED 模塊”。
1. MCU 封裝:以 STC89C52RC 為例
STC89C52RC 最常用的封裝是DIP40(雙列直插式),即芯片有 40 個引腳,這些引腳分為 4 組 IO 口(P0~P3),對應程序中的端口寄存器(如unsigned char P2;
—— 通過操作 P2 寄存器就能控制 P2 口的 8 個引腳)。
2. 網絡編號
在實際電路中的一個編號,避免物理連線,相同網絡的編號的引腳在實際電路中是彼此互通
3. LED 模塊:單向導通的 “發光二極管”
具有單向導通性,分為共陽極和共陰極二極管
- 共陽極 LED:所有 LED 的陽極接電源正極(VCC,5V),陰極接單片機的 IO 引腳。
導通條件:單片機 IO 引腳輸出低電平(0V),此時陽極(5V)和陰極(0V)形成電壓差,電流流過 LED,使其發光。 - 共陰極 LED:與共陽極相反,陰極接 GND,陽極接單片機 IO 引腳,需 IO 輸出高電平才能發光。
七、編程核心:位運算(置 1 / 清 0 / 異或)
單片機編程頻繁操作 IO 口的 “某一位”(比如 “讓 P2 口的第 0 位輸出低電平”),這就需要位運算—— 直接操作二進制的每一位(bit)。
1. 三種核心位運算
運算符號 | 名稱 | 規則(對應 bit 比較) | 核心應用場景 | 示例代碼(以 unsigned char t 為例) |
---|---|---|---|---|
| | 按位或 | 有 1 則 1,全 0 則 0 | 指定位置 1(讓某 bit=1) | 把 t 的 bit0 和 bit7 置 1: t |= (1 << 0) | (1 << 7); |
& | 按位與 | 全 1 則 1,有 0 則 0 | 指定位清 0(讓某 bit=0) | 把 t 的 bit0 和 bit7 清 0:
|
^ | 按位異或 | 相同則 0,不同則 1 | 指定位翻轉(0 變 1,1 變 0) | 把 t 的 bit0 翻轉:
|
2. 練習
已知:unsigned char a = 0x62; unsigned char b = 0xFF;
(16 進制轉二進制:0x62=01100010,0xFF=11111111)
(1)將 a 的 bit0 和 bit7 置 1
????????a |= (1 << 0) | (1 << 7);
(2)將 b 的高 4 位清 0
?????????t?&=?~(0x0F?<<?4);?????????
t?&=?~(0xF0?<<?0);?????
八、單片機程序創建、編寫、編譯、下載流程:
掌握 “編寫 - 編譯 - 下載” 流程,你就能讓單片機執行你的指令(比如控制 LED 閃爍),這里以Keil4(51 單片機專用開發軟件)?為例:
步驟 1:安裝 Keil4
步驟 2:新建工程
- 點擊菜單欄「Project」→「New Project」,選擇工程保存路徑,命名(如 “LED_Blink”);
- 選擇芯片型號:在彈出的 “Select Device for Target” 窗口中,展開「Atmel」→選擇「AT89C51」
- 彈出 “Copy Standard 8051 Startup Code to Project Folder” 時,點擊「否」---------------------不拷貝啟動代碼
步驟 3:添加 C 語言文件
- 點擊菜單欄「File」→「New」,新建空白文本;
- 按「Ctrl+S」保存,命名為 “main.c”(必須加.c 后綴,保存到工程同一目錄);
- 雙擊左側Grpup,點擊Add?將文件加入到對應的Group下。
步驟 4:編寫程序(以 LED 閃爍為例)
1? .#include?<reg51.h>,?加入51單片機頭文件
2 .需要加入while(1)避免程序跑飛
示例代碼:
#include <reg51.h>// 延時函數(簡單延時,約1秒)
void delay() {unsigned int i, j;for(i = 0; i < 60000; i++)for(j = 0; j < 10; j++);
}void main() {while(1) {P2 = 0xFE; // P2口bit0=0(低電平),其他bit=1,對應LED亮delay(); // 延時1秒P2 = 0xFF; // P2口全為1(高電平),LED滅delay(); // 延時1秒}
}
步驟 5:編譯生成 HEX 文件
- 點擊菜單欄「Project」→「Options for Target 'Target 1'」(或直接點工具欄 “魔術棒” 圖標);
- 切換到「Output」選項卡,勾選「Create HEX File」(生成可下載的十六進制文件),點擊「OK」;
- 點擊工具欄「Build」(或按 F7),編譯工程,下方 “Build Output” 窗口顯示 “0 Errors” 即編譯成功,工程目錄下會生成 “LED_Blink.hex” 文件。
步驟 6:下載程序到單片機
(1)打開ISP軟件,連接串口線
(2)選擇單片機芯片型號:STC89C52/C51/C52RC
(3)根據串口識別的端口號,選擇對應的端口??COM4
(4)選擇"打開程序文件"?->?對應目錄下的hex文件
(5)點擊"下載/編程"按鈕,將單片機復位后程序即可下載到單片機ROM中
九、數碼管:單片機的 “顯示窗口”
4 位共陰極數碼管
數碼管:51單片機搭載一個4位共陰極數碼管,每一位數碼管可以顯示一些獨立數值,數碼管同一時刻只能顯示一位
核心是 “位選 + 段選” 的配合。
1. 基本原理
4 位數碼管看似能同時顯示 4 個數字(如 “1234”),但同一時刻只能顯示 1 位—— 利用 “視覺暫留效應”(人眼對光的殘留時間約 0.1 秒),快速切換 4 位數碼管的顯示,讓人感覺 “同時亮”。
2. 核心概念
- 位選:“選哪一位顯示”—— 選中某一位數碼管(將P1寄存器對應bit位置1)
- 段選:“顯示什么數字”—— 數碼管的每一段(a~g 段 + dp 小數點)對應一個 IO 口,通過控制 “段選端” 的高低電平,顯示 0~9 的數字(如顯示 “0” 需要 a~f 段亮,g 段滅)。
3. 顯示流程(以顯示 “1234” 為例)
- 位選選中第 1 位,段選輸出 “1” 的段碼,顯示 “1”,延時 1ms;
- 位選選中第 2 位,段選輸出 “2” 的段碼,顯示 “2”,延時 1ms;
- 位選選中第 3 位,段選輸出 “3” 的段碼,顯示 “3”,延時 1ms;
- 位選選中第 4 位,段選輸出 “4” 的段碼,顯示 “4”,延時 1ms;
- 循環執行 1~4 步,由于切換速度快(總周期 4ms),人眼看到 “1234” 同時顯示。
十、重點總結 + 工具推薦
必背重點(面試 / 實操高頻)
- 概念辨析:MCU(集成度高、簡單控制)vs MPU(需外接外設、復雜應用);
- 存儲區別:RAM(臨時變量、掉電丟失)vs ROM(程序指令、掉電不丟);
- 三大總線:地址總線(單向、尋址)、數據總線(雙向、傳數據)、控制總線(時序控制);
- LED 導通:共陽極需陰極接低電平,共陰極需陽極接高電平;
- 位運算應用:
|
置 1、&
清 0、^
翻轉; - 程序流程:Keil 編譯生成 HEX,STC-ISP 下載,復位單片機生效。
實用工具推薦
- 文檔編寫:Typora(用 Markdown 寫技術文檔,可導出 PDF);
- 截圖工具:PixPin(精準截圖,支持標注,適合畫原理圖注釋);
- AI 輔助:騰訊元寶、ima(解決編程報錯、原理疑問,提升學習效率)。
編寫? .h
十一、實戰練習
1.流水燈
main.c
led.c
2.數碼管顯示
main.c
digiter.c
digiter.h
delay.c? delay.h