單片機(jī)最小系統(tǒng)_第1頁
單片機(jī)最小系統(tǒng)_第2頁
單片機(jī)最小系統(tǒng)_第3頁
單片機(jī)最小系統(tǒng)_第4頁
單片機(jī)最小系統(tǒng)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、武漢理工大學(xué)單片機(jī)應(yīng)用實(shí)習(xí)實(shí)習(xí)報(bào)告目錄摘 要IAbstractII1.任務(wù)要求及說明12. 硬件電路原理與設(shè)計(jì)32.1硬件電路原理32.1.1最小系統(tǒng)32.2數(shù)碼管顯示電路6圖4 數(shù)碼管顯示電路圖62.3串口通信電路72.4矩陣鍵盤電路83 軟件設(shè)計(jì)93.1軟件介紹93.1.1程序編寫軟件Keil93.1.2仿真軟件Proteus93.2軟件設(shè)計(jì)93.2.1 數(shù)碼管顯示設(shè)計(jì)103.2.2串行通信接收程序104. 仿真與調(diào)試124.1數(shù)據(jù)輸入與顯示仿真結(jié)果124.2數(shù)字移位和串口仿真結(jié)果135. 小結(jié)與體會(huì)146.參考文獻(xiàn)15附錄1:C語言源程序16附錄2:元件清單27附錄3:實(shí)物圖28摘 要單

2、片機(jī)最小系統(tǒng),無論對單片機(jī)初學(xué)人員還是開發(fā)人員都具有十分重要的意義,可以利用最小系統(tǒng)進(jìn)行編程實(shí)現(xiàn)工業(yè)控制。單片機(jī)最小系統(tǒng)電路板在單片機(jī)開發(fā)市場和大學(xué)生電子設(shè)計(jì)方面十分流行。本次課程設(shè)計(jì)包括STC89S52單片機(jī)最小系統(tǒng)包括復(fù)位和時(shí)鐘電路及供電系統(tǒng)、4×4矩陣鍵盤、獨(dú)立6個(gè)8段LED數(shù)碼管顯示電路以及DS18B20溫度傳感器。利用相關(guān)設(shè)計(jì)軟件進(jìn)行原理圖設(shè)計(jì)利用Keil軟件編程以及Proteus軟件仿真借此鞏固單片機(jī)應(yīng)用、模擬電路、數(shù)字電路課程及學(xué)會(huì)各種工程軟件的使用。 關(guān)鍵字:單片機(jī) 最小系統(tǒng) 矩陣鍵盤 Protues keilAbstractMCU minimum system, r

3、egardless of the singlechip novice staff or staff development ,who can use minimum system program for industrial control,has very important sense. MCU minimum system board in the MCU develop market and college students electronic design is very popular. The curriculum design, including STC89S52MCU m

4、inimum system ( including a reset and clock circuit and power supply system ),4 x4 matrix keyboard, the independent 6 LED digital tube display circuit and a DS18B20 temperature sensor. Using circuit design software schematic design, using Keil software and Protues software simulation, we consolidate

5、 the MCU application, analog circuit, digital circuit course and learn all kinds of engineering software use. Key Words:MCU minimum system matrix keyboard Keil Protues1.任務(wù)要求及說明(1)鍵盤一個(gè)4X4的矩陣鍵盤,其中,10個(gè)按鍵是09數(shù)字鍵;另外6個(gè)是功能鍵,用于功能選擇和控制,如“數(shù)據(jù)輸入”、“數(shù)據(jù)顯示”、“串行通信”功能選擇鍵,以及“回車”、“清除”、控制鍵。(2)顯示電路由6個(gè)7段LED數(shù)碼管組成的顯示電路。(3)串口

