HC6800-ESV2單片機(jī)開發(fā)板學(xué)習(xí)指南_第1頁
HC6800-ESV2單片機(jī)開發(fā)板學(xué)習(xí)指南_第2頁
已閱讀5頁,還剩285頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、HC6800-ES V2.0單片機(jī)開發(fā)板學(xué)習(xí)指南目錄 TOC o 1-1 h z u HYPERLINK l _Toc357237788 第一講 開發(fā)板資源介紹 PAGEREF _Toc357237788 h 1 HYPERLINK l _Toc357237789 第二講 軟件安裝 PAGEREF _Toc357237789 h 3 HYPERLINK l _Toc357237790 第三講 程序下載 PAGEREF _Toc357237790 h 16 HYPERLINK l _Toc357237791 第四講 KEIL軟件使用及入門led燈 PAGEREF _Toc357237791 h

2、21 HYPERLINK l _Toc357237792 第五講 蜂鳴器 PAGEREF _Toc357237792 h 31 HYPERLINK l _Toc357237793 第六講 獨(dú)立按鍵 PAGEREF _Toc357237793 h 32 HYPERLINK l _Toc357237794 第七講 靜態(tài)數(shù)碼管 PAGEREF _Toc357237794 h 37 HYPERLINK l _Toc357237795 第八講 矩陣鍵盤 PAGEREF _Toc357237795 h 42 HYPERLINK l _Toc357237796 第九講 動(dòng)態(tài)數(shù)碼管 PAGEREF _Toc3

3、57237796 h 45 HYPERLINK l _Toc357237797 第十講 電機(jī) PAGEREF _Toc357237797 h 49 HYPERLINK l _Toc357237798 第十一講 中斷 PAGEREF _Toc357237798 h 56 HYPERLINK l _Toc357237799 第十二講 1602液晶顯示 PAGEREF _Toc357237799 h 60 HYPERLINK l _Toc357237800 第十三講 定時(shí)器 PAGEREF _Toc357237800 h 68 HYPERLINK l _Toc357237801 第十四講 時(shí)鐘芯片D

4、S1302 PAGEREF _Toc357237801 h 71 HYPERLINK l _Toc357237802 第十五講 串口通信 PAGEREF _Toc357237802 h 83 HYPERLINK l _Toc357237803 第十六講 溫度傳感器18B20 PAGEREF _Toc357237803 h 89 HYPERLINK l _Toc357237804 第十七講 EEPROM操作 24C02 PAGEREF _Toc357237804 h 99 HYPERLINK l _Toc357237805 第十八講 紅外遙控顯示 PAGEREF _Toc357237805 h

5、110 HYPERLINK l _Toc357237806 第十九講 AD/DA 模數(shù)/數(shù)模轉(zhuǎn)換XPT2046 PAGEREF _Toc357237806 h 116 HYPERLINK l _Toc357237807 第二十講 液晶屏顯示 PAGEREF _Toc357237807 h 127 HYPERLINK l _Toc357237808 附錄A 單片機(jī)C語言介紹 PAGEREF _Toc357237808 h 140 HYPERLINK l _Toc357237809 附錄B 電路板繪制軟件PROTEL介紹 PAGEREF _Toc357237809 h 170第一講 開發(fā)板資源介紹

6、本開發(fā)板相對(duì)以往開發(fā)板的特點(diǎn)是綜合性比較高、把短路冒去掉了 省去接線的麻煩更加方便了初學(xué)者、是一款性價(jià)比極高的產(chǎn)品,提供USB2.0和串口兩種通信方式,USB實(shí)現(xiàn)供電、編程、仿真、通信多種功能,另外還提供了Atmel單片機(jī)的ISP接口。此板兼容STC、SST、Atmel、Philips等51家族的所有單片機(jī)。如果使用ISP編程建議使用開發(fā)板自帶的單片機(jī),因?yàn)槊總€(gè)廠燒錄程序的方式不一樣。HC6800開發(fā)板有著豐富的外部資源, 通過對(duì)該開發(fā)實(shí)驗(yàn)儀的學(xué)習(xí),學(xué)員不僅可以輕松快速地掌握單片機(jī)軟件系統(tǒng)的開發(fā)(C語言、匯編語言),而且還能快速掌握硬件電路的設(shè)計(jì)及嵌入系統(tǒng)開發(fā)流程。 本套件配有豐富的實(shí)例源碼、

7、原理圖等,特別適合單片機(jī)初學(xué)者,大中專院校師生,單片機(jī)開發(fā)工程師選用,也是畢業(yè)設(shè)計(jì)和電子競(jìng)賽不可多得的參考板單片機(jī)采用STC90c516 1280 SRAM 64K Flash2.1寸彩色液晶屏超聲波接口1602液晶屏接口12864液晶屏接口溫度傳感器DS18B20EEPROM 24C02 存儲(chǔ)器8位動(dòng)態(tài)數(shù)碼管AD/DA轉(zhuǎn)換 XPT2046 DS1302實(shí)時(shí)時(shí)鐘4*4矩陣鍵盤4個(gè)獨(dú)立鍵盤2*8路led燈USB 接口,實(shí)現(xiàn)下載,供電,串行通信。通過USB轉(zhuǎn)串口芯片CH340T轉(zhuǎn)換IR紅外接收頭,紅外數(shù)據(jù)傳輸板載繼電器蜂鳴器步進(jìn)電機(jī) ULN2003達(dá)林頓管驅(qū)動(dòng)第二講 軟件安裝1、USB轉(zhuǎn)串口驅(qū)動(dòng)的

8、安裝雙擊USB驅(qū)動(dòng)SERIAL程序的Setup安裝成功后,會(huì)出現(xiàn)一下提示畫面點(diǎn)“確定”即可以結(jié)束安裝過程。安裝完驅(qū)動(dòng)程序成功后,把開發(fā)板與電腦連接可以看到設(shè)備管理器中的COM口。在圖標(biāo)“我的電腦”右鍵,屬性,硬件,設(shè)備管理器(這是XP 系統(tǒng),WIN系統(tǒng)與其相似找到設(shè)備管理器) 顯示成功的COM口安裝不成功解決辦法如果發(fā)現(xiàn)是下圖感嘆號(hào), 則沒有安裝成功或者沒有安裝、右鍵點(diǎn)擊更新驅(qū)動(dòng)程序選擇“從列表或指定位置安裝(推薦)”出現(xiàn)此對(duì)話框,選擇不要搜索,自己選擇安裝 點(diǎn)“下一步”點(diǎn)擊下一步出現(xiàn)此對(duì)話框、點(diǎn)擊“從磁盤安裝”點(diǎn)擊“瀏覽” 到USB驅(qū)動(dòng)文件夾找到安裝文件打開點(diǎn)擊“確定”和“下一步”點(diǎn)擊完成安

9、裝結(jié)束KEIL 軟件安裝 我們用現(xiàn)在新版本的uVision 4 KEIL 開發(fā)環(huán)境,使用的版本是破解版,僅供大家學(xué)習(xí)使用。如做商業(yè)開發(fā),請(qǐng)購買正版,可以獲得更多keil軟件原廠技術(shù)支持。即將安裝軟件如下,一個(gè)keil安裝程序,一個(gè)注冊(cè)機(jī)(右側(cè))。打開C51V901.EXE 安裝程序點(diǎn)擊Next I agree all the tems of 選中點(diǎn)擊Next 設(shè)置安裝目錄,根據(jù)自己的情況選中安裝目錄,重新設(shè)置點(diǎn)擊Browse,這里默認(rèn)C盤,設(shè)置好安裝目錄后 點(diǎn)擊Next 輸入相關(guān)信息(隨便輸入),輸入完畢后點(diǎn)擊Next開始安裝,安裝過程中.等待安裝完成安裝完成,點(diǎn)擊 Finish 即可。接下來

