- 機電控制技術基礎及創新實踐
- 袁明新 江亞峰主編
- 4509字
- 2021-12-17 16:29:59
1.4 STC89C52基礎實驗
1.4.1 LED閃爍實驗
1. 實驗目的
LED閃爍實驗主要針對STC89C52開發板上的LED2發光二極管,通過編寫LED閃爍控制程序,控制單只二極管以1s的時間間隔順序閃亮。
1)熟悉發光二極管的基礎控制電路。
2)掌握STC89C52單片機引腳高低電平輸出的編程控制方法。
3)掌握延時函數的編程及使用方法。
2. 實驗原理
LED2發光二極管與單片機P1.0引腳連接,當P1.0端口輸出低電平時,發光二極管LED2被點亮,而當P1.0引腳輸出高電平時,LED2熄滅,其對應C語言關鍵程序段如下:

3. 實驗步驟
1)在Keil C51中新建工程,工程名稱為“LDE閃爍實驗.uvproj”。
2)編寫C語言程序,編譯輸出“LED閃爍實驗.hex”燒錄文件。
3)通過USB接口將開發板連接計算機,按下開發板的電源開關。
4)下載“.hex”燒錄文件至單片機。
5)觀察實驗結果。
4. 實驗現象
如圖1-53所示,LED2發光二極管以1s時間間隔循環閃爍。

圖1-53 LED閃爍實驗
小試牛刀
1)嘗試編程實現其他LED發光二極管的閃爍控制。
2)嘗試編程實現LED發光二極管閃爍時間間隔的控制。
1.4.2 流水燈實驗
1. 實驗目的
LED流水燈實驗主要針對STC89C52開發板上的8只LED發光二極管,通過編寫流水燈控制程序,控制8只LED發光二極管以1s的時間間隔自上而下順序點亮,形成流水般的動態效果。
1)熟悉LED流水燈實驗原理。
2)掌握移位操作編程方法。
2. 實驗原理
8只LED發光二極管通過P1引腳控制。首先,設置P1口狀態為0xfe(1111 1110),對應LED1點亮;要實現循環點亮,用左移“<<”運算,令P1<<=1,則P1口狀態變為0xfc(1111 1100),第一只LED和第二只LED燈同時點亮,依次循環。其對應C語言關鍵程序段如下:

3. 實驗步驟
1)在Keil C51中新建工程,工程名稱為“流水燈實驗.uvproj”。
2)編寫C語言程序,編譯輸出“流水燈實驗.hex”燒錄文件。
3)通過USB接口將開發板連接計算機,按下開發板的電源開關。
4)下載“流水燈實驗.hex”燒錄文件至單片機。
5)觀察實驗現象。
4. 實驗現象
如圖1-54所示,單片機上電后,8只LED燈按1s的時間間隔順序依次點亮,循環往復,形成流水般的動態效果。

圖1-54 流水燈實驗
a)狀態1 b)狀態2 c)狀態3
小試牛刀
1)嘗試編程實現8只LED發光二極管形成“逆流而上”的流水燈效果。
2)嘗試通過移位操作,編程實現8只LED按每次點亮兩只的順序形成流水燈。
1.4.3 跑馬燈實驗
1. 實驗目的
針對STC89C52開發板上的8只LED發光二極管,通過編寫跑馬燈控制程序,實現8只LED按1s的時間間隔順序閃亮1次,即首先第一只LED點亮1s后熄滅,隨后第二只LED點亮1s,依次往復循環,形成8只LED按自上而下的順序交替閃爍的效果。
1)熟悉跑馬燈實驗原理,以及跑馬燈實驗與流水燈實驗的區別。
2)進一步掌握單片機普通I/O的時序控制。
3)掌握字符循環左移函數“_crol_”的用法,以及其他移位函數的使用方法。
2. 實驗原理
8只LED發光二極管通過P1引腳控制,首先,設置P1口狀態為0xfe(1111 1110),對應LED1點亮;接著運用左移函數“_crol_”實現P1口8位二進制數循環左移,第一次位移結果為0xfd(1111 1101),依次循環,實現8只LED順序單個點亮,其對應C語言關鍵程序段如下:


