久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19719|回復: 13
打印 上一主題 下一主題
收起左側(cè)

8051單片機嵌入式操作系統(tǒng)源碼及解說與資料下載(超詳細)

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:230641 發(fā)表于 2017-9-3 07:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 engineer_wubin 于 2017-9-4 20:58 編輯

  星光操作系統(tǒng)是基于8051單片機的嵌入式操作系統(tǒng),支持多線程并發(fā)運行,提供線程互斥、同步和通信功能,其功能特性如下:
(1)支持STC89C52RC單片機,4級優(yōu)化時的最小程序大小為:data = 138,xdata = 20,code = 6616。
(2)支持AT89S52單片機,4級優(yōu)化時的最小程序大小為:data = 155,xdata = 0,code = 6120。
(3)支持時間片輪轉(zhuǎn)調(diào)度和搶占式調(diào)度,時間片長度為10毫秒。
(4)線程的最大數(shù)量為255
(5)信號量的最大數(shù)量為255
(6)屏障的最大數(shù)量為255
(7)信箱的最大數(shù)量為255,每個信箱中消息的最大數(shù)量為255。
(8)支持中斷觸發(fā),但是不支持中斷嵌套。
(9)提供微秒級延時功能
(10)提供組件、庫和驅(qū)動,方便使用外設。
(11)當時鐘頻率為12MHz時,對于時間片導致的線程切換,其切換時間為888微秒;對于外部中斷導致的線程切換,其切換時間為464微秒。

  為了便于使用外設,星光操作系統(tǒng)提供如下組件,為應用提供統(tǒng)一接口:
(1)LCM1601(液晶模塊)
(2)LCM1602(液晶模塊)
(3)LCM12864(液晶模塊)
(4)DS18B20(數(shù)字溫度傳感器)
(5)HS0038B(紅外線接收器)
(6)AT93C46(EEPROM)
(7)AT24C02(EEPROM)
(8)DS1302(實時時鐘)
(9)28BYJ48(步進永磁減速電機)

  每個組件都有對應的庫,為組件提供硬件抽象層;此外,提供芯片內(nèi)部設備庫和原語庫,前者包括GPIO、UART、Power和ISP,后者包括線程、信號量、屏障和信箱。

  星光操作系統(tǒng)使用手冊目錄為Starlight_V0.1Manual,請查閱相關(guān)信息。

  星光操作系統(tǒng)支持Discover8051 V1開發(fā)板,這是基于STC89C52RC(90C版)單片機的8051開發(fā)板,詳情請參考附件中的使用手冊和原理圖。


目錄
1 工具 4
11 Discover8051 V1 開發(fā)板4
12 星光操作系統(tǒng) 5
13 Keil C51 6
14 STC-ISP 6
2 實驗 7
21 LED(發(fā)光二極管)8
211 硬件設計 8
212 軟件準備 8
213 軟件設計 8
214 實驗效果 9
22 LCM1601(液晶模塊)9
221 硬件設計 9
222 軟件準備 10
223 軟件設計 10
224 實驗效果 10
23 LCM1602(液晶模塊)11
231 硬件設計 11
232 軟件準備 11
233 軟件設計 11
234 實驗效果 11
24 LCM12864(液晶模塊)12
241 硬件設計 12
242 軟件準備 12
243 軟件設計 12
244 實驗效果 13
25 Digit(數(shù)碼管)14
251 硬件設計 14
252 軟件準備 14
253 軟件設計 14
254 實驗效果 14
26 Buzzer(蜂鳴器)15
261 硬件設計 15
262 軟件準備 15
263 軟件設計 15
264 實驗效果 16
27 Keypad(矩陣按鍵)16
271 硬件設計 16
272 軟件準備 16
273 軟件設計 16
274 實驗效果 17
28 DS18B20(數(shù)字溫度傳感器)17
281 硬件設計 17
282 軟件準備 17
283 軟件設計 17
284 實驗效果 18
29 HS0038B(紅外線解碼)18
291 硬件設計 18
292 軟件準備 19
293 軟件設計 19
294 實驗效果 19
210 Key(簡單按鍵)20
2101 硬件設計20
2102 軟件準備20
2103 軟件設計20
2104 實驗效果20
211 Power(掉電和喚醒)20
2111 硬件設計20
2112 軟件準備21
2113 軟件設計21
2114 實驗效果21
212 AT93C46(EEPROM)21
2121 硬件設計21
2122 軟件準備21
2123 軟件設計22
2124 實驗效果22
213 AT24C02(EEPROM)22
2131 硬件設計22
2132 軟件準備23
2133 軟件設計23
2134 實驗效果23
214 DS1302(實時時鐘)23
2141 硬件設計23
2142 軟件準備24
2143 軟件設計24
2144 實驗效果24
215 28BYJ48(步進永磁減速電機)25
2151 硬件設計25
2152 軟件準備25
2153 軟件設計25
2154 實驗效果25
216 UART(串口) 26
2161 硬件設計26
2162 軟件準備26
2163 軟件設計26
2164 實驗效果27
217 ISP(EEPROM) 27
2171 硬件設計27
2172 軟件準備27
2173 軟件設計27
2174 實驗效果28
218 Semaphore(信號量)28
2181 硬件設計28
2182 軟件準備28
2183 軟件設計28
2184 實驗效果28
219 Barrier(屏障)29
2191 硬件設計29
2192 軟件準備29
2193 軟件設計29
2194 實驗效果29
220 Mailbox(信箱)30
2201 硬件設計30
2202 軟件準備30
2203 軟件設計30
2204 實驗效果30
3 聯(lián)系方式 30


1   工具

1.1 Discover8051 V1 開發(fā)板

Discover8051 V1 是基于 STC89C52RC(90C 版)單片機的 8051 開發(fā)板,硬件配置如下 所示:
圖 1 Discover8051 V1 開發(fā)板硬件配置

(1)Mini-B 型 USB 插座
(2)500mA 自恢復保險絲
(3)電源開關(guān)
(4)電源指示燈
(5)CH340G,實現(xiàn) USB-UART 轉(zhuǎn)換。
(6)用于 CH340G 的 12MHz 無源晶振
(7)用于單片機的 12MHz 無源晶振
(8)復位按鍵
(9)單片機插座
(10)STC89C52RC(90C 版)單片機,ROM 容量 8K 字節(jié),RAM 容量 512 字節(jié)。
(11)單片機引腳插針
(12)總線收發(fā)器 74HC245
(13)LCM1601/LCM1602 液晶模塊插座

(14)10K 歐姆電位器,用于調(diào)節(jié) LCM1601/LCM1602 液晶模塊的對比度。
(15)LCM12864 液晶模塊插座
(16)6 位共陽數(shù)碼管
(17)無源蜂鳴器
(18)數(shù)字溫度傳感器 DS18B20
(19)紅外線接收器 HS0038B
(20)矩陣按鍵
(21)喚醒按鍵
(22)EEPROM 芯片 AT93C46
(23)EEPROM 芯片 AT24C02
(24)實時時鐘 DS1302

Discover8051 V1 開發(fā)板帶有 CH340G 芯片,用于實現(xiàn) USB-UART 轉(zhuǎn)換,使用前需要安裝 驅(qū)動程序,運行 CH340GCH341SER.EXE,按照提示完成安裝。然后,用 USB 連接線將開發(fā)板 和計算機連接起來,Windows 操作系統(tǒng)會識別 CH340G,隨后在設備管理器中出現(xiàn)一個串口, 用于實現(xiàn)單片機和計算機之間的通信。


1.3 Keil C51

Keil C51 v9.51a 是 8051 單片機開發(fā)環(huán)境,其文件路徑為 Keilc51_v9.51a.exe,運行 該程序,按照提示安裝即可。安裝完成后,其許可狀態(tài)為評估版,此時對代碼的長度有限制。 以管理員身份啟動該程序,點擊菜單 File -> License Management,選擇單用戶許可頁面, 復制許可窗口右上方的 CID。啟動 Keil 目錄下的注冊機,填入復制的 CID,點擊 Genarate 按鈕,復制生成的 LIC,在 Keil C51 的許可窗口中填入 LIC,點擊 Add Lic 按鈕添加許可。關(guān)閉 Keil C51,然后再次啟動(這次不需要管理員身份),此時 Keil C51 為正式版。

