版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Good is good, but better carries it.精益求精,善益求善。C語(yǔ)言基礎(chǔ)知識(shí),Keil軟件的使用,流水燈數(shù)碼管74HC5774HC595介紹-第一節(jié)單片機(jī)的用途單片機(jī)是一種集成電路芯片,采用超大規(guī)模技術(shù)把具有數(shù)據(jù)處理能力(如算術(shù)運(yùn)算,邏輯運(yùn)算、數(shù)據(jù)傳送、中斷處理)的微處理器(CPU),隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),只讀程序存儲(chǔ)器(ROM),輸入輸出電路(I/O口),可能還包括定時(shí)計(jì)數(shù)器,串行通信口(SCI),顯示驅(qū)動(dòng)電路(LCD或LED驅(qū)動(dòng)電路),脈寬調(diào)制電路(PWM),模擬多路轉(zhuǎn)換器及A/D轉(zhuǎn)換器等電路集成到一塊單塊芯片上,構(gòu)成一個(gè)最小然而完善的計(jì)算機(jī)系統(tǒng).這些
2、電路能在軟件的控制下準(zhǔn)確、迅速、高效地完成程序設(shè)計(jì)者事先規(guī)定的任務(wù).單片機(jī)也被稱為微控制器(Microcontroler),是因?yàn)樗钤绫挥迷诠I(yè)控制領(lǐng)域。單片機(jī)由芯片內(nèi)僅有CPU的專用處理器發(fā)展而來(lái)。最早的設(shè)計(jì)理念是通過將大量外圍設(shè)備和CPU集成在一個(gè)芯片中,使計(jì)算機(jī)系統(tǒng)更小,更容易集成進(jìn)復(fù)雜的而對(duì)提及要求嚴(yán)格的控制設(shè)備當(dāng)中。INTEL的Z80是最早按照這種思想設(shè)計(jì)出的處理器,從此以后,單片機(jī)和專用處理器的發(fā)展便分道揚(yáng)鑣。早期的單片機(jī)都是8位或4位的。其中最成功的是INTEL的8031,因?yàn)楹?jiǎn)單可靠而性能不錯(cuò)獲得了很大的好評(píng)。此后在8031上發(fā)展出了MCS51系列單片機(jī)系統(tǒng)。基于這一系統(tǒng)的單
3、片機(jī)系統(tǒng)直到現(xiàn)在還在廣泛使用。隨著工業(yè)控制領(lǐng)域要求的提高,開始出現(xiàn)了16位單片機(jī),但因?yàn)樾詢r(jià)比不理想并未得到很廣泛的應(yīng)用。90年代后隨著消費(fèi)電子產(chǎn)品大發(fā)展,單片機(jī)技術(shù)得到了巨大的提高。隨著INTELi960系列特別是后來(lái)的ARM系列的廣泛應(yīng)用,32位單片機(jī)迅速取代16位單片機(jī)的高端地位,并且進(jìn)入主流市場(chǎng)。而傳統(tǒng)的8位單片機(jī)的性能也得到了飛速提高,處理能力比起80年代提高了數(shù)百倍。目前,高端的32位單片機(jī)主頻已經(jīng)超過300MHz,性能直追90年代中期的專用處理器,而普通的型號(hào)出廠價(jià)格跌落至1美元,最高端的型號(hào)也只有10美元。當(dāng)代單片機(jī)系統(tǒng)已經(jīng)不再只在裸機(jī)環(huán)境下開發(fā)和使用,大量專用的嵌入式操作系統(tǒng)
4、被廣泛應(yīng)用在全系列的單片機(jī)上。而在作為掌上電腦和手機(jī)核心處理的高端單片機(jī)甚至可以直接使用專用的Windows和Linux操作系統(tǒng)。單片機(jī)由于其不斷完善的性能和其低廉的價(jià)格,收到了大家的擁戴,使其在儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域都發(fā)揮著不可替代的作用:1.在智能儀器儀表上的應(yīng)用單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于儀器儀表中,結(jié)合不同類型的傳感器,可實(shí)現(xiàn)諸如電壓、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長(zhǎng)度、硬度、元素、壓力等物理量的測(cè)量.采用單片機(jī)控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起
5、采用電子或數(shù)字電路更加強(qiáng)大.例如精密的測(cè)量設(shè)備(功率計(jì),示波器,各種分析儀).2.在工業(yè)控制中的應(yīng)用用單片機(jī)可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng).例如工廠流水線的智能化管理,電梯智能化控制、各種報(bào)警系統(tǒng),與計(jì)算機(jī)聯(lián)網(wǎng)構(gòu)成二級(jí)控制系統(tǒng)等.3.在家用電器中的應(yīng)用可以這樣說(shuō),現(xiàn)在的家用電器基本上都采用了單片機(jī)控制,從電飯褒、洗衣機(jī)、電冰箱、空調(diào)機(jī)、彩電、其他音響視頻器材、再到電子秤量設(shè)備,五花八門,無(wú)所不在.4.在計(jì)算機(jī)網(wǎng)絡(luò)和通信領(lǐng)域中的應(yīng)用現(xiàn)代的單片機(jī)普遍具備通信接口,可以很方便地與計(jì)算機(jī)進(jìn)行數(shù)據(jù)通信,為在計(jì)算機(jī)網(wǎng)絡(luò)和通信設(shè)備間的應(yīng)用提供了極好的物質(zhì)條件,現(xiàn)在的通信設(shè)備基本上都實(shí)現(xiàn)了單片機(jī)智能
6、控制,從手機(jī),電話機(jī)、小型程控交換機(jī)、樓宇自動(dòng)通信呼叫系統(tǒng)、列車無(wú)線通信、再到日常工作中隨處可見的移動(dòng)電話,集群移動(dòng)通信,無(wú)線電對(duì)講機(jī)等.5.單片機(jī)在醫(yī)用設(shè)備領(lǐng)域中的應(yīng)用單片機(jī)在醫(yī)用設(shè)備中的用途亦相當(dāng)廣泛,例如醫(yī)用呼吸機(jī),各種分析儀,監(jiān)護(hù)儀,超聲診斷設(shè)備及病床呼叫系統(tǒng)等等.此外,單片機(jī)在工商,金融,科研、教育,國(guó)防航空航天等領(lǐng)域都有著十分廣泛的用途.。接下來(lái)就讓我們從C語(yǔ)言編程開始,一步一步學(xué)習(xí)單片機(jī),相信有一天,大家能利用單片機(jī)做出自己獨(dú)具特色的作品來(lái)。第二節(jié)C語(yǔ)言基本知識(shí)位運(yùn)算是對(duì)二進(jìn)制數(shù)據(jù)以位為單位(bit)進(jìn)行的運(yùn)算。C語(yǔ)言提供了六種位運(yùn)算符。參加運(yùn)算的操作數(shù)可以是char類型、int
7、類型和long類型的變量或常量。實(shí)型是不能進(jìn)行位運(yùn)算的。一、基本運(yùn)算符位運(yùn)算符及其功能優(yōu)先級(jí)如表一:表一:運(yùn)算符名稱優(yōu)先級(jí)按位取反1(高)右移2&按位與3按位異或4|按位或5(低)1、按位取反():它的運(yùn)算功能是對(duì)一個(gè)二進(jìn)制數(shù)按位取反,即使每一位上的0變1,1變0。例:101101=0100102、左移位():它的運(yùn)算功能是將一個(gè)二進(jìn)制數(shù)的各位全部左移若干位,超過該數(shù)范圍的高端舍去,低端補(bǔ)零。例:11101101)它的運(yùn)算功能是將一個(gè)二進(jìn)制數(shù)的各位全部右移若干位。右端低位移出部分舍去,高位部分補(bǔ)零。例:111011012=00111011注意:對(duì)無(wú)符號(hào)數(shù),右移時(shí)左邊高位移入0;對(duì)于有符號(hào)的值,
8、如果原來(lái)符號(hào)位為0(該數(shù)為正),則左邊也是移入0。如果符號(hào)位原來(lái)為1(即負(fù)數(shù)),則左邊移入0還是1,要取決于用的計(jì)算機(jī)系統(tǒng)。有的系統(tǒng)移入0,有的系統(tǒng)移入1。移入0的稱為“邏輯右移”,即簡(jiǎn)單右移;移入1的稱為“算術(shù)右移”。例如:a:1001011111101101(用二進(jìn)制形式表示)a1:0100101111110110(邏輯右移時(shí))a1:1100101111110110(算術(shù)右移時(shí))不過,我們?cè)趩纹瑱C(jī)編程時(shí),一般將變量都設(shè)置為無(wú)符號(hào)型的變量,如果大家在以后的編程過程中用到有符號(hào)型的變量,就要注意這一點(diǎn)。4、按位與(&)它的功能是將運(yùn)算符兩邊的數(shù),按照二進(jìn)制位進(jìn)行與運(yùn)算,如果兩個(gè)對(duì)應(yīng)的運(yùn)算位都是
9、1,則結(jié)果位為1,否則為0。例:101101&0010100010005、按位異或()它的功能是將運(yùn)算符兩邊的數(shù),按照二進(jìn)制位進(jìn)行異或運(yùn)算,如果兩個(gè)對(duì)應(yīng)的運(yùn)算位的數(shù)不同,則該位結(jié)果為1,否則結(jié)果為0。例:10110100111111111010010116、按位或(|)它的功能是將運(yùn)算符兩邊的數(shù),按照二進(jìn)制位進(jìn)行或運(yùn)算,如果兩個(gè)對(duì)應(yīng)的運(yùn)算位都是0,則結(jié)果位為0,否則為1。例:101101|001010101111二、位自反賦值運(yùn)算符位自反賦值運(yùn)算符與賦值運(yùn)算符和算術(shù)自反運(yùn)算符是同級(jí)的,只高于逗號(hào)運(yùn)算符,低于所有其他運(yùn)算符。其結(jié)合性是自右向左。位自反賦值運(yùn)算符共有五個(gè),其運(yùn)算符及作用如表二:表二
10、:符號(hào)名稱用途&=位與賦值a&=b等價(jià)于a=a&b|=位或賦值a|=b等價(jià)于a=a|b=位按位加賦值a=b等價(jià)于a=ab=位左移賦值a=b等價(jià)于a=a=位右移賦值a=b等價(jià)于a=abC語(yǔ)言的位運(yùn)算的基本功能就給大家介紹到這里,位運(yùn)算在對(duì)單片機(jī)的操作中起著舉足輕重的作用,位運(yùn)算還能實(shí)現(xiàn)許多特殊的功能如:保留原值(與相);)不用臨時(shí)變量來(lái)交換兩個(gè)值(可通過語(yǔ)句:(ab;ba;ab)來(lái)實(shí)現(xiàn)),大家可以自己查資料學(xué)習(xí),這里就不給大家多作介紹了。三、二進(jìn)制與十六進(jìn)制的轉(zhuǎn)換十六進(jìn)制與二進(jìn)制基本相同,二進(jìn)制用“0和1”來(lái)表示,十六進(jìn)制的表示形式為0Xmn:其中X可小寫,在具體表示時(shí),mn用“09”以及“AF
11、”來(lái)替換。將一個(gè)二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)的具體步驟如下:1、取四合一,向左每四位二進(jìn)制取成一位,如果向左取四位后,取到最高位時(shí)候,如果無(wú)法湊足四位,可以在最左邊,即整數(shù)的最高位添0,湊足四位。2、接著將這四位二進(jìn)制按權(quán)相加,相加后結(jié)果如果是“1015”就依次用“AF”表示,如果相加結(jié)果是“09”,就用原數(shù)表示。3、按順序進(jìn)行排列,得到的數(shù)字就是我們所求的十六進(jìn)制數(shù)。例:將二進(jìn)制110101轉(zhuǎn)換為十六進(jìn)制的過程如下:110113用D(d)表示;110不足四位,添零01106;最終結(jié)果:0 x6d(0X6D或0X6d或0 x6D)由于在用C語(yǔ)言編寫C語(yǔ)言程序時(shí)不涉及到小數(shù),所以這里不多作介紹,大家
12、有興趣可以自己查資料學(xué)習(xí)。第三節(jié)STC12C5410性能介紹STC12C5410系列單片機(jī)是由宏晶科技生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的兼容8051內(nèi)核單片機(jī),是高速/低功耗的新一代8051單片機(jī),全新的流水線/精簡(jiǎn)指令集結(jié)構(gòu),內(nèi)部集成MAX810專用復(fù)位電路。其主要性能特點(diǎn)如下:1增強(qiáng)型1T流水線/精簡(jiǎn)指令集結(jié)構(gòu)8051CPU。2工作電壓:5.5V3.4V(5V單片機(jī))/3.8V2.0V(3V單片機(jī))。3工作頻率范圍:035MHz,相當(dāng)于普通8051的0420MHz。4用戶應(yīng)用程序空間12K/10K/8K/6K/4K/2K字節(jié)。5片上集成512字節(jié)RAM。6通過I/O口(27/23個(gè)),復(fù)位后
13、為:準(zhǔn)雙向口/弱上拉(普通8051傳統(tǒng)I/O口)可設(shè)置成四種模式:準(zhǔn)雙向口/弱上拉,推挽/強(qiáng)上拉,僅為輸入/高阻,開漏。7ISP(在系統(tǒng)可編程)/ASP(在應(yīng)用可編程),無(wú)需專用編程器可通過串口(P3.0/P3.1)直接下載用戶程序,數(shù)秒即可完成一片。8EPROM功能。9看門狗。10內(nèi)部集成MAX810專用復(fù)位電路(外部晶振20M以下時(shí),可省外部復(fù)位電路)。11時(shí)鐘源:外部高精度晶體/時(shí)鐘,內(nèi)部R/C振蕩器用戶在下載用戶程序時(shí),可選擇是使用內(nèi)部R/C振蕩器還是外部晶體/時(shí)鐘常溫下內(nèi)部R/C振蕩器頻率為:5.65MHz5.95MHz精度不高時(shí),可選擇使用內(nèi)部時(shí)鐘,但因?yàn)橛袦仄?,?yīng)認(rèn)為是5MHz6
14、.5MHz。12共2個(gè)16位定時(shí)器/計(jì)數(shù)器。13PWM(4位)/PCA(可編程計(jì)數(shù)器陣列),也可用來(lái)在實(shí)現(xiàn)4個(gè)定時(shí)器。14ADC,10位精度ADC,共8路。15通用異步串行口(UART)。16SPI同步通信口,主模式/從模式。17工作溫度范圍:075/-40+85。18封裝:PDIP28,SOP28,PDIP20,SOP20,TSSOP20,PLCC32STC12C5410AD單片機(jī)中包含中央處理器、程序存儲(chǔ)器(Flash)、數(shù)據(jù)存儲(chǔ)器(RAM)、EEPROM、定時(shí)/計(jì)數(shù)器、I/O接口、UART接口和中斷系統(tǒng)、SPI接口、高速A/D轉(zhuǎn)換模塊、PWM(或捕捉/比較單元)以及硬件看門狗、電源監(jiān)控、
15、片內(nèi)RC振蕩器等模塊??梢哉f(shuō)STC12C5410AD單片機(jī)幾乎包含了數(shù)據(jù)采集和控制中所需的所有單元模塊,可稱得上一個(gè)片上系統(tǒng)(SOC),可以很容易地構(gòu)成典型的測(cè)控系統(tǒng)。STC12C5410引腳圖第四節(jié)Keil軟件的使用方法KeilC51軟件是眾多單片機(jī)應(yīng)用開發(fā)的優(yōu)秀軟件之一,它集編輯,編譯,仿真于一體,支持匯編語(yǔ)言和C語(yǔ)言的程序設(shè)計(jì),界面友好,易學(xué)易用。以下介紹的是KeiluVision2,如果你使用的是KeiluVision3,你需要根據(jù)單片機(jī)的型號(hào),在相關(guān)設(shè)置上稍作改動(dòng)(相關(guān)的地方后面有說(shuō)明)!下面介紹KeilC51軟件的使用方法:進(jìn)入KeilC51后,屏幕如下圖所示。幾秒鐘后出現(xiàn)編輯界面
16、:進(jìn)入KeilC51后的編輯界面新建工程單擊Project菜單,在彈出的下拉菜單中選中NewProject選項(xiàng)然后選擇你要保存的路徑,輸入工程文件的名字,比如保存到D盤的CMJ51文件夾里,工程文件的名字為CMJ1如下圖所示,然后點(diǎn)擊保存.這時(shí)會(huì)彈出一個(gè)對(duì)話框,要求你選擇單片機(jī)的型號(hào),可以根據(jù)用戶使用的單片機(jī)來(lái)選擇,實(shí)驗(yàn)板上使用的是STC12C5410AD,我們?cè)趯?duì)話框中找不到這一款單片機(jī)。它是新一代的51單片機(jī),因?yàn)?1內(nèi)核單片機(jī)具有通用性,所以這里我們可以選一塊89C51就行。如下圖所示,選擇89C51之后,右邊欄是對(duì)這個(gè)單片機(jī)的基本的說(shuō)明,然后點(diǎn)擊確定.用KeiluVision3的話,根
17、據(jù)實(shí)驗(yàn)板上單片機(jī)的型號(hào),我們應(yīng)做如下選擇:(以后的操作KeiluVision3和KeiluVision2都一樣)完成上一步驟后,屏幕如下圖所示到現(xiàn)在為止,我們還沒有編寫一句程序,下面開始編寫我們的第一個(gè)程序。(2)新建文件在下圖中,單擊“File”菜單,再在下拉菜單中單擊“New”選項(xiàng)新建文件后屏幕如下圖所示此時(shí)光標(biāo)在編輯窗口里閃爍,這時(shí)可以鍵入用戶的應(yīng)用程序了。鍵入程序后界面如下:?jiǎn)螕鬴ile菜單下的save,出現(xiàn)一個(gè)對(duì)話框,鍵入文件名,后綴名為.c(用C語(yǔ)言編程時(shí)用)或asm(用匯編語(yǔ)言編程時(shí)用)或.h(自己建立庫(kù)文件時(shí)用),進(jìn)行保存到D盤CMJ51文件夾下,界面如下:點(diǎn)擊保存即可,出現(xiàn)如
18、下界面。添加文件回到編輯界面后,單擊“Target1”前面的“”號(hào),然后在“SourceGroup1”上單擊右鍵,彈出如下菜單然后單擊“AddFiletoGroupSourceGroup1”屏幕如下圖所示選中cmj1.asm,然后單擊“Add”屏幕好下圖所示:(如果用C語(yǔ)言編程,選中“.c”文件即可。(4)匯編連接(C語(yǔ)言編程也一樣)單擊如下圖所示的圖標(biāo)(rebuiltalltargetfiles)出現(xiàn)如下界面:(5)運(yùn)行看結(jié)果單擊如下圖的圖標(biāo)(start/stopdebugsession),進(jìn)入運(yùn)行狀態(tài)出現(xiàn)如下界面:?jiǎn)螕粢淮蜗聢D的圖標(biāo)(stepinto),程序就能運(yùn)行一條,一直到程序的結(jié)束(
19、ret)。運(yùn)行結(jié)束后,直接可以在如下界面中看結(jié)果。特殊功能寄存器中的內(nèi)容可以在界面中直接看到,存儲(chǔ)單元的內(nèi)容在memory#1中輸入如上圖所示的地址,即可看到該單元的內(nèi)容為66H。下面進(jìn)行工程配置。點(diǎn)擊Project菜單下的OptionsforTargetTarget1。在彈出對(duì)話框的Target項(xiàng)里輸入晶振為12M,然后勾上UseOn-chipROM。在Output項(xiàng)里勾上CreateHEXFile。這就是產(chǎn)生要燒寫的.hex文件。然后點(diǎn)擊Project菜單里的buildtarget或Rebuildalltargetfiles以編譯要燒寫的.hex文件。編譯完成后,會(huì)在下面OutputWin
20、dow里顯示編譯成功與否的信息和錯(cuò)誤提示。Keil軟件的使用就介紹到這里,大家可以通過下一節(jié)流水燈的實(shí)驗(yàn)來(lái)熟悉對(duì)該軟件的使用。第五節(jié)流水燈的控制1、怎樣點(diǎn)亮一個(gè)發(fā)光二極管點(diǎn)亮放光二極管的程序如下:#include/52系列單片機(jī)頭文件sbitled=P10;/聲明單片機(jī)P1口的第一位voidmain()/主函數(shù)led=0;/點(diǎn)亮第一個(gè)發(fā)光二極管從上面的程序大家可以看到:點(diǎn)亮第一個(gè)發(fā)光二極管,就是通過控制單片機(jī)的P1.0口,讓其輸出低電平,這樣就在單片機(jī)的P1.0口、發(fā)光二極管、電源之間形成回路,從而點(diǎn)亮發(fā)光二極管。由于是對(duì)單片機(jī)的P1口的第一位進(jìn)行操作,為了書寫和理解的方便,我們將P1口的第一
21、位定義為led,實(shí)際上也可省掉這一步,直接用程序進(jìn)行位操作,如:#include/52系列單片機(jī)頭文件voidmain()/主函數(shù)P10=0;/讓單片機(jī)在P1.0口輸出低電平,/從而點(diǎn)亮第一個(gè)發(fā)光二極管2、流水燈的控制相必大家對(duì)單片機(jī)的位操作已經(jīng)有了一定的了解,接下來(lái)就讓我們一起來(lái)學(xué)習(xí)對(duì)多個(gè)發(fā)光二極管的控制,制作出一串串閃亮的流水燈。首先向大家介紹一下51單片機(jī)里常用的函數(shù)循環(huán)左移與循環(huán)右移函數(shù):大家可以打開Keil軟件安裝文件夾,定位到KeilC51HLP文件夾,打開此文件夾下的C51lib,這是C51自帶庫(kù)函數(shù)幫助文件。在索引欄找到_crol_函數(shù),雙擊打開它介紹,如下:_crol_#in
22、cludeunsignedchar_crol_(unsignedcharc,/*charactertorotateleft*/unsignedcharb);/*bitpositionstorotate*/Description:The_crol_routinerotatesthebitpatternforthecharactercleftbbits.Thisroutineisimplementedasanintrinsicfunction.Thecoderequiredisincludedin-lineratherthanbeingcalled.ReturnValue:The_crol_rou
23、tinereturnstherotatedvalueofc.Attributes:reentrant,intrinsicSeeAlso:HYPERLINKmk:MSITStore:E:keilC51HLPC51lib.chm:/htm/.cror.htm_cror_,HYPERLINKmk:MSITStore:E:keilC51HLPC51lib.chm:/htm/.irol.htm_irol_,HYPERLINKmk:MSITStore:E:keilC51HLPC51lib.chm:/htm/.iror.htm_iror_,HYPERLINKmk:MSITStore:E:keilC51HLP
24、C51lib.chm:/htm/.lrol.htm_lrol_,HYPERLINKmk:MSITStore:E:keilC51HLPC51lib.chm:/htm/.lror.htm_lror_Example#includevoidtst_crol(void)chara;charb;a=0 xA5;b=_crol_(a,3);/*bnowis0 x2D*/它是一個(gè)循環(huán)左移函數(shù),使用格式如:_crol_(a,b),其中a是被循環(huán)左移的數(shù),b是循環(huán)左移的位數(shù)。例如:#include/使用_crol_時(shí)需包含的頭文件#include/52系列單片機(jī)頭文件voidmain()unsignedinta=
25、01101111;_crol_(a,3);執(zhí)行完程序后,a=01111011。_cror_表示循環(huán)右移,其用法和_crol_類似,這里就不多作介紹了。接下來(lái)我們通過一段程序的演示來(lái)學(xué)習(xí):/*函數(shù)功能:1、依次讓第一個(gè)至第八個(gè)發(fā)光二極管點(diǎn)亮,每個(gè)發(fā)光二極管亮一秒;2、輪流亮完后,所有發(fā)光二極管都亮一秒,然后所有發(fā)光二極管都滅一秒;3、依次讓第八個(gè)至第一個(gè)發(fā)光二極管點(diǎn)亮,每個(gè)發(fā)光二極管亮一秒;4、輪流亮完后,所有發(fā)光二極管都亮一秒,然后所有發(fā)光二極管都滅一秒;5、依次循環(huán)下去*/#include/52系列單片機(jī)頭文件#include/使用_crol_、_cror_時(shí)需包含的頭文件voiddelay
26、_ms(unsignedunsignedintxms)/軟件延時(shí)函數(shù),其中xms/為參數(shù),表示延時(shí)xmsunsignedinti;for(i=110;i0;i-)for(i=xms;i0;i-);unsignedintb;/定義變量b,用來(lái)控制第幾個(gè)發(fā)光二極管亮voidmain()P1=0X00;while(1)P0=0 xfe;/11111110,第一個(gè)燈亮/因?yàn)檫M(jìn)入循環(huán)后有延時(shí),所以這里不需要延時(shí)for(b=0;b第一次循環(huán)/P0=11111101第二個(gè)燈亮delay_ms(1000);/延時(shí)1000ms=1s,讓最后一個(gè)燈燈亮1sP0=0 x00;/讓所有發(fā)光二極管都亮delay_ms(
27、1000);/延時(shí)1000ms=1s,讓所有燈亮1sP0=0 xff;/讓所有發(fā)光二極管都滅delay_ms(1000);/延時(shí)1000ms=1s,讓所有燈滅1sP0=0 x7f;/01111111,最后一個(gè)燈亮for(b=0;b第一次循環(huán)/P0=10111111,倒數(shù)第二個(gè)燈亮delay_ms(1000);/延時(shí)1000ms=1s,讓第一個(gè)燈亮1sP0=0 x00;/讓所有發(fā)光二極管都亮delay_ms(1000);/延時(shí)1000ms=1s,讓所有燈亮1sP0=0 xff;/讓所有發(fā)光二極管都滅delay_ms(1000);/延時(shí)1000ms=1s,讓所有燈滅1s除這種方法實(shí)現(xiàn)流水燈外,利用
28、左移、右移指令與邏輯運(yùn)算也能實(shí)現(xiàn)循環(huán)移動(dòng),大家只要多動(dòng)動(dòng)手,就能夠隨心所欲地控制發(fā)光二極管的閃爍。第六節(jié)數(shù)碼管的靜態(tài)顯示一、數(shù)碼管的介紹:數(shù)碼管是電路中常見的顯示原件,按段數(shù)的多少可分為七段數(shù)碼管和八段數(shù)碼管七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示);按照顯示8的個(gè)數(shù),可分為1位、2位、4位等數(shù)碼管,如下圖所示:按發(fā)光二極管單元連接方式分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。共陽(yáng)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,如下圖所示:共陽(yáng)數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極接到+5V或+3.3V,當(dāng)某一
29、字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽(yáng)極為高電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某一字段的陽(yáng)極為低電平時(shí),相應(yīng)字段就不亮。二、數(shù)碼管的顯示:任何一個(gè)7段碼管都有128種顯示模式,而其中的數(shù)字0-9是最為有用也是最常見的。通過控制共陽(yáng)極(共陰極)數(shù)碼管的陰極(陽(yáng)極),可以讓數(shù)碼管顯示不同的字符,下表是共陰數(shù)碼管的碼段:符號(hào)編碼符號(hào)編碼00 x3f80 x7f10 x0690 x6f20 x5bA0 x7730 x4fB0 x7c40 x66C0 x3950 x6dD0 x5e6
30、0 x7dE0 x7970 x07F0 x71對(duì)于多位數(shù)碼管而言,實(shí)際中為了簡(jiǎn)化電路,將所有共陰極數(shù)碼管的陽(yáng)極接到一起,所有共陽(yáng)極數(shù)碼管的陰極接到一起,用多個(gè)獨(dú)立的位選和7個(gè)(或8個(gè))公共段選控制所有的數(shù)碼管。由于所有數(shù)碼管共用段選,為了獨(dú)立顯示每位數(shù)碼管,只能用位選來(lái)區(qū)分不同的數(shù)碼管。具體來(lái)說(shuō)就是每次只將某一位數(shù)碼管的位選置為有效,其它數(shù)碼管的位選都無(wú)效。此時(shí)的段選決定了該位數(shù)碼的顯示。然后在下一個(gè)時(shí)刻,置下一位數(shù)碼管的位選有效,其它數(shù)碼管的位選都無(wú)效。依次類推,循環(huán)往復(fù)。下面用共陰的4位數(shù)碼管為例來(lái)說(shuō)明:當(dāng)位選1為低,其它位選都為高時(shí),第一位數(shù)碼管被選中,此時(shí)的共用段選用于第一位數(shù)碼管的顯
31、示;位選2為低時(shí)(其它位選都為高),第二位數(shù)碼管被選中,此時(shí)的共用段選用于第二位數(shù)碼管的顯示,三、四位數(shù)碼管的顯示依次類推。在一個(gè)刷新周期T內(nèi),每位數(shù)碼管都有1/4T周期的時(shí)間被刷新。為了保證所有4位數(shù)碼管的顯示不閃爍,一般刷新頻率要大于45Hz。在一個(gè)周期中,雖然每位數(shù)碼管會(huì)有3/4T的時(shí)間不被點(diǎn)亮,但位選刷新的速度較快,同時(shí)由于數(shù)碼管自身的余輝特性,每位數(shù)碼管在變暗之前就又會(huì)被重新刷新,因此人眼無(wú)法感覺到數(shù)碼管變暗。如果刷新的頻率小于一定值(如45Hz),則人眼就會(huì)感覺到數(shù)碼管的閃爍。一般刷新頻率在60Hz到1KHz之間時(shí),多位數(shù)碼管顯示得比較理想。在實(shí)際的電路中,我們可以分別利用單片機(jī)的
32、IO口分別控制多位數(shù)碼管的位選和段選,但是我們不這么做,因?yàn)槟菢硬坏速M(fèi)了IO口資源,而且還浪費(fèi)了寶貴的MCU時(shí)間,我們通常是利用鎖存器來(lái)對(duì)多位數(shù)碼管進(jìn)行控制。三、鎖存器:鎖存器(Latch)是一種對(duì)脈沖電平敏感的存儲(chǔ)單元電路,它們可以在特定輸入脈沖電平作用下改變狀態(tài)。鎖存,就是把當(dāng)前的狀態(tài)鎖存起來(lái),使CPU送出的數(shù)據(jù)在接口電路的輸出端保持一段時(shí)間,鎖存后狀態(tài)不再發(fā)生變化,直到解除鎖定。在LED和數(shù)碼管顯示方面,要維持一個(gè)數(shù)據(jù)的顯示,往往要持續(xù)的快速的刷新。尤其是在四段八位數(shù)碼管等這些要選通的顯示設(shè)備上。在人眼能夠接受的刷新頻率之內(nèi),大概每三十毫秒就要刷新一次。這就大大占用了處理器的處理時(shí)間,
33、消耗了處理器的處理能力,還浪費(fèi)了處理器的功耗。鎖存器的使用可以大大的緩解處理器在這方面的壓力。當(dāng)處理器把數(shù)據(jù)傳輸?shù)芥i存器并將其鎖存后,鎖存器的輸出引腳便會(huì)一直保持?jǐn)?shù)據(jù)狀態(tài)直到下一次鎖存新的數(shù)據(jù)為止。這樣在數(shù)碼管的顯示內(nèi)容不變之前,處理器的處理時(shí)間和IO引腳便可以釋放??梢钥闯?,處理器處理的時(shí)間僅限于顯示內(nèi)容發(fā)生變化的時(shí)候,這在整個(gè)顯示時(shí)間上只是非常少的一個(gè)部分。而處理器在處理完后可以有更多的時(shí)間來(lái)執(zhí)行其他的任務(wù)。這就是鎖存器在LED和數(shù)碼管顯示方面的作用:節(jié)省了寶貴的MCU時(shí)間。下面為大家介紹常用的鎖存器:74HC573和74LS595(一)、74HC573:74HC573是高性能硅門CMOS
34、器件,當(dāng)鎖存使能端為高時(shí),輸入與輸出同步。當(dāng)鎖存使能變低時(shí),符合建立時(shí)間和保持時(shí)間的數(shù)據(jù)會(huì)被鎖存。74HC573的特點(diǎn)如下:輸出能直接接到CMOS,NMOS和TTL接口上;操作電壓范圍:2.0V6.0V;低輸入電流:1.0uA;CMOS器件的高噪聲抵抗特性。其引腳圖如下:其功能表如下:(H代表高電平,L代表低電平,X代表任意電平,Z代表高阻態(tài))輸入輸入輸入輸出OELEDQHXXZLLX不變LHLLLHHH從表中可以看出:給芯片的OE端輸入低電平時(shí),芯片才能工作。當(dāng)OE端為低電平,LE端為低電平時(shí),鎖存器處于鎖存狀態(tài);當(dāng)OE端為低電平,LE端為高電平時(shí),鎖存器處于導(dǎo)通狀態(tài),輸入與輸出同步。(二)
35、、74LS595(8位輸出鎖存移位寄存器):74HC595的引腳圖如下:1、74595的數(shù)據(jù)端:Q1Q7:八位并行輸出端,可以直接控制數(shù)碼管的8個(gè)段。SDI:串行數(shù)據(jù)輸入端。2、74595的控制端:SCLR(10腳):低電平時(shí)將位移緩存器的數(shù)據(jù)清零。SCK(11腳):上升沿時(shí),數(shù)據(jù)輸入八位位移緩存器;下降沿位移緩存器數(shù)據(jù)不變。LCK(12腳):上升沿時(shí)八位平行緩存器會(huì)擷取八位位移緩存器上的數(shù)據(jù)也就是說(shuō):595輸出b3、具體控制595的操作步驟:對(duì)Q1-Q2-Q3-.-Q7上的數(shù)據(jù)進(jìn)行一次更改時(shí):(1)、將要更改成的數(shù)據(jù)一位一位地從SDI輸入(具體怎樣操作,見下面的程序),每次對(duì)74LS595寫
36、入一位數(shù)據(jù)的時(shí)候,要給SCK一個(gè)上升沿,這樣從SDI輸入的數(shù)據(jù)才能臨時(shí)地被存儲(chǔ)起來(lái)(存儲(chǔ)在八位位移緩存器中);(2)、重復(fù)上述操作,直到數(shù)據(jù)一位一位地被寫入完畢;(3)、然后給LCK一個(gè)上升沿,將存儲(chǔ)在位移緩存器中的數(shù)據(jù)傳送給平行緩存器,即:Q1-Q2-Q3-.-Q7上輸出新數(shù)據(jù);(4)、然后將LCK置低,鎖存Q1-Q2-Q3-.-Q7上的數(shù)據(jù),如果要連續(xù)改動(dòng)Q,1-Q2-Q3-.-Q7上的數(shù)據(jù),重復(fù)上述操作就行。G(13腳):高電平時(shí)禁止輸出(高阻態(tài))。如果單片機(jī)的引腳不緊張,用一個(gè)引腳控制它,可以方便地產(chǎn)生閃爍和熄滅效果。比通過數(shù)據(jù)端移位控制要省時(shí)省力。74595的主要優(yōu)點(diǎn)是具有數(shù)據(jù)存儲(chǔ)寄
37、存器,在移位的過程中,輸出端的數(shù)據(jù)可以保持不變。這在串行速度慢的場(chǎng)合很有用處。接下來(lái)就讓我們通過編程來(lái)進(jìn)一步學(xué)習(xí)數(shù)碼管與鎖存器:/函數(shù)功能:從0F,每秒顯示一個(gè)數(shù)#include/包涵頭文件sbitLCK=P34;/上升沿時(shí)八位平行緩存器會(huì)擷取八位位移緩/存器上的數(shù)據(jù)sbitSCK=P35;/上升沿時(shí),數(shù)據(jù)輸入八位位移緩存器sbitSDI=P33;/數(shù)據(jù)輸入端unsignedcharm;constunsignedcharCode=/數(shù)碼管顯示碼段0 x3F,/00 x06,/10 x5B,/20 x4F,/30 x66,/40 x6D,/50 x7D,/60 x07,/70 x7F,/80 x
38、6F,/90 x77,/A0 x7C,/B0 x39,/C0 x5E,/D0 x79,/E0 x71/F;voiddelay1(unsignedinta)/延時(shí)函數(shù)1unsignedinti;for(i=a;i0;i-);voiddelay2(unsignedintc)/延時(shí)函數(shù)2,延時(shí)c毫秒unsignedinti,j;for(i=330;i0;i-)for(j=c;j0;j-);voidwrite(unsignedcharb)/數(shù)碼管顯示函數(shù)unsignedcharj;for(j=0;j8;j+)SCK=0;/與后面SCK=1搭配,表示給SCK上升沿作用/是:將數(shù)據(jù)輸入八位位移緩存器,因?yàn)?/p>
39、數(shù)據(jù)只/能一位一位地輸入,所以后面用if和else語(yǔ)句if(0 x80&b)/b&10000000,相當(dāng)于取b的最高位SDI=1;/當(dāng)最高位為1時(shí),SDI為1,表示輸入為1elseSDI=0;/當(dāng)最低位為0時(shí),SDI為0,表示輸入為0/if與else連用,保證了b能夠一位一位地發(fā)/送進(jìn)入595,并儲(chǔ)存在平行緩存器中delay1(100);/需保證低電平的時(shí)間,否則595無(wú)法正常工作SCK=1;/與前面SCK=0搭配,表示給SCK上升沿b=1;/b左移一位LCK=0;/上升沿時(shí)八位平行緩存器會(huì)擷取八位LCK=1;/位移緩存器上的數(shù)據(jù)也就是說(shuō):595輸出bLCK=0;/鎖存輸出的數(shù)據(jù)voidmai
40、n()P1M0=0;/設(shè)置P1和P3為強(qiáng)推挽輸出(大功率輸出),P1M1=0 xff;/必須設(shè)置,否則一次無(wú)法驅(qū)動(dòng)多個(gè)數(shù)碼管P3M0=0;P3M1=0 xff;while(1)/顯示函數(shù)for(m=0;m=15;m+)/循環(huán)顯示P1=0 xff;write(Codem);/數(shù)碼管顯示數(shù)組Code中的第m+1個(gè)數(shù)delay2(1000);/延時(shí)1000毫秒因?yàn)樯厦媸菍?duì)三個(gè)數(shù)碼管同時(shí)進(jìn)行掃描,即:三個(gè)數(shù)碼管同時(shí)被點(diǎn)亮,也同時(shí)被熄滅。所以,上面點(diǎn)亮數(shù)碼管的方式是靜態(tài)掃描。下面為大家介紹另外一種點(diǎn)亮數(shù)碼管的方式:動(dòng)態(tài)掃描。程序如下:/函數(shù)功能:從左往右,3個(gè)數(shù)碼管一起,依次/顯示012、123、.dE
41、F、dFF、FFF。#include/包涵頭文件sbitLCK=P34;/上升沿時(shí)八位平行緩存器會(huì)擷取八位位移緩/存器上的數(shù)據(jù)sbitSCK=P35;/上升沿時(shí),數(shù)據(jù)輸入八位位移緩存器sbitSDI=P33;/數(shù)據(jù)輸入端unsignedcharm;constunsignedcharCode=/數(shù)碼管顯示碼段0 x3F,/00 x06,/10 x5B,/20 x4F,/30 x66,/40 x6D,/50 x7D,/60 x07,/70 x7F,/80 x6F,/90 x77,/A0 x7C,/B0 x39,/C0 x5E,/D0 x79,/E0 x71/F;voiddelay1(unsignedinta)/延時(shí)函數(shù)1unsignedinti;for(i=a;i0;i-);voiddelay2(unsignedintc)/延時(shí)函數(shù)2,延時(shí)c毫秒unsignedinti,j;for(i=330;i0;i-)for(j=c;j0;j-);voidwrit
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于伐木合同范例
- 商洛學(xué)院《場(chǎng)論與復(fù)變函數(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣告物料承包合同范例
- 陜西職業(yè)技術(shù)學(xué)院《微電影創(chuàng)作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024至2030年調(diào)經(jīng)活血片項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年臘鱸魚干項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年桂林米粉項(xiàng)目投資價(jià)值分析報(bào)告
- 地基強(qiáng)夯施工方案
- 陜西藝術(shù)職業(yè)學(xué)院《機(jī)電一體化技術(shù)及傳動(dòng)控制》2023-2024學(xué)年第一學(xué)期期末試卷
- 聘用廚師勞務(wù)合同范例
- 入團(tuán)志愿書(2016版本)(可編輯打印標(biāo)準(zhǔn)A4) (1)
- 施工總承包單位資格報(bào)審表(共2頁(yè))
- 各國(guó)材料對(duì)照表
- 小升初個(gè)人簡(jiǎn)歷表
- 政府采購(gòu)驗(yàn)收?qǐng)?bào)告表
- 混凝土電纜溝典型施工及方法x
- 腦梗死標(biāo)準(zhǔn)病歷、病程記錄、出院記錄文本
- 星巴克案例分析
- 挖金灣礦梯子間及管路安裝措施要點(diǎn)
- 工業(yè)區(qū)位和區(qū)位因素的變化(以首鋼為例)
- 電大管理英語(yǔ)2單元自測(cè)6答案
評(píng)論
0/150
提交評(píng)論