6、串行通信利用51的串口實(shí)現(xiàn)串行通信接口電路。完成ISP下載電路的設(shè)計(jì)、焊接 完成系統(tǒng)軟件的設(shè)計(jì),包括程序結(jié)構(gòu)設(shè)計(jì)、流程圖繪制、程序設(shè)計(jì),實(shí)現(xiàn)如下功能(1)功能選擇通過功能選擇鍵,使得單片機(jī)處于不同的工作狀態(tài)并通過LED顯示相應(yīng)的內(nèi)容;可選擇的功能包括:數(shù)據(jù)輸入;數(shù)據(jù)顯示;串口通信(2)數(shù)據(jù)輸入通過功能選擇鍵選擇“數(shù)據(jù)輸入”后,可分次輸入10個(gè)4位十進(jìn)制數(shù)據(jù),并將輸入的數(shù)據(jù)保存在內(nèi)部RAM中。數(shù)據(jù)輸入要求:1) 第一步輸入序號09,表明輸入的是第幾個(gè)4位十進(jìn)制數(shù)據(jù);2) 第二步按下回車鍵,完成序號輸入;3) 第三步輸入最多4位的十進(jìn)制數(shù)據(jù);4) 第四步按下回車鍵,完成數(shù)據(jù)輸入;5) 重復(fù)第一步,

7、開始新數(shù)據(jù)的輸入;6) 輸入數(shù)據(jù)的顯示格式是:最左邊是序號,然后是空格,之后是從右到左的最多4位十進(jìn)制數(shù);7) 若在輸入過程中(第一步或第三步)出現(xiàn)錯(cuò)誤,按“清除”鍵,重新從第一步開始輸入數(shù)據(jù)?;蛘?,自己設(shè)計(jì)10個(gè)十進(jìn)制數(shù)的輸入及顯示方式。(3)數(shù)據(jù)顯示通過功能選擇鍵選擇“數(shù)據(jù)顯示”后,可顯示之前輸入的10個(gè)4位十進(jìn)制數(shù)據(jù)中的任一個(gè),要求:1) 第一步輸入序號09,表明顯示的是第幾個(gè)4位十進(jìn)制數(shù)據(jù);2) 第二步顯示相應(yīng)的數(shù)據(jù);3) 重復(fù)第一步、第二步,顯示其他的數(shù)據(jù);4) 數(shù)據(jù)的顯示格式是:最左邊是序號,然后是空格,之后是要顯示的數(shù)據(jù),從右到左最多4位十進(jìn)制數(shù)?;蛘撸约涸O(shè)計(jì)數(shù)據(jù)的顯示方式。(

8、4)數(shù)據(jù)通信將兩個(gè)單片機(jī)最小系統(tǒng)通過串口連接起來,其中一個(gè)作為主系統(tǒng),另一個(gè)作為輔系統(tǒng)。當(dāng)通過功能選擇鍵選擇“串行通信”后,當(dāng)在主系統(tǒng)上按下數(shù)字鍵后主系統(tǒng)的LED按從左向右移東的方式顯示按鍵輸入的數(shù)字,同時(shí)輔系統(tǒng)的LED上顯示與主系統(tǒng)同樣的內(nèi)容。(5)利用仿真軟件完成系統(tǒng)仿真工作(6)在單片機(jī)最小系統(tǒng)硬件上實(shí)現(xiàn)任務(wù)3中規(guī)定的功能2. 硬件電路原理與設(shè)計(jì)2.1硬件電路原理2.1.1最小系統(tǒng)單片機(jī)最小系統(tǒng)包括振蕩器電路,復(fù)位電路,單片機(jī)EA端接高電平(Vcc),P0口需要接上拉電阻(10K)。振蕩器電路選用12MHz晶振,兩個(gè)30pf電容,振蕩器電路接單片機(jī)XTAL1和XTAL2引腳。單片機(jī)最小系

9、統(tǒng)原理圖如下。圖1 單片機(jī)最小系統(tǒng)1、MCU控制器簡介STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,2個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電