為了更好地顯示代碼,需要對 Keil C51 的編輯器做簡單配置。選擇菜單 Editor -> Configuration,在編輯器頁面中,將編碼方式設置為 GB2312 簡體中文,將 Tab 字符大小設 置為 4,同時選擇所有文件的顯示行號功能。

1.4 STC-ISP

STC-ISP v6.85P 是 STC 公司的單片機燒寫工具,用于將 Keil C51 生成的程序?qū)懭雴纹?機 ROM 中,其文件路徑為 STC-ISPstc-isp-15xx-v6.85P.zip。解壓后運行其中的 EXE 文件, 選擇單片機型號和 HEX 程序文件,然后點擊下載/編程按鈕。先關(guān)閉開發(fā)板電源開關(guān),然后 再次打開電源開關(guān),此時 STC-ISP 會檢測單片機固件并開始下載/編程。完成后,單片機會 自動復位。

另外,STC-ISP 帶有單片機型號數(shù)據(jù)庫,安裝方法為:啟動 STC-ISP,選擇 Keil 仿真設 置頁面,點擊添加按鈕,將單片機型號、頭文件和仿真驅(qū)動添加到 Keil C51 中。將鼠標指 針停留在該按鈕上,會顯示幫助信息.

2 實驗

星光操作系統(tǒng)的默認工程配置為 3 個線程、1 個信號量、1 個屏障和 1 個信箱(消息容 量為 1),在實驗前,請確認上述數(shù)值:
(1)啟動 Keil C51
(2)選擇菜單 Project -> Open Project,選擇目錄 Starlight_V0.1ProjectNebula Discover8051_V1,打開工程Nebula_Discover8051_V1.uvproj。
(3)選擇菜單 Project -> Build target,構(gòu)建工程,注意下方的 Build Output 輸出窗口 內(nèi)容,確認構(gòu)建成功。
(4)在左側(cè)工程列表中,點擊 Primitive -> STC_STC89C52RC_Thread.c 旁邊的“+”標志, 在展開的列表中,雙擊打開 STC_STC89C52RC_Thread.h
(5)察看第 33 行的枚舉常量 Thread_Count_Limitation,確認當前值為 3。
(6)用 相 同 方 法 打 開 STC_STC89C52RC_Semaphore.h , 察 看 第 33 行 的 枚 舉 常 量 Semaphore_Count_Limitation,確認當前值為 1。
(7)用 相 同 方 法 打 開 STC_STC89C52RC_Barrier.h , 察 看 第 33 行 的 枚 舉 常 量 Barrier_Count_Limitation,確認當前值為 1。
(8)用 相 同 方 法 打 開 STC_STC89C52RC_Mailbox.h , 察 看 第 33 行 的 枚 舉 常 量 Mailbox_Count_Limitation , 確 認 當 前 值 為 1 ; 察看 第 40 行 的 枚 舉 常 量 Message_Count_Limitation,確認當前值為 1。

經(jīng)過上述操作,用戶已經(jīng)知道如何察看和修改操作系統(tǒng)的原語配置,為后續(xù)實驗做好準 備,也可以根據(jù)自身需要設計新的實驗。

雙擊打開 Application -> Nebula_Discover8051_V1_Main_Application.c,察看第 217
- 261 行之間的內(nèi)容,這些是用戶線程,確認 LED 線程處于有效狀態(tài),其它線程都處于注釋 狀態(tài)。

文件的最后是 while (1)無限循環(huán),根據(jù)星光操作系統(tǒng)的線程調(diào)度設計要求,系統(tǒng)中必 須存在至少一個就緒線程。將這種限制放在 main 函數(shù)中,保證主線程永遠可調(diào)度,這就使 得用戶線程不必包含 while (1)無限循環(huán)。當用戶線程函數(shù)執(zhí)行完畢時,用戶線程會自動結(jié) 束。在后續(xù)實驗的用戶線程中會包含 while (1)無限循環(huán),這只是出于實驗目的,并不是必 須的。

在后續(xù)實驗中,如果不需要使用液晶模塊 LCM1601、LCM1602 和 LCM12864,請將其取下, 避免干擾 LED 和數(shù)碼管。插拔時,先斷電,后操作,避免損壞液晶模塊。插入液晶模塊時, 注意引腳編號,不要插反。如果對比度過高或過低,調(diào)節(jié)相應的電位器即可.

2.1 LED(發(fā)光二極管)

2.1.1 硬件設計


74HC245 為總線收發(fā)器,輸入端連接 P1 端口的 8 個引腳,輸出端為 D0 - D7,連接 8 個共陽極 LED,R15 - R22 為限流電阻。以 P1_0 為例,單片機復位后其值為 1,則 D0 為 1, LED 滅;當 P1_0 為 0 時,則 D0 為 0,LED 亮。循環(huán)控制 P1 端口的 8 個引腳,即可實現(xiàn)流水 燈效果。

2.1.2 軟件準備

工程的默認配置即為 LED 線程,不需要做任何修改。

2.1.3 軟件設計

雙擊左側(cè)工程列表 Application 中的 Nebula_Discover8051_V1_LED_Application.c, 察看軟件實現(xiàn)。對于 P1 端口的每個引腳,設置為 0,使得 LED亮,延遲 500 毫秒;然后設 置為 1,使得 LED 滅,延遲 500 毫秒。重復這個過程會實現(xiàn)流水燈效果,相關(guān)的庫函數(shù)為:
(1)GPIO_Library_Write_Pin:寫 GPIO 引腳,帶有 3 個參數(shù),即端口索引、引腳索引 和引腳值。
(2)Thread_Library_Suspend_Thread:掛起線程,帶有 1 個參數(shù),表示掛起時間,以
毫秒為單位。
2.1.4 實驗效果

(1)選擇菜單 Project -> Build target,構(gòu)建應用,確認下方的 Build Output 窗口中沒 有 錯 誤 和 警 告 。 輸 出 目 錄 為ProjectNebulaDiscover8051_V1Object , 文 件 為 Nebula_Discover8051_V1 和 Nebula_Discover8051_V1.hex,后者用于燒寫單片機 ROM。
(2)連接開發(fā)板和計算機,在設備管理器中察看串口信息,確認 USB-UART 轉(zhuǎn)換芯片 CH340G 工作正常,并且開發(fā)板電源開關(guān)處于關(guān)閉狀態(tài)。
(3)確認開發(fā)板上的跳線 JP1 處于連接狀態(tài),該跳線用于給 LED 供電。
(4)啟動 STC-ISP,在單片機型號中選擇“STC89C52RC/LE52RC”,點擊“打開程序文件”, 選擇 Nebula_Discover8051_V1.hex,然后點擊“下載/編程”,此時開始檢測單片機固件。
(5)打開開發(fā)板電源開關(guān),STC-ISP 顯示檢測信息,隨后開始燒寫單片機 ROM。
(6)燒寫完畢后,單片機自動開始運行,此時可以看到流水燈效果。

完成實驗后,選擇菜單 Project -> Clean target,清理工程輸出文件。在工程管理中 刪 除 Nebula_Discover8051_V1_LED_Application.c , 但 是保 留 線 程 庫 和 GPIO 庫 。 在 Nebula_Discover_V1_Main_Application.c 中,定位到第 217 行,將該行轉(zhuǎn)為注釋狀態(tài),為 后續(xù)實驗做好準備。

2.2 LCM1601(液晶模塊)

2.2.1 硬件設計

