基礎整體概念
以應用為中心:消費電子(手機、藍牙耳機、智能音響)、醫療電子(心率脈搏、呼吸機)、無人機(大疆D)、機器人(人形四足機器人)
計算機技術:
- 計算機五大組成:
????????運算器(數據運算)、控制器(指令控制)、存儲器(內存外存)、輸入設備(鼠標、鍵盤、攝像頭)、輸出設備(顯示器)
- 軟件:
????????編程語言(C/C++)、操作系統(Linux文件、多任務、網絡)、數據結構、數據庫
- 硬件
- 51單片機:硬件概念(定時器、PWM、中斷)、原理圖、寄存器、外設操作(LED、按鍵、數碼管、蜂鳴器、傳感器)
- STM32單片機:庫開發(標準庫、HAL庫)
- ARM:英國公司 設計處理器芯片方案,SAMSUNG、ATMEL、NXP->ARM芯片方案>開發板(ARM)
- ARM7、ARM9、ARMI1
- CortexA:應用高端領域,處理復雜任務,用來跑作系統(Lnux 文件系統 多任務調度 網絡)
- CortexR:應用實時控制領域,實時性要求高(汽車電子)
- CortexM:應用微控制器領域,MCU單片機(IOT物聯網智能家居 控制領域)
- 特點:軟硬件可裁剪——加入需要的硬件/軟件功能,將不需要的硬件/軟件裁剪掉(低功耗、低成本)
- 計算機:通用型計算機:PC、平板、手機/專用型計算機:無人機,完成某項特定功能而設計計算機
一、嵌入式:
以應用為中心,以計算機技術為基礎,軟硬件可裁勢的專用計算機系統
二、51單片機:
- 1980年,由Intel公司MCS-51系列:8051型號單片機(工業控制領域),由MCU轉型到CPU
- 其他公司:Atmel(AT89C51)、Philip(P89V51系列單片機,增強型單片機ISP在線編程)、STC宏晶半導體(STC89C51 STC89C52 STC89C52RC)
三、相關概念:
CPU:Central Processing Unit(中央處理器)數據運算、指令處理,CPU性能越高,完成指令處理和數據運算的速度越快
MCU: Micro Ctroller Unit(微控制器),集成度比較高,將所有功能集成到芯片中(CPU、RAM、ROM、定時器、UART、10),簡單控制,成本低
MPU:Micro Procesing Unit(微處理器),集成度低,只有一塊單獨的CPU,需外接外設、存儲模塊,復雜應用領域,跑Linux操作系統,成本高
GPU:Graphics Processing Unit(圖形處理器),圖形處理、圖形渲染(GPU性能越好,圖形顯示的質量越好)
NPU:Neural Processing Unit(神經網絡處理器),A|推理、硬件加速,神經網絡處理(卷積運算)->華為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,隨機訪問存儲器,存放臨時變量、臨時數據,掉電數據丟失
五、單片機芯片內部結構:
ex:具體實現
CPU、RAM、ROM、Timer、PWM、I0、中斷
三大總線:
- 地址總線:用來尋找RAM中的地址,所能尋址的最大范圍2^8,256byte,單向
- 數據總線:通過地址總線去獲取數據,數據交互雙向
- 控制總線:時序控制、IO控制
六 位運算:
1、|:將二進制中的對應位的bit進行比較,如果有一個bit為1,結果為1;如果都為0,結果為0;
????????應用場景:指定位置1
unsigned char t = 0x60;
(數據高位 MSB bit7)? 0110 0000 (bit0 LSB 數據低位)
第0位置1:t=t|(1 << 0);
第3位置1:t=t|(1 << 3);
第0位和第3位置1:t=t|(1 << 0)| (1 << 3);
2、 &:將二進制中的對應位的bit進行比較,如果全為1,結果為1:如果有一個0,結果為0;
??應用場景:指定位清0
unsigned char t = 0xFF:
將bit 0 和 bit7 清0:
t &= ~(1 << 0);t &= ~(1 << 7);
exe:
?? ??? ?練習:
定義兩個變量:
unsigned char a = 0x62;
unsigned char b = 0xFF;?? ??? ??? ??? ?(1)將a轉換成二進制,將bit0和bit7置1
// 二進制:0110 0010
// t |= (1 << 0) | (1 << 7);?? ??? ??? ??? ?(2)將b轉換成二進制,將高4位清0
// 二進制:1111 1111 ? ? ? ? ??
? ? // t &= ~(0x0F << 4); ? ? ? ??
// t &= ~(0xF0 << 0); ? ? ? ?
3、^: ?將對應位的bit進行比較,相同為0,相異為1
七、單片機程序創建、編寫、編譯、下載流程:
?? ??? ?(1)安裝Keil4軟件
?? ??? ?(2)點擊"Project" ?-> "New Project" ?-> 選擇路徑 (為工程起一個名字)?? ??? ??? ?
?? ??? ?(3)選擇單片機芯片型號:Atmel->AT89C51,點擊"否",不拷貝啟動代碼
?? ??? ?(4)向Group中添加C語言文件: ?點擊左上方text按鈕,ctrl + S將文件保存到工程對應的目錄(為文件起一個名字,如 main.c),雙擊左側Grpup,點擊Add 將文件加入到對應的Group下
?? ??? ?(5)編寫單片機程序:
?? ??? ??? ??? ?(1) #include <reg51.h>, 加入51單片機頭文件
?? ??? ??? ??? ?(2)需要加入while(1)避免程序跑飛
(6)編譯單片機程序:
(1)點擊"Target Options"按鈕,點擊"Output"選項中的"Create HEX FILE"選項,生成hex文件
?? ??? ??? ??? ?(2)點擊左上方"Build"編譯單片機工程
?? ??? ??? ??? ?(3)會在對應目錄下生成xxx.hex十六進制文件
(7)下載單片機程序:
?? ??? ??? ??? ?(1)打開ISP軟件,連接串口線
?? ??? ??? ??? ?(2)選擇單片機芯片型號:STC89C52/C51/C52RC
?? ??? ??? ??? ?(3)根據串口識別的端口號,選擇對應的端口 ?COM3(設備管理器->端口查看)
?? ??? ??? ??? ?(4)選擇"打開程序文件" -> 對應目錄下的hex文件
?? ??? ??? ??? ?(5)點擊"下載/編程"按鈕,將單片機復位后程序即可下載到單片機ROM中
八、原理圖:
????????MCU單片機
1芯片模塊:
- STC89C52RC、DIP40 封裝:雙列直插式,40個引腳,劃分成4組(端口 寄存器 unsigned char P2;)
- 網絡編號:在實際電路中的一個編號,避免物理連線,相同網絡的編號的引腳在實際電路中是彼此互通
2LED模塊:
- 電阻:數字標注法:前兩位/3位為有效數字,最后一位是10的冪次方
- 發光二極管:具有單向導通性,分為共陽極和共陰極二極管:將所有發光二極管的陽極接到電源正極(VCC),陰極接到單片機的引腳。此時發光二級管陽極會輸出高電平(VCC 5V),如果發光二級陰極輸出一個低電平(0V),陽極和陰極之間會形成一個正向的電壓差,滿足發光二極管的單向導通性,所以電流就會從陽極流向陰極,發光二極管就被點亮。
void LED_INIT(void)
{P2 = 0xFF;return;
}
//全亮
void LED_OFF(void)
{P2 = 0x00;return;
}
//全滅
void LED_ON(void)
{P2 = 0xFF;return;
}//異或 初始化為全1 與全1 按位異或 得到全0 就亮 得到全1就滅
void LED_NOR(void)
{P2^=0xFF;return;
}//流水燈 因為是低電平點亮 所以要取反
void LED_Show(unsigned int n)
{P2 = ~n;return;
}
#include <reg51.h>
#include <delay.h>
#include <led.h>
int main(void)
{int i = 0;LED_INIT();//初始化while(1){
//第一種方式
// LED_ON();
// delay(0xAFFF);
// LED_OFF();
// delay(0xAFFF);
//第二種方式
// LED_NOR();
// delay(0xAFFF);//流水燈for(i = 0; i < 8; i++){LED_Show(1 << i);delay(0xAFFF);LED_OFF();}for(i = 7; i >= 0; i--){LED_Show(1 << i);delay(0xAFFF);LED_OFF();}}return 0;
}
3、數碼管:
?數碼管:51單片機搭載一個4位共陰極數碼管,每一位數碼管可以顯示一些獨立數值,數碼管同一時刻只能顯示一位
- 位選:選中某一位數碼管(將P1寄存器對應bit位置1)
- 段選:P0寄存器(abcdrfg)
// 先位選P1 &= ~(0x0F << 0);//初始化 低四位全部置0;P1 |= 1 << 0;//(P10置1)// 再段選P0 = 0x06;//(bc段置1 表示1 000000110)
- 靜態顯示
//靜態顯示一個數碼管//位選Select_bit(0); while(1){for (i = 0; i < 10; i++){Select_seg(i);delay(0xAFFF);P0 = 0;}} return 0;
}#include <reg51.h>//段碼表
unsigned int seg[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//數組里數字代表從0 到9//片選
void Select_bit(unsigned int n)
{P1 &= ~(0x0F << 0);//初始化 低四位清零P1 |= (1 << n); //片選 0 1 2 3 哪位NPNreturn;
}
//段選
void Select_seg(unsigned int n)
{P0 = seg[n];//根據段碼表里這個數字指定顯示abcdefgreturn;
}
- 動態顯示
//動態展示四位數碼管while(1){for(i = 0; i <= 9999; i++){digiter_show(i);delay(0xAFFF);}}return 0;
}//動態顯示4位數碼管
void digiter_show(unsigned int n)
{int i = 0;int j = 0;while(n != 0){ i = n % 10;Select_bit(j);//位選j++;P0 = 0; //選中NPN先清除Select_seg(i);// 段選delay(100);//延遲很小的一段時間 讓肉眼以為四位數碼管同時出現n = n / 10;}return;
}
重點:
- 1.MCU、CPU、GPU、NPU、SOC、MPU、FPU
- 2.內存、外存的區別
- 3.RAM和ROM的區別,單片機RAM大小
- 4. 三大總線及其特點
- 5.LED發光二極管分類及其特點
- 6.數碼管顯示原理流程?