10、模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35MHz,6T/12T可選。2.復(fù)位電路單片機(jī)的置位和復(fù)位,都是為了把電路初始化到一個(gè)確定的狀態(tài),一般來說,單片機(jī)復(fù)位電路作用是把一個(gè)例如狀態(tài)機(jī)初始化到空狀態(tài),而在單片機(jī)內(nèi)部,復(fù)位的時(shí)候單片機(jī)是把一些寄存器以及存儲設(shè)備裝入廠商預(yù)設(shè)的一個(gè)值。單片機(jī)復(fù)位電路原理是在單片機(jī)的復(fù)位引腳RST上外接電阻和電容,實(shí)現(xiàn)上電復(fù)位。當(dāng)復(fù)位電平持續(xù)兩個(gè)機(jī)器周期以上時(shí)復(fù)位有效。復(fù)位電平的持續(xù)時(shí)間必須大于單片機(jī)的兩個(gè)機(jī)器周期

11、。具體數(shù)值可以由RC電路計(jì)算出時(shí)間常數(shù)。復(fù)位電路由按鍵復(fù)位和上電復(fù)位兩部分組成。上電復(fù)位 STC89系列單片及為高電平復(fù)位,通常在復(fù)位引腳RST上連接一個(gè)電容到VCC,再連接一個(gè)電阻到GND,由此形成一個(gè)RC充放電回路保證單片機(jī)在上電時(shí)RST腳上有足夠時(shí)間的高電平進(jìn)行復(fù)位,隨后回歸到低電平進(jìn)入正常工作狀態(tài),這個(gè)電阻和電容的典型值為10K和10uF。按鍵復(fù)位按鍵復(fù)位就是在復(fù)位電容上并聯(lián)一個(gè)開關(guān),當(dāng)開關(guān)按下時(shí)電容被放電、RST也被拉到高電平,而且由于電容的充電,會(huì)保持一段時(shí)間的高電平來使單片機(jī)復(fù)位。電路圖如圖2所示圖2 按鍵復(fù)位電路3.振蕩電路單片機(jī)系統(tǒng)里都有晶振,在單片機(jī)系統(tǒng)里晶振作用非常大,全

12、稱叫晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生單片機(jī)所需的時(shí)鐘頻率,單片機(jī)晶振提供的時(shí)鐘頻率越高,那么單片機(jī)運(yùn)行速度就越快,單片接的一切指令的執(zhí)行都是建立在單片機(jī)晶振提供的時(shí)鐘頻率。在通常工作條件下,普通的晶振頻率絕對精度可達(dá)百萬分之五十。高級的精度更高。有些晶振還可以由外加電壓在一定范圍內(nèi)調(diào)整頻率,稱為壓控振蕩器(VCO)。晶振用一種能把電能和機(jī)械能相互轉(zhuǎn)化的晶體在共振的狀態(tài)下工作,以提供穩(wěn)定,精確的單頻振蕩。單片機(jī)晶振的作用是為系統(tǒng)提供基本的時(shí)鐘信號。通常一個(gè)系統(tǒng)共用一個(gè)晶振,便于各部分保持同步。有些通訊系統(tǒng)的基頻和射頻使用不同的晶振,而通過電子調(diào)整頻率的方法保持同步。晶振通常與鎖相環(huán)電路配合使

13、用,以提供系統(tǒng)所需的時(shí)鐘頻率。如果不同子系統(tǒng)需要不同頻率的時(shí)鐘信號,可以用與同一個(gè)晶振相連的不同鎖相環(huán)來提供。STC89C51使用11.0592MHz的晶體振蕩器作為振蕩源,由于單片機(jī)內(nèi)部帶有振蕩電路,所以外部只要連接一個(gè)晶振和兩個(gè)電容即可,電容容量一般在15pF至50pF之間。其電路原理圖如3所示。圖3 晶體振蕩電路2.2數(shù)碼管顯示電路LED數(shù)碼管顯示是利用半導(dǎo)體發(fā)光制成條形的發(fā)光二極管,封裝在一起組成數(shù)字或其他符號形狀。數(shù)碼管根據(jù)公共端不同,分為共陰極和共陽極兩種形式。根據(jù)設(shè)計(jì)需要,本次選用共陰極數(shù)碼管。由于一個(gè)數(shù)碼管不能實(shí)現(xiàn)多位數(shù)顯示,同時(shí)從節(jié)省I/O端口考慮,結(jié)合數(shù)電知識,利用兩片74