LCM1601 支持 4 位模式和 8 位模式,有
3 個控制引腳和 8 個數(shù)據(jù)引腳,前者包括 RS
(寄存器選擇)、R/W(讀寫)和 E(使能), 后者包括 D0 - D7。用 P0_0、P0_1 和 P0_2 傳輸控制信息,用 P1_0 - P1_7 傳輸數(shù)據(jù)。 VL 為對比度,連接到阻值為 10K 歐姆的電 位器 R23,供用戶調(diào)節(jié)液晶模塊的顯示效果.

2.2.2 軟件準備

(1)打開 Nebula_Discover_V1_Main_Application.c,定位到第 219 行,去除注釋,將該 行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 添 加 Display_LCM1601_Library.c , 其 目 錄 為SourceBoardNebulaDiscover8051_V1LibraryDisplayLCM1601。
(3)在 工 程 的 Component 組 中 添 加 Display_LCM1601_Component.c , 其 目 錄 為 SourceComponentDisplayLCM1601。
(4)在工程的 Application 組中添加 Nebula_Discover8051_V1_LCM1601_Application.c, 其目錄為SourceBoardNebulaDiscover8051_V1ApplicationLCM1601。

2.2.3 軟件設計

雙擊工程列表中的 Nebula_Discover8051_V1_LCM1601_Application.c,察看軟件實現(xiàn), 即:初始化、打開顯示、設置數(shù)據(jù)和移動數(shù)據(jù)。通過循環(huán)移動數(shù)據(jù),實現(xiàn)文字的滾動顯示, 相關(guān)的組件函數(shù)為:
(1)Display_LCM1601_Component_Initialize:初始化
(2)Display_LCM1601_Component_Read_Busy_Flag_Memory_Address:返回忙標志
(3)Display_LCM1601_Component_Control_Display_On_Off:打開顯示
(4)Display_LCM1601_Component_Write_Memory_Data:寫數(shù)據(jù)
(5)Display_LCM1601_Component_Shift_Cursor_Display:移動光標
(6)Display_LCM1601_Component_Return_Home:返回起點

組件 Display_LCM1601_Component.c 依賴 Display_LCM1601_Library.c,這個庫完成實 際操作,為組件提供硬件抽象層接口。

2.2.4 實驗效果

(1)點擊工具欄的 Build 按鈕,構(gòu)建應用,注意 Build Output 中的輸出內(nèi)容。
(2)在 STC-ISP 中,點擊“打開程序文件”,打開新的 Nebula_Discover8051_V1.hex。
(3)關(guān)閉開發(fā)板的電源開關(guān),插上 LCM1601 液晶模塊,確認跳線 JP2 處于連接狀態(tài),JP1 和 JP3 處于斷開狀態(tài)。
(4)點擊 STC-ISP 中的“下載/編程”,打開開發(fā)板的電源開關(guān),STC-ISP 顯示燒寫信息。
(5)燒寫完畢,單片機自動開始運行。
(6)LCM1601 液晶模塊滾動顯示數(shù)據(jù)
(7)將初始化函數(shù)的參數(shù)設置為 0,表示使用 4 位模式,重復上述過程,檢查運行效果。

完成實驗后,選擇菜單 Project -> Clean target,清理工程輸出文件。在工程列表中 刪除上述三個文件,在Nebula_Discover_V1_Main_Application.c 中定位到第 219 行,將該 行轉(zhuǎn)為注釋態(tài),為后續(xù)實驗做好準備。

2.3 LCM1602(液晶模塊)

2.3.1 硬件設計

LCM1602 支持 4 位模式和 8 位模式,引腳功能與 LCM1601 相同,使用與上一個實驗相同 的硬件設計,此處省略。

2.3.2 軟件準備

(1)在主應用中定位到第 221 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在              Library              組 中 添 加              Display_LCM1602_Library.c , 其 目 錄 為SourceBoardNebulaDiscover8051_V1LibraryDisplayLCM1602。
(3)在              Component              組 中 添 加              Display_LCM1602_Component.c , 其 目 錄 為SourceComponentDisplayLCM1602。
(4)在 Application 組中添加 Nebula_Discover8051_V1_LCM1602_Application.c,其目錄 為SourceBoardNebulaDiscover8051_V1ApplicationLCM1602。

2.3.3 軟件設計

雙擊工程列表中的 Nebula_Discover8051_V1_LCM1602_Application.c,察看軟件實現(xiàn), 即:初始化、打開顯示、設置數(shù)據(jù)和移動數(shù)據(jù)。通過循環(huán)移動數(shù)據(jù),實現(xiàn)文字的滾動顯示, 相關(guān)的組件函數(shù)為:
(1)Display_LCM1602_Component_Initialize:初始化
(2)Display_LCM1602_Component_Read_Busy_Flag_Memory_Address:返回忙標志
(3)Display_LCM1602_Component_Control_Display_On_Off:打開顯示
(4)Display_LCM1602_Component_Write_Memory_Data:寫數(shù)據(jù)
(5)Display_LCM1602_Component_Shift_Cursor_Display:移動光標
(6)Display_LCM1602_Component_Return_Home:返回起點

組件 Display_LCM1602_Component.c 依賴 Display_LCM1602_Library.c,這個庫完成實 際操作,為組件提供硬件抽象層接口。

2.3.4 實驗效果

(1)點擊工具欄的 Build 按鈕,構(gòu)建應用,注意 Build Output 中的輸出內(nèi)容。
(2)在 STC-ISP 中,點擊“打開程序文件”,打開新的 Nebula_Discover8051_V1.hex。
(3)關(guān)閉開發(fā)板的電源開關(guān),插上 LCM1602 液晶模塊,確認跳線 JP2 處于連接狀態(tài),JP1 和 JP3 處于斷開狀態(tài)。
(4)點擊 STC-ISP 中的“下載/編程”,打開開發(fā)板的電源開關(guān),STC-ISP 顯示燒寫信息。
(5)燒寫完畢,單片機自動開始運行。
(6)LCM1602 液晶模塊滾動顯示數(shù)據(jù)

(7)將初始化函數(shù)的參數(shù)設置為 0,表示使用 4 位模式,重復上述過程,檢查運行效果。

完成實驗后,選擇菜單 Project -> Clean target,清理工程輸出文件。在工程列表中 刪除上述三個文件,在Nebula_Discover_V1_Main_Application.c 中定位到第 221 行,將該 行轉(zhuǎn)為注釋態(tài),為后續(xù)實驗做好準備。

2.4 LCM12864(液晶模塊)

2.4.1 硬件設計

LCM12864 支持 8 位并行模式和串行模式,其 前 14 個引腳功能與 LCM1602 相同。第 15 引腳為 PSB,表示并行/串行選擇,高電平選擇并行模式, 低電平選擇串行模式;第 16 引腳為 NC,表示不 連接,但在某些情況下用于選擇左右半屏,具體 功能由用戶選擇的液晶模塊確定;第 17 引腳為 RST,表示復位,低電平有效;第 18 引腳為 VEE, 表示負壓輸出,與對比度引腳 VL 相連。

2.4.2 軟件準備

(1)在主應用中,定位到第 223 行,去除注釋,將該行轉(zhuǎn)為有效態(tài)。
(2)在Library 組中添加 Display_LCM12864_Library.c , 目錄為SourceBoardNebulaDiscover8051_V1LibraryDisplayLCM12864。
(3)在Component組中添加Display_LCM12864_Component.c , 目錄 為SourceComponentDisplayLCM12864。
(4)在 Application 組中添加 Nebula_Discover8051_V1_LCM12864_Application.c,目錄 為SourceBoardNebulaDiscover8051_V1ApplicationLCM12864。

2.4.3 軟件設計

