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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2896|回復: 0
打印 上一主題 下一主題
收起左側

51單片機最小系統板說明書

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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产视频中文字幕 | 亚洲精品电影在线观看 | 中文字幕在线免费观看 | 国产精产国品一二三产区视频 | 欧美一级二级在线观看 | 欧美日韩在线观看一区 | 在线a视频 | 影音先锋亚洲资源 | 91精品国产综合久久婷婷香蕉 | 欧美一级片 | 午夜在线影院 | 伊人超碰| 日韩欧美国产精品 | 国产三区视频在线观看 | 欧美专区在线 | 嫩草视频在线 | 黄片毛片免费观看 | 欧美日韩在线成人 | 欧美国产日韩在线观看 | 久久国产精品免费一区二区三区 | 日韩午夜电影 | 国产精品久久久久一区二区三区 | 免费在线观看黄视频 | 亚洲精品免费观看 | 亚洲另类春色偷拍在线观看 | av激情在线 | 亚洲视频区 | 狠狠撸在线视频 | 成人亚洲 | 91xx在线观看| 精品久久久久国产 | 日韩精品成人 | 精品免费视频一区二区 | 久久精品国产免费一区二区三区 | 午夜精品一区二区三区在线视 | 久久精品中文字幕 | 亚洲一区二区电影在线观看 | 色婷婷av一区二区三区软件 | 青青草综合网 | 一区二区三区在线播放视频 | 国产精品久久久久久久毛片 |