14、HC573擴(kuò)展單片機(jī)的IO口,兩片74HC573的輸出分別接6位7段共陰數(shù)碼管的段選端和公共端。74HC573是8數(shù)據(jù)鎖存器。主要用于數(shù)碼管、按鍵等等的控制,其輸出受輸出允許端OE和鎖存允許端LE的控制,當(dāng)LE為高時(shí)鎖存器輸出為高阻態(tài),當(dāng)OE為低,LE也為低時(shí),輸入端的信號輸出到輸出端。 圖4 數(shù)碼管顯示電路圖2.3串口通信電路串口是計(jì)算機(jī)上一種非常通用設(shè)備通信的協(xié)議(不要與通用串行總線Universal Serial Bus或者USB混淆)。大多數(shù)計(jì)算機(jī)包含兩個(gè)基于RS232的串口。串口同時(shí)也是儀器儀表設(shè)備通用的通信協(xié)議;很多GPIB兼容的設(shè)備也帶有RS-232口。同時(shí),串口通信協(xié)議也可以用

15、于獲取遠(yuǎn)程采集設(shè)備的數(shù)據(jù)。串口通信的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時(shí)用另一根線接收數(shù)據(jù)。它很簡單并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信。比如IEEE488定義并行通行狀態(tài)時(shí),規(guī)定設(shè)備線總常不得超過20米,并且任意兩個(gè)設(shè)備間的長度不得超過2米;而對于串口而言,長度可達(dá)1200米。典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成:地線、發(fā)送、接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時(shí)在另一根線上接收數(shù)據(jù)。其他線用于握手,但是不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。單片機(jī)

16、使用的是TTL電平,而計(jì)算機(jī)使用的是RS-232電平,要實(shí)現(xiàn)把電腦中的程序能下載到單片機(jī)上,就需要實(shí)現(xiàn)RS-232電平與TTL電平之間的轉(zhuǎn)換。實(shí)現(xiàn)這一功能的芯片有很多,本次課設(shè)所使用的芯片為MAX232及電容元件構(gòu)成RS232電平與TTL電平轉(zhuǎn)換的串行口電路。MAX232是電平轉(zhuǎn)換芯片。1970年,美國電氣學(xué)會(huì)規(guī)定“RS232”串口通信協(xié)議。規(guī)定邏輯“1”,-5 -15V;邏輯“0”,+5 +15V 。噪聲容限為2V。要實(shí)現(xiàn)利用串口與單片機(jī)進(jìn)行通信,就要進(jìn)行電平轉(zhuǎn)換,把標(biāo)準(zhǔn)轉(zhuǎn)化成單片機(jī)可以識別的。MAX220MAX249都是電平轉(zhuǎn)換芯片,本次設(shè)計(jì)中就使用MAX232。其電路原理圖如圖5所示。圖

17、5 串口電路圖2.4矩陣鍵盤電路矩陣鍵盤檢測的原理和方法:矩陣鍵盤每個(gè)按鍵兩端都與單片機(jī)I/O口相連,因此在檢測時(shí)需人為通過單片機(jī)I/O口送出低電平。檢測時(shí),先送一列為低電平,其余幾列全為高電平(此時(shí)確定了列數(shù)),然后立即輪流檢測一次各行是否有低電平,若檢測到某一行為低電平(這是有確定了行數(shù)),則便可以確認(rèn)當(dāng)前被按下的鍵是哪一列哪一行,用同樣方法輪流送各列一次低電平,再輪流檢測一次各行是否變?yōu)榈碗娖?,這樣既可檢測完所有的按鍵,當(dāng)有鍵按下時(shí)便可判斷出按下的是哪一個(gè)鍵。其工作原理是從0列開始順序行掃描即該行輸出為0。每掃描一行讀入列線數(shù)據(jù)從0開始列檢查找該行輸出為0的列若無則順序掃描下一行并檢查其