打開 Nebula_Discover8051_V1_LCM12864_Application.c,察看軟件實現(xiàn),即:初始化、 打開顯示、選擇指令集、設置數(shù)據(jù)地址和寫數(shù)據(jù)。LCM12864支持字符模式和圖形模式,首
先選擇基本指令集,進入字符模式并寫數(shù)據(jù);然后選擇擴展指令集,進入圖形模式,設置像
素地址并寫像素,相關(guān)的組件函數(shù)為:
(1)Display_LCM12864_Component_Initialize:初始化
(2)Display_LCM12864_Component_Read_Busy_Flag_Memory_Address:返回忙標志
(3)Display_LCM12864_Component_Control_Display_On_Off:打開顯示
(4)Display_LCM12864_Component_Set_Function:選擇指令集
(5)Display_LCM12864_Component_Set_Display_Data_Memory_Address:設置地址
(6)Display_LCM12864_Component_Write_Memory_Data:寫數(shù)據(jù)
(7)Display_LCM12864_Component_Clear_Display:清除顯示
(8)Display_LCM12864_Component_Set_Extended_Function:設置圖形模式
(9)Display_LCM12864_Component_Set_Graphic_Memory_Vertical_Address:設置垂 直地址
(10)Display_LCM12864_Component_Set_Graphic_Memory_Horizontal_Address:設置 水平地址

組件 Display_LCM12864_Component.c 依賴 Display_LCM12864_Library.c,這個庫完成 實際操作,為組件提供硬件抽象層接口。

2.4.4 實驗效果

(1)構(gòu)建應用,注意 Build Output 窗口中的信息,代碼長度超出單片機 ROM 容量限制。
(2)在工程管理中刪除 STC_STC89C52RC_GPIO_Library.c,實驗中不需要 GPIO 庫。
(3)在工程列表的 Context 組中,雙擊打開 STC_STC89C52RC_Context.c,定位到第 201 行。
(4)Handle_UART_Interrupt_Context 函數(shù)用于處理 UART 中斷環(huán)境,實驗中不需要使用 UART,所以將這個函數(shù)的實現(xiàn)轉(zhuǎn)為注釋態(tài),這樣可以降低代碼大小。
(5)重新構(gòu)建應用,注意 Build Output 窗口中的信息,沒有錯誤和警告。
(6)關(guān)閉開發(fā)板電源開關(guān),插上 LCM12864 液晶模塊,確認跳線 JP2 處于連接狀態(tài),JP1 和 JP3 處于斷開狀態(tài)。
(7)在 STC-ISP 中打開 Nebula_Discover8051_V1.hex,點擊“下載/編程”按鈕。
(8)打開開發(fā)板電源開關(guān),STC-ISP 顯示檢測信息并開始燒寫單片機 ROM。
(9)燒寫完畢,單片機自動開始運行。
(10)LCM12864 液晶模塊開始循環(huán)顯示信息,首先進入字符模式并顯示漢字,隨后進入圖 形模式并寫像素。
(11)將初始化函數(shù)的參數(shù)設置為 0,表示使用串行模式,重復上述過程,檢查運行效果。

清理工程輸出文件,刪除添加的三個文件,恢復 STC_STC89C52RC_GPIO_Library.c,將 STC_STC89C52RC_Context.c 中修改的內(nèi)容恢復原狀,在主應用中將第 223 行恢復原狀,為 后續(xù)實驗做好準備.

2.5 Digit(數(shù)碼管)

2.5.1 硬件設計


數(shù)碼管模塊為共陽型,陽極電源由三極管 Q1 - Q6 控制,三極管為 PNP 型,當基極為低 電平時導通,為高電平時截止。三極管的基極電平由 P0_0 -P0_5 引腳控制,數(shù)碼管的陰極 電平由 D0 - D7 控制,即由 P1_0 - P1_7 引腳控制。

2.5.2 軟件準備

(1)將主應用的第 225 行轉(zhuǎn)為有效態(tài)。
(2)在工程的 Application 組中添加 Nebula_Discover8051_V1_Digit_Application.c,目 錄為SourceBoardNebulaDiscover8051_V1ApplicationDigit。

2.5.3 軟件設計

打開 Nebula_Discover8051_V1_Digit_Application.c,察看軟件實現(xiàn)。在循環(huán)中,依 次打開電源、寫數(shù)據(jù)、延時和關(guān)閉電源,控制數(shù)碼管顯示數(shù)字 0- 9 和小數(shù)點。相關(guān)的庫函 數(shù)為:
(1)GPIO_Library_Write_Pin:寫引腳
(2)GPIO_Library_Write_Port:寫端口
(3)Thread_Library_Suspend_Thread:掛起線程,用于毫秒級延時。

2.5.4 實驗效果

(1)構(gòu)建應用,燒寫程序。
(2)確認開發(fā)板的跳線 JP3 處于連接狀態(tài)

(3)數(shù)碼管依次顯示信息 清除工程輸出文件,將工程列表恢復原狀,為后續(xù)實驗做好準備。


2.6 Buzzer(蜂鳴器)

2.6.1 硬件設計

本實驗使用無源蜂鳴器,所謂“無源”
是指蜂鳴器內(nèi)部沒有發(fā)聲電路(音源), 需要在控制端產(chǎn)生特定頻率的信號,使得 蜂鳴器反復處于接通和斷開狀態(tài),進而發(fā) 出聲音。

當控制信號頻率不同時,蜂鳴器的聲 音大小不同。當控制信號頻率為 2000Hz 時,蜂鳴器聲音最大。

蜂鳴器的電源由 PNP 三極管 Q7 控制,其基極電平由 P2_0 引腳控制,低電平時導通,高
電平時截止。

2.6.2 軟件準備

(1)將主應用的第 227 行轉(zhuǎn)為有效態(tài)
(2)在工程的 Application 組中添加 Nebula_Discover8051_V1_Buzzer_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationBuzzer。

2.6.3 軟件設計

打開蜂鳴器應用,察看軟件實現(xiàn)。在端口控制方面,沒有使用 GPIO 庫,而是通過位操 作直接完成的。GPIO 庫操作的速度慢于位操作,為了保證控制信號的頻率為 2000Hz,必須 使用位操作。為了避免線程被主線程搶占,在控制信號開始前關(guān)閉中斷,在控制信號結(jié)束后 打開中斷。另外,線程庫只能提供毫秒級延時,為了符合控制信號的要求,必須使用微秒級 延時函數(shù)。相關(guān)的庫函數(shù)為:
(1)Disable_Interrupt:關(guān)閉中斷
(2)Multiple_Delay:多次延遲,帶有一個參數(shù),表示延遲數(shù)量,單位為微秒。
(3)Enable_Interrupt:打開中斷
(4)Thread_Library_Suspend_Thread:掛起線程

Disable_Interrupt、Multiple_Delay 和 Enable_Interrupt 函數(shù)屬于核心操作,在 STC_STC89C52RC_Core.h 中 聲 明 , 在STC_STC89C52RC_Core.asm 中 定 義 , 文 件 目 錄 為 SourceProcessorSTCSTC89C52RCCore。

在多線程環(huán)境中謹慎使用 Disable_Interrupt,關(guān)閉中斷的時間不宜太長,避免影響其 它線程的運行。

2.6.4 實驗效果

(1)構(gòu)建應用,燒寫程序。
(2)確認跳線 JP4 處于連接狀態(tài)
(3)蜂鳴器開始發(fā)聲,間隔時間為 1 秒。

用戶可以體驗不同的操作帶來的效果差異,例如:不使用關(guān)閉中斷和打開中斷操作,用 GPIO 庫函數(shù)替換位操作,用線程庫的掛起功能替換Multiple_Delay 函數(shù)。通過這些操作, 有助于進一步熟悉星光操作系統(tǒng)。

清除工程輸出文件,將工程列表恢復原狀,為后續(xù)實驗做好準備。

2.7 Keypad(矩陣按鍵)

2.7.1 硬件設計

矩陣按鍵分成三行三列,分別由 P2.1 - P2.3 引腳和 P2.4 - P2.6 引 腳控制。單片機復位后,引腳的默認 值為 1,所以選擇 0 做為按鍵按下的 標志。
當行引腳輸出 0 時,循環(huán)檢測列 引腳,如果按鍵沒有按下,其值為 1; 如果按鍵按下,其值為0。當某一行 輸出 0 時,其它行必須輸出 1。

2.7.2 軟件準備