3. 實驗步驟
1)在Keil C51中新建工程,工程名稱為“跑馬燈實驗.uvproj”。
2)編寫C語言程序,編譯輸出“跑馬燈實驗.hex”燒錄文件。
3)通過USB接口將開發板連接計算機,按下開發板的電源開關。
4)下載“跑馬燈實驗.hex”燒錄文件至單片機。
5)觀察實驗結果。
4. 實驗現象
如圖1-55所示,單片機上電后,8只LED按1s的時間間隔順序閃亮1次,形成8只LED按自上而下的順序交替閃爍的效果。

圖1-55 跑馬燈實驗
a)狀態1 b)狀態2 c)狀態3
小試牛刀
1)嘗試利用字符循環右移“_cror_”函數實現反向跑馬燈效果。
2)嘗試改變移位操作位數,實現其他形式的跑馬燈效果。
1.4.4 按鍵輸入實驗
1. 實驗目的
按鍵輸入實驗主要針對STC89C52開發板上的按鍵KEY1和KEY2,通過編寫按鍵輸入捕獲程序,實現8只LED的整體開關的控制,即按下KEY1按鍵,LED全部點亮,按下KEY2按鍵,LED全部熄滅。
1)熟悉基礎的按鍵控制電路。
2)掌握編程過程中按鍵輸入捕獲的判斷方法。
3)掌握基本的I/O控制方法及編程實現。
2. 實驗原理
STC89C52開發板按鍵電路如圖1-13所示,按鍵KEY1和KEY2分別與單片機P3.2和P3.3引腳連接,當按鍵按下時對應引腳為低電平,松開后為高電平。按下KEY1,點亮8只LED,按下KEY2,熄滅8只LED,其對應C語言關鍵程序段如下:

3. 實驗步驟
1)在Keil C51中新建工程,工程名稱為“按鍵輸入實驗.uvproj”。
2)編寫C語言程序,編譯輸出“按鍵輸入實驗.hex”燒錄文件。
3)通過USB接口將開發板連接計算機,按下開發板的電源開關。
4)下載“按鍵輸入實驗.hex”燒錄文件至單片機。
5)觀察實驗現象。
4. 實驗現象
如圖1-56所示,按下按鍵KEY1后,8只發光二極管全部點亮,而按下按鍵KEY2后,8只二極管全部熄滅。

圖1-56 按鍵輸入實驗
a)KEY1按下 b)KEY2按下
小試牛刀
在上述功能的基礎上,嘗試編程實現以下功能。
1)按下按鍵KEY3,切換到流水燈模式。
2)按下按鍵KEY4,切換到跑馬燈模式。
1.4.5 數碼管顯示實驗
1. 實驗目的
數碼管顯示實驗主要針對STC89C52開發板上的4位8段數碼管,通過編寫數碼管顯示程序,實現數字的靜態顯示。
1)熟悉數碼管的基礎控制電路。
2)掌握數碼管的位選和段選的編程控制方法。
3)掌握數碼管靜態和動態顯示的編程方法。
2. 實驗原理
數碼管顯示電路原理圖如圖1-16所示,數碼管4只陽極引腳分別受單片機P2.0~2.3端口控制,數碼管8只段位引腳分別受單片機P0.0~P0.7端口控制。以第一位數碼管顯示數字“6”為例,需要將位選引腳P2.0置低電平,其余位選引腳置高電平,令段選引腳P0賦值0x82,則數碼管第一位顯示“6”。同樣,需要令第二位數碼管顯示數字“8”,將位選引腳P2.1置低電平,其余位選引腳置高電平,控制第二個數碼管,為段選引腳P0賦值0x80,則第二位數碼管顯示數字“8”,如此往復循環,形成“68”靜態顯示字樣。其對應C語言關鍵程序段如下:


