欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)最小系統(tǒng)板說明書 [打印本頁]

作者: pursueokonwledg    時間: 2016-4-12 21:10
標(biāo)題: 51單片機(jī)最小系統(tǒng)板說明書
MCU 使用說明書
注:說明書只是提供部分參考實(shí)驗(yàn),供使用用戶熟悉,了解開發(fā)板和各模
塊電路。程序和開發(fā)板是配套的,可以很方便在此開發(fā)板上運(yùn)行。
UnRegistered
序言 .................................................................................................................................................. 4
第一章 :燒錄第一個程序 ............................................................................................................ 6
1.1 STC89 單片機(jī)下載(燒寫程序)方法 ............................................................................ 6
1.2 安裝 keil C51 軟件編寫第一個程序 ............................................................................ 10
第二章 LED 燈閃爍 ...................................................................................................................... 38
2.1 硬件設(shè)計(jì) .......................................................................................................................... 39
2.2 軟件設(shè)計(jì) .......................................................................................................................... 39
2.3 仿真與下載 ...................................................................................................................... 40
第三章LED 跑馬燈 ....................................................................................................................... 42
3.1 硬件設(shè)計(jì) .......................................................................................................................... 43
3.2 軟件設(shè)計(jì) .......................................................................................................................... 43
3.3 下載驗(yàn)證 .......................................................................................................................... 44
第四章 LED 漸亮漸滅 .................................................................................................................. 44
4.1 硬件設(shè)計(jì) .......................................................................................................................... 45
4.2 軟件設(shè)計(jì) .......................................................................................................................... 46
4.3 下載驗(yàn)證 .......................................................................................................................... 47
第五章 蜂鳴器 .............................................................................................................................. 47
5.1 蜂鳴器簡介 ..................................................................................................................... 48
5.2 硬件設(shè)計(jì) ......................................................................................................................... 48
5.3 軟件設(shè)計(jì) ......................................................................................................................... 49
5.4 下載驗(yàn)證 ......................................................................................................................... 50
第六章 數(shù)碼管動態(tài)顯示 .............................................................................................................. 50
6.1 數(shù)碼管簡介 ..................................................................................................................... 51
6.2 硬件設(shè)計(jì) ......................................................................................................................... 52
6.3 軟件設(shè)計(jì) ......................................................................................................................... 53
} 6.4 下載驗(yàn)證 ...................................................................................................................... 54
第七章 獨(dú)立鍵盤 .......................................................................................................................... 55
7.1 硬件設(shè)計(jì) ......................................................................................................................... 55
7.2 軟件設(shè)計(jì) ......................................................................................................................... 55
7.3 下載驗(yàn)證 ......................................................................................................................... 57
第八章 定時中斷 .......................................................................................................................... 58
8.1 定時器簡介 ..................................................................................................................... 59
8.2 硬件設(shè)計(jì) ......................................................................................................................... 62
8.3 軟件設(shè)計(jì) ......................................................................................................................... 62
8.4 下載驗(yàn)證 ......................................................................................................................... 63
第九章 定時中斷顯示時鐘 .......................................................................................................... 63
第十章 外部中斷 .......................................................................................................................... 64
10.1 外部中斷簡介 ............................................................................................................... 65
10.2 硬件設(shè)計(jì) ....................................................................................................................... 66
10.3 軟件設(shè)計(jì) ....................................................................................................................... 66
10.4 下載驗(yàn)證 ....................................................................................................................... 67
第十一章 字符點(diǎn)陣液晶屏1602 ................................................................................................. 67
11.1 1602 簡介 ....................................................................................................................... 68
UnRegistered
11.2 硬件設(shè)計(jì) ....................................................................................................................... 70
11.3 軟件設(shè)計(jì) ....................................................................................................................... 71
11.4 下載驗(yàn)證 ....................................................................................................................... 72
第十二章 串口實(shí)驗(yàn) ...................................................................................................................... 73
12.1 UART 簡介 ..................................................................................................................... 74
12.2 硬件設(shè)計(jì) ....................................................................................................................... 74
12.3 軟件設(shè)計(jì) ....................................................................................................................... 74
12.4 下載驗(yàn)證 ....................................................................................................................... 75
第十三章 溫度測量 .................................................................................................................... 78
12.1 DS18B20 簡介 ................................................................................................................ 79
13.2 硬件設(shè)計(jì) ....................................................................................................................... 80
13.3 軟件設(shè)計(jì) ....................................................................................................................... 80
13.4 下載驗(yàn)證 ....................................................................................................................... 83
第一十四章 紅外遙控實(shí)驗(yàn) ........................................................................................................ 84
13.1 紅外接收頭簡介 ........................................................................................................... 85
14.2 硬件設(shè)計(jì) ....................................................................................................................... 85
14.3 軟件設(shè)計(jì) ....................................................................................................................... 85
14.4 下載驗(yàn)證 ....................................................................................................................... 88
第十五章 超聲波測距模塊 .......................................................................................................... 89
15.1 超聲波模塊工作原理 ................................................................................................... 90
15.2 硬件設(shè)計(jì) ....................................................................................................................... 90
15.3 軟件設(shè)計(jì) ....................................................................................................................... 90
15.4 下載驗(yàn)證 ....................................................................................................................... 93
UnRegistered
序言
開發(fā)板產(chǎn)品簡介:
本產(chǎn)品作為51 單片機(jī)的入門開發(fā)板,專門為各大院校的單片機(jī)課程而設(shè)計(jì),
能夠幫學(xué)生快速入門單片機(jī),帶領(lǐng)大家進(jìn)入單片機(jī)世界。很期待能給大家一同學(xué)
習(xí),探討單片機(jī)。
本開發(fā)板提供了大量的例程,幫助用戶徹底了解單片機(jī)。同時運(yùn)用C 語言
進(jìn)行編程。對于學(xué)過C 語言的用戶,可以將C 語言和單片機(jī)結(jié)合起來,領(lǐng)悟C
語言的神奇魅力,提高用戶的C 語言能力,為后續(xù)的嵌入式系統(tǒng)學(xué)習(xí)打下堅(jiān)實(shí)
的基礎(chǔ)。
本開發(fā)板為客戶提供了豐富的IO 資源,用戶可以根據(jù)自己的需求,利用排
線自由實(shí)現(xiàn)自己想要的功能,這樣用戶可以隨心所欲地控制單片機(jī)。
如何學(xué)好單片機(jī)?
有人說幾天就學(xué)會單片機(jī),也不是不可以,但需要基礎(chǔ)和足夠高的領(lǐng)悟能力。
單片機(jī)畢竟是專業(yè)知識,大部人學(xué)習(xí)單片機(jī)要么是出于愛好,要么是為了工作,
不管出于哪種目的,學(xué)習(xí)必須要循序漸進(jìn),可以嘗試加快腳步,但是沒有捷徑。
有人說,我馬上要做個工程,我要快速學(xué)好單片機(jī),怎么辦?仔細(xì)想想,拿
到一個新買的手機(jī)僅僅使用這些功能還要花好長時間操作研究,并且要仔細(xì)閱讀
說明書才行。何況單片機(jī)這種相對專業(yè)的產(chǎn)品。
學(xué)習(xí)板、開發(fā)板是學(xué)習(xí)和實(shí)踐的最好產(chǎn)品,因?yàn)橛信涮诇y試好的軟件和硬件,
這樣用戶就不必操心組建開發(fā)系統(tǒng)的過程。這并不是說有了開發(fā)板你就能學(xué)會單
片機(jī),開發(fā)板只不過是個工具,如何能利用這個工具,讓它幫助你更快的了解并
掌握這個知識才是關(guān)鍵,一般情況配套的光盤資料都會有相關(guān)的電路、程序、使
用說明書已經(jīng)多種資料等。所以應(yīng)該先看一下光盤配套的資料。不要拿到手就把
他扔到一邊了,即便你是高手,也要花點(diǎn)時間看一下使用說明。
有些朋友沒有硬件電路基礎(chǔ),看不懂電路圖,有的朋友也沒有 c 語言基礎(chǔ),
看不懂程序,這個往往是增加學(xué)習(xí)難度的主要問題,基礎(chǔ)很重要,但沒有基礎(chǔ)也
不用灰心,很多知識都是從無到有學(xué)習(xí)來的,只要夠努力就好。單片機(jī)是硬件和
軟件結(jié)合的產(chǎn)品,所以不能忽略任何一個,程序一定要根據(jù)對應(yīng)的硬件來寫,不
要隨便從網(wǎng)上下載個程序直接運(yùn)行到板子上,然后發(fā)現(xiàn)沒有效果就懷疑是硬件出
了問題,單片機(jī)不是電腦主板,尤其是單片機(jī)開發(fā)板,它們的通用性并不高,但
差別也不大,這時候就需要根據(jù)硬件修改程序。 所以如果看不懂電路的朋友請
學(xué)習(xí)電路的基礎(chǔ)原理后再去編程。
這里說一下個人建議:
1、多看書,尤其是單片機(jī)基礎(chǔ)的書,了解單片機(jī)原理才能更好的使用它,國內(nèi) 51
系列推廣了很多年,資料最為豐富。
2、多上網(wǎng)查資料,大家的力量是偉大的,單片機(jī)是外國人發(fā)明的,我們一般要
先學(xué)會它的語言再使用它,所以多出了很多步驟,很多人對單片機(jī)的理解層次也
不同,寫程序的風(fēng)格也各異。這個都沒有關(guān)系,一個問題查的資料多了,自己就
能分析出他的道理。
3、多調(diào)試。程序無論如何分析,不去調(diào)試,結(jié)果仍舊不能肯定。一般的單片機(jī)
UnRegistered
可以反復(fù)燒寫上萬次,好的數(shù)十萬次,一個單片機(jī)不過幾元錢,所以不要擔(dān)心芯
片損壞而不敢去反復(fù)燒寫實(shí)驗(yàn),開發(fā)板就是幫助我們學(xué)習(xí)開發(fā)的工具,不要讓它
成了花瓶!
開發(fā)板配置:
1. STC89C52(與51 兼容)支持在線下載程序。
2. 8 位LED 發(fā)光二極管
3. 4 位獨(dú)立按鍵
4. USB 下載模塊
5. 電源模塊
6. 4 位數(shù)碼管顯示
7. 蜂鳴器電路
8. 紅外接收頭電路
9. 18B20 溫度測量
10. 無線接收模塊
11. 12864/1602 液晶顯示電路
12. 單片機(jī)32 個IO 口全部引出,方便自己進(jìn)行擴(kuò)展
13. NRF24L01 無線通信模塊
UnRegistered
第一章:燒錄第一個程序
1.1 STC89 單片機(jī)下載(燒寫程序)方法
1.1.1 硬件連接 USB 方口線插入開發(fā)板的 USB 方口座子,只需用連接一根usb
線即可
1.1.2 驅(qū)動安裝與程序下載
Usb 線插入電腦后,會提示如上信息,點(diǎn)擊“取消”
UnRegistered
手動打開PL2303 驅(qū)動文件夾(驅(qū)動程序文件夾內(nèi)),雙擊安裝驅(qū)動
點(diǎn)擊“INSTALL”安裝,成功后點(diǎn)擊“完成”,啟動后,重新拔插usb 線,如果
不能識別請點(diǎn)擊自動安裝即可。 UnRegistered
出現(xiàn)虛擬的 COM 口( COM5)
雙擊打開下載軟件,也可以到 http://www.mcu-memory.com/下載最新版本
UnRegistered
以上主要是操作分為 4 步
1、選擇芯片類型,必須是 STC 系列
2、.打開需要燒寫的 HEX 文件
3、選擇對應(yīng)的 COM 口
4、點(diǎn)擊“下載”,關(guān)掉開發(fā)板電源,然后稍等片刻打開電源,等待下載完成
5、以上步驟中 第 4 步的操作順序非常重要,冷啟動:即電源完全關(guān)掉,然后
重新上電。
UnRegistered
如果出現(xiàn)上圖現(xiàn)象長期不動作,請檢查以下幾點(diǎn):
1、第 4 步開關(guān)順序不正確
2、串口沒有選擇正確
3、串口線或者 usb 轉(zhuǎn)串口線沒有連接好
4、晶振沒有插緊
5、芯片沒有放置正確(不要放偏)
6、軟件不兼容,去 http://www.mcu-memory.com/下載最新版本
1.2 安裝 keil C51 軟件編寫第一個程序
1.2.1 keil C51 安裝
雙擊光盤中開發(fā)板光盤資料\3、各種配套軟件\keil C51 完全破解版\setup
文件夾中 setup.exe 可執(zhí)行安裝文件,出現(xiàn)如下界面:
UnRegistered
選擇 full Version
點(diǎn)擊 Next
UnRegistered
點(diǎn)擊 Yes
點(diǎn)擊 Browse 選擇安裝路徑,我們這里選擇 D:\Keil
UnRegistered
點(diǎn)擊 Next
UnRegistered
需要輸入序列號,這個時候打開開發(fā)板光盤資料\3、各種配套軟件\keil C51 完
全破解版 文件夾中 安裝方法.txt 文檔
分別復(fù)制 SN = K1DZP-5IUSH-A01UE 序列號到相應(yīng)位置
UnRegistered
姓名和公司名字可任意填寫,點(diǎn)擊 Next
點(diǎn)擊 Next
UnRegistered
UnRegistered
點(diǎn)擊 Next
UnRegistered
點(diǎn)擊 Finish 完成安裝聲明:本破解版本僅作測試使用,長期使用請到 keil 公
司購買正版軟件
1.2.2 用 keil C51 編寫一個新程序
雙擊打開桌面上圖標(biāo)
UnRegistered
點(diǎn)擊 Project->New Project
選擇保存路徑并填寫文件名,這里文件名為 test1
UnRegistered
注: )盡量單獨(dú)建立一個文件夾存放一個工程,這樣方便管理,如下:
存放在 test1 文件夾中,單擊 保存
選擇對于的芯片型號,假設(shè)我們開發(fā)板上使用的是 AT89S52 單片機(jī),選擇如下
UnRegistered
選擇 Atmel 廠商中的 AT89S52 單擊確定
注: ) STC 系列單片機(jī)在 keil 中沒有此型號,可以直接用 Atmel 的型號代
替,如 STC89c52 可以用 AT89C52 或者 AT89S52 代替,其他依次類推,也可以
到 STC 官網(wǎng)下載 STC 芯片型號插件。
提示是否加載 “標(biāo)準(zhǔn)啟動文件” ,剛開始學(xué)習(xí)可以不用加載,選擇 “否”
這個時候工程就建立完成了,下一步需要建立一個 c 或者 Asm 類型的文件,并
添加到該工程中,這里我們以 c 文件為例講解
UnRegistered
點(diǎn)擊 File ->New 出現(xiàn)一個空白 Text1 文檔.
UnRegistered
在空白文檔中輸入需要寫的程序,我們這里賦值一段代碼做為演示
點(diǎn)擊 File ->Save 出現(xiàn)如下對話框
UnRegistered
需要輸入文件名,這里要特別注意,文件默認(rèn)的保存類型是 All Files,而我們
需要的類型是C 文件,所以需要輸入后綴為“ .c”的文件名,如下輸入 led.c
單擊“保存”
UnRegistered
可以看到保存正確的 c 文件,關(guān)鍵字會用藍(lán)色顯示
UnRegistered
點(diǎn)擊前面“ +”號,出現(xiàn)下圖
右擊 Source Group 1 出現(xiàn)下圖
UnRegistered
點(diǎn)擊添加文件選項(xiàng) Add Files to Group
選中剛才保存的 led.c 的文件,點(diǎn)擊 Add,然后點(diǎn)擊 Close,文件添加完成
UnRegistered
點(diǎn)擊“ +”號,可以看到 c 文件已經(jīng)添加到工程中了下一步需要進(jìn)行編譯前工
程設(shè)置
點(diǎn)擊 Options for Target 出現(xiàn)如下對話框
UnRegistered
僅作編譯文件用時需要設(shè)置 OutPut 一項(xiàng),點(diǎn)擊 OutPut
在“ Create HEX File”前打鉤,表示編譯需要產(chǎn)生十六進(jìn)制文件,這個文件是
我們燒寫到單片機(jī)必須的文件,所以必須勾選此項(xiàng)。點(diǎn)擊“確定”
UnRegistered
至此,基礎(chǔ)設(shè)置完成,下一步進(jìn)行編譯工作
UnRegistered
點(diǎn)擊 Project -> Rebuild all target files (重新編譯所有目標(biāo)文件)
底部編譯結(jié)果顯示"test1" - 0 Error(s), 0 Warning(s). 表示沒有錯誤沒有警
告;
Program Size: data=9.0 xdata=0 code=21 可以看到程序大小, data 占用 9 字
節(jié),程序代碼占用21 字節(jié);
creating hex file from "test1"... 產(chǎn)生 hex 文件,這個文件正式燒寫單片
機(jī)需要的
此時用上述燒寫單片機(jī)方法把生成的 hex 文件載入單片機(jī),即可在開發(fā)板上看
到實(shí)驗(yàn)結(jié)果。
2.3 仿真芯片 SST89E516 使用方法
SST 仿真芯片的使用方法
硬件要求:
1.已經(jīng)固化仿真程序的仿真芯片,如 SST89E58、 SST89E516
2.帶有串口資源的目標(biāo)板,如開發(fā)板
硬件連接: 1、將仿真芯片直接插到目標(biāo)板上,代替原有單片機(jī)的位置。
2,用一根 usb 線連接電腦
3、打開電源開關(guān)
連接圖和 STC 單片機(jī)一樣,使用時需要把 STC 單片機(jī)換成 SST89E516 仿真芯
片,只需要連接一根 usb 線至電腦
軟件設(shè)置:
1、 打開 keil 軟件,并打開一個需要仿真的程序(已經(jīng)編譯通過的工程)
如下圖:
以下以“流水燈”工程為例。
UnRegistered
2、 點(diǎn)擊上圖箭頭圖標(biāo)打開如下對話框
3、 點(diǎn)擊“ Debug(調(diào)試) ”選項(xiàng),按照下圖設(shè)置
UnRegistered
4、 如上圖設(shè)置后,點(diǎn)擊“ Setting”選項(xiàng),出現(xiàn)如下對話框
UnRegistered
★ Com 口選在當(dāng)前硬件連接的端口,不能選擇錯誤,否則不能通訊
★ 波特率默認(rèn)選擇 38400,也可以嘗試選其他波特率,速度較低
然后“ OK” “確認(rèn)”完成設(shè)置
5、 點(diǎn)擊如下圖仿真“ ”圖標(biāo)
即可看到狀態(tài)欄有藍(lán)色程序載入進(jìn)展條,完成后出現(xiàn)如下界面
如果出現(xiàn)如下界面
UnRegistered
說明通訊異常請按一下目標(biāo)板復(fù)位鍵或者重新啟動電源,然后點(diǎn)擊“ Try
Again”即可,如果多次嘗試仍不能進(jìn)入仿真界面,請點(diǎn)擊“ Settings”檢測端
口和波特率是否正確。然后重復(fù)操作。
下圖是成功進(jìn)入的界面,供參考對比
左側(cè)欄有如圖現(xiàn)象,狀態(tài)欄顯示仿真器的版本,這里顯示 Monitor–51 V3.4
這個時候就可以進(jìn)入仿真步驟了。
UnRegistered
6、 以下是常用的仿真按鈕圖標(biāo)
以上圖標(biāo)分別是(從左往右) :復(fù)位、全速運(yùn)行、停止、單步、跨步
點(diǎn)擊全速運(yùn)行就可以看到實(shí)際執(zhí)行效果。
用戶也可以單步、跨步或者斷點(diǎn)運(yùn)行。
使用注意事項(xiàng):
1.全速運(yùn)行后不能通過點(diǎn)擊“ ” 停止。產(chǎn)生原因如下:
下圖中“ ”未勾選。建議不要勾
選,否則會影響仿真的正確性。
這時候我們?nèi)绻胪V拐谌龠\(yùn)行的程序可以通過用戶板的復(fù)位按鍵停止,然
UnRegistered
后重新
進(jìn)入其他仿真步驟。
2.不能正常進(jìn)入仿真界面
請檢查一下原因:
◆ 硬件是否連接牢靠
◆ 電源是否打開
◆ 軟件設(shè)置是否正確
◆ 重新啟動 keil 軟件
UnRegistered
第二章 LED 燈閃爍
單片機(jī)的最簡單操作莫過于控制IO 口的電平,本章將通過一個經(jīng)典的跑馬
燈程序,帶大家開啟神奇的單片機(jī)之旅。通過本章的學(xué)習(xí),你將了解到單片機(jī)的
IO 口的使用方法。在本章中,我們將點(diǎn)亮開發(fā)板上的8 個LED 燈。本章分為如
下幾個部分:
2.1 硬件設(shè)計(jì)
2.2 軟件設(shè)計(jì)
2.3 仿真與下載
UnRegistered
2.1 硬件設(shè)計(jì)
LED 燈與1K 的電阻串聯(lián),接在P1 口,當(dāng)端口賦值為0 時,點(diǎn)亮LED 燈,端
口賦值為1 時,熄滅LED 燈,。下圖是LED 的原理圖。注意:在使用LED 時,不
要忘了將J12 跳線帽短接!
2.2 軟件設(shè)計(jì)
此程序來自于開發(fā)板的實(shí)驗(yàn)1(LED 燈閃爍),此處略有改動
/*******延時函數(shù)*************/
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 255; j > 0; j--);
}
void main()
{
while(1)
{
P1 = 0xff; //置P1 口為高電平(熄滅LED 燈)
delay(600); // 調(diào)用延時程序
P1 = 0x00; //置P1 口為低電平(點(diǎn)亮LED 燈)
delay(600); // 延時
}
}
UnRegistered
2.3 仿真與下載
具體怎么下載程序,請參考第一章的程序下載部分,在這里就不討論了。
實(shí)物效果圖如下圖所示
當(dāng)然有時候我們調(diào)試時,每次都要把程序燒到芯片里面去,覺得很麻煩。如果身
邊沒有硬件仿真器,軟件仿真就不失為一種不錯的選擇。注意:軟件仿真只能進(jìn)
行邏輯仿真,在一些情況下是不能用的,望讀者多留意。
首先,我們進(jìn)行軟件仿真(請先確保 Options for Target->Debug 選項(xiàng)卡里面
已經(jīng)設(shè)置為Use Simulator。查看一下,是否生成了HEX 文件。先按開始仿
真,接著按,顯示邏輯分析窗口,點(diǎn)擊,新建信號P1,如下圖所示
邏輯分析設(shè)置
然后單擊 Close 關(guān)閉該對話框。可以看到邏輯分析窗口出來了P1 信號,如下圖
所示。
UnRegistered
設(shè)置后的邏輯分析窗口
接著點(diǎn)擊 ,開始運(yùn)行。運(yùn)行一段時間之后,按按鈕,暫停仿真回到邏
輯分析窗口,可以看到如下圖所示的波形。
仿真波形
UnRegistered
這里注意 Gird 要調(diào)節(jié)到 0.25s 左右比較合適,可以通過 Zoom 里面的 In 按
鈕來放大波形,通過 Out 按鈕來縮小波形,或者按 All 顯示全部波形。
第三章LED 跑馬燈
在第二章的基礎(chǔ)上,我們將進(jìn)一步學(xué)習(xí)開發(fā)板的LED 燈,實(shí)現(xiàn)LED 跑馬燈。徹底
掌握IO 口的使用。本章分為如下幾個部分:
3.1 硬件設(shè)計(jì)
3.2 軟件設(shè)計(jì)
3.3 下載驗(yàn)證
UnRegistered
3.1 硬件設(shè)計(jì)
此部分利用第二章的原理圖,如下圖所示。同樣需要注意,記得短接J12 跳
線帽哦!
3.2 軟件設(shè)計(jì)
此程序來自于開發(fā)板的實(shí)驗(yàn)2(LED 跑馬燈)
void main()
{
UnRegistered
uchar num,dat1,dat2;
delay(500);
while(1)
{
dat1=0xfe;
dat2=0x7f;
for(num=0;num<7;num++)
{
GPIO1 = dat1; //初始化賦值
dat1 = dat1<<1; //右移一位
delay(500); //延時
}
for(num=0;num<7;num++)
{
GPIO1 =dat2; //初始化賦值
dat2 = dat2>>1; //右移一位
delay(500); //延時
}
}
}
void delay(uint z)
{
uchar j;
for(z;z>0;z--)
for(j=200;j>0;j--);
}
3.3 下載驗(yàn)證
具體怎么下載程序,請參考第一章的程序下載部分,在這里就不討論了。
第四章 LED 漸亮漸滅
前面我們已經(jīng)學(xué)會了LED 燈閃爍和跑流水燈,這次我們將進(jìn)一步深入,來學(xué)
UnRegistered
習(xí)LED。LED 燈的漸亮漸滅,說白了,就是調(diào)節(jié)LED 的占空比。當(dāng)然實(shí)現(xiàn)方法有
多種多樣,可以利用中斷,也可以利用簡單的循環(huán)。這里就以循環(huán)為例,說明如
何實(shí)現(xiàn)LED 的漸亮漸滅,感興趣的讀者可以自己用中斷實(shí)現(xiàn)占空比的調(diào)節(jié)。本章
分為如下幾個部分:
4.1 硬件設(shè)計(jì)
4.2 軟件設(shè)計(jì)
4.3 下載驗(yàn)證
4.1 硬件設(shè)計(jì)
此部分利用第二章的原理圖,如下圖所示。同樣需要注意,記得短接J12 跳
線帽哦!
UnRegistered
4.2 軟件設(shè)計(jì)
此程序來自于開發(fā)板的實(shí)驗(yàn)3(LED 漸亮漸滅)
void Delay(uint uiTemp)
{
while(uiTemp--);
}
void main()
{
uint Duty_Ratio = 0;//調(diào)節(jié)亮度變量
uint i;
while(1)
{
for(i = 0; i < 71 ;i++)
{
Duty_Ratio += i;
GPIO1 = 0x00;
Delay(Duty_Ratio); //相當(dāng)于調(diào)節(jié)占空比
GPIO1 = 0xFF;
Delay(2500-Duty_Ratio); //周期大約為2500
}
for(i = 71; i > 15 ;i--)
{
Duty_Ratio -= i;
GPIO1 = 0x00;
Delay(Duty_Ratio); //相當(dāng)于調(diào)節(jié)占空比
GPIO1 = 0xFF;
UnRegistered
Delay(2500-Duty_Ratio); //周期大約為2500
}
Duty_Ratio = 0;
}
}
4.3 下載驗(yàn)證
可以看到LED 燈由暗到亮,然后慢慢地熄滅,接著就一直重復(fù)前面的現(xiàn)象,與我
們期望的是一致的。
第五章 蜂鳴器
前幾章我們學(xué)了通過IO 口來控制LED,這里我們將使用IO 口來控制蜂鳴器,
原理是一樣的。本章分為如下幾個部分:
5.1 蜂鳴器簡介
5.2 硬件設(shè)計(jì)
5.3 軟件設(shè)計(jì)
5.4 下載驗(yàn)證
UnRegistered
5.1 蜂鳴器簡介
蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、
打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時器等電子產(chǎn)
品中作發(fā)聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。此開
發(fā)板板載的蜂鳴器是電磁式的有源蜂鳴器,如圖所示:
有源蜂鳴器
這里的有源不是指電源的 “源”,而是指有沒有自帶震蕩電路,有源蜂鳴器自
帶了震蕩電路,一通電就會發(fā)聲;無源蜂鳴器則沒有自帶震蕩電路,必須外部提
供 2~5Khz 左右的方波驅(qū)動,才能發(fā)聲。
5.2 硬件設(shè)計(jì)
因?yàn)閱纹瑱C(jī)本身的IO 驅(qū)動能力不夠,所以加上三極管能大大提高其驅(qū)動能力,
感興趣的同學(xué)可以參考一下模電的相關(guān)知識。注意:記得將J9 短接。
UnRegistered
5.3 軟件設(shè)計(jì)
程序來自開發(fā)板的實(shí)驗(yàn)5(警報(bào)發(fā)生器)
void delay500(void)
{
uchar i;
for(i=230;i>0;i--);
}
main()
{
uchar j;
while(1)
{
for(j=200;j>0;j--)
{
BEEP=~BEEP; //輸出頻率1KHz
delay500(); //延時500us
}
for(j=200;j>0;j--)
{
BEEP=~BEEP; //輸出頻率500Hz
delay500(); //延時1ms
delay500();
}
UnRegistered
}
}
5.4 下載驗(yàn)證
我們可以聽見類似報(bào)警器的聲音,與我們的預(yù)期是一致的。
第六章 數(shù)碼管動態(tài)顯示
前面的實(shí)驗(yàn)都是對單片機(jī)的IO 口進(jìn)行簡單的操作。這次我們將學(xué)習(xí)數(shù)碼管
的靜態(tài)顯示。當(dāng)然相對于前面的東西,我們學(xué)習(xí)數(shù)碼管要掌握的東西就比以前的
多一些,望讀者能好好掌握數(shù)碼管。因?yàn)閿?shù)碼管顯示比較直觀,而且操作方便,
所以以后還有很多實(shí)驗(yàn),都需要用到數(shù)碼管顯示結(jié)果。本章分為如下幾個部分:
6.1 數(shù)碼管簡介
UnRegistered
6.2 硬件設(shè)計(jì)
6.3 軟件設(shè)計(jì)
6.4 下載驗(yàn)證
6.1 數(shù)碼管簡介
4 位一體數(shù)碼管的引腳圖,共陽型。1,2,3,4 是從右邊數(shù)起的
UnRegistered
數(shù)碼管顯示對照表(共陽型,0 時點(diǎn)亮,1 時熄滅)
讀者可以使用萬用表來核對表格的值,以此來加深對數(shù)碼管的操作。例如要顯示
0.我們可以將萬用表筆的正極接共陽段,萬用表的負(fù)極接a,b,c,d,e,f。讀者會
發(fā)現(xiàn)這樣就形成了一個0.同樣如果將萬用表的負(fù)極接b,c 管教,會形成一個1.
有了這些基礎(chǔ),大家就可以編程了。
6.2 硬件設(shè)計(jì)
注意:在使用數(shù)碼管時,記得把J10 短接。
UnRegistered
6.3 軟件設(shè)計(jì)
程序來自開發(fā)板的實(shí)驗(yàn)10(數(shù)碼管靜態(tài)顯示)
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90};//共陽代碼
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
GPIO0 = table[4];//顯示數(shù)字4
P2_0 = 0;
delay(5);
P2_0 = 1;
GPIO0 = table[3];//顯示數(shù)字3
P2_1 = 0;
delay(5);
P2_1 = 1;
GPIO0 = table[2];//顯示數(shù)字2
P2_2 = 0;
delay(5);
P2_2 = 1;
GPIO0 = table[1];//顯示數(shù)字1
P2_3 = 0;
delay(5);
P2_3 = 1;
}
void main(void)
UnRegistered
{
while(1)
{
display();
}
}
6.4 下載驗(yàn)證
實(shí)驗(yàn)結(jié)果如下圖。可以在數(shù)碼管上看到1234 的顯示。試驗(yàn)成功。
UnRegistered
第七章獨(dú)立鍵盤
按鍵作為人機(jī)交互的輸入,讀者可以通過鍵盤來控制程序的運(yùn)行,這樣可以更好的看到
程序效果。在本章,我們學(xué)習(xí)開發(fā)板上的獨(dú)立鍵盤。本章分為如下幾個部分:
7.1 硬件設(shè)計(jì)
7.2 軟件設(shè)計(jì)
7.3 下載驗(yàn)證
7.1 硬件設(shè)計(jì)
注意:因?yàn)槲覀兊陌存I有一段接的是GND,需要檢測相應(yīng)的管腳為0,才能確認(rèn)
有按鍵按下(當(dāng)然在檢測管腳時,要先將IO 口拉低,這樣檢測的數(shù)值才是正確
的)。這和我們平時的邏輯有點(diǎn)不同,呵呵
7.2 軟件設(shè)計(jì)
程序來自開發(fā)板的實(shí)驗(yàn)11(獨(dú)立鍵盤)
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
UnRegistered
}
void main()
{
P0 = 0;
while(1) //一直循環(huán)
{
if(key1==0) //KEY1 是否按下
{
delay(5); //軟件去抖
if(key1==0) //確認(rèn)按鍵按下(閃爍一次)
{
while(!key1);//松手檢測
P1=0;
delay(200);
P1=0XFF;
}
}
if(key2==0) //KEY2 是否按下
{
delay(5); //軟件去抖
if(key2==0) //確認(rèn)按鍵按下
{
while(!key2);//松手檢測(閃爍二次)
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
}
}
if(key3==0) //KEY3 是否按下
{
delay(5); //軟件去抖
if(key3==0) //確認(rèn)按鍵按下(閃爍三次)
{
while(!key3);//松手檢測
P1=0;
UnRegistered
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
}
}
if(key4==0) //KEY4 是否按下
{
delay(5); //軟件去抖
if(key4==0) //確認(rèn)按鍵按下
{
while(!key4);//松手檢測(閃爍四次)
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
}
}
delay(10);
}
}
7.3 下載驗(yàn)證
當(dāng)我們按下獨(dú)立按鍵時,會有相應(yīng)的LED 變化,與我們預(yù)期的是一樣的。
UnRegistered
第八章 定時中斷
前面的實(shí)驗(yàn)都是基本上沒有涉及寄存器。這章我們將會使用51 里面的寄存器。
熟悉并且熟練得掌握單片機(jī)寄存器將是學(xué)好單片機(jī)的關(guān)鍵。讀者以后可能會在
51 基礎(chǔ)上繼續(xù)學(xué)習(xí)例如STM32,MSP430 等芯片,這里面就有比較多的寄存器。
本章分為如下幾個部分:
8.1 定時器簡介
8.2 硬件設(shè)計(jì)
8.3 軟件設(shè)計(jì)
8.4 下載驗(yàn)證
UnRegistered
8.1 定時器簡介
中斷是為使單片機(jī)具有對外部或內(nèi)部隨機(jī)發(fā)生的事件進(jìn)行處理而設(shè)置的。51 單
片機(jī)有5 種中斷源,即有5 種對應(yīng)的情況發(fā)生時會使單片機(jī)去處理中斷程序(中
斷函數(shù))。其中,中斷寄存器,定時器/計(jì)數(shù)器相關(guān)寄存器本身或者相關(guān)位用來做
初始化,中斷函數(shù)的內(nèi)容主要是體現(xiàn)發(fā)生中斷后所需要的操作(在中斷函數(shù)內(nèi)寫
代碼)。
1.中斷允許寄存器IE
中斷寄存器IE
中斷寄存器用來設(shè)定各個中斷源的打開和關(guān)閉,IE 在特殊功能寄存器
中,字節(jié)地址為A8H,位地址(由低位到高位)分別是A8H~AFH,該寄存器運(yùn)
UnRegistered
行位尋址,即可對該寄存器的每一位進(jìn)行單獨(dú)操作。單片機(jī)復(fù)位時IE 全部
被清零。下面列舉各位的在不同狀態(tài)下的具體含義:
EA-------全局中斷允許位
EA = 1,打開全局中斷控制,在此條件下由各個中斷控制位(TCON 寄存
器中的TRn 位)控制相應(yīng)中斷的打開和關(guān)閉。
EA = 0,關(guān)閉全部中斷。
-- 無效位
ET2--定時器/計(jì)數(shù)器2 中斷允許位
ET2 = 1,打開T2 中斷。
ET2 = 0,關(guān)閉T2 中斷。
ES--串行口中斷允許位
ES = 1,打開串行口中斷。
ES = 0,關(guān)閉串行口中斷。
ET1--定時器/計(jì)數(shù)器中斷允許位
ET1 = 1,打開T1 中斷。
ET1 = 0, 關(guān)閉T1 中斷.
EX1--外部中斷1 中斷允許位
EX1 = 1,打開外部中斷1 中斷。
EX1 = 0,關(guān)閉外部中斷1 中斷。
ET0--定時器/計(jì)數(shù)器0 中斷允許位
ET0 = 1, 打開T0 中斷。
ET0 = 0,關(guān)閉T0 中斷。
EX--外部中斷0 中斷允許位
EX0 = 1,打開外部中斷0 中斷。
EX0 = 0,關(guān)閉外部中斷0 中斷。
2.定時器/計(jì)數(shù)器相關(guān)寄存器(TMOD,TCON)
定時器/計(jì)數(shù)器工作方式寄存器(TMOD)
定時器/計(jì)數(shù)器工作方式寄存器
UnRegistered
定時器/計(jì)數(shù)器工作方式寄存器在特殊功能寄存器中,字節(jié)地址為89H,
不能位尋址。TMOD 用來確定定時器的工作方式及功能選擇。單片機(jī)復(fù)位時
TMOD 全被被清零。下面介紹各位在不同值下的含義:
GATE --門控制位。
GATE = 0,定時器/計(jì)數(shù)器啟動與停止僅受TCON 寄存器中TRn(n = 0, 1)
來控制。
GATE = 1,定時器/計(jì)數(shù)器啟動與停止由TCON 寄存器中的TRn(n=0, 1)
和外部中斷引腳(INT0 或INT1)的電平狀態(tài)來共同控制。
C/T`--定時器模式和計(jì)數(shù)器模式選擇位。
C/T` = 1,為計(jì)數(shù)器模式;C/T` = 0,為定時器模式。
M1M0--工作方式選擇位(見下表)
定時器/計(jì)數(shù)器的4 中工作方式
定時器/計(jì)數(shù)器控制寄存器TCON
定時器/計(jì)數(shù)器控制寄存器在特殊功能寄存器中,字節(jié)地址為88H,位
地址(由低到高)分別為88H~8FH,該寄存器可進(jìn)行位尋址。TCON 寄存器用來
控制定時器啟,停,標(biāo)志寄存器溢出和中斷情況。單片機(jī)復(fù)位時TCON 全部
被清零。各位被賦不同值的含義如下:
定時器/計(jì)數(shù)器控制寄存器TCON
TF1--定時器1 溢出標(biāo)志位
當(dāng)定時器1 計(jì)滿溢出時,由硬件使TF1 置1,并申請中斷。進(jìn)入中斷程
序后由硬件自動清零。如使用定時器中斷,則該位不用人為操作;但如用軟
件查詢方式,當(dāng)查詢到該位為1 時,需用軟件清零。
TR1--定時器1 運(yùn)行控制位
由軟件清0 關(guān)閉定時器1。當(dāng)GATE = 1,且INT1 為高電平時,TR1 置
1 啟動定時器1;當(dāng)GATE = 0 時,TR1 置1 時即可啟動定時器1.
UnRegistered
TF0--定時器0 溢出標(biāo)志位,功能和操作方式和TF1 相同。
TR0--定時器0 運(yùn)行標(biāo)志位,其功能和操作方式同TR1。
IE1--外部中斷1 請求標(biāo)志
當(dāng)IT1 = 0,時為電平觸發(fā)方式,每個機(jī)器周期的S5P2 采樣INT1 引腳;
若INT1 引腳為低電平,則置1,否則IE1 清0。
當(dāng)IT1 = 1,INT1 為跳變沿觸發(fā)方式,當(dāng)?shù)谝粋機(jī)器周期采樣到INT1
為低電平時,則IE1 置1。IE1=1 時,表示外部中斷1 正在向CPU 申請中斷。
當(dāng)CPU 響應(yīng)中斷,轉(zhuǎn)向中斷服務(wù)程序時,該位由硬件清0.
IT1--外部中斷1 觸發(fā)方式選擇位
IT1= 0,為電平觸發(fā)方式,引腳INT1 上低電平有效。
IT1 = 1,為跳變沿觸發(fā)方式,引腳INT1 上的電平從高到低的負(fù)跳變
有效。
IE0--外部中斷0 請求標(biāo)志,其功能及操作方式同IE1。
IT0--外部中斷0 觸發(fā)方式選擇位,其功能及操作方式同IT1。
詳細(xì)資料,請查看開發(fā)板的實(shí)驗(yàn)12(定時中斷模式2)目錄下的資料。
8.2 硬件設(shè)計(jì)
為了便于觀察定時中斷的效果,這里我們就使用一個LED 燈來檢測是否發(fā)生定時
中斷。順便說一下,中斷函數(shù)和其他函數(shù)的區(qū)別很小,使用時可以把它理解成一
個普通函數(shù),只是它是靠事情來調(diào)用函數(shù)的。
8.3 軟件設(shè)計(jì)
void Timer_Mode2_Init(void)//定時中斷初始化函數(shù)
{
TMOD |= 0x02; //模式二,自動重裝
UnRegistered
ET0 = 1; //開定時器0 中斷
TR0 = 1; //啟動定時計(jì)數(shù)器
TH0 = 72; //T0 賦值,每次進(jìn)中斷時間為200us
TL0 = 72;
}
void Timer_Mode2(void) interrupt 1//中斷函數(shù)
{
static unsigned int i=0;
i++;
if(i==2500)//延時0.5s 閃爍(因?yàn)槊看芜M(jìn)中斷的時間是200us)
{
LED2 = ~LED2;//開LED 燈
i = 0;
}
}
void main()
{
Timer_Mode2_Init();
EA = 1; //開總中斷
for(;;)
;
}
8.4 下載驗(yàn)證
將程序下到芯片后,可以看到LED 燈不停閃爍。LED 燈的狀態(tài)改變是發(fā)生在中斷
程序中,說明中斷起作用了。
第九章定時中斷顯示時鐘
8.1 硬件設(shè)計(jì)
8.2 軟件設(shè)計(jì)
8.3 下載驗(yàn)證
UnRegistered
第十章 外部中斷
前面我們用到了定時中斷,本章我們將學(xué)習(xí)外部中斷。51 單片機(jī)一般有兩個外
部中斷輸入端,并允許外部中斷源以低電平或負(fù)邊沿兩種觸發(fā)方式輸入中斷請求
信號。本實(shí)驗(yàn)是基于負(fù)邊沿觸發(fā)方式。本章分為如下幾個部分:
10.1 外部中斷簡介
10.2 硬件設(shè)計(jì)
10.3 軟件設(shè)計(jì)
10.4 下載驗(yàn)證
UnRegistered
10.1 外部中斷簡介
外部中斷需要用到寄存器如下:
1.中斷允許寄存器IE
UnRegistered
中斷優(yōu)先級次序寄存器IP
詳細(xì)資料,請看開發(fā)板的實(shí)驗(yàn)14(外部中斷)目錄下的資料。
10.2 硬件設(shè)計(jì)
K1,K2 與外部中斷0,1 的連接如下圖
10.3 軟件設(shè)計(jì)
程序來自開發(fā)板的實(shí)驗(yàn)14(外部中斷)。注意:在這里我是用了H 文件和C 文
件。目的是希望讀者能夠從這個簡單的例子中,體會到H 文件和C 文件的使用。
/************* Ex_Inter.c 文件 *****************/
void EXT1_Initial()
{
EX1 = 1;
IT1 = 1;
}
void EXT0_Initial()
{
EX0 = 1;
IT0 = 1;
}
void INT_1 (void ) interrupt 2 //外部中斷2 函數(shù)
{
LED = LED_ON;//LED 亮
UnRegistered
}
void INT_0 (void ) interrupt 0 //外部中斷0 函數(shù)
{
LED = LED_OFF;//LED 滅
}
/************* main.c 文件 *****************/
void main(void )
{
EXT0_Initial(); //初始化外部中斷0
EXT1_Initial(); //初始化外部中斷1
EA = 1;//開中斷
for(;;)
{
}
}
10.4 下載驗(yàn)證
當(dāng)我們按下K1,K2 時,
第十一章 字符點(diǎn)陣液晶屏1602
前面的實(shí)驗(yàn)基本上只是簡單的IO 口操作,本章我們要學(xué)習(xí)1602 字符型液晶顯示
屏。我們可以將1602 理解成一個芯片,對此我們只要把相應(yīng)的命令和數(shù)據(jù)寫進(jìn)
去就可以了。本章分為如下幾個部分:
11.1 1602 簡介
11.2 硬件設(shè)計(jì)
11.3 軟件設(shè)計(jì)
11.4 下載驗(yàn)證
UnRegistered
11.1 1602 簡介
1602 液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160 個不同的點(diǎn)陣
字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文
假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是
01000001B(41H),顯示時模塊把地址41H 中的點(diǎn)陣字符圖形顯示出來,我們就
能看到字母“A”。
因?yàn)?602 識別的是ASCII 碼,試驗(yàn)可以用ASCII 碼直接賦值,在單片機(jī)編
程中還可以用字符型常量或變量賦值,如'A’。
以下是1602 的16 進(jìn)制ASCII 碼表:
UnRegistered
讀的時候,先讀上面那行,再讀左邊那列,如:感嘆號!的ASCII 為0x21,字
母B 的ASCII 為0x42(前面加0x 表示十六進(jìn)制)。
1602 顯示地址
1602 字符液晶顯示可分為上下兩部分各16 位進(jìn)行顯示,處于不同行時的字符顯
示地址如下
1602 指令集
UnRegistered
詳細(xì)資料,請參考開發(fā)板的實(shí)驗(yàn)15(LCD1602)目錄下的LCD1602 的數(shù)據(jù)手冊。
11.2 硬件設(shè)計(jì)
LCD1602 的原理圖如下。注意:記得拔下J10 的跳線帽。
UnRegistered
11.3 軟件設(shè)計(jì)
程序來自開發(fā)板的實(shí)驗(yàn)15(LCD1602)
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{ wela=0;
lcdrs=0;
GP_P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
wela=0;
lcdrs=1;
GP_P2=date;
delay(5);
UnRegistered
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);//顯示倆行,8 位數(shù)據(jù),5*7 點(diǎn)陣(多次初始化)
delay(90);
write_com(0x38);
delay(90);
write_com(0x38);
delay(90);
write_com(0x0e);//打開顯示,顯示光標(biāo)
write_com(0x06);//當(dāng)讀取一個字符之后,地址指針加一
write_com(0x01);//清屏指令
}
void main()
{
init();
write_com(0x80);//設(shè)置顯示地址,第一行顯示
for(num=0;num<16;num++)
{
write_data(table[num]);//顯示數(shù)據(jù)
delay(20);//可以不用添加延時
}
write_com(0x80+0x40);//設(shè)置顯示地址,在第二行顯示
for(num=0;num<16;num++)
{
write_data(table1[num]);//顯示數(shù)據(jù)
delay(20);
}
while(1);
}
11.4 下載驗(yàn)證
程序下載之后,可以看到液晶屏上顯示倆行:0123456789abcdef,與預(yù)期的一致,
實(shí)驗(yàn)成功。
UnRegistered
第十二章 串口實(shí)驗(yàn)
通信的三種基本類型常用的通信從傳輸方向上可以分為單工通信、半雙工通
信、全雙工通信三類。單工通信就是指只允許一方向另外一方傳送信息,而另一
方不能回傳信息。比如電視遙控器、收音機(jī)廣播等,都是單工通信技術(shù)。半雙工
通信是指數(shù)據(jù)可以在雙方之間相互傳播,但是同一時刻只能其中一方發(fā)給另外一
方,比如我們的對講機(jī)就是典型的半雙工。全雙工通信就發(fā)送數(shù)據(jù)的同時也能夠
接收數(shù)據(jù),兩者同步進(jìn)行,就如同我們的電話一樣,我們說話的同時也可以聽到
對方的聲音。本章分為如下幾個部分:
12.1 UART 簡介
12.2 硬件設(shè)計(jì)
12.3 軟件設(shè)計(jì)
12.4 下載驗(yàn)證
UnRegistered
12.1 UART 簡介
IO 口模擬串口通信,讓大家了解了串口通信的本質(zhì),但是我們的單片機(jī)程序卻需要不
停的檢測掃描單片機(jī) IO 口收到的數(shù)據(jù),大量占用了單片機(jī)的運(yùn)行時間。這時候就會有聰明
人想了,其實(shí)我們并不是很關(guān)心通信的過程,我們只需要一個通信的結(jié)果,最終得到接收到
的數(shù)據(jù)就行了。這樣我們可以在單片機(jī)內(nèi)部做一個硬件模塊,讓它自動接收數(shù)據(jù),接收完了,
通知我們一下就可以了,我們的 51 單片機(jī)內(nèi)部就存在這樣一個 UART 模塊,要正確使用它,
當(dāng)然還得先把對應(yīng)的特殊功能寄存器配置好。
詳細(xì)的寄存器描述,由于篇幅過長,這里就不贅述,讀者可以參考開發(fā)板的
實(shí)驗(yàn)17(單片機(jī)的UART 串口通信)目錄下的51 單片機(jī)串行通信,這里面有詳
細(xì)的講解。
12.2 硬件設(shè)計(jì)
由于單片機(jī)的UART 端口不能直接和電腦相連,所以就通過CH340 進(jìn)行電平
轉(zhuǎn)換。
12.3 軟件設(shè)計(jì)
void UART_Init(void)
{
TMOD = 0x20; //用定時器設(shè)置串口波特率 9600
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
REN = 1; //串口初始化
SM0 = 0;
SM1 = 1;
ES = 1;
}
void main()
{
UART_Init();
UnRegistered
EA = 1; //開啟總中斷
while(1)
{
if(Flag==1) //判斷是否有串口數(shù)據(jù)的傳送
{
ES = 0;
Flag = 0;
SBUF = a; //發(fā)送數(shù)據(jù)a 到SBUF,即將單片機(jī)的數(shù)據(jù)發(fā)送
到計(jì)算機(jī)
while(!TI); //等待發(fā)送結(jié)束
TI = 0;
ES = 1;
}
}
}
void ser() interrupt 4
{
if(RI)
{
RI = 0; //接收數(shù)據(jù)SBUF,即將計(jì)算機(jī)的數(shù)據(jù)接收。
a = SBUF;
Flag = 1;
}
}
12.4 下載驗(yàn)證
讀者可以自己到網(wǎng)上下載SSCOM3.3 串口調(diào)試軟件。打開SSCOM3.3。設(shè)置串
口為 CH340 的 USB 串口(根據(jù)你自己的電腦選擇,我的電腦是 COM4).波特率
為9600,數(shù)據(jù)位為8 位,一位停止位。無校驗(yàn),無流控制。參數(shù)配置后,如下
圖所示。 UnRegistered
UnRegistered
讀者可以在字符框輸入任意一串字符,例如:長沙冠陽電子科技有限公司,
就可以在輸出欄顯示:長沙冠陽電子科技有限公司。
注意:UART 是通過一個個的字符傳送的。
UnRegistered
第十三章 溫度測量
本章我們將學(xué)習(xí)DS18B20 這款傳感器。這里面最重要的一點(diǎn)是我們要學(xué)會看
DS18B20 的通信協(xié)議和它的時序圖。本章分為如下幾個部分:
13.1 DS18B20 簡介
13.2 硬件設(shè)計(jì)
13.3 軟件設(shè)計(jì)
13.4 下載驗(yàn)證
UnRegistered
12.1 DS18B20 簡介
DS18B20 是常用的溫度傳感器,具有體積小,硬件開銷低,抗干擾能力強(qiáng),精度
高的特點(diǎn)。DS18B20 數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場合,如
管道式,螺紋式,磁鐵吸附式,不銹鋼
封裝式,型號多種多樣,有LTM8877,LTM8874 等等。主要根據(jù)應(yīng)用場合的不同
而改變其外觀。封裝后的DS18B20 可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測
溫,機(jī)房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。
耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測
溫和控制領(lǐng)域。
DS18B20 讀寫時序
DS18B20 初始化過程
UnRegistered
上面只是基本的操作信息。詳細(xì)資料,請參考開發(fā)板的實(shí)驗(yàn)19(并行數(shù)碼管溫
度測量)目錄下面的資料。在這里,就不贅述了。
13.2 硬件設(shè)計(jì)
注意:這里在數(shù)據(jù)端接上了1K 的上拉電阻,同時記得將J16,J10 跳線帽短
接。
13.3 軟件設(shè)計(jì)
程序來自開發(fā)板的實(shí)驗(yàn)19(并行數(shù)碼管溫度測量)
void delay1ms()
{
unsigned char i;
for(i=124;i>0;i--); //延時124*8+10=1002us
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ 先置高
delay(8); //稍延時
DQ=0; //發(fā)送復(fù)位脈沖
delay(80); //延時(>480us)
DQ=1; //拉高數(shù)據(jù)線
delay(5); //等待(15~60us)
x=DQ; //用X 的值來判斷初始化有沒有成功,18B20 存在的話X=0,否則X=1
delay(20);
}
ReadOneChar(void) //主機(jī)數(shù)據(jù)線先從高拉至低電平1us 以上,再使數(shù)據(jù)線升
為高電平,從而產(chǎn)生讀信號
{
UnRegistered
unsigned char i=0; //每個讀周期最短的持續(xù)時間為60us,各個讀周期之間必
須有1us 以上的高電平恢復(fù)期
unsigned char dat=0;
for (i=8;i>0;i--) //一個字節(jié)有8 位
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0; //數(shù)據(jù)線從高電平拉至低電平,產(chǎn)生寫起始信號。15us
之內(nèi)將所需寫的位送到數(shù)據(jù)線上,
for(i=8;i>0;i--) //在15~60us 之間對數(shù)據(jù)線進(jìn)行采樣,如果是高電平就寫
1,低寫0 發(fā)生。
{
DQ=0; //在開始另一個寫周期前必須有1us 以上的高電平恢復(fù)期。
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
void ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0x44); //啟動溫度轉(zhuǎn)換
delay(125); //轉(zhuǎn)換需要一點(diǎn)時間,延時
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0xbe); //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)
tempL=ReadOneChar(); //讀出溫度的低位LSB
tempH=ReadOneChar(); //讀出溫度的高位MSB
if(tempH>0x7f) //最高位為1 時溫度是負(fù)
UnRegistered
{
tempL=~tempL; //補(bǔ)碼轉(zhuǎn)換,取反加一
tempH=~tempH+1;
fg=0; //讀取溫度為負(fù)時fg=0
}
sdata = tempL/16+tempH*16; //整數(shù)部分
xiaoshu1 = (tempL&0x0f)*10/16; //小數(shù)第一位
xiaoshu2 = (tempL&0x0f)*100/16%10;//小數(shù)第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小數(shù)兩位
}
void Led(unsigned int date)
{
if(fg==1)
{
P2=0xf7; //P1.3=0,選通第四位,小數(shù)點(diǎn)第二位
P0=seg7code[date/10]; //十位數(shù),查表,輸出
delay1ms();
P0=0xff; //消影
P2=0xfb; //P1.3=0,選通第三位,小數(shù)點(diǎn)第一位
P0=seg7codeB[date%10];
delay1ms();
P0=0xff; //消影
P2=0xfd; //P1.1=0,選通第二位,個位數(shù)
P0=seg7code[xiaoshu1];
delay1ms();
P0=0xff; //消影
P2=0xfe; //P1.0=0,選通第一位
P0=seg7code[xiaoshu2];
delay1ms();
P0=0xff; //消影
}
if(fg==0) //溫度為負(fù)時顯示的數(shù)據(jù)
{
P2=0xfe; //P1.0=0,選通第一位
P0=seg7code[11]; //顯示負(fù)號
delay1ms();
P0=0xff; //消影
P2=0xfd; //P1.1=0,選通第二位,十位數(shù)
P0=seg7code[date/10];
UnRegistered
delay1ms();
P0=0xff; //消影
P2=0xfb; //P1.3=0,選通第三位,個位數(shù)
P0=seg7codeB[date%10];
delay1ms();
P0=0xff; //消影
P2=0xf7; //P1.3=0,選通第四位,小數(shù)點(diǎn)第一位
P0=seg7code[xiaoshu1];
delay1ms();
P0=0xff; //消影
}
}
main()
{
while(1)
{
ReadTemperature();
Led(sdata);
}
}
13.4 下載驗(yàn)證
下載完成后,我們可以看到數(shù)碼管顯示溫度了。說明DS18B20 開始工作了。
UnRegistered
第一十四章 紅外遙控實(shí)驗(yàn)
上一章我們介紹了DS18B20,本章我們將學(xué)習(xí)紅外遙控接收頭。同樣我們也需
要關(guān)注紅外接收頭的讀1 或0 時序。本章分為如下幾個部分:
14.1 紅外接收頭簡介
14.2 硬件設(shè)計(jì)
14.3 軟件設(shè)計(jì)
14.4 下載驗(yàn)證
UnRegistered
13.1 紅外接收頭簡介
紅外線接收頭就是接收紅外線的元件。紅外線的光譜位于紅色光之外, 波
長是0.76~1.5μm,比紅光的波長還長。紅外遙控是利用紅外線進(jìn)行傳遞信息
的一種控制方式,紅外遙控具有抗干擾,電路簡單,容易編碼和解碼,功耗小,
成本低的優(yōu)點(diǎn)。紅外遙控幾乎適用所有家電的控制。
紅外遙控時序圖
上圖是紅外遙控接收頭的基本時序,詳細(xì)資料,請參考開發(fā)板的實(shí)驗(yàn)20(紅外
遙控?cái)?shù)碼管顯示實(shí)驗(yàn))目錄下的資料。
14.2 硬件設(shè)計(jì)
注意:記得短接J15,J10 跳線帽
14.3 軟件設(shè)計(jì)
程序來自開發(fā)板的實(shí)驗(yàn)20(紅外遙控解碼數(shù)碼管顯示實(shí)驗(yàn))
void main()
{
unsigned int a;
IRIN=1; //I/O 口初始化
IE=0x81; //允許總中斷中斷,使能 INT0 外部中斷
TCON=TCON|0x01; //觸發(fā)方式為脈沖負(fù)邊沿觸發(fā)
while(1)
{
for(a=100;a>0;a--)
{
display();
}
}
UnRegistered
}
void IR_IN() interrupt 0 using 0
{
unsigned char j,k,N=0;
unsigned char q=0;
EX0 = 0;
delay(15);
if (IRIN==1)
{
EX0 =1;
return;
}
//確認(rèn)IR 信號出現(xiàn)
while (!IRIN) //等IR 變?yōu)楦唠娖剑^9ms 的前導(dǎo)低電平信
號。
delay(1);
for (j=0;j<4;j++) //收集四組數(shù)據(jù)
{
for (k=0;k<8;k++) //每組數(shù)據(jù)有8 位
{
while (IRIN) //等 IR 變?yōu)榈碗娖剑^4.5ms 的前
導(dǎo)高電平信號。
{delay(1);}
while (!IRIN) //等 IR 變?yōu)楦唠娖?br /> delay(1);
while (IRIN) //計(jì)算IR 高電平時長
{
delay(1);
N++;
if (N>=30)
{
EX0=1;
return;
} //0.14ms 計(jì)數(shù)過長自動離開。
} //高電平計(jì)數(shù)完畢
IRCOM[j]=IRCOM[j] >> 1; //數(shù)據(jù)最高位補(bǔ)“0”
if(N>=8)
{
IRCOM[j] = IRCOM[j] | 0x80; //數(shù)據(jù)最高位補(bǔ)“1”
}
N=0;
}
UnRegistered
}
if(IRCOM[2]!=~IRCOM[3])
{
EX0=1;
return;
}
IRCOM[5]=IRCOM[2] & 0x0F; //取鍵碼的低四位
IRCOM[6]=IRCOM[2] >> 4; //右移4 次,高四位變?yōu)榈退奈?br /> if(IRCOM[5]>9)
{
IRCOM[5]=IRCOM[5]+0x37;
}
else
IRCOM[5]=IRCOM[5]+0x30;
if(IRCOM[6]>9)
{
IRCOM[6]=IRCOM[6]+0x37;
}
else
IRCOM[6]=IRCOM[6]+0x30;
q= (((IRCOM[6]&0x0f)<<4) + (IRCOM[5]&0x0f));
switch(q) //判斷按鍵鍵碼值
{
case 0x16:m=0;break; //串口發(fā)送0
case 0x03:m=1;break; //串口發(fā)送01
case 0x18:m=2;break; //串口發(fā)送02
case 0x55:m=3;break; //串口發(fā)送03
case 0x08:m=4;break; //串口發(fā)送04
case 0x13:m=5;break; //串口發(fā)送05
case 0x51:m=6;break; //串口發(fā)送06
case 0x42:m=7;break; //串口發(fā)送07
case 0x52:m=8;break; //串口發(fā)送08
case 0x41:m=9;break; //串口發(fā)送09
default :break;
}
UnRegistered
EX0 = 1;
}
14.4 下載驗(yàn)證
當(dāng)我們在遙控器上按下0~9 這里面的任意一個數(shù)字時,數(shù)碼管上面將會顯示
我們按下的鍵值。
UnRegistered
第十五章 超聲波測距模塊
前一章,我們學(xué)習(xí)了紅外遙控接收器。本章我們將學(xué)習(xí)超聲波測距。當(dāng)然和
前面的有點(diǎn)不同,本章將使用紅外遙控模塊來測距。這章的內(nèi)容相比前章的內(nèi)容,
就簡單很多。本章分為如下幾個部分:
15.1 超聲波模塊工作原理
15.2 硬件設(shè)計(jì)
15.3 軟件設(shè)計(jì)
15.4 下載驗(yàn)證
UnRegistered
15.1 超聲波模塊工作原理
(1)采用IO 觸發(fā)測距,給至少10us 的高電平信號;
(2)模塊自動發(fā)送8 個40khz 的方波,自動檢測是否有信號返回;
(3)有信號返回,通過IO 輸出一高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到
返回的時間.測試距離=(高電平時間*聲速(340M/S))/2;
關(guān)鍵點(diǎn)是對輸入高電平的捕獲。因?yàn)?1 單片機(jī)沒有相應(yīng)的捕獲功能,所以我們這里就使用
中斷來計(jì)算高電平時間。
15.2 硬件設(shè)計(jì)
注意:短接J10 跳線帽(數(shù)碼管)。接線:模塊TRIG 接 P1.2 ECH0 接P1.1
15.3 軟件設(shè)計(jì)
程序來自開發(fā)板的實(shí)驗(yàn)31(超聲波測距數(shù)碼管顯示)
void delay1ms()
{
unsigned char i;
for(i=124;i>0;i--); //延時124*8+10=1002us
}
void Display(void) //掃描數(shù)碼管
{
UnRegistered
P2=0xf7;
P0=discode[disbuff[0]]&0x7f;
delay1ms();
P0=0xff; //消影
P2=0xfb;
P0=discode[disbuff[1]];
delay1ms();
P0=0xff; //消影
P2=0xfd;
P0=discode[disbuff[2]];
delay1ms();
P0=0xff; //消影
}
Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100; //算出來是CM
if((S>=700)||flag==1) //超出測量范圍顯示“-”
{
flag=0;
disbuff[0]=10; //“-”
disbuff[1]=10; //“-”
disbuff[2]=10; //“-”
}
else
{
disbuff[0]=S%1000/100;
disbuff[1]=S%1000%100/10;
disbuff[2]=S%1000%10 %10;
}
}
void zd0() interrupt 1 //T0 中斷用來計(jì)數(shù)器溢出,超過測距范圍
{
flag=1; //中斷溢出標(biāo)志
}
void zd3() interrupt 3 //T1 中斷用來掃描數(shù)碼管和計(jì)800MS
啟動模塊
{
TH1=0xf8;
UnRegistered
TL1=0x30;
Display();
timer++;
if(timer>=400)
{
timer=0;
TX=1; //800MS 啟動一次模塊
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
void main(void)
{
TMOD=0x11; //設(shè)T0 為方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0xf8; //2MS 定時
TL1=0x30;
ET0=1; //允許T0 中斷
ET1=1; //允許T1 中斷
TR1=1; //開啟定時器
EA=1; //開啟總中斷
while(1)
{
UnRegistered
while(!RX); //當(dāng)RX 為零時等待
TR0=1; //開啟計(jì)數(shù)
while(RX); //當(dāng)RX 為1 計(jì)數(shù)并等待
TR0=0; //關(guān)閉計(jì)數(shù)
Conut(); //計(jì)算
}
}
15.4 下載驗(yàn)證
UnRegistered




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1