10、破解軟件。 打開注冊(cè)機(jī)軟件Target:選擇C51打開剛剛安裝好的keil軟件點(diǎn)擊File菜單選擇License Management。復(fù)制CID碼到注冊(cè)機(jī)中現(xiàn)在沒有破解復(fù)制CID 碼,之后點(diǎn)擊Generate 生成注冊(cè)碼復(fù)制生成的注冊(cè)碼到keil從KEIL 復(fù)制的CID碼粘貼到這里復(fù)制到這里復(fù)制完注冊(cè)碼后,點(diǎn)擊右側(cè)的,即可完成破解。提示如下:以上軟件安裝完畢。接下來看程序了。第三講 程序下載我們可以通過USB接口方式下載對(duì)我們開發(fā)板的單片機(jī)下載程序。下載軟件又可分為 STC官方軟件 和普中科技自己開發(fā)的軟件官方軟件普中軟件利用官方軟件下載程序需要手動(dòng)重啟單片機(jī),需要給單片機(jī)重新上電啟動(dòng)。普中

11、開發(fā)的下載軟件及所設(shè)計(jì)的開發(fā)板實(shí)現(xiàn)了全自動(dòng)下載功能,省去了手動(dòng)操作,極大方便了學(xué)習(xí)及開發(fā)人員。接下來就來講一下下載程序的方式。USB口,普中軟件我們插上USB口,打開開發(fā)板電源開關(guān)。然后打開普中ISP下載軟件,如下圖 :串口號(hào) 10在usb轉(zhuǎn)串口驅(qū)動(dòng)安裝成功后,打開軟件應(yīng)該有串口號(hào),如圖指示。一般筆記本建議使用低速下載,臺(tái)式可以使用高速下載,如果筆記本使用高速下載的話那么會(huì)報(bào)警波特率超時(shí)。芯片類型選擇STC90C5XX(具體的要根據(jù)您板子上使用的單片機(jī)型號(hào))如下圖。加載我們要下載到單片機(jī)里的程序,單擊 ,選擇下載的后綴為.Hex的文件,打開后,會(huì)在文件名處有提示:文件路徑,還有代碼大小。代碼大

12、小4最后一步:點(diǎn)擊下載程序,下載成功如圖顯示。 此時(shí)繼電器工作會(huì)有小的啪啪的響聲。下載成功 ! 接下來我們用官方STC 下載軟件下載432 1選擇開發(fā)板上單片機(jī)型號(hào),我們選STC90C516選擇串口,可通過設(shè)備管理器查看打開需要下載到單片機(jī)的程序點(diǎn)擊下載點(diǎn)擊下載按鈕后會(huì)有這樣的信息:這時(shí)需要手動(dòng)按開關(guān)鍵,關(guān)閉開關(guān),打開開關(guān)這樣一個(gè)過程,主要是給單片機(jī)冷啟動(dòng)。重新上電后,會(huì)出現(xiàn)開始下載程序,下載完成。上圖表示下載成功?,F(xiàn)在用官方軟件下載幾乎都要手動(dòng)重新給單片機(jī)上電過程。市面的開發(fā)板主要也都是采用這種下載方式。 建議使用普中軟件自動(dòng)下載。第四講 KEIL軟件使用及入門led燈單片機(jī)開發(fā)中除必要的硬

13、件外,同樣離不開軟件,我們寫的匯編語言源程序要變?yōu)?CPU 可以執(zhí)行的機(jī)器碼有兩種方法,一種是手工匯編,另一種是機(jī)器匯編,目前已極少使用手工匯編的方法了。機(jī)器匯編是通過匯編軟件將源程序變?yōu)闄C(jī)器碼,用于 MCS-51 單片機(jī)的匯編軟件有早期的 A51,隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)展,從普遍使用匯編語言到逐漸使用高級(jí)語言開發(fā),單片機(jī)的開發(fā)軟件也在不斷發(fā)展,Keil 軟件是目前最流行開發(fā) MCS-51 系列單片機(jī)的軟件,這從近年來各仿真機(jī)廠商紛紛宣布全面支持 Keil 即可看出。Keil 提供了包括 C 編譯器、宏匯編、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境

14、(uVision)將這些部份組合在一起。運(yùn)行 Keil 軟件需要 Pentium 或以上的 CPU,16MB 或更多 RAM、20M 以上空閑的硬盤空間、WIN98、NT、WIN2000、WINXP 等操作系統(tǒng)。掌握這一軟件的使用對(duì)于使用 51 系列單片機(jī)的愛好者來說是十分必要的,如果你使用C語言編程,那么Keil幾乎就是你的不二之選(目前在國內(nèi)你只能買到該軟件、而你買的仿真機(jī)也很可能只支持該軟件),即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會(huì)令你事半功倍。我們將通過一些實(shí)例來學(xué)習(xí) Keil 軟件的使用,在這一部份我們將學(xué)習(xí)如何輸入源程序,建立工程、對(duì)工

15、程進(jìn)行詳細(xì)的設(shè)置,以及如何將源程序變?yōu)槟繕?biāo)代碼。在這里利用第二個(gè)例程,led閃爍實(shí)驗(yàn)來建立keil工程。打開keil軟件,版本 Vision2 ,vision3,vision4 都一樣,在這里用vision4版本演示,打開之后如下圖,有的時(shí)候會(huì)默認(rèn)打開上次使用的工程,單擊Project 菜單,選擇 Close Project 關(guān)閉了默認(rèn)打開的工程,顯示下圖界面:我們要建立新的工程,選擇Project new vision projiect 選擇工程要保存的路徑,輸入工程文件名,如圖 點(diǎn)擊保存后會(huì)彈出一個(gè)對(duì)話框,要求用戶選擇單片機(jī)型號(hào),可以根據(jù)用戶使用的單片機(jī)來選擇,我們使用的STC90單片機(jī)是

16、兼容51內(nèi)核的,Keil C51 幾乎支持所有的51內(nèi)核單片機(jī),51內(nèi)核具有通用型,如果程序用的資源不是太復(fù)雜,我們可以選擇任意一款51單片機(jī)內(nèi)核就行。在稍后我們會(huì)繼續(xù)講解怎么將STC單片機(jī)官方的頭文件添加進(jìn)來,在這暫不多介紹。Keil 軟件的關(guān)鍵是程序代碼的編寫,而非是用戶選擇什么硬件。例程以添加Atmel 的AT89C51來說明。如圖,然后,單擊 確定(OK)。功能描述如果出現(xiàn)下面的界面:?jiǎn)螕羰蔷涂梢?,意思是將單片機(jī)的啟動(dòng)代碼添加到工程,我們不用修改。到目前我們還沒建立一個(gè)完整的工程,只是有工程的名字,框架,工程中還沒有任何文件代碼,(除了啟動(dòng)代碼,有的keil 版本不顯示啟動(dòng)代碼),接下