18、各列若找到某列線為0則該列與檢查行交叉的按鍵為被按下的鍵。從0行0列開始順序?qū)存I編號就可以按掃描的值得到按鍵的值。本設(shè)計(jì)使用的是4個(gè)獨(dú)立按鍵其功能設(shè)置為時(shí)間的顯示、時(shí)間的設(shè)置、溫度的顯示和數(shù)字頻率的顯示。此外還需要消除按鍵在閉合或斷開時(shí)的抖動(dòng)。消抖的方法可采用消抖電路(RS觸發(fā)器時(shí)鎖電路硬件消除抖動(dòng)),也可采用延時(shí)方式軟件消除抖動(dòng)(延時(shí)后再重讀,以跳過抖動(dòng)期),本設(shè)計(jì)采用軟件消抖方式。本設(shè)計(jì)中主要使用了獨(dú)立鍵盤,故電路圖中簡要的畫出了4*4的矩陣鍵盤,其電路原理圖如圖6所示 圖6 矩陣鍵盤原理圖3 軟件設(shè)計(jì)3.1軟件介紹3.1.1程序編寫軟件Keil Keil C51是美國Keil Soft

19、ware公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。本次設(shè)計(jì)編程主要使用Keil軟件進(jìn)行編程。3.1.2仿真軟件ProteusProtues軟件是英國Labcenter electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受

20、到單片機(jī)愛好者、從事單片機(jī)教學(xué)的教師、致力于單片機(jī)開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺,在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯。本次設(shè)計(jì)采用的是Proteus進(jìn)行仿真。3.2軟件設(shè)計(jì)本次設(shè)計(jì)的要求是完成鍵盤掃描、單片機(jī)控制數(shù)碼管動(dòng)態(tài)顯示數(shù)據(jù)、串口通信等功能,且有具有功能選擇鍵。選擇數(shù)據(jù)輸入時(shí),可以輸入序號,再輸入相應(yīng)的不超過四位的數(shù)據(jù),再選擇數(shù)據(jù)顯

21、示功能,按下相應(yīng)的序號按鍵就能顯示你所輸入的數(shù)據(jù)。串口通信時(shí)進(jìn)行鍵盤掃描,當(dāng)相應(yīng)的按鍵被按下時(shí),在主系統(tǒng)和輔系統(tǒng)的六位數(shù)碼管上同步依次顯示按鍵值,且后鍵入的數(shù)字在左端,之前鍵入的數(shù)字移向下一個(gè)數(shù)碼管。同時(shí)還設(shè)置了清零功能鍵,當(dāng)該按鍵被按下時(shí),所有的數(shù)碼管全部熄滅。故設(shè)計(jì)思想為首先進(jìn)行各模塊的程序編寫,使其個(gè)模塊的程序能夠單獨(dú)運(yùn)行成功。之后將各模塊設(shè)計(jì)成子函數(shù),在主函數(shù)中進(jìn)行調(diào)用,當(dāng)功能鍵被按下時(shí),執(zhí)行相應(yīng)的子程序。3.2.1 數(shù)碼管顯示設(shè)計(jì)該程序分為鍵盤掃描和數(shù)碼管顯示兩部分,其程序流程圖如7所示:開始鍵盤掃描 NY是否有鍵按是否是切換數(shù)字顯示返回模式選擇Y 否 是 是 否圖7 數(shù)據(jù)輸入流程圖