(1)在主應用中,定位到第 229 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在工程的 Application 組中,添加 Nebula_Discover8051_V1_Keypad_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationKeypad。

2.7.3 軟件設計

打開 Nebula_Discover8051_V1_Keypad_Application.c,察看軟件實現(xiàn)。在行線輸出 0, 然后從列線讀入,0 表示按鍵已經(jīng)按下,1 表示按鍵沒有按下。為了消除抖動,延遲 10 毫秒, 然后再次讀列線。如果仍然為 0,那么說明按鍵確實處于按下狀態(tài)。最后,通過數(shù)碼管顯示

按鍵編號。相關(guān)的函數(shù)如下:
(1)GPIO_Library_Write_Port:寫端口
(2)GPIO_Library_Read_Pin:讀引腳
(3)Thread_Library_Suspend_Thread:掛起線程

2.7.4 實驗效果

(1)構(gòu)建應用,燒寫程序。
(2)確認開發(fā)板的跳線 JP3 處于連接狀態(tài)
(3)依次按下所有的按鍵,數(shù)碼管會顯示按鍵編號。

(4)等數(shù)碼管的顯示內(nèi)容消失后再次按下按鍵,否則按鍵無效。 清除工程輸出文件,將工程恢復原狀,為后續(xù)實驗做好準備。


2.8 DS18B20(數(shù)字溫度傳感器)

2.8.1 硬件設計

DS18B20 是數(shù)字溫度傳感器,只需要 一根數(shù)據(jù)線便可完成信息的輸入和輸出。 單片機的 P2_7 引腳連接 DS18B20 的數(shù)據(jù) 引腳,R32 為上拉電阻。在 P2_7 引腳產(chǎn) 生不同的時序,即可傳輸命令和數(shù)據(jù)。

2.8.2 軟件準備

(1)在主應用中,定位到第 231 行,將該行轉(zhuǎn)為有效狀態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 Dallas_DS18B20_Library.c , 目 錄 為SourceBoardNebulaDiscover8051_V1LibraryDallasDS18B20。
(3)在 工 程 的 Component 組 中 , 添 加 Dallas_DS18B20_Component.c , 目 錄 為 SourceComponentDallasDS18B20。
(4)在工程的 Application 組中,添加 Nebula_Discover8051_V1_DS18B20_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationDS18B20。

2.8.3 軟件設計

打開 Nebula_Discover8051_V1_DS18B20_Application.c,察看軟件實現(xiàn),流程如下:

(1)初始化,0 表示 DS18B20 存在。
(2)檢測 ROM,計算校驗值。
(3)讀取和顯示電源狀態(tài),0x00 表示寄生電源供電,0xFF 表示外部電源供電。
(4)設置溫度上限、下限和分辨率
(5)寫和讀 EEPROM,校驗 Scratchpad。
(6)轉(zhuǎn)換溫度,校驗 Scratchpad,計算溫度。
(7)通過數(shù)碼管顯示溫度值

在顯示溫度值時,使用核心函數(shù) Disable_Interrupt 和 Enable_Interrupt,目的是禁 止當前線程被搶占,避免數(shù)碼管閃爍。

2.8.4 實驗效果

(1)構(gòu)建應用,注意 Build Output 窗口的信息,代碼過長。
(2)打開 STC_STC89C52RC_Context.c,定位到第 201 行,將 UART 中斷處理部分轉(zhuǎn)為注釋 態(tài)。定位到第 587 行,將第 587 - 596 行轉(zhuǎn)為注釋態(tài)。定位到第 604 行,將第 604 - 613 行轉(zhuǎn)為注釋態(tài)。
(3)定位到第 293 行,將第 293 - 312 行轉(zhuǎn)為注釋態(tài),實驗中沒有使用外部 2 中斷。
(4)再次構(gòu)建應用,燒寫程序。
(5)確認開發(fā)板的跳線 JP1、JP3 和 JP5 處于連接狀態(tài)
(6)顯示溫度值前,LED 顯示二進制編碼,表示操作結(jié)果;顯示溫度值時,可以忽略 LED, 注意觀察數(shù)碼管。

清除工程輸出文件,將 STC_STC89C52RC_Context.c 恢復原狀,將工程恢復原狀,為后 續(xù)實驗做好準備。

2.9 HS0038B(紅外線解碼)

2.9.1 硬件設計

HS0038B 是紅外線接收器,載波頻率 為 38KHz,接收到載波時輸出低電平,否 則輸出高電平。

單片機的 P3_2 引腳可以接收中斷信 號,低電平有效,將其連接到 HS0038B 的 輸出引腳,當紅外線載波到達時,會接收 到中斷。

2.9.2 軟件準備

(1)在主應用中,定位到第 233 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 STC_STC89C52RC_Trigger_Library.c , 目 錄 為 SourceProcessorSTCSTC89C52RCLibraryTrigger。
(3)在 工 程 的 Library 組 中 , 添 加 Vishay_HS0038B_Library.c , 目 錄 為SourceBoardNebulaDiscover8051_V1LibraryVishayHS0038B。
(4)在 工 程 的 Component 組 中 , 添 加 Vishay_HS0038B_Component.c , 目 錄 為 SourceComponentVishayHS0038B。
(5)在工程的 Application 中,添加 Nebula_Discover8051_V1_Infrared_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationInfrared。

2.9.3 軟件設計

打開 Nebula_Discover8051_V1_Infrared_Application.c,察看軟件實現(xiàn)。第一步:等 待觸發(fā),即等待中斷信號;第二步:解碼紅外線信息;第三步:檢查解碼后的數(shù)據(jù)是否有效; 第四步:顯示數(shù)據(jù)。

本實驗依賴單片機的外部中斷功能,對應的函數(shù)為 Trigger_Library_Wait_Trigger, 帶有一個參數(shù),表示中斷源,這里為 External_0_Interrupt。

2.9.4 實驗效果

(1)構(gòu)建應用,燒寫程序。
(2)確認跳線 JP1 和 JP5 處于連接狀態(tài)
(3)將紅外線遙控器的電池保護墊片取下,按下任意鍵,LED 會顯示二進制編碼信息。等 顯示信息消失后,再按其它按鍵,否則按鍵無效。
(4)遙控器的按鍵信息分為“單發(fā)”和“連發(fā)”,短按時為單發(fā),長按時為連發(fā)。單發(fā)時, LED 全滅;連發(fā)時,會有一個 LED 亮。

清除工程輸出文件,將工程恢復原狀,為后續(xù)實驗做好準備。

2.10 Key(簡單按鍵)

2.10.1 硬件設計


2.10.2 軟件準備

單片機復位后,P3_3 引腳默認值 為 1,當按鍵按下時,其值為 0,通 過讀取引腳值便可獲取按鍵狀態(tài)。

(1)在主程序中,定位到第 235 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在工程的 Application 組中,添加 Nebula_Discover8051_V1_Key_Application.c,目 錄為SourceBoardNebulaDiscover8051_V1ApplicationKey。

2.10.3 軟件設計

打開 Nebula_Discover8051_V1_Key_Application.c,察看軟件實現(xiàn)。第一步:讀引腳 值;第二步:消除抖動;第三步:再次讀引腳值;第四步:顯示按鍵狀態(tài)。

2.10.4 實驗效果

(1)構(gòu)建應用,燒寫程序。
(2)確認跳線 JP1 處于連接狀態(tài)

(3)按下或者釋放按鍵,觀察 LED 的顯示狀態(tài)。 清除工程輸出文件,將工程恢復原狀,為后續(xù)實驗做好準備。


2.11 Power(掉電和喚醒)

2.11.1 硬件設計

本實驗使用與前一個實驗相同的硬件電路,此處省略。需要注意的是,單片機的 P3_3 引腳可以接收中斷信號,低電平有效,這個中斷信號將單片機從掉電狀態(tài)中喚醒。

2.11.2 軟件準備