17、來我們添加文件及代碼。單擊菜單FileNew選項(xiàng),或者單擊界面上的快捷圖標(biāo),新建文件串口如下。界面顯示的Text1就是我們剛剛加入的文件,但是這個(gè)文件與我們的工程還沒有直接聯(lián)系起來,單擊圖標(biāo),保存我們當(dāng)前的text1文件,輸入要保存的文件名,同時(shí)要輸入文件擴(kuò)展名,擴(kuò)展名很關(guān)鍵,用C語言編寫的程序,則必須為*.c,匯編語言必須為*.asm(*為文件名),文件名是用戶自己取的。填好文件名后單擊保存?;氐骄庉嫿缑妫瑔螕鬞arget1 前面的“+”號(hào),然后在Source Group 1 上右鍵單擊,選擇Add Files to Group Source Group1,選中我們剛才建立的.c文件,這里是

18、led test.c,單擊add,只需單擊一次。之后單擊Close就可以?;氐街鹘缑婧?,單擊Source Group 1前的“+”號(hào),剛剛添加的文件顯示在里面。 通過以上步驟我們就建立好了一個(gè)工程。接下來就可以寫代碼了。在寫代碼之前介紹介個(gè)常用的按鈕:按鈕:用來編譯我們正在操作的文件。按鈕:用來編譯修改過的文件,并生成應(yīng)用程序共單片機(jī)下載。按鈕:用來重新編譯當(dāng)前工程中所有的文件,并生成應(yīng)用程序共單片機(jī)下載。因?yàn)楹芏喙こ滩恢褂幸粋€(gè)文件,當(dāng)有多個(gè)文件時(shí),用它進(jìn)行編譯。按鈕:用來打開“Option for Target”對(duì)話框,對(duì)當(dāng)前工程進(jìn)行設(shè)置。工程的各個(gè)參數(shù)都可以在這里設(shè)置,具體的設(shè)置方法用到的

19、時(shí)候,再和大家詳細(xì)講述。以上幾個(gè)按鈕是常用的,其他按鈕在使用的時(shí)候再介紹。編寫程序我們以一個(gè)程序?yàn)槔齺砭毩?xí)編寫:led閃爍。這個(gè)程序大家一定要弄懂,也算是一個(gè)基礎(chǔ),懂了這個(gè)程序,也算是進(jìn)入單片機(jī)的領(lǐng)域了接下來我會(huì)詳細(xì)講解這個(gè)例程。另外需要注意的是單片機(jī)寫程序的時(shí)候,一定是英文狀態(tài)下的字符,尤其注意“;”,往往就因?yàn)檫@個(gè)分號(hào),程序出現(xiàn)問題,所以輸入時(shí)一定要注意是在英文狀態(tài)下的。我們?cè)诰庉嬁蛑休斎胍韵鲁绦颍?* LED閃爍的簡(jiǎn)單試驗(yàn)*/#include /此文件中定義了51的一些特殊功能寄存器void delay(unsigned int i); /聲明延時(shí)函數(shù)void main() while(

20、1)P2 = 0 x00; /置P0口為低電平delay(600); /調(diào)用延時(shí)程序P2 = 0 xff; /置P0口為高電平delay(600); / 調(diào)用延時(shí)程序/*延時(shí)函數(shù)*/void delay(unsigned int i)unsigned char j;for(i; i 0; i-) /循環(huán) 600*255 次 for(j = 255; j 0; j-);我們先編譯一下:第一次編譯我們點(diǎn)擊,看一下結(jié)果結(jié)果的意思: 編譯led2.c 鏈接data=9.0-占用內(nèi)部RAM9個(gè)字節(jié),xdata=0:外部RAM 0字節(jié), Code=56代碼長(zhǎng)度為56字節(jié) 生成單片機(jī)可下載的HEX(十六進(jìn)制

21、)文件。沒有錯(cuò)誤,沒有警告。在這里說明一點(diǎn):生成HEX文件是我們自己設(shè)置的,默認(rèn)的情況下不會(huì)生成HEX文件。單擊 進(jìn)行設(shè)置,如下圖,選擇Output,勾選Creat hex,后單擊確定。接下來我們分析上面的程序:/* */作用,它是用來注釋一段內(nèi)容的,編譯器不對(duì)其進(jìn)行編譯,只要在/* */直接的內(nèi)容都被注釋掉。/ 是用來注釋其后面的內(nèi)容,只能注釋一行。#include /這句告訴我們包涵51的頭文件,那這個(gè)頭文件里面放的是什么東西呢?放的是51單片機(jī)對(duì)應(yīng)的操作的寄存器地址,如我們直接用來操作的P1口就是代表0 x90地址,我們可以將光標(biāo)低位在上然后右鍵 打開頭文件,#ifndef _REG51

22、_H_#define _REG51_H_/* BYTE Register */sfr P0 = 0 x80;sfr P1 = 0 x90;sfr P2 = 0 xA0;sfr P3 = 0 xB0;sfr PSW = 0 xD0;sfr ACC = 0 xE0;/* SCON */sbit SM0 = 0 x9F;sbit SM1 = 0 x9E;sbit SM2 = 0 x9D;sbit REN = 0 x9C;sbit TB8 = 0 x9B;sbit RB8 = 0 x9A;sbit TI = 0 x99;sbit RI = 0 x98;#endif頭文件中定義了51系列單片機(jī)的所有功能

23、寄存器,我們直接使用其代號(hào)就可以,P0,P1等。如:sfr P0=0 x80,意思是把單片機(jī)內(nèi)部地址0 x80處的寄存器重新起名字叫P0,以后我們?cè)诔绦蛑兄苯硬僮鱌0,就相當(dāng)于對(duì)單片機(jī)內(nèi)部0 x80地址處的寄存器進(jìn)行操作。通俗的講,也就是說,通過sfr這個(gè)關(guān)鍵字,讓Keil編譯器在單片機(jī)與人之間搭建一個(gè)橋梁,我們操作P0口,單片機(jī)對(duì)應(yīng)就去操作內(nèi)部0 x80的地址。所以我們寫程序要在開始處直接包涵單片機(jī)的頭文件。sbit SM0 = 0 x9F;是定義位操作地址0 x9F的,這個(gè)地址只代表一個(gè)位。我們操作SM0,對(duì)應(yīng)單片機(jī)就是操作位地址0 x9F。總結(jié)起來sfr與sbit區(qū)別 sfr 是定義字節(jié)

24、的 8位 sbit 是定義位的 1位我們?cè)诜祷刂鞒绦颍簐oid delay(unsigned int i) unsigned char j; for(i; i 0; i-) for(j = 100; j 0; j-); 定義一個(gè)函數(shù)delay();與c語言一樣,要用一個(gè)函數(shù),先定義,我們可以叫它子函數(shù),可以調(diào)用的。void main() / 結(jié)構(gòu)同c語言一樣,main()函數(shù)開始 / 大括號(hào)。 P2 = 0 x00; /置P0口為低電平從這句開始,你現(xiàn)在控制單片機(jī)了,告訴單片機(jī)把你的P2口都輸出0,如果你不操作P2口了,那么P2口一直保持這個(gè)狀態(tài),直到你去改變它。 delay(1000); /