22、3.2.2串行通信接收程序由于要實(shí)現(xiàn)兩個(gè)單片機(jī)之間的通信,在接收單片機(jī)上要寫與發(fā)送程序相對應(yīng)的接收程 序,兩者應(yīng)設(shè)定相同的波特率。對應(yīng)的接收程序流程圖如圖8所示。T1初始化,啟動(dòng)T1工作設(shè)定串行通信方式并設(shè)定允許接收RI=1接收數(shù)據(jù)清RI全部數(shù)據(jù)完全接收完結(jié)束圖8 接收程序流程圖4. 仿真與調(diào)試4.1數(shù)據(jù)輸入與顯示仿真結(jié)果 (a)(b)圖9 仿真電路總圖4.2數(shù)字移位和串口仿真結(jié)果(a)(b)圖10 數(shù)字移位與串口仿真圖5. 小結(jié)與體會(huì) 本次實(shí)習(xí)是對所學(xué)的單片機(jī)知識的一次綜合運(yùn)用,本次設(shè)計(jì)要求完成鍵盤掃描顯示,數(shù)據(jù)輸入與數(shù)據(jù)顯示,串口通信等內(nèi)容。首先,要求能夠熟練的運(yùn)用Protues進(jìn)行單片機(jī)

23、的仿真,由于以前沒用過這個(gè)軟件,仿真一開始就成了難題,這對于沒怎么用過這個(gè)軟件的我來說是一大挑戰(zhàn)。不過,通過一兩天的摸索,總算是把它的一些基本操作弄清楚了,最終也成功繪制出具有基本擴(kuò)展電路的單片機(jī)系統(tǒng)。接下來是在Keil上進(jìn)行程序的編寫, 但是又由于對單片機(jī)知識沒有很好的掌握,所以程序的編寫變成了整個(gè)實(shí)習(xí)的難處。不斷的查找資料,和同學(xué)討論最總才寫出了正確的程序,實(shí)現(xiàn)了要求的功能。 在本次實(shí)習(xí)中學(xué)到了很多,熟悉了Protues軟件的使用,程序的編寫也讓我對單片機(jī)的認(rèn)識又加深了一步。通過本次實(shí)習(xí)讓我對以前所學(xué)知識有了一個(gè)更深刻的認(rèn)識,學(xué)會(huì)了將所學(xué)的知識運(yùn)用到實(shí)際中去,同時(shí)也讓我意識到了理論與實(shí)際的

24、差距,在實(shí)習(xí)中遇到了各種各樣的問題,往往看是簡單的一件事到實(shí)際去做的時(shí)候才發(fā)現(xiàn)有好多的東西沒考慮過。由于實(shí)驗(yàn)中沒能實(shí)現(xiàn)串行通信的功能,讓我認(rèn)識到自己知識的薄弱,讓我認(rèn)識到自己還有很多不足,在以后的學(xué)習(xí)中,更加努力學(xué)習(xí),彌補(bǔ)不足,讓自己的編程能力有所提高。6.參考文獻(xiàn)1 謝自美. 電子線路設(shè)計(jì)·實(shí)驗(yàn)·測試(第三版).武漢:華中科技大學(xué)出版社2 李群芳. 單片微型計(jì)算機(jī)與接口技術(shù)(第3版).電子工業(yè)出版社,20083 劉教瑜. 單片機(jī)原理及應(yīng)用.武漢理工大學(xué)出版社,20114 張東亮. 單片機(jī)原理與應(yīng)用.人民郵電出版社,20095 郭天祥. 51單片機(jī)C語言教程.電子工業(yè)出版社

25、附錄1:C語言源程序發(fā)送機(jī)主程序:#include <reg52.h> /此文件中定義了51的一些特殊功能寄存器#define KEY_PORT P1 /鍵盤硬件接口#define DISPLAY_PORT1 P0 /數(shù)碼管硬件接口1#define DISPLAY_PORT2 P2 /數(shù)碼管硬件接口2unsigned char code table1=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/從左到右的數(shù)碼管 0 1 2 3 4 5 unsigned char code table2=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07

