C語言基礎知識Keil軟件的使用流水燈數碼管74HC5774HC595介紹教學文案_第1頁
C語言基礎知識Keil軟件的使用流水燈數碼管74HC5774HC595介紹教學文案_第2頁
C語言基礎知識Keil軟件的使用流水燈數碼管74HC5774HC595介紹教學文案_第3頁
C語言基礎知識Keil軟件的使用流水燈數碼管74HC5774HC595介紹教學文案_第4頁
C語言基礎知識Keil軟件的使用流水燈數碼管74HC5774HC595介紹教學文案_第5頁
已閱讀5頁,還剩56頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Good is good, but better carries it.精益求精,善益求善。C語言基礎知識,Keil軟件的使用,流水燈數碼管74HC5774HC595介紹-第一節單片機的用途單片機是一種集成電路芯片,采用超大規模技術把具有數據處理能力(如算術運算,邏輯運算、數據傳送、中斷處理)的微處理器(CPU),隨機存取數據存儲器(RAM),只讀程序存儲器(ROM),輸入輸出電路(I/O口),可能還包括定時計數器,串行通信口(SCI),顯示驅動電路(LCD或LED驅動電路),脈寬調制電路(PWM),模擬多路轉換器及A/D轉換器等電路集成到一塊單塊芯片上,構成一個最小然而完善的計算機系統.這些

2、電路能在軟件的控制下準確、迅速、高效地完成程序設計者事先規定的任務.單片機也被稱為微控制器(Microcontroler),是因為它最早被用在工業控制領域。單片機由芯片內僅有CPU的專用處理器發展而來。最早的設計理念是通過將大量外圍設備和CPU集成在一個芯片中,使計算機系統更小,更容易集成進復雜的而對提及要求嚴格的控制設備當中。INTEL的Z80是最早按照這種思想設計出的處理器,從此以后,單片機和專用處理器的發展便分道揚鑣。早期的單片機都是8位或4位的。其中最成功的是INTEL的8031,因為簡單可靠而性能不錯獲得了很大的好評。此后在8031上發展出了MCS51系列單片機系統。基于這一系統的單

3、片機系統直到現在還在廣泛使用。隨著工業控制領域要求的提高,開始出現了16位單片機,但因為性價比不理想并未得到很廣泛的應用。90年代后隨著消費電子產品大發展,單片機技術得到了巨大的提高。隨著INTELi960系列特別是后來的ARM系列的廣泛應用,32位單片機迅速取代16位單片機的高端地位,并且進入主流市場。而傳統的8位單片機的性能也得到了飛速提高,處理能力比起80年代提高了數百倍。目前,高端的32位單片機主頻已經超過300MHz,性能直追90年代中期的專用處理器,而普通的型號出廠價格跌落至1美元,最高端的型號也只有10美元。當代單片機系統已經不再只在裸機環境下開發和使用,大量專用的嵌入式操作系統

4、被廣泛應用在全系列的單片機上。而在作為掌上電腦和手機核心處理的高端單片機甚至可以直接使用專用的Windows和Linux操作系統。單片機由于其不斷完善的性能和其低廉的價格,收到了大家的擁戴,使其在儀器儀表、家用電器、醫用設備、航空航天、專用設備的智能化管理及過程控制等領域都發揮著不可替代的作用:1.在智能儀器儀表上的應用單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優點,廣泛應用于儀器儀表中,結合不同類型的傳感器,可實現諸如電壓、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量.采用單片機控制使得儀器儀表數字化、智能化、微型化,且功能比起

5、采用電子或數字電路更加強大.例如精密的測量設備(功率計,示波器,各種分析儀).2.在工業控制中的應用用單片機可以構成形式多樣的控制系統、數據采集系統.例如工廠流水線的智能化管理,電梯智能化控制、各種報警系統,與計算機聯網構成二級控制系統等.3.在家用電器中的應用可以這樣說,現在的家用電器基本上都采用了單片機控制,從電飯褒、洗衣機、電冰箱、空調機、彩電、其他音響視頻器材、再到電子秤量設備,五花八門,無所不在.4.在計算機網絡和通信領域中的應用現代的單片機普遍具備通信接口,可以很方便地與計算機進行數據通信,為在計算機網絡和通信設備間的應用提供了極好的物質條件,現在的通信設備基本上都實現了單片機智能