25、調(diào)用延時(shí)程序調(diào)用子函數(shù)delay(),告訴單片機(jī)去執(zhí)行delay那個(gè)函數(shù),那么P2口一直保持0這狀態(tài)。 P2 = 0 xff; /置P0口為高電平 這時(shí)告訴P2口全部輸出1,(0 xff=1111 1111).狀態(tài)從0變成1了,對(duì)應(yīng)的燈的輸出也由低電平變成高電平了 delay(1000); / 調(diào)用延時(shí)程序,再進(jìn)行延時(shí),這個(gè)程序里執(zhí)行完了一次又干什么呢,Keil編譯器會(huì)編譯成一直重復(fù)執(zhí)行main()函數(shù)里面的代碼,整個(gè)代碼的效果就是:P2輸出低電平延時(shí)一段時(shí)間,目的是P2輸出的低電平保持一段時(shí)間P2輸出高電平延時(shí)一段時(shí)間,目的是P2輸出的高電平保持一段時(shí)間重復(fù)到的過程 實(shí)際效果就是led一閃一

26、閃通過更改delay(延時(shí)時(shí)間i),參數(shù)i,可以改變閃爍頻率。實(shí)際操作: 打開軟件(提前裝好驅(qū)動(dòng)),點(diǎn)擊打開文件,打開我們剛剛編譯的led.hex文件,下載程序,就會(huì)看到led閃爍。我們?cè)倏匆粋€(gè)例程,就是單片機(jī)最經(jīng)典的流水燈例程:以下是我們的硬件電路,led一段接單片機(jī)P2口的8個(gè)引腳,另外一邊接排阻RP12和RP13,然后接到電源基礎(chǔ)知識(shí)介紹:排阻:一般在排阻上都標(biāo)有阻值號(hào),其公共端附近也有明顯標(biāo)記。如下下圖表示為472, 表示47*=4700歐姆,還有的標(biāo)號(hào)如3R0,表示阻值為3歐姆, 4K7表示阻值為4.7k, R002表示阻值為0.002歐姆。 (2)發(fā)光二極管。它具有單向?qū)щ娦?,通過

27、5mA左右電流即可發(fā)光,電流越大,其亮度越強(qiáng),但若電流過大,會(huì)燒毀二極管,一般我們控制在3 mA-20mA之間。在這里,給發(fā)光二極管串聯(lián)一個(gè)電阻的目的就是為了限制通過發(fā)光二極管的電流不要太大,因此這個(gè)電阻又稱為“限流電阻”。當(dāng)發(fā)光二極管發(fā)光時(shí),測(cè)量它兩端電壓約為1.7V,這個(gè)電壓又叫做發(fā)光二極管的“導(dǎo)通壓降”。圖2.2.9和圖2.2.10分別為直插式發(fā)光二極管和貼片式發(fā)光二極管實(shí)物圖。發(fā)光二極管正極又稱陽極,負(fù)極又稱陰極,電流只能從陽極流向陰極。直插式發(fā)光二極管長(zhǎng)腳為陽極,短腳為陰極。仔細(xì)觀察貼片式發(fā)光二極管正面的一端有彩色標(biāo)記,通常有標(biāo)記的一端為陰極。 圖2.2.9 圖2.2.10 關(guān)于排阻

28、大小的選擇:歐姆定律想必大家都清楚,U=IR,當(dāng)發(fā)光二極管正常導(dǎo)通時(shí),其兩端電壓約為1.7V,發(fā)光管的陰極為低電平,即0V,陽極串接一電阻,電阻的另一端為Vcc , 為5V,因此加在電阻兩端的電壓為5V-1.7V=3.3V,計(jì)算穿過電阻的電流,3.3 V/ 1000=3.3mA。即穿過發(fā)光管的電流也為3.3mA,若想讓發(fā)光管再亮一些,我們可以適當(dāng)減小該電阻??次覀兊脑韴D,可以知道:LED的正極接在VCC上,只要給了低電平,那么LED就會(huì)亮,低電平對(duì)應(yīng)到單片機(jī)的邏輯就是0,只要單片機(jī)的某一個(gè)管腳輸出0,那么對(duì)應(yīng)的發(fā)光二極管就會(huì)亮。我們看一下源碼:/* 實(shí)驗(yàn)名 : 左右流水燈實(shí)驗(yàn)* 使用的IO

29、: P2* 實(shí)驗(yàn)效果 : 點(diǎn)亮的LED從右邊往左邊移動(dòng),到達(dá)左邊再往右邊移動(dòng),依此循環(huán)。*注意 :*/#include#include/因?yàn)橐玫阶笥乙坪瘮?shù),所以加入這個(gè)頭文件#define GPIO_LED P2/將P2口另外取名為GPIO_LEDvoid Delay10ms(unsigned int); /誤差 0us/* 函數(shù)名 : main* 函數(shù)功能 : 主函數(shù)* 輸入 : 無* 輸出 : 無*/void main(void)unsigned char n;GPIO_LED=0 xfe;while(1)for(n=0;n7;n+)/左移7次,這樣子就會(huì)到達(dá)最左邊GPIO_LED=_c

30、rol_(GPIO_LED,1); /將GPIO_LED左移一位Delay10ms(50); /延時(shí)for(n=0;n0;c-) for(b=38;b0;b-) for(a=130;a0;a-);以上程序?qū)崿F(xiàn)點(diǎn)亮一盞LED之后左右移動(dòng)。講解:移位操作左移。C51中操作符為“,每執(zhí)行一次右移指令,被操作的數(shù)將最低位移入單片機(jī)PSW寄存器的CY位,CY位中原來的數(shù)丟棄,最高位補(bǔ)0,其他位依次向右移動(dòng)一位,如下圖所示。循環(huán)左移。最高位移入最低位,其他位依次向左移一位。C語言中沒有專門的指令,通過移位指令與簡(jiǎn)單邏輯運(yùn)算可以實(shí)現(xiàn)循環(huán)左移,或直接利用C51庫中自帶的函數(shù)_crol_實(shí)現(xiàn),如下圖所示。_cr

31、ol_函數(shù)所在的頭文件是循環(huán)右移。最低位移入最高位,其他位依次向右移一位。C語言中沒有專門的指令,通過移位指令與簡(jiǎn)單邏輯運(yùn)算可以實(shí)現(xiàn)循環(huán)右移,或直接利用C51庫中自帶的函數(shù)-cror實(shí)現(xiàn),如下圖所示。_cror_函數(shù)所在的頭文件是講解:PSW寄存器PSW (Program Status Word)全稱為程序狀態(tài)字標(biāo)志寄存器,是一個(gè)8位寄存器,位于單片機(jī)片內(nèi)的特殊功能寄存器區(qū),字節(jié)地址DOH,用來存放運(yùn)算結(jié)果的一些特征,如有無進(jìn)位、借位等,使用匯編編程時(shí)PSW寄存器很有用,但在利用C語言編程時(shí),編譯器會(huì)自動(dòng)控制該寄存器,很少人為操作它,大家只需做簡(jiǎn)單了解即可.其每位的具體含義如下圖所示.CY一進(jìn)