3. 實驗步驟
1)在Keil C51中新建工程,工程名稱為“數碼管顯示實驗.uvproj”。
2)編寫C語言程序,編譯輸出“數碼管顯示實驗.hex”燒錄文件。
3)通過USB接口將開發板連接計算機,按下開發板的電源開關。
4)下載“數碼管顯示實驗.hex”燒錄文件至單片機。
5)觀察實驗現象。
4. 實驗現象
如圖1-57所示,單片機上電以后,4位數碼管的前兩位顯示靜態數字“68”。

圖1-57 數碼管顯示實驗
小試牛刀
在上述功能的基礎上,嘗試編程實現以下功能。
1)利用4位數碼管靜態顯示自己學號的后4位。
2)單片機上電后,數碼管動態循環顯示數字0~9999。
1.4.6 蜂鳴器實驗
1. 實驗目的
蜂鳴器實驗主要針對STC89C52開發板上的蜂鳴器模塊,編寫蜂鳴器控制程序,控制蜂鳴器蜂鳴的開啟和關閉。
1)熟悉發光蜂鳴器的基礎控制電路。
2)掌握蜂鳴器開啟和關閉的程序控制方法。
2. 實驗原理
STC89C52開發板蜂鳴器電路原理圖如圖1-20所示,蜂鳴器控制引腳與單片機P2.5引腳連接,令P2.5端口輸出低電平時,蜂鳴器開啟,而當P2.5引腳輸出高電平時,蜂鳴器關閉,為直觀展示蜂鳴器的開啟和關閉,令LED2與其同步開啟和關閉,對應C語言關鍵程序段如下:

3. 實驗步驟
1)在Keil C51中新建工程,工程名稱為“蜂鳴器實驗.uvproj”。
2)編寫C語言程序,編譯輸出“蜂鳴器實驗.hex”燒錄文件。
3)將開發板通過USB接口連接計算機,按下開發板的電源開關。
4)下載“蜂鳴器實驗.hex”燒錄文件至單片機。
5)觀察實驗現象。
4. 實驗現象
如圖1-58所示,單片機上電后,蜂鳴器蜂開啟,同時LED2點亮,2s后,蜂鳴器與LED2同時關閉。
小試牛刀
1)嘗試編程實現蜂鳴器控制引腳發送脈沖信號,觀察蜂鳴器的輸出音調。
2)改變脈沖信號頻率,觀察蜂鳴器輸出音調的變化。

圖1-58 蜂鳴器實驗
1.4.7 DS18B20溫度采集實驗
1. 實驗目的
溫度采集實驗主要利用STC89C52開發板連接DS18B20溫度傳感器,通過編寫程序,實現溫度的實時采集,并將溫度數據通過數碼管實時顯示。
1)熟悉DS18B20溫度傳感器與單片機的連接方式。
2)熟悉DS18B20單總線協議,掌握DS18B20溫度傳感器的數據采集方法。
3)掌握數碼管動態顯示數字的編程方法。
2. 實驗原理
DS18B20溫度傳感器與開發板連接示意圖如圖1-59所示,其數據引腳與單片機P2.6引腳連接,通過P2.6引腳軟件模擬DS18B20單總線協議,對傳感器進行數據讀寫操作,獲取溫度數據,并通過數碼管實時顯示。

圖1-59 DS18B20溫度傳感器與開發板連接示意圖
為了描述DS18B20單總線協議,首先給出DS18B20單總線協議時序圖中各總線的狀態,如圖1-60所示。DS18B20單總線協議操作包括“初始化”“讀數據”“寫數據”。

