本節重點:
1.?GPIO輸入模式、輸出模式
2.?按鍵工作原理(GPIO輸入)
3.?中斷概念
4.?中斷源概念、中斷源個數、哪幾個中斷源
5.?外部中斷、定時器中斷概念
6.??中斷處理流程:
7.?51單片機中定時器的個數?類型
8.?16位定時器和8位自動重裝載定時器的區別
9.?PWM的概念、PWM周期、PWM占空比
10、有源蜂鳴器和無源蜂鳴器的區別
11、51單片機蜂鳴器實現原理
一、GPIO
GPIO(General Purpose Input/Output,通用輸入輸出口)是單片機與外部設備通信的最基本接口,相當于單片機的 “手”(輸出控制)和 “眼”(輸入檢測)。
1. GPIO 的兩種工作模式
- 輸出模式:單片機主動給引腳賦值 “高電平(5V)” 或 “低電平(0V)”,從而控制外部設備。比如給 LED 引腳送高電平,LED 點亮;送低電平,LED 熄滅。
可以用 “水龍頭” 比喻:輸出模式就像 “控制水龍頭開關”—— 單片機決定水流(電平)的通斷。 - 輸入模式:單片機被動檢測引腳的電平變化,獲取外部設備的狀態。比如檢測按鍵是否按下、傳感器是否觸發。
對應 “水龍頭” 的比喻:輸入模式就像 “觀察水龍頭是否有水流出”—— 單片機只負責判斷狀態,不主動控制。
二、按鍵:GPIO 輸入模式的典型應用
按鍵是單片機系統中最常見的 “人機交互部件”,其工作原理本質是通過 GPIO 輸入模式檢測引腳電平。
1. 按鍵的硬件連接(以 K1 為例)
按鍵 K1 的兩個引腳分別接 GND(地)和單片機的 P1_4 引腳:
- 當 K1 未按下時,P1_4 引腳不受 GND 影響,默認是高電平;
- 當 K1 按下時,P1_4 引腳與 GND 短路,引腳電平變為低電平。
2. 按鍵狀態的判斷邏輯
要判斷 K1 是否按下,只需檢測 P1_4 引腳是否為低電平。在代碼中可通過 “位運算” 實現:
if((P1 & 0x10) == 0)
(注:0x10 是十六進制,對應二進制0001 0000
,與 P1 做 “與運算” 后,只有 P1_4 引腳的電平會保留 —— 結果為 0 時,說明 P1_4 是低電平,即按鍵按下)
3. 實際應用場景
比如車載中控系統中,剎車檢測、安全座椅狀態判斷等,都可以通過類似的 “按鍵邏輯” 實現 —— 用 GPIO 輸入模式實時檢測對應引腳的電平,確保數據的實時性。
練習:
? ? ? ? 實現按下按鍵(1--4),顯示燈(1--4),第一個數碼管顯示數字(1--4),未按下顯示“0”
main.c
digiter.c
LED.C
delay.c
三、中斷:單片機的 “緊急響應機制”
單片機在執行常規任務時,若遇到更緊急的事件(如按鍵觸發、定時器溢出),需要暫停當前任務,優先處理緊急事件,處理完后再回到原任務繼續執行 —— 這個過程就是 “中斷”。
1. 中斷的核心概念
- 中斷源:觸發中斷的 “事件 / 源頭”。51 單片機有 5 個中斷源,分別是:外部中斷 0(INT0,對應 P3_2 引腳)、外部中斷 1(INT1,對應 P3_3 引腳)、定時器 0 中斷、定時器 1 中斷、串口中斷。
1.中斷源分類:外部中斷0、外部中斷1、定時器0、定時器1、串口
2.外部中斷:單片機上的引腳電平變化所引發的中斷(INTO(P3-2)、INT1(P3-3))
- 中斷優先級:多個中斷同時觸發時,CPU 會優先處理 “優先級高” 的中斷(51 單片機可通過寄存器配置優先級)。
- 中斷嵌套:處理低優先級中斷時,若有高優先級中斷觸發,會暫停當前中斷,先處理高優先級中斷 ——51 單片機最多支持 2 層嵌套。
7. 中斷處理流程(6 步)
- 中斷源發出 “中斷請求”(如外部中斷 0 引腳電平變化);
- CPU 檢查:是否開啟 “總中斷允許”,該中斷源是否被 “屏蔽”(未屏蔽才繼續);
3.比較中斷優先級:若當前無更高優先級中斷,暫停當前任務;
4.保護現場:保存當前任務的寄存器數據(避免處理中斷后數據丟失);
5.執行 “中斷服務函數”(即中斷觸發后要執行的代碼,如按鍵按下后的 LED 翻轉); (回調函數)
6.恢復現場:恢復之前保存的寄存器數據,回到原任務繼續執行。
3. 中斷相關寄存器配置(關鍵!)
要讓中斷生效,必須配置對應的寄存器,以 “外部中斷 0” 為例:
p3.2 要置1 產生下降沿
- IE 寄存器(中斷允許寄存器):
- 先將 IE 的 bit7(EA,總中斷允許位)置 1—— 開啟 “總中斷開關”(不開啟的話,所有中斷都無效);
- 再將 IE 的 bit0(EX0,外部中斷 0 允許位)置 1—— 允許外部中斷 0 觸發。
- TCON 寄存器(定時器 / 計數器控制寄存器):
- TCON 的 bit1(IE0,外部中斷 0 請求標志位):中斷觸發時會自動置 1,CPU 響應后會 “硬件清 0”(無需手動處理)。? ??不用置位---- 自動置位
- 將 TCON 的 bit0(IT0,外部中斷 0 觸發方式位)置 1—— 設置為 “下降沿觸發”(即引腳電平從高變低時觸發中斷);
優先級
中斷向量表
四、定時器:單片機的 “精準時鐘”
很多場景需要 “精準定時”(如 1ms 刷新一次 LED、1s 讀取一次傳感器數據),此時就需要用到單片機的 “定時器”—— 它能根據時鐘信號,產生精確的時間間隔。
1. 定時器的基礎原理
- 51 單片機定時器資源:內置 2 個 16 位自增型定時器 / 計數器(Timer0、Timer1),可工作在 “定時器模式”(用于定時)或 “計數器模式”(用于計數外部脈沖)。
- 時鐘與分頻:單片機的時鐘由 “晶振” 提供,常見晶振頻率為 12MHz 或 11.0592MHz。但 51 單片機會對晶振頻率做 “12 分頻”—— 比如 12MHz 晶振,分頻后實際時鐘頻率為
12MHz/12 = 1MHz
,對應 “1 個時鐘周期 = 1μs”(即單片機執行一條基本指令需要 1μs)。
2. 定時器初值計算(以 1ms 定時為例)
定時器是 “自增型” 的:從 “初值” 開始,每過 1 個時鐘周期加 1,加到 “65535”(16 位定時器的最大值)后會 “溢出”,觸發定時器中斷。
要實現 1ms(1000μs)定時,需計算 “初值”:
- 1ms 需要的時鐘周期數:
1000μs / 1μs = 1000
; - 定時器初值 = 最大值 - 所需周期數 =?
65535 - 1000 = 64535
(十六進制為 0xFC67)。
只需將初值寫入定時器的 TH0(高 8 位)和 TL0(低 8 位),即可實現 1ms 定時。
定時器:能夠產生一個精準的定時,不同外設對時序的要求高(高電平和低電平時間是精準的)
51單片機內部有兩個定時器,分別為timer0、timer1,所使用自增型定時器(計數器16位)
Clock,時鐘,CPU運行節拍,頻率(Intel 2.1GHZ)
頻率單位:HZ
時間單位:S
頻率和時間關系:1/2.1GHZs
51單片機:
晶振,晶體振蕩器(12MHZ/11.059MHZ)
51單片機達不到12MHZ,將12MHZ進行12分頻,12MHZ/12=1MHZ
51單片機完成一條指令運算:1/1MHZ=1us
通過定時器0實現1ms定時:
1ms |= 1000us
定時器初值:64535
3. 定時器相關寄存器配置(以 Timer0 為例)
8位自動重裝載定時器:分為TLO和TH0兩部分,1byte,實際參與計數的只有TLO,當TLO中的值加到255溢出后,再將THO中的值重新裝入到TLO中
- TCON 寄存器:
(1)bit4置1,TMOD寄存器中的Gate位清0,代表允許定時器開始計數,
- TMOD 寄存器(定時器 / 計數器模式控制寄存器):
(1)定時器0->低四位清0
(2)將TMOD寄存器中的M0,bit0置1,代表定時器0工作在16位定時器/計數器模式
?????
- IE 寄存器:
(1)將IE寄存器中的bit7置1,代表CPU能夠響應所有中斷
(2)將IE寄存器中的bit1置1,代表允許定時器0產生中斷
4. 定時器配置流程(5 步)
1.?先配置TMOD模式選擇寄存器,將低四位清0,再將bit0置1代表工作在16位定時器
2.?向TH0和TL0中裝入定時器的初值(1ms?->?64535)
3.??將TCON寄存器中的bit6置1,代表允許定時器開始計數
4.??將IE寄存器中的bit7和bit1置1,開啟中斷總開關和定時器0的子開關
5.?編寫定時器0的中斷服務函數
五、PWM 與蜂鳴器:脈沖控制的應用
脈沖寬度調制,能夠讓引腳產生一個方波,周期性的讓引腳的電平發生翻轉
1. PWM 的核心概念
- PWM 周期
一個方波所經歷的周期(從上升沿到上升沿所經歷的時間/從下降沿到下降沿所經歷的時間)
- PWM 占空比:
在一個周期內,引腳處于 “高電平” 的時間占比(如占空比 50%,表示一個周期內高、低電平各占一半)。
通過調整周期和占空比,PWM 可實現 “模擬電壓輸出”(如控制 LED 亮度、電機轉速)。
2. 蜂鳴器的工作原理
蜂鳴器的聲音由 “震蕩源” 決定:
- 音調:由震蕩頻率決定 —— 高頻對應高音,低頻對應低音;
- 音量:由震蕩信號的振幅決定 —— 振幅越大,音量越大。
根據是否自帶震蕩源,蜂鳴器分為兩類:
- 有源蜂鳴器:內置震蕩源,通電后會發出固定頻率的聲音(無需額外控制,只需給高低電平即可);
- 無源蜂鳴器:無內置震蕩源,通電后不發聲,需通過 GPIO 輸出 PWM 方波(提供震蕩信號),才能發出不同音調的聲音。
3. 51 單片機驅動蜂鳴器
對于無源蜂鳴器,需用定時器生成不同頻率的 PWM 信號:
- 比如要發出 “高音”,就配置定時器產生高頻 PWM(如 4kHz);
- 要發出 “低音”,則生成低頻 PWM(如 1kHz);
- 通過調整 PWM 的占空比,還能控制蜂鳴器的音量大小。
六、練習
通過中斷實現低電平觸發時數碼管變化
實現隔1sLED翻轉一次
通過按鍵控制蜂鳴器按照指定頻率工作(Key1?--200HZ??Key2?--?400HZ?Key3?--?600HZ?Key4?--?800HZ??Key5?--?1000HZ)