32、位標(biāo)志位,它表示運(yùn)算是否有進(jìn)位(或借位).如果操作結(jié)果在最高位有進(jìn)位(加法)或者借位(減法),則該位為1,否則為0.AC一輔助進(jìn)位標(biāo)志,又稱半進(jìn)位標(biāo)志,它指兩個(gè)8位數(shù)運(yùn)算低四位是否有半進(jìn)位,即低四位相加(或相減)是否進(jìn)位(或借位),如有AC為1,否則為0eFO一由用戶使用的一個(gè)狀態(tài)標(biāo)志位,可用軟件來使它置1或清0,也可由軟件來測(cè)試它,以控制程序的流向.RS1, RSO-4組工作寄存器區(qū)選擇控制位,在匯編語言中這兩位用來選擇4組工作寄存器區(qū)中的哪一組為當(dāng)前工作寄存區(qū).OV一溢出標(biāo)志位,反映帶符號(hào)數(shù)的運(yùn)算結(jié)果是否有溢出.有溢出時(shí),此位為1,否則為0.P一奇偶標(biāo)志位,反映累加器ACC內(nèi)容的奇偶性,如

33、果ACC中的運(yùn)算結(jié)果有偶數(shù)個(gè)I(如11001100B,其中有4個(gè)1),則P為0,否則P為1._cror_();函數(shù)循環(huán)右移函數(shù),包含在intrins.h的庫函數(shù)里面。_crol_();函數(shù)循環(huán)左移移函數(shù),包含在intrins.h的庫函數(shù)里面。第五講 蜂鳴器蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。我們開發(fā)板上常用的蜂鳴器就是常常說的交流蜂鳴器或直流蜂鳴器(自激式蜂鳴器)。 直流蜂鳴器是給一定的驅(qū)動(dòng)直流電壓就會(huì)響。而交流蜂鳴器是需要給蜂鳴器一個(gè)脈沖才會(huì)響。常見的有PWM波控制蜂鳴器

34、的頻率。脈沖就是高低電平的切換,如下圖:一個(gè)方波脈沖我們用單片機(jī)的IO口實(shí)現(xiàn)一種這樣高低電平的方波,驅(qū)動(dòng)蜂鳴器發(fā)音。我們板子上配的就是交流蜂鳴器。 接下來我們看一下蜂鳴器的硬件電路: 蜂鳴器通過ULN2003驅(qū)動(dòng)。這里ULN2003暫不多做介紹,詳細(xì)介紹可參考步進(jìn)電機(jī)篇。我們看一下程序源碼:/* 實(shí)驗(yàn)名 : 蜂鳴器實(shí)驗(yàn)* 使用的IO : P15* 實(shí)驗(yàn)效果 : 蜂鳴器響。*注意 :*/#include sbit Beep = P15 ;void Delay(unsigned int i) ;/* 函數(shù)名 : main* 函數(shù)功能 : 主函數(shù)* 輸入 : 無* 輸出 : 無*/void main

35、()Beep= 1;Delay(5);Beep= 0;Delay(5); /* 函數(shù)名 : Delay()* 函數(shù)功能 : 延時(shí)函數(shù)* 輸入 : 無* 輸出 : 無*/void Delay(unsigned int i)char j;for(i; i 0; i-)for(j = 200; j 0; j-);下載生成的hex文件,就可聽到蜂鳴器發(fā)音。 第六講 獨(dú)立按鍵按鍵是什么東西,我想這個(gè)就不必由我向各位闡述了。嗯,如你所見,按鍵種類繁多,功能有簡(jiǎn)有繁,極大的充斥著我們的生活。但是無論如何,所有的按鍵其實(shí)都有一個(gè)原型,來源于同一種原理,所有的按鍵無論多復(fù)雜,多華麗,都是從這樣一個(gè)原型發(fā)展而成的

36、。好比你就算長(zhǎng)的再帥,你也是只猩猩變來的,呵呵。我們平日所見到的絕大部分的按鍵,其實(shí)都可以歸類為一種,叫“接觸式按鍵”。下圖為一個(gè)典型的接觸式按鍵(又稱輕觸開關(guān))。需要特別說明的是,這里說的“接觸”,是指機(jī)械層面上的接觸,而不是感光或者某些特殊涂層(比如觸摸屏)一類的接觸。所以,按鍵的工作特性其實(shí)是一種機(jī)械特性,下文會(huì)詳細(xì)說明。,如上圖,請(qǐng)對(duì)照?qǐng)D一想象,1、2、3、4 分別對(duì)應(yīng)按鍵的四個(gè)引腳,其中藍(lán)色的線表示按鍵未被按下之時(shí)的狀態(tài),我成為初始狀態(tài),它是不導(dǎo)通的;而綠色的線是卻永久導(dǎo)通的。各位明白了么,其實(shí)是兩個(gè)相同的結(jié)構(gòu)連在一起了。我們只要將需要按鍵開關(guān)作用的線路分別接在1、3 和2、4 的任

37、意取一組合,概括起來就是(1,2)、(1,4)、(3,2)、(3,4)四種組合,都可以起到我們預(yù)期的開關(guān)作用。相信以上說明使大家對(duì)按鍵的工作原理有了個(gè)比較清晰的認(rèn)識(shí)了,現(xiàn)在來說說一個(gè)小知識(shí)。先看下圖(圖4):首先說明的是,上圖的連法是不允許的,因?yàn)楫?dāng)按鍵按下之后,電源和地短接,會(huì)將導(dǎo)線直接燒毀。但是此處用作特例,假設(shè)導(dǎo)線不會(huì)燒毀?,F(xiàn)在來提出一個(gè)問題,當(dāng)按鍵按下以后,請(qǐng)問如果這時(shí)用萬用表測(cè)量導(dǎo)線上任何一處的電壓,得到的結(jié)果是VCC 還是GND 的電壓?答案是:GND,即表示測(cè)出的電壓為0V。為什么呢,因?yàn)閷?dǎo)線上,對(duì)于兩端的電平是一種類似于程序語言邏輯運(yùn)算里面的“與”,即對(duì)于導(dǎo)線兩端:有零即為零,

38、只有全為一是才為一。理解了這點(diǎn),按鍵的工作前提就有了。鍵盤分為編碼鍵盤和非編碼鍵盤。鍵盤上閉合鍵的識(shí)別由專用的硬件編碼器實(shí)現(xiàn),并產(chǎn)生鍵編碼號(hào)或鍵值的稱為編碼鍵盤,如計(jì)算機(jī)鍵盤。而靠軟件編程來識(shí)別的鍵盤稱為非編碼鍵盤,在單片機(jī)組成的各種系統(tǒng)中,用的較多的是非編碼鍵盤。非編碼鍵盤又分為獨(dú)立鍵盤和行列式鍵盤(常說的矩陣鍵盤)。在這一講中我們介紹一下單片機(jī)中鍵盤使用。 單片機(jī)的IO口既可作為輸出也可作為輸入使用,當(dāng)檢測(cè)按鍵時(shí)用的是它的輸入功能,我們把按鍵的一端接地,另一端與單片機(jī)的某個(gè)I/O口相連,開始時(shí)先給該IO口賦一高電平,然后讓單片機(jī)不斷地檢測(cè)該I/O口是杏變?yōu)榈碗娖?,?dāng)按鍵閉合時(shí),即相當(dāng)于該I