26、,0x7f,0x6f;/09unsigned char key;unsigned char key_temp6;unsigned char count=0;unsigned char fun3_flag=0;long num10;/用來裝載輸入的數(shù)據(jù)void delayms(unsigned int xms);void init_usart(void);void delay(unsigned char x);void keyscan(void);unsigned char keydown(void);void fun3_display(void);void send_data(void);un

27、signed char menu_select(void); void display(unsigned char data_order,int num);void display_data(void);void input_data(void);void main(void) unsigned char menu;init_usart(); while(1) menu=menu_select();/選擇功能 switch(menu) case 10: input_data(); break; case 11: display_data(); break; case 12: fun3_flag

28、=0;while(fun3_flag!=2) if(fun3_flag=1) fun3_display(); send_data(); break; default: break; /*發(fā)送數(shù)據(jù)*/void send_data(void) if(keydown() SBUF=key;/SUBF接受/發(fā)送緩沖器 while(TI=0);/當(dāng)發(fā)送標(biāo)志位為0,即未完成發(fā)送,則一直等待,直到發(fā)送完成 TI=0; /發(fā)送完成之后,將發(fā)送中斷標(biāo)志TI置0 if(key=13) fun3_flag=2; else fun3_flag=1; if(key<10) key_temp(count+%6)=k

29、ey; if(count=7) count=1; /* 延時(shí)子程序*/void delayms(unsigned int xms) unsigned int i,j; for(i=xms;i>0;i-) for(j=110;j>0;j-);void init_usart(void) SCON =0x50; /REN=1允許串行接受狀態(tài),串口工作模式2 TMOD|=0x20; /定時(shí)器工作方式2 PCON|=0x80; /波特率提高一倍 /TH1=0xFD; /baud*2 /* reload value 19200、數(shù)據(jù)位8、停止位1。效驗(yàn)位無(11.0592) TH1=0xF3;

30、/ /baud*2 /* 波特率4800、數(shù)據(jù)位8、停止位1。效驗(yàn)位無 (12M)TL1=0xF3; TR1=1; /開啟定時(shí)器1 ES=1; /開串口中斷 EA=1; /開總中斷 /IE=0x0; SBUF=16;/告訴從機(jī)準(zhǔn)備接受了/* 延時(shí)子程序*/void delay(unsigned char x) unsigned char j; while(x-)!=0) for(j=0;j<125;j+) ; /*鍵掃描子程序*/ void keyscan(void) unsigned char temp;temp=KEY_PORT; /讀P1口 temp=temp&0x0F;

31、temp=(temp|0xF0); if(temp=1) key=0; else if(temp=2) key=1; else if(temp=4) key=2; else if(temp=8) key=3; else key=16; KEY_PORT=0xF0; /高四位輸入 delay(1);temp=KEY_PORT; /讀P1口 temp=temp&0xF0; temp=(temp>>4)|0xF0); if(temp=1) key=key+0; else if(temp=2) key=key+4; else if(temp=4) key=key+8; else i

32、f(temp=8) key=key+12; else key=16; /*判斷鍵是否按下*/ unsigned char keydown(void) unsigned char keydownflag=0;KEY_PORT=0x0F;if(KEY_PORT!=0x0F) delay(2);/延時(shí)消抖,防止誤判10-2 if(KEY_PORT!=0x0F) keyscan(); keydownflag=1; KEY_PORT=0x0F; while(KEY_PORT!=0x0F); /等待鍵釋放 return keydownflag; /*從機(jī)顯示函數(shù),循環(huán)右移*/ void fun3_disp