(1)在主應用中,定位到第 237 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 STC_STC89C52RC_Power_Library.c , 目 錄 為 SourceProcessorSTCSTC89C52RCLibraryPower。
(3)在工程的 Application 中,添加 Nebula_Discover8051_V1_Power_Application.c,目 錄為SourceBoardNebulaDiscover8051_V1ApplicationPower。

2.11.3 軟件設計

打開 Nebula_Discover8051_V1_Power_Application.c,察看軟件實現(xiàn)。在掉電前,點 亮一個 LED,持續(xù) 1 秒,以此做為準備標志;隨后進入掉電狀態(tài),等待被中斷喚醒。喚醒后, 再次重復這一過程。

2.11.4 實驗效果

(1)構(gòu)建應用,燒寫程序。

(2)觀察 LED,等待顯示準備標志。LED 熄滅后,按下按鍵,觀察 LED 的變化。 清理工程輸出,將工程恢復原狀,為后續(xù)實驗做好準備。


2.12 AT93C46(EEPROM)

2.12.1 硬件設計

AT93C46 是 3 線串行 EEPROM,內(nèi)部組 織為 8 位或 16 位單元,組織方式由 ORG 引腳控制。當 ORG連接 VCC 時,內(nèi)部為
16 位單元;當連接 GND 時,內(nèi)部為 8 位 單元。

CS 為片選,高電平有效;SK 為串行時鐘,DI 和 DO 為數(shù)據(jù)輸入和輸出引腳,這 4 個引 腳連接到單片機的 P3_4 - P3_7 引腳,單片機內(nèi)部提供上拉電阻。

2.12.2 軟件準備

(1)在主應用中,定位到第 239 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 Atmel_AT93C46_Library.c , 目 錄 為SourceBoardNebulaDiscover8051_V1LibraryAtmelAT93C46.

(3)在 工 程 的 Component 組 中 , 添 加 Atmel_AT93C46_Component.c , 目 錄 為
SourceComponentAtmelAT93C46。
(4)在工程的 Application 組中,添加 Nebula_Discover8051_V1_AT93C46_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationAT93C46。

2.12.3 軟件設計

打開 Nebula_Discover8051_V1_AT93C46_Application.c,察看軟件實現(xiàn)。首先復位, 然后擦除和寫入存儲器,最后讀存儲器并顯示數(shù)據(jù)。相關(guān)的組件函數(shù)為:
(1)Atmel_AT93C46_Component_Reset:復位
(2)Atmel_AT93C46_Component_Enable_Erase_Write_Memory:允許擦除和寫存儲器
(3)Atmel_AT93C46_Component_Erase_All_Memory:擦除存儲器
(4)Atmel_AT93C46_Component_Write_Memory_8_Bit:寫存儲器
(5)Atmel_AT93C46_Component_Disable_Erase_Write_Memory:禁止擦除和寫存儲器

2.12.4 實驗效果

(1)構(gòu)建應用,注意 Build Output 窗口的輸出,代碼過長。
(2)打開 STC_STC89C52RC_Context.c,定位到第 201 行,將第 201 - 259 行轉(zhuǎn)為注釋態(tài)。
(3)再次構(gòu)建應用,燒寫程序。
(4)確認跳線 JP1 處于連接狀態(tài)

(5)LED 顯示 EEPROM 內(nèi)容的二進制編碼,范圍為 0x00 - 0xFF。 清理工程,將工程恢復原狀,為后續(xù)實驗做好準備。


2.13 AT24C02(EEPROM)

2.13.1 硬件設計


AT24C02 是 IIC 接口的串行 EEPROM,內(nèi)部具有 2K 位,即 256 個字節(jié)。WP 為寫保護引腳, 高電平時禁止寫入,低電平時允許寫入。SDA 為串行數(shù)據(jù)引腳,SCL 為串行時鐘引腳,分別 連接單片機的 P0_6 和 P0_7,這兩個引腳帶有外部上拉電阻。A0、A1 和 A2 為地址引腳,都 連接到地,所以 AT24C02 的總線地址為 0。

2.13.2 軟件準備

(1)在主應用中,定位到第 241 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 Atmel_AT24C02_Library.c , 目 錄 為SourceBoardNebulaDiscover8051_V1LibraryAtmelAT24C02。
(3)在 工 程 的 Component 組 中 , 添 加 Atmel_AT24C02_Component.c , 目 錄 為 SourceComponentAtmelAT24C02。
(4)在工程的 Application 組中,添加 Nebula_Discover8051_V1_AT24C02_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationAT24C02。

2.13.3 軟件設計

打開 Nebula_Discover8051_V1_AT24C02_Application.c,察看軟件實現(xiàn)。第一步:復 位,第二步:寫入數(shù)據(jù),第三步:讀出數(shù)據(jù),第四步:顯示數(shù)據(jù)。相關(guān)的組件函數(shù)為:
(1)Atmel_AT24C02_Component_Reset:復位
(2)Atmel_AT24C02_Component_Write_Data:寫數(shù)據(jù)
(3)Atmel_AT24C02_Component_Read_Data:讀數(shù)據(jù)

2.13.4 實驗效果

(1)構(gòu)建應用,注意 Builid Output 窗口的輸出信息,代碼過長。
(2)打開 STC_STC89C52RC_Context.c,定位到第 201 行,將第 201 - 259 行轉(zhuǎn)為注釋態(tài)。
(3)再次構(gòu)建應用。
(4)確認跳線 JP1 和 JP8 處于連接狀態(tài)

(5)下載程序,LED 顯示 EEPROM 數(shù)據(jù)的二進制編碼,范圍為 0x00 - 0xFF。 清理工程,將工程恢復原狀,為后續(xù)實驗做好準備。


2.14 DS1302(實時時鐘)

2.14.1 硬件設計


DS1302 是 3 線實時時鐘(RTC),可以保存年、月、日、星期、時、分和秒信息,自動
處理閏年情況,帶有 31 個 8 位 RAM 字節(jié),還具有涓流充電功能。RST 為復位引腳,低電平
有效;I/O 為輸入/輸出引腳,SCLK 為串行時鐘。VCC1 與電解電容 C20 相連,該電容起到后 備電池的作用。單片機的 P4_4 - P4_6 帶有內(nèi)部上拉電阻,連接到 DS1302 的 3 個通信引腳, 完成讀寫數(shù)據(jù)功能。

2.14.2 軟件準備

(1)在主應用中,定位到第 243 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 Dallas_DS1302_Library.c , 目 錄 為SourceBoardNebulaDiscover8051_V1LibraryDallasDS1302。
(3)在 工 程 的 Component 組 中 , 添 加 Dallas_DS1302_Component.c , 目 錄 為 SourceComponentDallasDS1302。
(4)在工程的 Application 組中,添加 Nebula_Discover8051_V1_DS1302_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationDS1302。

2.14.3 軟件設計

打開 Nebula_Discover8051_V1_DS1302_Application.c,察看軟件實現(xiàn)。首先清除寫保 護,設置時間;然后啟動時鐘;之后讀取時間并在 LED 上顯示;最后寫和讀 RAM,在 LED 上 顯示數(shù)據(jù)。相關(guān)的組件函數(shù)為:
(1)Dallas_DS1302_Component_Read_Clock_Register:讀時鐘
(2)Dallas_DS1302_Component_Write_Clock_Register:寫時鐘
(3)Dallas_DS1302_Component_Write_RAM_Register:寫 RAM
(4)Dallas_DS1302_Component_Read_RAM_Register:讀 RAM

2.14.4 實驗效果

(1)構(gòu)建應用,注意 Build Output 窗口的輸出信息,代碼過長。
(2)打開 STC_STC89C52RC_Context.c,定位到第 201 行,將第 201 - 259 行轉(zhuǎn)為注釋態(tài)。
(3)再次構(gòu)建應用
(4)確認跳線 JP1 和 JP9 處于連接狀態(tài)
(5)在 STC-ISP 左側(cè)的硬件選項中,選擇“ALE 腳用作 P4.5 口”,然后下載程序。
(6)由于修改了硬件選項,需要再次斷電,然后重新上電,程序才會正確運行。