39、/O口通過按鍵與地相連,變成低電平,程序一旦檢測(cè)到I/O口變?yōu)榈碗娖絼t說明按鍵被按下,然后執(zhí)行相應(yīng)的指令。我們先來說一下,按鍵常常遇到的問題抖動(dòng)問題。還以圖四為例,按鍵未按下之前,圖四按鍵左端的導(dǎo)線因?yàn)檫B在VCC 上而顯示高電平,右端顯示低電平,按鍵按下后,按鍵閉合,整個(gè)導(dǎo)線都顯示低電平,然后按鍵松開,又回到按鍵按下之前的點(diǎn)評(píng)狀態(tài)。如果只考察按鍵左端的電平變化,應(yīng)該是上圖中所顯示的一個(gè)負(fù)脈沖波形。但是,實(shí)際上,正確的波形應(yīng)該是下圖。相比于上圖,大家都看到了在高低電平直接有一段鋸齒一樣的波形,這就是所謂的按鍵抖動(dòng)。為什么會(huì)有按鍵抖動(dòng)呢,原因很簡(jiǎn)單,接觸式按鍵是靠機(jī)械的接觸來實(shí)現(xiàn)開關(guān)作用的。這種接

40、觸方式就注定了它要經(jīng)歷一個(gè)“接觸不穩(wěn)定正在穩(wěn)定中徹底穩(wěn)定”的一種過程。就好比你用手抓緊一顆石頭,即使你一開始就很用力的握緊,也不可能馬上就達(dá)到最緊的狀態(tài),也要經(jīng)歷一個(gè)從握住到最緊握的過程。那么在這個(gè)過程里,接觸式按鍵就處于一種徘徊在“閉合”與“斷開”兩者之間的狀態(tài)。體現(xiàn)在電路中,就是在一小段時(shí)間內(nèi)有非常多的“按下抬起”動(dòng)作。而這段抖動(dòng)的時(shí)間,大概是1020 毫秒,依不同的環(huán)境條件而定。解決這個(gè)問題常見的方法有軟件去抖動(dòng)和硬件去抖動(dòng)。我們解釋一下抖動(dòng):關(guān)于按鍵去抖動(dòng)的解釋,我們?cè)谑謩?dòng)按鍵的時(shí)候,由于機(jī)械抖動(dòng)或是其它一些非人為的因素很有可能會(huì)造成誤識(shí)別,一般手動(dòng)按下一次鍵然后接著釋放,按鍵兩片金屬

41、膜接觸的時(shí)間大約為50ms 左右,在按下瞬間到穩(wěn)定的時(shí)間為5-10ms,在松開的瞬間到穩(wěn)定的時(shí)間也為5-10ms,如果我們?cè)偈状螜z測(cè)到鍵被按下后延時(shí)10ms 左右再去檢測(cè),這時(shí)如果是干擾信號(hào)將不會(huì)被檢測(cè)到,如果確實(shí)是有鍵被按下,則可確認(rèn),以上為按鍵識(shí)別去抖動(dòng)的原理。獨(dú)立按鍵: 我們先將一下獨(dú)立按鍵的使用方法,開發(fā)板獨(dú)立按鍵電路圖如下:獨(dú)立按鍵一共5個(gè),分別連接在單片機(jī)的P3.0到P3.4口。去抖動(dòng)的方式,我們采用軟件延時(shí)的方法。過程如下:先設(shè)置IO口為高電平(一般上電默認(rèn)就為高)讀取IO口電平確認(rèn)是否有按鍵按下如有IO電平為低電平后,延時(shí)幾個(gè)ms再讀取該IO電平,如果任然為低電平,說明對(duì)應(yīng)按鍵

42、按下執(zhí)行相應(yīng)按鍵的程序/* 實(shí)驗(yàn)名 : 獨(dú)立按鍵實(shí)驗(yàn)* 使用的IO : LED使用P2,鍵盤使用P3.0、P3.1、P3.2、P3.3* 實(shí)驗(yàn)效果 : 按下K1鍵,滅掉LED,按下K2鍵,打開所有的LED,按下K3鍵,LED左移一位,按下K4鍵,LED右移一位。*注意 :由于P3.2口跟紅外線共用,所以做按鍵實(shí)驗(yàn)時(shí)為了不讓紅外線影響實(shí)驗(yàn)*效果,最好把紅外線先取下來。*/#include#include#define GPIO_LED P2sbit K1=P30;sbit K2=P31;sbit K3=P32;sbit K4=P33;void Delay10ms( ); /延時(shí)10ms/* 函數(shù)

43、名 : main* 函數(shù)功能 : 主函數(shù)* 輸入 : 無* 輸出 : 無*/void main(void)unsigned int i,j;while(1)if(K1=0)/檢測(cè)按鍵K1是否按下Delay10ms();/消除抖動(dòng)if(K1=0) /再次檢測(cè)按鍵是否按下j=0;while(i50)&(K1=0) /檢測(cè)按鍵松手檢測(cè),如果不松手超過延時(shí)也會(huì)自動(dòng)結(jié)束等待Delay10ms();i+;i=0;if(K2=0) /檢測(cè)按鍵K2是否按下Delay10ms();if(K2=0)j=0 xff;while(i50)&(K2=0)Delay10ms();i+;i=0;if(K3=0)/檢測(cè)按鍵K

44、3是否按下Delay10ms();if(K3=0)if(j=0)|(j=0 xff) /如果當(dāng)前狀態(tài)是全亮的或者全滅的,就點(diǎn)亮他的第一盞燈j=0 xfe;elsej=_crol_(j,1);/左移一位while(i50)&(K3=0)Delay10ms();i+;i=0;if(K4=0)/檢測(cè)按鍵K4是否按下Delay10ms();if(K4=0)if(j=0)|(j=0 xff)j=0 xfe;elsej=_cror_(j,1);/右移一位while(i0;c-) for(b=38;b0;b-) for(a=130;a0;a-);下載獨(dú)立按鍵控制led燈.hex,觀察實(shí)驗(yàn)結(jié)果。實(shí)驗(yàn)效果是:按

45、下K1鍵,滅掉LED,按下K2鍵,打開所有的LED,按下K3鍵,LED左移一位,按下K4鍵,LED右移一位。第七講 靜態(tài)數(shù)碼管我們先看看什么是數(shù)碼管,上圖就是各種長(zhǎng)相各種樣子的數(shù)碼管了,肯定很眼熟了吧。不管將幾位數(shù)碼管連在一起,數(shù)碼管的顯示原理都是一樣的,都是靠點(diǎn)亮內(nèi)部的發(fā)光二極管來發(fā)光,下面就來我們講解一個(gè)數(shù)碼管是如何亮起來的。數(shù)碼管內(nèi)部電路如下圖所示,從右圖可看出,一位數(shù)碼管的引腳是10個(gè),顯示一個(gè)8字需要7個(gè)小段,另外還有一個(gè)小數(shù)點(diǎn),所以其內(nèi)部一共有8個(gè)小的發(fā)光二極管,最后還有一個(gè)公共端,生產(chǎn)商為了封裝統(tǒng)一,單位數(shù)碼管都封裝10個(gè)引腳,其中第3和第8引腳是連接在一起的。而它們的公共端又可

46、分為共陽極和共陰極,中間圖為共陰極內(nèi)部原理圖,右圖為共陽極內(nèi)部原理圖。上圖展出了常用的兩種數(shù)碼管的引腳排列和內(nèi)部結(jié)構(gòu)??偹苤c(diǎn)亮發(fā)光二極管就是要給予它足夠大的正向壓降。所以點(diǎn)亮數(shù)碼管其實(shí)也就是給它內(nèi)部相應(yīng)的發(fā)光二極管正向壓降。如上圖左(一共a、b、c、d、e、f、g、DP 八段),如果要顯示“1”則要點(diǎn)亮b、c 兩段LED;顯示“A”則點(diǎn)亮a、b、c、e、f、g 這六段LED;我們還知道,既然LED 加載的是正向壓降,它的兩端電壓必然會(huì)有高低之分:如果八段LED 電壓高的一端為公共端,我們稱之為共陽極數(shù)碼管(如上圖中);如果八段LED 電壓低的一段為公共端,則稱之為共陰極數(shù)碼管(上圖右)。

