找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 19916|回復(fù): 13
收起左側(cè)

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

  [復(fù)制鏈接]
ID:230641 發(fā)表于 2017-9-3 07:56 | 顯示全部樓層 |閱讀模式
本帖最后由 engineer_wubin 于 2017-9-4 20:58 編輯

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

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

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

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

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

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


1   工具

1.1 Discover8051 V1 開(kāi)發(fā)板

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

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

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

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


1.3 Keil C51

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

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

1.4 STC-ISP

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

另外,STC-ISP 帶有單片機(jī)型號(hào)數(shù)據(jù)庫(kù),安裝方法為:?jiǎn)?dòng) STC-ISP,選擇 Keil 仿真設(shè) 置頁(yè)面,點(diǎn)擊添加按鈕,將單片機(jī)型號(hào)、頭文件和仿真驅(qū)動(dòng)添加到 Keil C51 中。將鼠標(biāo)指 針停留在該按鈕上,會(huì)顯示幫助信息.

2 實(shí)驗(yàn)

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

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

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

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

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

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

2.1.1 硬件設(shè)計(jì)

1.025.jpg

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

2.1.2 軟件準(zhǔn)備

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

2.1.3 軟件設(shè)計(jì)

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

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

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

2.2 LCM1601(液晶模塊)

1.029.jpg 2.2.1 硬件設(shè)計(jì)

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

2.2.2 軟件準(zhǔn)備