圖1-60 總線時序圖中各總線的狀態
(1)初始化
DS18B20初始化總線時序圖如圖1-61所示。初始化過程包括以下步驟。
1)數據線拉至高電平1。
2)延時一段時間。
3)數據線拉至低電平0。
4)延時480~960μs。
5)數據線拉至高電平1。
6)等待應答,若初始化成功,在15~60ms內DS18B20會返回一低電平。
7)延時等待CPU讀取返回的低電平。

圖1-61 初始化總線時序圖
(2)寫數據
DS18B20寫數據總線時序圖如圖1-62所示。以寫入一個字節為例,寫入數據過程包括以下步驟。
1)數據線拉至低電平0。
2)延時15μs。
3)按從低位到高位的順序發送數據,每次發送一位。
4)延時45μs。
5)數據線拉至高電平1。
6)重復1)~5)步,直到發送完一個字節。
(3)讀數據
DS18B20讀數據總線時序圖如圖1-63所示。以讀出一個字節為例,讀數據過程包括以下步驟。

圖1-62 寫數據總線時序圖
1)數據線拉至高電平1。
2)延時2μs。
3)數據線拉至低電平0。
4)延時6μs。
5)數據線拉至高電平1。
6)延時4μs。
7)從數據線上讀出一個狀態位,并進行數據處理。
8)延時30μs。
9)重復1)~7)步,直到讀取出1個字節。

圖1-63 讀數據總線時序圖
以讀取DS18B20溫度數據,并通過數碼管顯示為例,其對應程序如下:




3. 實驗步驟
1)在Keil C51中新建工程,工程名稱為“DS18B20溫度采集實驗.uvproj”。
2)編寫C語言程序,編譯輸出“DS18B20溫度采集實驗.hex”燒錄文件。
3)通過USB接口將開發板連接計算機,按下開發板的電源開關。
4)下載“DS18B20溫度采集實驗.hex”燒錄文件至單片機。
5)觀察實驗現象。
4. 實驗現象
如圖1-64所示,單片機上電以后,實時采集當前環境溫度,并通過數碼管顯示。

圖1-64 DS18B20溫度采集實驗
小試牛刀
1)嘗試編程實現當溫度超過38℃時,蜂鳴器鳴響提示。
2)嘗試編程實現8只LED發光二極管隨溫度實時變化的動態效果。
1.4.8 串口通信實驗
1. 實驗目的
串口通信實驗主要針對STC89C52開發板與PC之間的通信,利用開發板CH340G板載USB轉TTL芯片,實現P C與開發板之間的雙向數據傳輸。
1)熟悉串口通信的基本原理。
2)掌握單片機與PC之間串口通信連接電路及通信格式的設置方法。
3)掌握串口數據發送與接收的編程方法。
2. 實驗原理
STC89C52開發板串口通信電路連接示意圖如圖1-65所示,PC端需要安裝CH340驅動以及串口調試助手,將開發板與P C連接成功后,選擇對應的通信端口,設置通信格式如下:波特率為“9600”,傳輸數據位為“8”,奇偶校驗位為“NONE”,停止位為“1”。

圖1-65 串口通信電路連接示意圖
以按下按鍵KEY1后單片機向PC發送字符串“JUST”為例,編寫控制程序如下:


3. 實驗步驟
1)在Keil C51中新建工程,工程名稱為“串口通信實驗.uvproj”。
2)編寫C語言程序,編譯輸出“串口通信實驗.hex”燒錄文件。
3)將開發板通過USB接口連接計算機,按下開發板的電源開關。
4)下載“串口通信實驗.hex”燒錄文件至單片機。
5)觀察實驗現象。
4. 實驗現象
如圖1-66所示,單片機上電以后,按下按鍵KEY1,發送字符串“JUST”至PC。

圖1-66 串口通信實驗
小試牛刀
在上述功能的基礎上,嘗試編程實現以下功能。
1)PC向單片機發送字符串“hello”,單片機接收該字符串后回傳至PC。
2)PC向單片機發送字符“A”“B”,單片機接收字符“A”后點亮LED,接收字符“B”后關閉LED。