33、lay(void) unsigned char i=0; for(i=0;i<count;i+) DISPLAY_PORT1 =table1i;/送位選數(shù)據(jù) DISPLAY_PORT2 =table2key_tempi;/送段選數(shù)據(jù)delayms(3); /*功能選擇函數(shù)*/unsigned char menu_select(void) unsigned char menu_key_temp=100;while(1) if(keydown()/如果按鍵被按下 menu_key_temp=key;/讀取按鍵值if(menu_key_temp=10|menu_key_temp=11|menu

34、_key_temp=12)/如果按鍵值是功能選擇鍵,則退出循環(huán) break; return menu_key_temp;/返會(huì)功能選擇 void display(unsigned char data_order,int num) /*顯示序號*/ DISPLAY_PORT1 =table10;/送位選數(shù)據(jù) DISPLAY_PORT2 =table2data_order;/送段選數(shù)據(jù) delayms(2); /*顯示千位*/ DISPLAY_PORT1 =table12;/送位選數(shù)據(jù) DISPLAY_PORT2 =table2num/1000;/送段選數(shù)據(jù) delayms(3); /*顯示百位*

35、/ DISPLAY_PORT1 =table13;/送位選數(shù)據(jù) DISPLAY_PORT2 =table2(num/100)%10;/送段選數(shù)據(jù) delayms(3); /*顯示十位*/ DISPLAY_PORT1 =table14;/送位選數(shù)據(jù) DISPLAY_PORT2 =table2(num/10)%10;/送段選數(shù)據(jù) delayms(3); /*顯示個(gè)位*/ DISPLAY_PORT1 =table15;/送位選數(shù)據(jù) DISPLAY_PORT2 =table2num%10;/送段選數(shù)據(jù) delayms(3); /*根據(jù)鍵盤輸入的序號進(jìn)行顯示*/ void display_data(vo

36、id) key=100;/給key隨便賦值一個(gè) do keydown(); if(key<10) display(key,numkey); while(!(key=13);/如果是功能返回鍵則返回 /*數(shù)據(jù)輸入函數(shù)*/void input_data(void) unsigned char j=0;/表示每一個(gè)數(shù)據(jù)輸入了幾位 unsigned char i=0;/表示輸入了幾個(gè)數(shù)據(jù) unsigned char data_key;/用來存按鍵值 unsigned char data_order=0;/用來存序號 unsigned char whileflag=1; long num_temp

37、=0; /*輸入序號*/ while(i<10) while(!keydown();/等待按鍵被按下(等待輸入序號) data_key=key;/讀取按鍵值(讀取序號) while(!keydown()&&(!(key=14|key=15|key=13);/等待按鍵再次被按下 if(key=14)/清除鍵 continue;/從此處退出循環(huán)并重新開始執(zhí)行循環(huán) if(key=15) data_order=data_key; /把序號保存起來 if(key=13) break; /*輸入數(shù)據(jù)*/ num_temp=0;/數(shù)據(jù)緩存值清零 key=100;/隨便給key賦值,以便

38、于下面的判斷 while(!(key=14|key=15|key=13) if(keydown() if(key<10&&j<4) /輸入數(shù)據(jù)如果超過4個(gè),超過4個(gè)的部分無效 num_temp =num_temp*10 +key; j+; j=0; if(key=14)/清除鍵 continue;/從此處退出循環(huán)并重新開始執(zhí)行循環(huán) if(key=15) numdata_order=num_temp; if(key=13) break; / display(data_order,numdata_order); i+; do keydown(); /等待功能返回鍵 while(!(key=13);接收機(jī)主程序與中斷服務(wù)程序:#include <reg51.h> /此文件中定義了51的一些特殊功能寄存器/*宏定義*/#define DISPLAY_PORT1 P0 /數(shù)碼管硬件接口1 ,位選端接口#define DISPLAY_PORT2 P2 /數(shù)碼管硬件接口2 , 段選端接口/*全局變量*/bit Flag=0;/顯示開/關(guān)的標(biāo)志位 unsigned char ReData6; /接收數(shù)據(jù)數(shù)組unsigned char ReTempData;

溫馨提示

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

評論

0/150

提交評論