6、控制,從手機,電話機、小型程控交換機、樓宇自動通信呼叫系統、列車無線通信、再到日常工作中隨處可見的移動電話,集群移動通信,無線電對講機等.5.單片機在醫用設備領域中的應用單片機在醫用設備中的用途亦相當廣泛,例如醫用呼吸機,各種分析儀,監護儀,超聲診斷設備及病床呼叫系統等等.此外,單片機在工商,金融,科研、教育,國防航空航天等領域都有著十分廣泛的用途.。接下來就讓我們從C語言編程開始,一步一步學習單片機,相信有一天,大家能利用單片機做出自己獨具特色的作品來。第二節C語言基本知識位運算是對二進制數據以位為單位(bit)進行的運算。C語言提供了六種位運算符。參加運算的操作數可以是char類型、int

7、類型和long類型的變量或常量。實型是不能進行位運算的。一、基本運算符位運算符及其功能優先級如表一:表一:運算符名稱優先級按位取反1(高)右移2&按位與3按位異或4|按位或5(低)1、按位取反():它的運算功能是對一個二進制數按位取反,即使每一位上的0變1,1變0。例:101101=0100102、左移位():它的運算功能是將一個二進制數的各位全部左移若干位,超過該數范圍的高端舍去,低端補零。例:11101101)它的運算功能是將一個二進制數的各位全部右移若干位。右端低位移出部分舍去,高位部分補零。例:111011012=00111011注意:對無符號數,右移時左邊高位移入0;對于有符號的值,

8、如果原來符號位為0(該數為正),則左邊也是移入0。如果符號位原來為1(即負數),則左邊移入0還是1,要取決于用的計算機系統。有的系統移入0,有的系統移入1。移入0的稱為“邏輯右移”,即簡單右移;移入1的稱為“算術右移”。例如:a:1001011111101101(用二進制形式表示)a1:0100101111110110(邏輯右移時)a1:1100101111110110(算術右移時)不過,我們在單片機編程時,一般將變量都設置為無符號型的變量,如果大家在以后的編程過程中用到有符號型的變量,就要注意這一點。4、按位與(&)它的功能是將運算符兩邊的數,按照二進制位進行與運算,如果兩個對應的運算位都是

9、1,則結果位為1,否則為0。例:101101&0010100010005、按位異或()它的功能是將運算符兩邊的數,按照二進制位進行異或運算,如果兩個對應的運算位的數不同,則該位結果為1,否則結果為0。例:10110100111111111010010116、按位或(|)它的功能是將運算符兩邊的數,按照二進制位進行或運算,如果兩個對應的運算位都是0,則結果位為0,否則為1。例:101101|001010101111二、位自反賦值運算符位自反賦值運算符與賦值運算符和算術自反運算符是同級的,只高于逗號運算符,低于所有其他運算符。其結合性是自右向左。位自反賦值運算符共有五個,其運算符及作用如表二:表二

10、:符號名稱用途&=位與賦值a&=b等價于a=a&b|=位或賦值a|=b等價于a=a|b=位按位加賦值a=b等價于a=ab=位左移賦值a=b等價于a=a=位右移賦值a=b等價于a=abC語言的位運算的基本功能就給大家介紹到這里,位運算在對單片機的操作中起著舉足輕重的作用,位運算還能實現許多特殊的功能如:保留原值(與相);)不用臨時變量來交換兩個值(可通過語句:(ab;ba;ab)來實現),大家可以自己查資料學習,這里就不給大家多作介紹了。三、二進制與十六進制的轉換十六進制與二進制基本相同,二進制用“0和1”來表示,十六進制的表示形式為0Xmn:其中X可小寫,在具體表示時,mn用“09”以及“AF