(7)LED 會以二進制形式顯示數(shù)據(jù) 清理工程,將工程恢復原狀,為后續(xù)實驗做好準備.


2.15 28BYJ48(步進永磁減速電機)

2.15.1 硬件設計

開發(fā)板上沒有電機驅(qū)動芯片,需要用戶自行購買電機驅(qū)動模塊,單片機的 P3_4 - P3_7 引腳用作數(shù)據(jù)口。

2.15.2 軟件準備

(1)在主應用中,定位到第 245 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 Motor_28BYJ48_Library.c , 目 錄 為SourceBoardNebulaDiscover8051_V1LibraryMotor8BYJ48。
(3)在 工 程 的 Component 組 中 , 添 加 Motor_28BYJ48_Component.c , 目 錄 為 SourceComponentMotor8BYJ48。
(4)在工程的 Application 組中,添加 Nebula_Discover8051_V1_Motor_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationMotor。


2.15.3 軟件設計


打開 Nebula_Discover8051_V1_Motor_Application.c,察看軟件實現(xiàn)。首先逆時針旋 轉(zhuǎn) 360 度,清除脈沖,延時;然后順時針旋轉(zhuǎn) 360 度,清除脈沖,延時。在循環(huán)中重復上述 過程,相關(guān)的組件函數(shù)為:
(1)Motor_28BYJ48_Component_Counterclockwise_Step:逆時針步進,帶有一個參數(shù), 表示步進延時,單位為毫秒。
(2)Motor_28BYJ48_Component_Clear_Pulse:清除脈沖
(3)Motor_28BYJ48_Component_Clockwise_Step:順時針步進,帶有一個參數(shù),表示 步進延時,單位為毫秒。


2.15.4 實驗效果


(1)構(gòu)建應用
(2)下載程序

(3)電機逆時針旋轉(zhuǎn) 360 度,然后順時針旋轉(zhuǎn) 360 度,并重復這一過程。 清理工程,將工程恢復原狀,為后續(xù)實驗做好準備。



2.16 UART(串口)


2.16.1 硬件設計



單片機內(nèi)部帶有一個 UART,對應引腳為 P3_0(RxD)和 P3_1(TxD),通過 USB-UART 轉(zhuǎn) 換芯片 CH340G 與上位機通信。


2.16.2 軟件準備


(1)在主應用中,定位到第 247 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 STC_STC89C52RC_UART_Library.c , 目 錄 為 SourceProcessorSTCSTC89C52RCLibraryUART。
(3)在工程的 Application 組中,添加 Nebula_Discover8051_V1_UART_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationUART。


2.16.3 軟件設計


打開 Nebula_Discover8051_V1_UART_Application.c,察看軟件實現(xiàn)。第一步:發(fā)送數(shù) 據(jù);第二步:接收數(shù)據(jù),顯示數(shù)據(jù)數(shù)量和值;第三步:發(fā)送該數(shù)據(jù)。在循環(huán)中重復上述過程, 相關(guān)的庫函數(shù)為:
(1)UART_Library_Write_UART:發(fā)送數(shù)據(jù),帶有兩個參數(shù),分別表示數(shù)據(jù)指針和數(shù)據(jù) 數(shù)量。
(2)UART_Library_Read_UART:接收數(shù)據(jù),帶有三個參數(shù),分別表示數(shù)據(jù)指針、數(shù)據(jù) 數(shù)量和線程延遲(單位為毫秒),返回值表示實際的數(shù)據(jù)數(shù)量。第二個參數(shù)(線程延遲)是 接收數(shù)據(jù)時的最大等待時間,0 表示沒有限制,非 0 表示具體的超時時間,超時后該函數(shù)自 動返回,此時的返回值為0。


2.16.4 實驗效果


(1)構(gòu)建工程,下載程序。
(2)在 STC-ISP 中選擇“串口助手”,接收緩沖區(qū)和發(fā)送緩沖區(qū)中都選擇“文本模式”,在 發(fā)送緩沖區(qū)中輸入任意字符,例如“1”。將波特率設置為9600,點擊“打開串口”按鈕, 最后點擊發(fā)送緩沖區(qū)中的“自動發(fā)送”按鈕。
(3)確認跳線 JP1 處于連接狀態(tài),LED 會顯示接收數(shù)據(jù)的二進制編碼。

(4)在接收緩沖區(qū)中顯示傳輸?shù)臄?shù)據(jù) 清理工程,將工程恢復原狀,為后續(xù)實驗做好準備。


2.17 ISP(EEPROM)


2.17.1 硬件設計


單片機內(nèi)部帶有 4K 字節(jié)的 EEPOM,不需要外部電路。


2.17.2 軟件準備


(1)在主應用中,定位到第 249 行,將該行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 STC_STC89C52RC_ISP_Library.c , 目 錄 為 SourceProcessorSTCSTC89C52RCLibraryISP。
(3)在工程的 Application 組中,添加 Nebula_Discover8051_V1_ISP_Application.c,目 錄為SourceBoardNebulaDiscover8051_V1ApplicationISP。


2.17.3 軟件設計


打開 Nebula_Discover8051_V1_ISP_Application.c,察看軟件設計。第一步:顯示準 備標志;第二步:擦除 EEPROM;第三步:編程 EEPROM;第四步:顯示 EEPROM 數(shù)據(jù),復位。 相關(guān)的庫函數(shù)為:
(1)ISP_Library_Erase_EEPROM:擦除 EEPROM
(2)ISP_Library_Program_EEPROM:編程 EEPROM
(3)ISP_Library_Read_EEPROM:讀 EEPROM
(4)ISP_Library_Request_Reset:請求復位


在使用 ISP 庫函數(shù)時,需要確定“等待時間”這個參數(shù),請查閱單片機數(shù)據(jù)手冊的 ISP 部分,本實驗中所用的參數(shù)值僅供參考。


2.17.4 實驗效果


(1)構(gòu)建應用,下載程序。
(2)確認跳線 JP1 處于連接狀態(tài)

(3)LED 顯示準備標志,隨后顯示 EEPROM 數(shù)據(jù)的二進制編碼,范圍為 0x00 - 0xFF。 清理工程,將工程恢復原狀,為后續(xù)實驗做好準備。


2.18 Semaphore(信號量)


2.18.1 硬件設計


使用數(shù)碼管,無其它電路。


2.18.2 軟件準備


(1)在主應用中,定位到第 251 行,將第 251 - 253 行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 STC_STC89C52RC_Semaphore_Library.c , 目 錄 為 SourceProcessorSTCSTC89C52RCLibrarySemaphore。
(3)在 工 程 的 Application 組 中 , 添 加 Nebula_Discover8051_V1_Semaphore_Application.c , 目 錄 為SourceBoardNebulaDiscover8051_V1ApplicationSemaphore。


2.18.3 軟件設計


打開 Nebula_Discover8051_V1_Semaphore_Application.c,察看軟件實現(xiàn)。在應用中 建立兩個線程,即:主線程(不是主應用中的 main 線程)和從線程,這兩個線程控制同一 個數(shù)碼管,但是前者顯示偶數(shù),后者顯示奇數(shù)。


數(shù)碼管(包括全局變量 Digit_Index)是共享資源,對應一個信號量,其值為 1,表示 資源數(shù)量為 1,在主應用的第 251 行建立。主線程和從線程以固定方式使用共享資源,即: 申請資源、使用資源和釋放資源,其中申請資源可稱為進入臨界區(qū),釋放資源可稱為退出臨 界區(qū)。相關(guān)的庫函數(shù)為:
(1)Semaphore_Library_Decrease_Semaphore:減少信號量
(2)Semaphore_Library_Increase_Semaphore:增加信號量


2.18.4 實驗效果


(1)構(gòu)建應用,下載程序。
(2)確認跳線 JP3 處于連接狀態(tài)

(3)數(shù)碼管交替顯示偶數(shù)和奇數(shù)


清理工程,將工程恢復原狀,為后續(xù)實驗做好準備。