47、所以,要點(diǎn)亮共陽極數(shù)碼管,則要在公共端給予高于非公共端的電平;反之點(diǎn)亮共陰極數(shù)碼管,則要在非公共端給予較高電平。對(duì)共陰極數(shù)碼來說,其8個(gè)發(fā)光二極管的陰極在數(shù)碼管內(nèi)部全部連接在一起,所以稱“共陰”,而它們的陽極是獨(dú)立的,通常在設(shè)計(jì)電路時(shí)一般把陰極接地。當(dāng)我們給數(shù)碼管的任意一個(gè)陽極加一個(gè)高電平時(shí),對(duì)應(yīng)的這個(gè)發(fā)光二極管就點(diǎn)亮了。如果想要顯示出一個(gè)8字,并且把右下角的小數(shù)點(diǎn)也點(diǎn)亮的話,可以給8個(gè)陽極全部送高電平,如果想讓它顯示出一個(gè)0字,那么我們可以除了給第“g, dp”這兩位送低電平外,其余引腳全部都送高電平,這樣它就顯示出0字了。想讓它顯示幾,就給相對(duì)應(yīng)的發(fā)光二極管送高電平,因此我們?cè)陲@示數(shù)字的時(shí)

48、候首先做的就是給0-9十個(gè)數(shù)字編碼,在要它亮什么數(shù)字的時(shí)候直接把這個(gè)編碼送到它的陽極就行了。共陽極數(shù)碼管其內(nèi)部8個(gè)發(fā)光二極管的所有陽極全部連接在一起,電路連接時(shí),公共端接高電平,因此我們要點(diǎn)亮的那個(gè)發(fā)光管二極管就需要給陰極送低電平,此時(shí)顯示數(shù)字的編碼與共陽極編碼是相反的關(guān)系,數(shù)碼管內(nèi)部發(fā)光二極管點(diǎn)亮?xí)r,也需要5mA以上的電流,而且電流不可過大,否則會(huì)燒毀發(fā)光二極管。由于單片機(jī)的I/O口送不出如此大的電流,所以數(shù)碼管與單片機(jī)連接時(shí)需要加驅(qū)動(dòng)電路,可以用上拉電阻的方法或使用專門的數(shù)碼管驅(qū)動(dòng)芯片,本實(shí)驗(yàn)板上使用的是74HC573鎖存器,其輸出電流較大,電路接口簡(jiǎn)單,可借鑒使用。一般共陽極數(shù)碼管更為常

49、用,為什么呢?這是因?yàn)閿?shù)碼管的非公共端往往接在IC 芯片的IO上,而IC 芯片的驅(qū)動(dòng)能力往往是比較小的,如果采用共陰極數(shù)碼管,它的驅(qū)動(dòng)端在非公共端,就有可能受限于IC芯片輸出電流不夠而顯示昏暗(比如51單片機(jī)),要外加上拉電阻或者是三極管加大驅(qū)動(dòng)能力。所以使用共陽數(shù)碼管的好處是:將驅(qū)動(dòng)數(shù)碼管的工作交到公共端(一般接驅(qū)動(dòng)電源),加大驅(qū)動(dòng)電源的功率自然要比加大IC芯片IO口的驅(qū)動(dòng)電流簡(jiǎn)單許多。另一方面,這樣也能減輕MCU的負(fù)擔(dān)。當(dāng)多位一體時(shí),它們內(nèi)部的公共端是獨(dú)立的,而負(fù)責(zé)顯示什么數(shù)字的段線全部是連接在一起的,獨(dú)立的公共端可以控制多位一體中的哪一位數(shù)碼管點(diǎn)亮,而連接在一起的段線可以控制這個(gè)能點(diǎn)亮數(shù)

50、碼管亮什么數(shù)字,通常我們把公共端叫做“位選線”,連接在一起的段線叫做“段選線”,有了這兩個(gè)線后,通過單片機(jī)及外部驅(qū)動(dòng)電路就可以控制任意的數(shù)碼管顯示任意的數(shù)字了。一般單位數(shù)碼管有10個(gè)引腳,二位數(shù)碼管也是10個(gè)引腳,四位數(shù)碼管是12個(gè)引腳,關(guān)于具體的引腳及段、位標(biāo)號(hào)大家可以查詢相關(guān)資料,最簡(jiǎn)單的辦法就是用數(shù)字萬用表測(cè)量,若沒有數(shù)字萬用表也可用5V直流電源串接1k電阻后測(cè)量,將測(cè)量結(jié)果記錄,通過統(tǒng)計(jì)便可繪制出引腳標(biāo)號(hào)。知識(shí)點(diǎn):如何用萬用表檢瀏數(shù)碼管的引腳排列對(duì)數(shù)字萬用表來說,紅色表筆連接表內(nèi)部電池正極,黑色表筆連接表內(nèi)部電池負(fù)極,當(dāng)把數(shù)字萬用表置于二極管檔時(shí),其兩表筆間開路電壓約為1.5V,把兩表

51、筆正確加在發(fā)光二極管兩端時(shí),可以點(diǎn)亮發(fā)光二極管。如下圖所示,將數(shù)字萬用表置于二極管擋,紅表筆接在腳,然后用黑表筆去接觸其他各引腳,假設(shè)只有當(dāng)接觸到腳時(shí),數(shù)碼管的a段發(fā)光,而接觸其余引腳時(shí)則不發(fā)光。由此可知,被測(cè)數(shù)碼管為共陰極結(jié)構(gòu)類型,腳是公共陰極,腳則是數(shù)碼管的a段.接下來再檢測(cè)各段引腳,仍使用數(shù)字萬用表二極管檔,將黑表筆固定接在腳,用紅表筆依次接觸、引腳時(shí),數(shù)碼管的其他段先后分別發(fā)光,據(jù)此便可繪出該數(shù)碼管的內(nèi)部結(jié)構(gòu)和引腳排列圖。檢測(cè)中,若被測(cè)數(shù)碼管為共陽極類型,則需將紅、黑表筆對(duì)調(diào)才能測(cè)出上述結(jié)果,在判別結(jié)構(gòu)類型時(shí),操作時(shí)要靈活掌握,反復(fù)試驗(yàn),直到找出公共端為止,大家只要懂得了原理,檢測(cè)出各