11、”來替換。將一個二進制數轉換為十六進制數的具體步驟如下:1、取四合一,向左每四位二進制取成一位,如果向左取四位后,取到最高位時候,如果無法湊足四位,可以在最左邊,即整數的最高位添0,湊足四位。2、接著將這四位二進制按權相加,相加后結果如果是“1015”就依次用“AF”表示,如果相加結果是“09”,就用原數表示。3、按順序進行排列,得到的數字就是我們所求的十六進制數。例:將二進制110101轉換為十六進制的過程如下:110113用D(d)表示;110不足四位,添零01106;最終結果:0 x6d(0X6D或0X6d或0 x6D)由于在用C語言編寫C語言程序時不涉及到小數,所以這里不多作介紹,大家

12、有興趣可以自己查資料學習。第三節STC12C5410性能介紹STC12C5410系列單片機是由宏晶科技生產的單時鐘/機器周期(1T)的兼容8051內核單片機,是高速/低功耗的新一代8051單片機,全新的流水線/精簡指令集結構,內部集成MAX810專用復位電路。其主要性能特點如下:1增強型1T流水線/精簡指令集結構8051CPU。2工作電壓:5.5V3.4V(5V單片機)/3.8V2.0V(3V單片機)。3工作頻率范圍:035MHz,相當于普通8051的0420MHz。4用戶應用程序空間12K/10K/8K/6K/4K/2K字節。5片上集成512字節RAM。6通過I/O口(27/23個),復位后

13、為:準雙向口/弱上拉(普通8051傳統I/O口)可設置成四種模式:準雙向口/弱上拉,推挽/強上拉,僅為輸入/高阻,開漏。7ISP(在系統可編程)/ASP(在應用可編程),無需專用編程器可通過串口(P3.0/P3.1)直接下載用戶程序,數秒即可完成一片。8EPROM功能。9看門狗。10內部集成MAX810專用復位電路(外部晶振20M以下時,可省外部復位電路)。11時鐘源:外部高精度晶體/時鐘,內部R/C振蕩器用戶在下載用戶程序時,可選擇是使用內部R/C振蕩器還是外部晶體/時鐘常溫下內部R/C振蕩器頻率為:5.65MHz5.95MHz精度不高時,可選擇使用內部時鐘,但因為有溫漂,應認為是5MHz6

14、.5MHz。12共2個16位定時器/計數器。13PWM(4位)/PCA(可編程計數器陣列),也可用來在實現4個定時器。14ADC,10位精度ADC,共8路。15通用異步串行口(UART)。16SPI同步通信口,主模式/從模式。17工作溫度范圍:075/-40+85。18封裝:PDIP28,SOP28,PDIP20,SOP20,TSSOP20,PLCC32STC12C5410AD單片機中包含中央處理器、程序存儲器(Flash)、數據存儲器(RAM)、EEPROM、定時/計數器、I/O接口、UART接口和中斷系統、SPI接口、高速A/D轉換模塊、PWM(或捕捉/比較單元)以及硬件看門狗、電源監控、

15、片內RC振蕩器等模塊。可以說STC12C5410AD單片機幾乎包含了數據采集和控制中所需的所有單元模塊,可稱得上一個片上系統(SOC),可以很容易地構成典型的測控系統。STC12C5410引腳圖第四節Keil軟件的使用方法KeilC51軟件是眾多單片機應用開發的優秀軟件之一,它集編輯,編譯,仿真于一體,支持匯編語言和C語言的程序設計,界面友好,易學易用。以下介紹的是KeiluVision2,如果你使用的是KeiluVision3,你需要根據單片機的型號,在相關設置上稍作改動(相關的地方后面有說明)!下面介紹KeilC51軟件的使用方法:進入KeilC51后,屏幕如下圖所示。幾秒鐘后出現編輯界面

16、:進入KeilC51后的編輯界面新建工程單擊Project菜單,在彈出的下拉菜單中選中NewProject選項然后選擇你要保存的路徑,輸入工程文件的名字,比如保存到D盤的CMJ51文件夾里,工程文件的名字為CMJ1如下圖所示,然后點擊保存.這時會彈出一個對話框,要求你選擇單片機的型號,可以根據用戶使用的單片機來選擇,實驗板上使用的是STC12C5410AD,我們在對話框中找不到這一款單片機。它是新一代的51單片機,因為51內核單片機具有通用性,所以這里我們可以選一塊89C51就行。如下圖所示,選擇89C51之后,右邊欄是對這個單片機的基本的說明,然后點擊確定.用KeiluVision3的話,根