2.19 Barrier(屏障)


2.19.1 硬件設計


使用蜂鳴器和數(shù)碼管,無其它電路


2.19.2 軟件準備


(1)在主應用中,定位到第 255 行,將第 255 - 257 行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 STC_STC89C52RC_Barrier_Library.c , 目 錄 為 SourceProcessorSTCSTC89C52RCLibraryBarrier。
(3)在工程的 Application 組中,添加 Nebula_Discover8051_V1_Barrier_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationBarrier。


2.19.3 軟件設計


打開 Nebula_Discover8051_V1_Barrier_Application.c,察看軟件實現(xiàn)。在應用中建 立兩個線程,即:主線程(不是主應用中的 main 線程)和從線程,前者控制蜂鳴器,后者 控制數(shù)碼管。


屏障在主應用的第 255 行建立,其值為 2,表示線程數(shù)量為 2。在當前循環(huán)中,主線程 運行時間短,從線程運行時間長。通過使用屏障,主線程運行結(jié)束后不會立刻再次運行,而 是等待從線程,只有從線程運行結(jié)束,兩個線程才會同時通過屏障,然后開始新的循環(huán)。相 關(guān)的庫函數(shù)為:
(1)Barrier_Library_Break_Barrier:突破屏障


注意,本實驗的目的是演示屏障的使用效果,所以對蜂鳴器的控制很簡單,只是打開和 關(guān)閉而已,沒有提供 2000Hz 的發(fā)聲信號,蜂鳴器發(fā)出的聲音較小。


2.19.4 實驗效果


(1)構(gòu)建應用,下載程序。
(2)確認跳線 JP3 和 JP4 處于連接狀態(tài)
(3)蜂鳴器發(fā)出兩次聲音,隨后暫停運行;數(shù)碼管顯示數(shù)字 0 - 9,顯示完成后,蜂鳴器 才會再次發(fā)聲。


清理工程,將工程恢復原狀,為后續(xù)實驗做好準備。


2.20 Mailbox(信箱)


2.20.1 硬件設計


使用 LED,無其它電路。


2.20.2 軟件準備


(1)在主應用中,定位到第 259 行,將第 259 - 261 行轉(zhuǎn)為有效態(tài)。
(2)在 工 程 的 Library 組 中 , 添 加 STC_STC89C52RC_Mailbox_Library.c , 目 錄 為 SourceProcessorSTCSTC89C52RCLibraryMailbox。
(3)在工程的 Application 組中,添加 Nebula_Discover8051_V1_Mailbox_Application.c, 目錄為SourceBoardNebulaDiscover8051_V1ApplicationMailbox。


2.20.3 軟件設計


打開 Nebula_Discover8051_V1_Mailbox_Application.c,察看軟件實現(xiàn)。在應用中建 立兩個線程,即:主線程(不是主應用中的 main 線程)和從線程,前者打開 LED,后者關(guān) 閉 LED,兩個線程通過信箱進行通信。信箱在主應用的第 259 行建立,相關(guān)的庫函數(shù)為:
(1)Mailbox_Library_Write_Mailbox:寫信箱
(2)Mailbox_Library_Read_Mailbox:讀信箱


2.20.4 實驗效果


(1)構(gòu)建應用,下載程序。
(2)確認跳線 JP1 處于連接狀態(tài)

(3)LED 依次亮和滅 清理工程,將工程恢復原狀,為用戶自定義實驗做好準備。


3聯(lián)系方式


歡迎技術(shù)交流,如果在使用過程中存在疑問或者發(fā)現(xiàn)錯誤,請使用如下聯(lián)系方式:
(2)QQ群:星云電子工作室(651705849




為了便于技術(shù)交流,請加QQ群:651705849,星云電子工作室。

全部資料下載地址:
Discover8051 V1.zip (2.9 MB, 下載次數(shù): 117)



評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2017-9-3 16:51 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:230641 發(fā)表于 2017-9-3 17:13 | 只看該作者
admin 發(fā)表于 2017-9-3 16:51
好資料,51黑有你更精彩!!!

帖子的初始標題和內(nèi)容比現(xiàn)在簡單,后臺編輯主動替我做了很多修改工作,非常感謝。
回復

使用道具 舉報

地板
ID:262 發(fā)表于 2017-9-6 03:01 | 只看該作者
粗略的看了一下,感嘆51內(nèi)核操作系統(tǒng)又多了一員猛將啊,希望樓主和咱們一起把星光系統(tǒng)發(fā)揚光大.
回復

使用道具 舉報

5#
ID:90140 發(fā)表于 2017-9-6 07:59 | 只看該作者
51黑有你更精彩!!!
回復

使用道具 舉報

6#
ID:14237 發(fā)表于 2017-9-6 08:53 | 只看該作者
謝謝分享
回復

使用道具 舉報

7#
ID:230641 發(fā)表于 2017-9-6 13:38 | 只看該作者
heicad 發(fā)表于 2017-9-6 03:01
粗略的看了一下,感嘆51內(nèi)核操作系統(tǒng)又多了一員猛將啊,希望樓主和咱們一起把星光系統(tǒng)發(fā)揚光大.

謝謝支持,可以加入QQ群,方便交流。
回復

使用道具 舉報

8#
ID:87745 發(fā)表于 2017-9-8 23:10 來自手機 | 只看該作者
51有你更精彩
回復

使用道具 舉報

9#
ID:65845 發(fā)表于 2017-9-18 18:40 | 只看該作者
牛,謝謝分享。
回復

使用道具 舉報

10#
ID:218360 發(fā)表于 2017-9-20 20:50 | 只看該作者
希望下載下來,對我學習單片機有效,謝謝
回復

使用道具 舉報

11#
ID:230641 發(fā)表于 2017-9-21 14:10 | 只看該作者
打雜的 發(fā)表于 2017-9-20 20:50
希望下載下來,對我學習單片機有效,謝謝

如果遇到問題,可以加入QQ群,方便交流。
回復

使用道具 舉報

12#
ID:378965 發(fā)表于 2019-2-1 20:38 | 只看該作者
下載下來 玩玩
回復

使用道具 舉報

13#
ID:93034 發(fā)表于 2019-4-4 01:40 | 只看該作者
牛逼轟轟!
回復

使用道具 舉報

14#
ID:116347 發(fā)表于 2019-10-23 15:04 | 只看該作者
heicad 發(fā)表于 2017-9-6 03:01
粗略的看了一下,感嘆51內(nèi)核操作系統(tǒng)又多了一員猛將啊,希望樓主和咱們一起把星光系統(tǒng)發(fā)揚光大.

好東西,學習一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 狠狠操狠狠 | 亚洲国产精品精华素 | 精品中文在线 | 欧美激情国产精品 | 九九综合| 免费黄色特级片 | 激情六月丁香 | 日日噜噜噜夜夜爽爽狠狠视频97 | 亚洲精品国产偷自在线观看 | 在线免费观看黄色 | 日韩欧美视频 | 欧美成人精品激情在线观看 | 久久免费高清视频 | 日本特黄a级高清免费大片 特黄色一级毛片 | 国产欧美久久精品 | 剑来高清在线观看 | 美女在线一区二区 | 精品欧美一区二区在线观看 | 国产久 | 国产精品海角社区在线观看 | 成人免费视频网站在线看 | 福利影院在线看 | 国产成人精品区一区二区不卡 | 欧美精品一区二区在线观看 | 亚洲 欧美 日韩 精品 | 久久成人在线视频 | 久久中文视频 | 国产精品高潮呻吟久久 | 欧美精品一区三区 | 亚洲午夜视频 | 久久黄色网 | 日本久久久久久久久 | 亚洲精品第一 | 在线观看日韩 | 亚洲美女在线视频 | 在线观看国产wwwa级羞羞视频 | 牛牛热在线视频 | 91久久北条麻妃一区二区三区 | 99精品免费视频 | 欧美视频 亚洲视频 | 欧美国产日韩一区二区三区 |