52、個(gè)引腳便不在是問題了。數(shù)碼管靜態(tài)顯示當(dāng)多位數(shù)碼管應(yīng)用于某一系統(tǒng)時(shí),它們的“位選”是可獨(dú)立控制的,而“段選”是連接在一起的,我們可以通過位選信號(hào)控制哪幾個(gè)數(shù)碼管亮,而在同一時(shí)刻,位選選通的所有數(shù)碼管上顯示的數(shù)字始終都是一樣的,因?yàn)樗鼈兊亩芜x是連接在一起的,所以送入所有數(shù)碼管的段選信號(hào)都是相同的,那么它們顯示的數(shù)字必定一樣,數(shù)碼管的這種顯示方法叫做靜態(tài)顯示。從電路圖可以看出,本開發(fā)板使用的是共陰極數(shù)碼管,在每段數(shù)碼管端加上一個(gè)限流電阻。下面我們來看一下程序打開 /* 實(shí)驗(yàn)名 : 靜態(tài)數(shù)碼管實(shí)驗(yàn)* 使用的IO : 數(shù)碼管使用P0,鍵盤使用P3.0、P3.1、P3.2、P3.3* 實(shí)驗(yàn)效果 : 按下K

53、1鍵,顯示1,按下K2鍵,顯示2,按下K3鍵,顯示3,按下K4鍵,顯示4。*注意 :由于P3.2口跟紅外線共用,所以做按鍵實(shí)驗(yàn)時(shí)為了不讓紅外線影響實(shí)驗(yàn)*效果,最好把紅外線先取下來。*/#include#include#define GPIO_DIG P0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;sbit K1=P30;sbit K2=P31;sbit K3=P32;sbit K4=P33;DIG_CODE10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/顯示09的值void Del

54、ay10ms(); /延時(shí)10ms /* 函數(shù)名 : main* 函數(shù)功能 : 主函數(shù)* 輸入 : 無* 輸出 : 無*/void main(void)unsigned int i,j;LSA=0;LSB=0;LSC=0;while(1)if(K1=0)/檢測(cè)按鍵K1是否按下Delay10ms();/消除抖動(dòng)if(K1=0)j=1;while(i50)&(K1=0) /檢測(cè)按鍵是否松開Delay10ms();i+;i=0;if(K2=0) /檢測(cè)按鍵K2是否按下Delay10ms();if(K2=0)j=2;while(i50)&(K2=0)Delay10ms();i+;i=0;if(K3=0

55、)/檢測(cè)按鍵K3是否按下Delay10ms();if(K3=0)j=3;while(i50)&(K3=0)Delay10ms();i+;i=0;if(K4=0)/檢測(cè)按鍵K4是否按下Delay10ms();if(K4=0)j=4;while(i0;c-) for(b=38;b0;b-) for(a=130;a0;a-);下載HEX文件,觀察實(shí)驗(yàn)效果,實(shí)驗(yàn)的效果是:按下K1鍵,顯示1,按下K2鍵,顯示2,按下K3鍵,顯示3,按下K4鍵,顯示4。第八講 矩陣鍵盤獨(dú)立鍵盤與單片機(jī)連接時(shí),每一個(gè)按鍵都需要單片機(jī)的一個(gè)I/O口若某單片機(jī)系統(tǒng)需較多按鍵,如果用獨(dú)立按鍵便會(huì)占用過多的I/O口資源。單片機(jī)系統(tǒng)

56、中I/O口資源往往比較寶貴,當(dāng)用到多個(gè)按鍵時(shí)為了節(jié)省I/O口口線,我們引入矩陣鍵盤。我們以4X4矩陣鍵盤為例講解其工作原理和檢測(cè)方法。將16個(gè)按鍵排成4行4列,第一行將每個(gè)按鍵的一端連接在一起構(gòu)成行線,第一列將每個(gè)按鍵的另一端連接在一起構(gòu)成列線,這樣便一共有4行4列共8根線,我們將這8根線連接到單片機(jī)的8個(gè)I/O口上,通過程序掃描鍵盤就可檢測(cè)16個(gè)鍵。用這種方法我們也可實(shí)現(xiàn)3行3列9個(gè)鍵、5行5列25個(gè)鍵、6行6列36個(gè)鍵等。無論是獨(dú)立鍵盤還是矩陣鍵盤,單片機(jī)檢測(cè)其是否被按下的依據(jù)都是一樣的,也就是檢測(cè)與該鍵對(duì)應(yīng)的I/O口是否為低電平。獨(dú)立鍵盤有一端固定為低電平,單片機(jī)寫程序檢測(cè)時(shí)比較方便。而

57、矩陣鍵盤兩端都與單片機(jī)I/O口相連,因此在檢測(cè)時(shí)需人為通過單片機(jī)I/O口送出低電平。檢測(cè)時(shí),先送一列為低電平,其余幾列全為高電平(此時(shí)我們確定了列數(shù)),然后立即輪流檢測(cè)一次各行是否有低電平,若檢測(cè)到某一行為低電平(這時(shí)我們又確定了行數(shù)),則我們便可確認(rèn)當(dāng)前被按下的鍵是哪一行哪一列的,用同樣方法輪流送各列一次低電平,再輪流檢測(cè)一次各行是否變?yōu)榈碗娖?,這樣即可檢測(cè)完所有的按鍵,當(dāng)有鍵被按下時(shí)便可判斷出按下的鍵是哪一個(gè)鍵。當(dāng)然我們也可以將行線置低電平,掃描列是否有低電平。這就是矩陣鍵盤檢測(cè)的原理和方法。首先看一下電路圖13428765上圖是一個(gè)4X4 的矩陣鍵盤,一共是16 個(gè)按鍵。我們照習(xí)慣稱橫為

58、“行”,“豎”為列。那么5、6、7、8 我們稱之為“行線”,則1、2、3、4 稱為“列線”。要正確記住各個(gè)行列線各自對(duì)應(yīng)的IO。注意看,每一個(gè)按鍵的兩端,都分別接在某一個(gè)列線和行線上,即:“行線和列線是通過某個(gè)按鍵的按下和抬起實(shí)現(xiàn)聯(lián)通和斷開的”,和“導(dǎo)線兩端上的信號(hào)是經(jīng)過“與”的關(guān)系再體現(xiàn)到導(dǎo)線上的?!边@兩句話便構(gòu)成了矩陣鍵盤掃描的全部。要理解好,理解不了就背下來?,F(xiàn)在詳細(xì)講述一下矩陣鍵盤掃描的原理和步驟:掃描矩陣鍵盤,即是把某一條(只有一條)行線置為低電平,而列線全部置為輸入方向,然后檢測(cè)列線,如果檢測(cè)到某一條列線是低電平,那么就表示位于這條列線與輸出低電平的行線的交點(diǎn)處的按鍵被按下了。要掃

59、描16個(gè)按鍵,就依次以這樣的方法掃描16次,之后就可以確定哪一個(gè)按鍵被按下了。當(dāng)然這里也少不了延時(shí)消除按鍵抖動(dòng)的環(huán)節(jié)。下面看一下程序打開/* 實(shí)驗(yàn)名 : 矩陣鍵盤實(shí)驗(yàn)* 使用的IO : 數(shù)碼管使用P0,鍵盤使用P3.0、P3.1、P3.2、P3.3* 實(shí)驗(yàn)效果 : 按矩陣鍵盤分別顯示在數(shù)碼管上面顯示十六進(jìn)制的0到F。*注意 :*/#include#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;unsigned char code DIG_CODE17=0 x3f,0 x06,0 x5b,0

60、 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼unsigned char KeyValue;/用來存放讀取到的鍵值void Delay10ms(); /延時(shí)10msvoid KeyDown(); /檢測(cè)按鍵函數(shù) /* 函數(shù)名 : main* 函數(shù)功能 : 主函數(shù)* 輸入 : 無* 輸出 : 無*/void main(void)LSA=0; /給一個(gè)數(shù)碼管提供位選LSB=0;LSC=0;while(1)KeyDown(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論