17、據實驗板上單片機的型號,我們應做如下選擇:(以后的操作KeiluVision3和KeiluVision2都一樣)完成上一步驟后,屏幕如下圖所示到現在為止,我們還沒有編寫一句程序,下面開始編寫我們的第一個程序。(2)新建文件在下圖中,單擊“File”菜單,再在下拉菜單中單擊“New”選項新建文件后屏幕如下圖所示此時光標在編輯窗口里閃爍,這時可以鍵入用戶的應用程序了。鍵入程序后界面如下:單擊file菜單下的save,出現一個對話框,鍵入文件名,后綴名為.c(用C語言編程時用)或asm(用匯編語言編程時用)或.h(自己建立庫文件時用),進行保存到D盤CMJ51文件夾下,界面如下:點擊保存即可,出現如

18、下界面。添加文件回到編輯界面后,單擊“Target1”前面的“”號,然后在“SourceGroup1”上單擊右鍵,彈出如下菜單然后單擊“AddFiletoGroupSourceGroup1”屏幕如下圖所示選中cmj1.asm,然后單擊“Add”屏幕好下圖所示:(如果用C語言編程,選中“.c”文件即可。(4)匯編連接(C語言編程也一樣)單擊如下圖所示的圖標(rebuiltalltargetfiles)出現如下界面:(5)運行看結果單擊如下圖的圖標(start/stopdebugsession),進入運行狀態出現如下界面:單擊一次下圖的圖標(stepinto),程序就能運行一條,一直到程序的結束(

19、ret)。運行結束后,直接可以在如下界面中看結果。特殊功能寄存器中的內容可以在界面中直接看到,存儲單元的內容在memory#1中輸入如上圖所示的地址,即可看到該單元的內容為66H。下面進行工程配置。點擊Project菜單下的OptionsforTargetTarget1。在彈出對話框的Target項里輸入晶振為12M,然后勾上UseOn-chipROM。在Output項里勾上CreateHEXFile。這就是產生要燒寫的.hex文件。然后點擊Project菜單里的buildtarget或Rebuildalltargetfiles以編譯要燒寫的.hex文件。編譯完成后,會在下面OutputWin

20、dow里顯示編譯成功與否的信息和錯誤提示。Keil軟件的使用就介紹到這里,大家可以通過下一節流水燈的實驗來熟悉對該軟件的使用。第五節流水燈的控制1、怎樣點亮一個發光二極管點亮放光二極管的程序如下:#include/52系列單片機頭文件sbitled=P10;/聲明單片機P1口的第一位voidmain()/主函數led=0;/點亮第一個發光二極管從上面的程序大家可以看到:點亮第一個發光二極管,就是通過控制單片機的P1.0口,讓其輸出低電平,這樣就在單片機的P1.0口、發光二極管、電源之間形成回路,從而點亮發光二極管。由于是對單片機的P1口的第一位進行操作,為了書寫和理解的方便,我們將P1口的第一

21、位定義為led,實際上也可省掉這一步,直接用程序進行位操作,如:#include/52系列單片機頭文件voidmain()/主函數P10=0;/讓單片機在P1.0口輸出低電平,/從而點亮第一個發光二極管2、流水燈的控制相必大家對單片機的位操作已經有了一定的了解,接下來就讓我們一起來學習對多個發光二極管的控制,制作出一串串閃亮的流水燈。首先向大家介紹一下51單片機里常用的函數循環左移與循環右移函數:大家可以打開Keil軟件安裝文件夾,定位到KeilC51HLP文件夾,打開此文件夾下的C51lib,這是C51自帶庫函數幫助文件。在索引欄找到_crol_函數,雙擊打開它介紹,如下:_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*/它是一個循環左移函數,使用格式如:_crol_(a,b),其中a是被循環左移的數,b是循環左移的位數。例如:#include/使用_crol_時需包含的頭文件#include/52系列單片機頭文件voidmain()unsignedinta=

25、01101111;_crol_(a,3);執行完程序后,a=01111011。_cror_表示循環右移,其用法和_crol_類似,這里就不多作介紹了。接下來我們通過一段程序的演示來學習:/*函數功能:1、依次讓第一個至第八個發光二極管點亮,每個發光二極管亮一秒;2、輪流亮完后,所有發光二極管都亮一秒,然后所有發光二極管都滅一秒;3、依次讓第八個至第一個發光二極管點亮,每個發光二極管亮一秒;4、輪流亮完后,所有發光二極管都亮一秒,然后所有發光二極管都滅一秒;5、依次循環下去*/#include/52系列單片機頭文件#include/使用_crol_、_cror_時需包含的頭文件voiddelay

26、_ms(unsignedunsignedintxms)/軟件延時函數,其中xms/為參數,表示延時xmsunsignedinti;for(i=110;i0;i-)for(i=xms;i0;i-);unsignedintb;/定義變量b,用來控制第幾個發光二極管亮voidmain()P1=0X00;while(1)P0=0 xfe;/11111110,第一個燈亮/因為進入循環后有延時,所以這里不需要延時for(b=0;b第一次循環/P0=11111101第二個燈亮delay_ms(1000);/延時1000ms=1s,讓最后一個燈燈亮1sP0=0 x00;/讓所有發光二極管都亮delay_ms(

27、1000);/延時1000ms=1s,讓所有燈亮1sP0=0 xff;/讓所有發光二極管都滅delay_ms(1000);/延時1000ms=1s,讓所有燈滅1sP0=0 x7f;/01111111,最后一個燈亮for(b=0;b第一次循環/P0=10111111,倒數第二個燈亮delay_ms(1000);/延時1000ms=1s,讓第一個燈亮1sP0=0 x00;/讓所有發光二極管都亮delay_ms(1000);/延時1000ms=1s,讓所有燈亮1sP0=0 xff;/讓所有發光二極管都滅delay_ms(1000);/延時1000ms=1s,讓所有燈滅1s除這種方法實現流水燈外,利用

28、左移、右移指令與邏輯運算也能實現循環移動,大家只要多動動手,就能夠隨心所欲地控制發光二極管的閃爍。第六節數碼管的靜態顯示一、數碼管的介紹:數碼管是電路中常見的顯示原件,按段數的多少可分為七段數碼管和八段數碼管七段數碼管多一個發光二極管單元(多一個小數點顯示);按照顯示8的個數,可分為1位、2位、4位等數碼管,如下圖所示:按發光二極管單元連接方式分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極管的陽極接到一起形成公共陽極(COM)的數碼管。共陰數碼管是指將所有發光二極管的陰極接到一起形成公共陰極(COM)的數碼管,如下圖所示:共陽數碼管在應用時應將公共極接到+5V或+3.3V,當某一

29、字段發光二極管的陰極為低電平時,相應字段就點亮。當某一字段的陰極為高電平時,相應字段就不亮。共陰數碼管在應用時應將公共極COM接到地線GND上,當某一字段發光二極管的陽極為高電平時,相應字段就點亮。當某一字段的陽極為低電平時,相應字段就不亮。二、數碼管的顯示:任何一個7段碼管都有128種顯示模式,而其中的數字0-9是最為有用也是最常見的。通過控制共陽極(共陰極)數碼管的陰極(陽極),可以讓數碼管顯示不同的字符,下表是共陰數碼管的碼段:符號編碼符號編碼00 x3f80 x7f10 x0690 x6f20 x5bA0 x7730 x4fB0 x7c40 x66C0 x3950 x6dD0 x5e6

30、0 x7dE0 x7970 x07F0 x71對于多位數碼管而言,實際中為了簡化電路,將所有共陰極數碼管的陽極接到一起,所有共陽極數碼管的陰極接到一起,用多個獨立的位選和7個(或8個)公共段選控制所有的數碼管。由于所有數碼管共用段選,為了獨立顯示每位數碼管,只能用位選來區分不同的數碼管。具體來說就是每次只將某一位數碼管的位選置為有效,其它數碼管的位選都無效。此時的段選決定了該位數碼的顯示。然后在下一個時刻,置下一位數碼管的位選有效,其它數碼管的位選都無效。依次類推,循環往復。下面用共陰的4位數碼管為例來說明:當位選1為低,其它位選都為高時,第一位數碼管被選中,此時的共用段選用于第一位數碼管的顯

31、示;位選2為低時(其它位選都為高),第二位數碼管被選中,此時的共用段選用于第二位數碼管的顯示,三、四位數碼管的顯示依次類推。在一個刷新周期T內,每位數碼管都有1/4T周期的時間被刷新。為了保證所有4位數碼管的顯示不閃爍,一般刷新頻率要大于45Hz。在一個周期中,雖然每位數碼管會有3/4T的時間不被點亮,但位選刷新的速度較快,同時由于數碼管自身的余輝特性,每位數碼管在變暗之前就又會被重新刷新,因此人眼無法感覺到數碼管變暗。如果刷新的頻率小于一定值(如45Hz),則人眼就會感覺到數碼管的閃爍。一般刷新頻率在60Hz到1KHz之間時,多位數碼管顯示得比較理想。在實際的電路中,我們可以分別利用單片機的

32、IO口分別控制多位數碼管的位選和段選,但是我們不這么做,因為那樣不但浪費了IO口資源,而且還浪費了寶貴的MCU時間,我們通常是利用鎖存器來對多位數碼管進行控制。三、鎖存器:鎖存器(Latch)是一種對脈沖電平敏感的存儲單元電路,它們可以在特定輸入脈沖電平作用下改變狀態。鎖存,就是把當前的狀態鎖存起來,使CPU送出的數據在接口電路的輸出端保持一段時間,鎖存后狀態不再發生變化,直到解除鎖定。在LED和數碼管顯示方面,要維持一個數據的顯示,往往要持續的快速的刷新。尤其是在四段八位數碼管等這些要選通的顯示設備上。在人眼能夠接受的刷新頻率之內,大概每三十毫秒就要刷新一次。這就大大占用了處理器的處理時間,

33、消耗了處理器的處理能力,還浪費了處理器的功耗。鎖存器的使用可以大大的緩解處理器在這方面的壓力。當處理器把數據傳輸到鎖存器并將其鎖存后,鎖存器的輸出引腳便會一直保持數據狀態直到下一次鎖存新的數據為止。這樣在數碼管的顯示內容不變之前,處理器的處理時間和IO引腳便可以釋放。可以看出,處理器處理的時間僅限于顯示內容發生變化的時候,這在整個顯示時間上只是非常少的一個部分。而處理器在處理完后可以有更多的時間來執行其他的任務。這就是鎖存器在LED和數碼管顯示方面的作用:節省了寶貴的MCU時間。下面為大家介紹常用的鎖存器:74HC573和74LS595(一)、74HC573:74HC573是高性能硅門CMOS

34、器件,當鎖存使能端為高時,輸入與輸出同步。當鎖存使能變低時,符合建立時間和保持時間的數據會被鎖存。74HC573的特點如下:輸出能直接接到CMOS,NMOS和TTL接口上;操作電壓范圍:2.0V6.0V;低輸入電流:1.0uA;CMOS器件的高噪聲抵抗特性。其引腳圖如下:其功能表如下:(H代表高電平,L代表低電平,X代表任意電平,Z代表高阻態)輸入輸入輸入輸出OELEDQHXXZLLX不變LHLLLHHH從表中可以看出:給芯片的OE端輸入低電平時,芯片才能工作。當OE端為低電平,LE端為低電平時,鎖存器處于鎖存狀態;當OE端為低電平,LE端為高電平時,鎖存器處于導通狀態,輸入與輸出同步。(二)

35、、74LS595(8位輸出鎖存移位寄存器):74HC595的引腳圖如下:1、74595的數據端:Q1Q7:八位并行輸出端,可以直接控制數碼管的8個段。SDI:串行數據輸入端。2、74595的控制端:SCLR(10腳):低電平時將位移緩存器的數據清零。SCK(11腳):上升沿時,數據輸入八位位移緩存器;下降沿位移緩存器數據不變。LCK(12腳):上升沿時八位平行緩存器會擷取八位位移緩存器上的數據也就是說:595輸出b3、具體控制595的操作步驟:對Q1-Q2-Q3-.-Q7上的數據進行一次更改時:(1)、將要更改成的數據一位一位地從SDI輸入(具體怎樣操作,見下面的程序),每次對74LS595寫

36、入一位數據的時候,要給SCK一個上升沿,這樣從SDI輸入的數據才能臨時地被存儲起來(存儲在八位位移緩存器中);(2)、重復上述操作,直到數據一位一位地被寫入完畢;(3)、然后給LCK一個上升沿,將存儲在位移緩存器中的數據傳送給平行緩存器,即:Q1-Q2-Q3-.-Q7上輸出新數據;(4)、然后將LCK置低,鎖存Q1-Q2-Q3-.-Q7上的數據,如果要連續改動Q,1-Q2-Q3-.-Q7上的數據,重復上述操作就行。G(13腳):高電平時禁止輸出(高阻態)。如果單片機的引腳不緊張,用一個引腳控制它,可以方便地產生閃爍和熄滅效果。比通過數據端移位控制要省時省力。74595的主要優點是具有數據存儲寄

37、存器,在移位的過程中,輸出端的數據可以保持不變。這在串行速度慢的場合很有用處。接下來就讓我們通過編程來進一步學習數碼管與鎖存器:/函數功能:從0F,每秒顯示一個數#include/包涵頭文件sbitLCK=P34;/上升沿時八位平行緩存器會擷取八位位移緩/存器上的數據sbitSCK=P35;/上升沿時,數據輸入八位位移緩存器sbitSDI=P33;/數據輸入端unsignedcharm;constunsignedcharCode=/數碼管顯示碼段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)/延時函數1unsignedinti;for(i=a;i0;i-);voiddelay2(unsignedintc)/延時函數2,延時c毫秒unsignedinti,j;for(i=330;i0;i-)for(j=c;j0;j-);voidwrite(unsignedcharb)/數碼管顯示函數unsignedcharj;for(j=0;j8;j+)SCK=0;/與后面SCK=1搭配,表示給SCK上升沿作用/是:將數據輸入八位位移緩存器,因為

39、數據只/能一位一位地輸入,所以后面用if和else語句if(0 x80&b)/b&10000000,相當于取b的最高位SDI=1;/當最高位為1時,SDI為1,表示輸入為1elseSDI=0;/當最低位為0時,SDI為0,表示輸入為0/if與else連用,保證了b能夠一位一位地發/送進入595,并儲存在平行緩存器中delay1(100);/需保證低電平的時間,否則595無法正常工作SCK=1;/與前面SCK=0搭配,表示給SCK上升沿b=1;/b左移一位LCK=0;/上升沿時八位平行緩存器會擷取八位LCK=1;/位移緩存器上的數據也就是說:595輸出bLCK=0;/鎖存輸出的數據voidmai

40、n()P1M0=0;/設置P1和P3為強推挽輸出(大功率輸出),P1M1=0 xff;/必須設置,否則一次無法驅動多個數碼管P3M0=0;P3M1=0 xff;while(1)/顯示函數for(m=0;m=15;m+)/循環顯示P1=0 xff;write(Codem);/數碼管顯示數組Code中的第m+1個數delay2(1000);/延時1000毫秒因為上面是對三個數碼管同時進行掃描,即:三個數碼管同時被點亮,也同時被熄滅。所以,上面點亮數碼管的方式是靜態掃描。下面為大家介紹另外一種點亮數碼管的方式:動態掃描。程序如下:/函數功能:從左往右,3個數碼管一起,依次/顯示012、123、.dE

41、F、dFF、FFF。#include/包涵頭文件sbitLCK=P34;/上升沿時八位平行緩存器會擷取八位位移緩/存器上的數據sbitSCK=P35;/上升沿時,數據輸入八位位移緩存器sbitSDI=P33;/數據輸入端unsignedcharm;constunsignedcharCode=/數碼管顯示碼段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)/延時函數1unsignedinti;for(i=a;i0;i-);voiddelay2(unsignedintc)/延時函數2,延時c毫秒unsignedinti,j;for(i=330;i0;i-)for(j=c;j0;j-);voidwrit

溫馨提示

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

評論

0/150

提交評論