(1)打開(kāi) Nebula_Discover_V1_Main_Application.c,定位到第 219 行,去除注釋?zhuān)瑢⒃?行轉(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 軟件設(shè)計(jì)

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

組件 Display_LCM1601_Component.c 依賴(lài) Display_LCM1601_Library.c,這個(gè)庫(kù)完成實(shí) 際操作,為組件提供硬件抽象層接口。

2.2.4 實(shí)驗(yàn)效果

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

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

2.3 LCM1602(液晶模塊)

2.3.1 硬件設(shè)計(jì)

LCM1602 支持 4 位模式和 8 位模式,引腳功能與 LCM1601 相同,使用與上一個(gè)實(shí)驗(yàn)相同 的硬件設(shè)計(jì),此處省略。

2.3.2 軟件準(zhǔn)備

(1)在主應(yīng)用中定位到第 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 軟件設(shè)計(jì)

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

組件 Display_LCM1602_Component.c 依賴(lài) Display_LCM1602_Library.c,這個(gè)庫(kù)完成實(shí) 際操作,為組件提供硬件抽象層接口。

2.3.4 實(shí)驗(yàn)效果

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

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

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

2.4 LCM12864(液晶模塊)

1.039.jpg 2.4.1 硬件設(shè)計(jì)

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

2.4.2 軟件準(zhǔn)備

(1)在主應(yīng)用中,定位到第 223 行,去除注釋?zhuān)瑢⒃撔修D(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 軟件設(shè)計(jì)

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

組件 Display_LCM12864_Component.c 依賴(lài) Display_LCM12864_Library.c,這個(gè)庫(kù)完成 實(shí)際操作,為組件提供硬件抽象層接口。

2.4.4 實(shí)驗(yàn)效果

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

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

2.5 Digit(數(shù)碼管)

2.5.1 硬件設(shè)計(jì)

1.046.jpg

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

2.5.2 軟件準(zhǔn)備

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

2.5.3 軟件設(shè)計(jì)

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

2.5.4 實(shí)驗(yàn)效果

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

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


2.6 Buzzer(蜂鳴器)

2.6.1 硬件設(shè)計(jì)

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

當(dāng)控制信號(hào)頻率不同時(shí),蜂鳴器的聲 音大小不同。當(dāng)控制信號(hào)頻率為 2000Hz 時(shí),蜂鳴器聲音最大。

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

2.6.2 軟件準(zhǔn)備

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

2.6.3 軟件設(shè)計(jì)

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

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

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

2.6.4 實(shí)驗(yàn)效果

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

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

清除工程輸出文件,將工程列表恢復(fù)原狀,為后續(xù)實(shí)驗(yàn)做好準(zhǔn)備。

2.7 Keypad(矩陣按鍵)

2.7.1 硬件設(shè)計(jì)

1.054.jpg 矩陣按鍵分成三行三列,分別由 P2.1 - P2.3 引腳和 P2.4 - P2.6 引 腳控制。單片機(jī)復(fù)位后,引腳的默認(rèn) 值為 1,所以選擇 0 做為按鍵按下的 標(biāo)志。
當(dāng)行引腳輸出 0 時(shí),循環(huán)檢測(cè)列 引腳,如果按鍵沒(méi)有按下,其值為 1; 如果按鍵按下,其值為0。當(dāng)某一行 輸出 0 時(shí),其它行必須輸出 1。

2.7.2 軟件準(zhǔn)備

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

2.7.3 軟件設(shè)計(jì)

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

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

2.7.4 實(shí)驗(yàn)效果

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

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


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

1.058.jpg 2.8.1 硬件設(shè)計(jì)

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

2.8.2 軟件準(zhǔn)備

(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)

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

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

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

2.8.4 實(shí)驗(yàn)效果

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

清除工程輸出文件,將 STC_STC89C52RC_Context.c 恢復(fù)原狀,將工程恢復(fù)原狀,為后 續(xù)實(shí)驗(yàn)做好準(zhǔn)備。

2.9 HS0038B(紅外線解碼)

2.9.1 硬件設(shè)計(jì)

1.062.jpg HS0038B 是紅外線接收器,載波頻率 為 38KHz,接收到載波時(shí)輸出低電平,否 則輸出高電平。

單片機(jī)的 P3_2 引腳可以接收中斷信 號(hào),低電平有效,將其連接到 HS0038B 的 輸出引腳,當(dāng)紅外線載波到達(dá)時(shí),會(huì)接收 到中斷。

2.9.2 軟件準(zhǔn)備

(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)

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

本實(shí)驗(yàn)依賴(lài)單片機(jī)的外部中斷功能,對(duì)應(yīng)的函數(shù)為 Trigger_Library_Wait_Trigger, 帶有一個(gè)參數(shù),表示中斷源,這里為 External_0_Interrupt。

2.9.4 實(shí)驗(yàn)效果

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

清除工程輸出文件,將工程恢復(fù)原狀,為后續(xù)實(shí)驗(yàn)做好準(zhǔn)備。

2.10 Key(簡(jiǎn)單按鍵)

2.10.1 硬件設(shè)計(jì)

1.072.jpg

2.10.2 軟件準(zhǔn)備

單片機(jī)復(fù)位后,P3_3 引腳默認(rèn)值 為 1,當(dāng)按鍵按下時(shí),其值為 0,通 過(guò)讀取引腳值便可獲取按鍵狀態(tài)。

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

2.10.3 軟件設(shè)計(jì)

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

2.10.4 實(shí)驗(yàn)效果

(1)構(gòu)建應(yīng)用,燒寫(xiě)程序。
(2)確認(rèn)跳線 JP1 處于連接狀態(tài)

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


2.11 Power(掉電和喚醒)

2.11.1 硬件設(shè)計(jì)

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

2.11.2 軟件準(zhǔn)備

(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)

打開(kāi) Nebula_Discover8051_V1_Power_Application.c,察看軟件實(shí)現(xiàn)。在掉電前,點(diǎn) 亮一個(gè) LED,持續(xù) 1 秒,以此做為準(zhǔn)備標(biāo)志;隨后進(jìn)入掉電狀態(tài),等待被中斷喚醒。喚醒后, 再次重復(fù)這一過(guò)程。

2.11.4 實(shí)驗(yàn)效果

(1)構(gòu)建應(yīng)用,燒寫(xiě)程序。

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


2.12 AT93C46(EEPROM)

2.12.1 硬件設(shè)計(jì)

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

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

2.12.2 軟件準(zhǔn)備

(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)

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

2.12.4 實(shí)驗(yàn)效果

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

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


2.13 AT24C02(EEPROM)

2.13.1 硬件設(shè)計(jì)

1.083.jpg

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

2.13.2 軟件準(zhǔn)備

(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)

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

2.13.4 實(shí)驗(yàn)效果

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

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


2.14 DS1302(實(shí)時(shí)時(shí)鐘)

2.14.1 硬件設(shè)計(jì)

1.087.jpg

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

2.14.2 軟件準(zhǔn)備

(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)

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

2.14.4 實(shí)驗(yàn)效果

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

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


2.15 28BYJ48(步進(jìn)永磁減速電機(jī))

2.15.1 硬件設(shè)計(jì)

開(kāi)發(fā)板上沒(méi)有電機(jī)驅(qū)動(dòng)芯片,需要用戶(hù)自行購(gòu)買(mǎi)電機(jī)驅(qū)動(dòng)模塊,單片機(jī)的 P3_4 - P3_7 引腳用作數(shù)據(jù)口。

2.15.2 軟件準(zhǔn)備

(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)


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


2.15.4 實(shí)驗(yàn)效果


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

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



2.16 UART(串口)


2.16.1 硬件設(shè)計(jì)


1.097.jpg

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


2.16.2 軟件準(zhǔn)備


(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)


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


2.16.4 實(shí)驗(yàn)效果


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

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


2.17 ISP(EEPROM)


2.17.1 硬件設(shè)計(jì)


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


2.17.2 軟件準(zhǔn)備


(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)


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


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


2.17.4 實(shí)驗(yàn)效果


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

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


2.18 Semaphore(信號(hào)量)


2.18.1 硬件設(shè)計(jì)


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


2.18.2 軟件準(zhǔn)備


(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)


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


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


2.18.4 實(shí)驗(yàn)效果


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

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


清理工程,將工程恢復(fù)原狀,為后續(xù)實(shí)驗(yàn)做好準(zhǔn)備。


2.19 Barrier(屏障)


2.19.1 硬件設(shè)計(jì)


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


2.19.2 軟件準(zhǔn)備


(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)


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


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


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


2.19.4 實(shí)驗(yàn)效果


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


清理工程,將工程恢復(fù)原狀,為后續(xù)實(shí)驗(yàn)做好準(zhǔn)備。


2.20 Mailbox(信箱)


2.20.1 硬件設(shè)計(jì)


使用 LED,無(wú)其它電路。


2.20.2 軟件準(zhǔn)備


(1)在主應(yīng)用中,定位到第 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 軟件設(shè)計(jì)


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


2.20.4 實(shí)驗(yàn)效果


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

(3)LED 依次亮和滅 清理工程,將工程恢復(fù)原狀,為用戶(hù)自定義實(shí)驗(yàn)做好準(zhǔn)備。


3聯(lián)系方式


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


0.png

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

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



評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2017-9-3 16:51 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:230641 發(fā)表于 2017-9-3 17:13 | 顯示全部樓層
admin 發(fā)表于 2017-9-3 16:51
好資料,51黑有你更精彩!!!

帖子的初始標(biāo)題和內(nèi)容比現(xiàn)在簡(jiǎn)單,后臺(tái)編輯主動(dòng)替我做了很多修改工作,非常感謝。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:90140 發(fā)表于 2017-9-6 07:59 | 顯示全部樓層
51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:14237 發(fā)表于 2017-9-6 08:53 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

ID:87745 發(fā)表于 2017-9-8 23:10 來(lái)自觸屏版 | 顯示全部樓層
51有你更精彩
回復(fù)

使用道具 舉報(bào)

ID:65845 發(fā)表于 2017-9-18 18:40 | 顯示全部樓層
牛,謝謝分享。
回復(fù)

使用道具 舉報(bào)

ID:218360 發(fā)表于 2017-9-20 20:50 | 顯示全部樓層
希望下載下來(lái),對(duì)我學(xué)習(xí)單片機(jī)有效,謝謝
回復(fù)

使用道具 舉報(bào)

ID:230641 發(fā)表于 2017-9-21 14:10 | 顯示全部樓層
打雜的 發(fā)表于 2017-9-20 20:50
希望下載下來(lái),對(duì)我學(xué)習(xí)單片機(jī)有效,謝謝

如果遇到問(wèn)題,可以加入QQ群,方便交流。
回復(fù)

使用道具 舉報(bào)

ID:378965 發(fā)表于 2019-2-1 20:38 | 顯示全部樓層
下載下來(lái) 玩玩
回復(fù)

使用道具 舉報(bào)

ID:93034 發(fā)表于 2019-4-4 01:40 | 顯示全部樓層
牛逼轟轟!
回復(fù)

使用道具 舉報(bào)

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

好東西,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表