2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  摘 要1</b></p><p>  Abstract2</p><p>  1設(shè)計(jì)原理與方法3</p><p>  1.1 硬件設(shè)計(jì)原理3</p><p>  1.2 程序的結(jié)構(gòu)化設(shè)計(jì)方

2、法4</p><p>  2 硬件電路及其說明6</p><p>  2.1 顯示電路單元6</p><p>  2.1.1 74HC573資料6</p><p>  2.1.2 數(shù)碼管顯示電路7</p><p>  2.1.3顯示電路原理圖及其說明8</p><p>  2.2 矩

3、陣鍵盤單元9</p><p>  2.2.1矩陣鍵盤的原理與檢測方式9</p><p>  2.2.2 矩陣鍵盤電路部分及其說明10</p><p>  2.3 單片機(jī)最小系統(tǒng)及外圍電路10</p><p>  2.3.1 MAX232資料11</p><p>  2.3.2 RS232接口12</p

4、><p>  2.3.3 STC89C5213</p><p>  2.3.4 復(fù)位電路15</p><p>  2.3.5 振蕩電路15</p><p>  2.3.6 串口電路16</p><p>  2.3.7 最小系統(tǒng)原理圖17</p><p>  3仿真軟件介紹18</p

5、><p>  3.1程序設(shè)計(jì)軟件Protel18</p><p>  3.2程序編寫軟件Keil18</p><p>  3.3程序仿真軟件Proteus18</p><p>  4 仿真電路測試.........................................................................

6、.................................19</p><p>  5 實(shí)物圖及其調(diào)試20</p><p>  6 小結(jié)與體會22</p><p><b>  7 參考文獻(xiàn)23</b></p><p>  附錄1:C語言源程序24</p><p>  附錄2:元件清

7、單34</p><p>  附錄3:單片機(jī)實(shí)習(xí)日記35</p><p><b>  摘要</b></p><p>  單片計(jì)算機(jī)即單片微型計(jì)算機(jī)。由RAM ,ROM,CPU構(gòu)成,定時,計(jì)數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)業(yè)和工業(yè)自動化上。而51系列單片機(jī)是各單片機(jī)中最為典型和最有代表性的一種。這次課程設(shè)

8、計(jì)通過對它的學(xué)習(xí),應(yīng)用,從而達(dá)到學(xué)習(xí)、設(shè)計(jì)、開發(fā)軟、硬的能力。</p><p>  本次課程設(shè)計(jì)包括STC89S52單片機(jī)最小系統(tǒng)包括復(fù)位和時鐘電路及供電系統(tǒng)、4×4矩陣鍵盤、獨(dú)立6個8段LED數(shù)碼管顯示電路。利用相關(guān)設(shè)計(jì)軟件進(jìn)行原理圖設(shè)計(jì)即利用Keil軟件編程以及Proteus軟件仿真來鞏固單片機(jī)應(yīng)用、模擬電路、數(shù)字電路課程及學(xué)會各種工程軟件的使用。 </p><p>  關(guān)鍵

9、字:單片機(jī) 最小系統(tǒng) 矩陣鍵盤 LED顯示 </p><p><b>  ABSTRACT</b></p><p>  Single chip computer is the single chip computer. By RAM, ROM, CPU constitute, time, count and multiple interface in the

10、 integration of micro controller. Its small size, low cost, the function is strong, widely used in intelligent industry and industrial automation. And 51 series microcontroller is the most typical and various microcontro

11、ller most representative one. This curriculum design through to its study, application, thus achieved the study, design, development, soft and hard ability. </p><p>  The curriculum design, including STC89S5

12、2MCU minimum system ( including a reset and clock circuit and power supply system ),4 x4 matrix keyboard, the independent 6 LED digital tube display circuit . Using circuit design software schematic design, using Keil so

13、ftware and Protues software simulation, we consolidate the MCU application, analog circuit, digital circuit course and learn all kinds of engineering software use. </p><p>  Key Words:MCU minimum system m

14、atrix keyboard LED digital tube display </p><p><b>  1設(shè)計(jì)原理與方法</b></p><p>  1.1 硬件設(shè)計(jì)原理</p><p>  本次課程設(shè)計(jì)是基于MCS-52單片機(jī)的擴(kuò)展設(shè)計(jì),利用52單片機(jī)為核心,根據(jù)課程設(shè)計(jì)的要求先編寫程序并在開發(fā)板上進(jìn)行調(diào)試,調(diào)試成功之后再進(jìn)一步設(shè)

15、計(jì)硬件電路,最后將硬件電路和編寫的程序結(jié)合實(shí)現(xiàn)要求的功能,并不斷檢錯調(diào)試,最后達(dá)到設(shè)計(jì)目的。</p><p>  功能選擇:通過功能選擇鍵,使得單片機(jī)處于不同的工作狀態(tài)并通過LED顯示相應(yīng)的內(nèi)容;可選擇的功能包括:數(shù)據(jù)輸入;數(shù)據(jù)顯示;串口通信。</p><p>  數(shù)據(jù)輸入:通過功能選擇鍵選擇“數(shù)據(jù)輸入”后,可分次輸入10個4位十進(jìn)制數(shù)據(jù),并將輸入的數(shù)據(jù)保存在內(nèi)部RAM中。</p&g

16、t;<p>  數(shù)據(jù)顯示:通過功能選擇鍵選擇“數(shù)據(jù)顯示”后,可顯示之前輸入的10個4位十進(jìn)制數(shù)據(jù)中的任一個。</p><p>  4)串口通信:將兩個單片機(jī)最小系統(tǒng)通過串口連接起來,其中一個作為主系統(tǒng),另一個作為輔系統(tǒng)。當(dāng)通過功能選擇鍵選擇“串行通信”后,當(dāng)在主系統(tǒng)上按下數(shù)字鍵后主系統(tǒng)的LED按從左向右移動的方式顯示按鍵輸入的數(shù)字,同時輔系統(tǒng)的LED上顯示與主系統(tǒng)同樣的內(nèi)容。</p>

17、<p>  1.2 程序的結(jié)構(gòu)化設(shè)計(jì)方法</p><p>  如圖所示,發(fā)送機(jī)程序設(shè)計(jì)結(jié)構(gòu)如下:</p><p>  圖1.1 發(fā)送機(jī)程序設(shè)計(jì)結(jié)構(gòu)</p><p>  接收機(jī)程序設(shè)計(jì)結(jié)構(gòu)圖如下:</p><p>  圖1.2 接收機(jī)程序設(shè)計(jì)結(jié)構(gòu)圖</p><p>  2 硬件電路及其說明</p>

18、<p>  2.1 顯示電路單元</p><p>  2.1.1 74HC573資料</p><p>  74HC573是八進(jìn)制3 態(tài)非反轉(zhuǎn)透明鎖存器,是高性能硅門CMOS器件。 </p><p>  原理說明:74HC573的八個鎖存器都是透明的D 型鎖存器,當(dāng)使能(G)為高時,Q 輸出 將隨數(shù)據(jù)(D)輸入而變。當(dāng)使能為低時,輸出將鎖存在已建立的數(shù)據(jù)

19、電平上。輸出控制不影響鎖存器的內(nèi)部工作,即老數(shù)據(jù)可以保持,甚至當(dāng)輸出被關(guān)閉時, 新的數(shù)據(jù)也可以置入。這種電路可以驅(qū)動大電容或低阻抗負(fù)載,可以直接與系統(tǒng)總線接口并驅(qū)動總線,而不需要外接口。特別適用于緩沖寄存器,I/O 通道,雙向總線驅(qū)動器和工作寄存器。</p><p><b>  1)引腳圖:</b></p><p>  圖2-1 74HC573引腳圖</p&g

20、t;<p><b>  引腳功能表:</b></p><p>  圖2-2 74HC573功能真值表</p><p>  2.1.2 數(shù)碼管顯示電路</p><p>  LED數(shù)碼管顯示是利用半導(dǎo)體發(fā)光制成條形的發(fā)光二極管,封裝在一起組成數(shù)字或其他符號形狀。數(shù)碼管根據(jù)公共端不同,分為共陰極和共陽極兩種形式。 本次設(shè)計(jì)采用共陰

21、級數(shù)碼管,考慮到六位數(shù)碼顯示管顯示,本次設(shè)計(jì)采用了數(shù)碼管LG5631AH。 </p><p>  2.1.3 顯示電路原理圖及其說明</p><p>  圖2-3 顯示部分電路原理圖</p><p>  說明:從原理圖我們可以清晰的看到電路的硬件連接,我們采用兩個共陰級數(shù)碼管LG5631AH作為顯示部分,74HC573作為數(shù)碼管與單片機(jī)的連

22、接的中間部分,其中一片74HC573作為位選控制端口,控制六個數(shù)碼管的選中,另一片作為段選端口,選中每一位七段數(shù)碼管的數(shù)字顯示。這樣就可以實(shí)現(xiàn)要求中關(guān)于矩陣鍵盤的顯示電路和溫度檢測顯示電路的要求。</p><p>  其他與單片機(jī)功能相關(guān)部分由排針引出,實(shí)現(xiàn)外接。</p><p>  2.2 矩陣鍵盤單元</p><p>  2.2.1矩陣鍵盤的原理與檢測方式<

23、;/p><p><b>  原理說明:</b></p><p>  列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。</p><p>  

24、鍵盤的工作方式一般有循環(huán)掃描和中斷掃描兩種。</p><p>  循環(huán)掃描方式利用CPU在完成其他工作的空余,調(diào)用鍵盤掃描子程序來響應(yīng)鍵輸入要求。在執(zhí)行鍵功能程序時,CPU不再響應(yīng)鍵輸入要求。鍵盤掃描程序通常具備4項(xiàng)功能:第一,判斷鍵盤上有無鍵按下。第二,去除鍵抖動影響。在判斷有鍵按下,軟件延時一段時間后,再判斷鍵盤狀態(tài)。如果仍為有鍵按下狀態(tài),則確定;否則按鍵抖動處理。第三,掃描鍵盤,得到按鍵的鍵號。第四,判別閉

25、合的鍵是否釋放。在系統(tǒng)初始化后,CPU必須反復(fù)輪流調(diào)用掃描式顯示子程序和鍵盤輸入程序。在識別有鍵閉合后,執(zhí)行規(guī)定的操作,然后再重新進(jìn)人上述循環(huán)。</p><p>  循環(huán)工作方式采用掃描鍵盤的工作方式,雖然能響應(yīng)鍵輸人的命令或數(shù)據(jù),但是這種方式不管鍵盤上有無鍵按下,CPU總要定時掃描鍵盤;而應(yīng)用系統(tǒng)在工作時,并不經(jīng)常需要按鍵輸入,因此,CPU常處于空掃描狀態(tài)。為了提高CPU的工作效率,可采用中斷掃描工作方式,即只

26、在鍵盤有鍵按下時發(fā)中斷請求,CPU響應(yīng)中斷請求后,轉(zhuǎn)中斷服務(wù)程序,進(jìn)行鍵盤掃描,識別鍵碼。中斷掃描工作方式的一種簡易鍵盤接口電路。其直接由P1口中高、低字節(jié)構(gòu)成4x4行列式鍵盤。鍵盤的列線與P1口的低4位相接,鍵盤的行線接到Pl口的高4位。圖5中“與”門的4輸入端分別與各列線相連,而輸出端接單片機(jī)外部中斷輸入INT0。初始化時,鍵盤行輸出口全部置0。當(dāng)有鍵按下時,1NT0端為低電平,向CPU發(fā)出中斷請求,若CPU開放外部中斷,則響應(yīng)該中

27、斷請求,進(jìn)人中斷服務(wù)程序。此外還須注意保護(hù)與恢復(fù)現(xiàn)場。</p><p>  2.2.2 矩陣鍵盤電路部分及其說明</p><p>  圖2-4 矩陣鍵盤電路</p><p>  說明:本次設(shè)計(jì)采用循環(huán)掃描的方法,每次檢測有按鍵按下,由于行列電平的變化,便開始查詢此時行列電平值所對應(yīng)的鍵盤編碼,再由鍵盤編碼輸出對應(yīng)的數(shù)碼管顯示編碼并顯示鍵值,由此按下一個按鍵,便可以得

28、到相應(yīng)的顯示部分。本設(shè)計(jì)可實(shí)現(xiàn)要求。</p><p>  2.3 單片機(jī)最小系統(tǒng)及外圍電路</p><p>  2.3.1 MAX232資料</p><p>  max232在這里作為電平轉(zhuǎn)換功能,應(yīng)用電路如下:</p><p>  圖2-5 max232應(yīng)用電路</p><p><b>  引腳圖</

29、b></p><p>  圖2-6 max232引腳圖</p><p>  電路說明:第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個電源,提供給RS-232串口電平的需要。第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個數(shù)據(jù)通道。其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T

30、1OUT)為第一數(shù)據(jù)通道。8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道。TTL/CMOS數(shù)據(jù)從11引腳(T1IN)、10引腳(T2IN)輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從14腳(T1OUT)、7腳(T2OUT)送到電腦DB9插頭;DB9插頭的RS-232數(shù)據(jù)從13引腳(R1IN)、8引腳(R2IN)輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從12引腳 (R1OUT)、9引腳(R2OUT)輸出。 第三部分是供

31、電。15腳GND、16腳VCC(+5v)。</p><p>  2.3.2 RS232接口</p><p>  a.簡介:RS232接口連接器一般使用型號為DB-9的9芯插頭座,只需3條接口線,即"發(fā)送數(shù)據(jù)"、"接收數(shù)據(jù)"和"信號地"即可傳輸數(shù)據(jù),在此用于串口通信接口,其引腳圖如下所示。</p><p>

32、  b.特點(diǎn):1)RS232的規(guī)范中,電壓值在+3V~+15V(一般使用+6V)稱為"0"或"ON"。電壓在-3V~-15V(一般使用-6V)稱為"1"或"OFF";</p><p>  2)RS232為全雙工工作模式,其信號的電壓是參考地線而得到的,可以同時進(jìn)行數(shù)據(jù)的傳送和接收。</p><p>  c.引腳

33、功能介紹和引腳圖:1 數(shù)據(jù)載波檢測 DCD 2 接收數(shù)據(jù) RXD 3 發(fā)送數(shù)據(jù) TXD 4數(shù)據(jù)終端準(zhǔn)備 DTR 5信號地 GND 6 數(shù)據(jù)設(shè)備準(zhǔn)備好 DSR 7請求發(fā)送 RTS 8 清除發(fā)送 CTS 9振鈴指示 DELL </p><p>  圖2-7 RS232接口引腳圖

34、 </p><p>  2.3.3 STC89C52</p><p>  1)簡介:STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能

35、: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,2個16 位 定時器/計(jì)數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬

36、件復(fù)位為止。最高運(yùn)作頻率35MHz,6T/12T可選。 </p><p><b>  2)參數(shù):</b></p><p>  1. 增強(qiáng)型8051 單片機(jī),6 時鐘/機(jī)器周期和12 時鐘/機(jī)器周期可以任意 選擇,指令代碼完全兼容傳統(tǒng)8051.  </p><p>  工作電壓:5.5V~3.3V(5V 單片機(jī))/3.8V~2.0V(3V 單片機(jī)

37、)   </p><p>  工作頻率范圍:0~40MHz,相當(dāng)于普通8051 的0~80MHz,實(shí)際工作 頻率可達(dá)48MHz   4. 用戶應(yīng)用程序空間為8K 字節(jié)    </p><p>  片上集成512 字節(jié)RAM   </p><p>  通用I/O 口(32 個),復(fù)位后為:P0/P1/P2/P3 是準(zhǔn)雙向口/弱上拉, P0 口是漏極開路輸出,作為總

38、線擴(kuò)展用時,不用加上拉電阻,作為 I/O 口用時,需加上拉電阻。   </p><p>  .ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器,無 需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數(shù)秒即可完成一片   </p><p>  共3 個16 位定時器/計(jì)數(shù)器。即定時器T0、T1、T2   </p><p>

39、  外部中斷4 路,下降沿中斷或低電平觸發(fā)電路,Power Down 模式可 由外部中斷低電平觸發(fā)中斷方式喚醒   </p><p>  通用異步串行口(UART),還可用定時器軟件實(shí)現(xiàn)多個UART   </p><p>  .工作溫度范圍:-40~+85℃(工業(yè)級)/0~75℃(商業(yè)級)  </p><p>  3)引腳圖如下,通用I/O 口(32 個),有40個

40、引腳。</p><p>  圖2-8 STC89C52引腳圖</p><p>  2.3.4 復(fù)位電路</p><p>  復(fù)位一般有上電和按鍵復(fù)位兩種方式,本次設(shè)計(jì)采用按鍵復(fù)位,按鍵接在單片機(jī)的RST(30引腳)端口。電路如下:</p><p>  圖2-9 按鍵復(fù)位電路</p><p><b>  2.

41、3.5振蕩電路</b></p><p>  單片機(jī)系統(tǒng)里都有晶振,在單片機(jī)系統(tǒng)里晶振作用非常大,全稱叫晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生單片機(jī)所需的時鐘頻率,單片機(jī)晶振提供的時鐘頻率越高,那么單片機(jī)運(yùn)行速度就越快,單片接的一切指令的執(zhí)行都是建立在單片機(jī)晶振提供的時鐘頻率。電路如下:</p><p>  圖2-10 晶體震蕩電路</p><p>  2.

42、3.6 串口電路</p><p>  圖 2-11串口電路</p><p>  說明:各部分均通過對應(yīng)引腳標(biāo)號相連,串口電路可實(shí)現(xiàn)串口通信,通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。如圖。</p><p>  2.3.7 最小系統(tǒng)原理圖</p><p>  由單片機(jī)為核心構(gòu)成有基本功能的最小系統(tǒng),原理圖如下:</p>

43、<p>  圖2-12 最小系統(tǒng)原理圖</p><p><b>  3仿真軟件介紹</b></p><p>  3.1程序設(shè)計(jì)軟件Protel</p><p>  Protel公司于80年代末推出了Protel——電子行業(yè)的CAD軟件,由于最初在國內(nèi)普及率較高,所以發(fā)展較好,大多數(shù)公司中低頻電路設(shè)計(jì)都采用此軟件。早期的版本主要用于

44、印刷版自動布線。后來推出著名的Protel 99se,能夠Windows 9X/XP下運(yùn)行。2000年以后,Altium公司又推出了該軟件的升級版Altium Designer。Altium Designer在原有的基礎(chǔ)上做出了很大的改進(jìn),能夠打開如Pspice等仿真軟件做出的文件。雖然市場上還有很多電路設(shè)計(jì)軟件,但是該軟件還是占有很大的市場份額。現(xiàn)在業(yè)界最高版本為Altium Desi

45、gner Winter 09版。本次設(shè)計(jì)采用的是Altium Designer進(jìn)行電路原理圖的繪制。 </p><p>  3.2程序編寫軟件Keil</p><p>

46、;  Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。本次設(shè)計(jì)編程主要使用Keil軟件進(jìn)行編程。</p><p>  3.3仿真

47、軟件Proteus</p><p>  Protues軟件是英國Labcenter electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機(jī)愛好者、從事單片機(jī)教學(xué)的教師、致力于單片機(jī)開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代

48、碼調(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)行仿真。</p><p><b>  4 仿真電路測試</b></p><p><b>  圖4

49、-1 上電復(fù)位</b></p><p>  圖4-2 數(shù)據(jù)輸入顯示</p><p>  圖4-3 數(shù)據(jù)串行通信顯示</p><p><b>  5 實(shí)物圖及其調(diào)試</b></p><p>  圖5-1 上電復(fù)位 </p><p>  圖5-2 數(shù)據(jù)輸入顯示</p>

50、<p>  圖5-3 實(shí)物背面圖 </p><p>  圖5-4 串行通信顯示圖</p><p><b>  6 小結(jié)與體會</b></p><p>  本次課程設(shè)計(jì)結(jié)合本學(xué)期所學(xué)習(xí)的單片機(jī)的基礎(chǔ)知識,將硬件和軟件的知識全都聯(lián)系起來,硬件方面有電路的連接和芯片的選取,軟件方面有程序的設(shè)計(jì)和編寫,這也為以后進(jìn)一步學(xué)習(xí)嵌入式系統(tǒng)打好了

51、基礎(chǔ)。</p><p>  通過這些天來的實(shí)習(xí),印象最深的是編寫程序和焊接電路的時候,前者是軟件方面的算法問題,實(shí)現(xiàn)功能切換的程序方法有很多,我考慮的是利用中斷來實(shí)現(xiàn),可是并不滿足程序的要求,經(jīng)過調(diào)試和改善后得以成功。后者是硬件電路的焊接,很多同學(xué)已經(jīng)學(xué)會PCB,所以硬件電路對他們很輕松容易,而硬件電路連接復(fù)雜,單純的技術(shù)焊接費(fèi)時難測,讓我覺得與一些同學(xué)還是有很大的差距,有待改進(jìn)。</p><

52、p>  當(dāng)然,最終實(shí)物實(shí)現(xiàn)了所要求的功能,可是還是有很多地方需要改進(jìn),例如PCB的設(shè)計(jì)和制作,例如程序的書寫規(guī)范,不過總的來說這次單片機(jī)實(shí)習(xí)還是讓我學(xué)到非常多的東西,也增加了我的動手機(jī)會,希望自己以后更加嚴(yán)格的要求自己,做到更好。</p><p><b>  7 參考文獻(xiàn)</b></p><p>  [1] 尹勇 撒繼銘等,單片計(jì)算機(jī)原理及應(yīng)用(第1版), 科學(xué)

53、出版社, 2013年</p><p>  [2] 謝自美.電子線路設(shè)計(jì)·實(shí)驗(yàn)·測試(第三版).武漢:華中科技大學(xué)出版社</p><p>  [3] 李群芳. 單片微型計(jì)算機(jī)與接口技術(shù)(第3版).電子工業(yè)出版社,2008</p><p>  [4] 劉教瑜. 單片機(jī)原理及應(yīng)用.武漢理工大學(xué)出版社,2011</p><p> 

54、 [5] 張東亮. 單片機(jī)原理與應(yīng)用.人民郵電出版社,2009</p><p>  附錄1:C語言源程序</p><p><b>  發(fā)送機(jī)主程序:</b></p><p>  #include<reg51.h></p><p>  #include <intrins.h></p>

55、<p><b>  bit Flag;</b></p><p>  unsigned int ReData,SenData;</p><p>  char table[17]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x84};//數(shù)碼管代碼&l

56、t;/p><p>  char dis_buf;</p><p>  char i=0,j=0,k=0,inp1=0,inp2=0,inp3=0,on_off=0,disp=0; //初始化控制變量</p><p>  char temp,key,num,m,n;</p><p>  char a[11][5];</p><p

57、>  void keydown(void);</p><p>  void keyscan(void);</p><p>  void display(void);</p><p>  void init(void); </p><p>  void delay(int z)</p><p><b>

58、  {</b></p><p><b>  int x,y;</b></p><p>  for(x=0;x<z;x++)</p><p>  for(y=0;y<110;y++);</p><p><b>  }</b></p><p>  void

59、 main()</p><p><b>  {</b></p><p><b>  P0=0xff;</b></p><p><b>  P2=0xff;</b></p><p>  dis_buf=0xbf;</p><p><b>  wh

60、ile(1)</b></p><p><b>  {</b></p><p>  for(m=0;m<10;m++)</p><p>  for(n=0;n<5;n++)</p><p>  a[m][n]=0;</p><p>  display();</p>

61、<p><b>  }</b></p><p>  } </p><p>  void keydown(void) </p><p><b>  {</b></p><p><b>  P1=0xf0;</b></p><

62、;p>  if(P1!=0xf0)</p><p><b>  {</b></p><p>  keyscan(); //掃描函數(shù)</p><p>  while(P1!=0xF0);</p><p><b>  }</b></p><p><b>  

63、}</b></p><p>  void keyscan(void)</p><p>  { int m,n;</p><p>  //**********為每個按鈕設(shè)置一個編號key**********************************</p><p>  P1=0x0f; //低四位輸入</

64、p><p><b>  delay(1);</b></p><p><b>  temp=P1;</b></p><p>  temp=(~temp)&0x0f;</p><p>  if(temp==1)key=0;</p><p>  else if(temp==2

65、)key=4;</p><p>  else if(temp==4)key=8;</p><p>  else if(temp==8)key=12;</p><p><b>  P1=0xf0;</b></p><p><b>  delay(1);</b></p><p&

66、gt;<b>  temp=P1;</b></p><p>  temp=(temp>>4);</p><p>  temp=(~temp)&0x0f;</p><p>  if(temp==1)key=key+0;</p><p>  else if(temp==2)key=key+1;<

67、/p><p>  else if(temp==4)key=key+2;</p><p>  else if(temp==8)key=key+3; </p><p>  if(key==3||key==7||key==11||key==12||key>13){ //控制按鈕輸入</p><p>  if(key==3)//數(shù)據(jù)輸

68、入按鈕</p><p><b>  {</b></p><p>  on_off=1;//開數(shù)據(jù)輸入開關(guān)</p><p><b>  }</b></p><p>  else if(key==7)//數(shù)據(jù)顯示按鈕</p><p><b>  {</b&

69、gt;</p><p><b>  disp=1;</b></p><p><b>  num=0;</b></p><p><b>  }</b></p><p>  else if(key==11) //串行通信</p><p><b&

70、gt;  {</b></p><p><b>  init();</b></p><p>  inp2=1,i=0,j=0,inp1=0,on_off=0,disp=0,num=0;</p><p>  for(m=0;m<10;m++)</p><p>  for(n=0;n<5;n++)<

71、;/p><p>  a[m][n]=0;</p><p><b>  }</b></p><p>  else if(key==12) //回車按鈕</p><p><b>  {</b></p><p><b>  inp1++; </b><

72、;/p><p>  if(inp1==2) {inp1=0;j=0;}</p><p><b>  }</b></p><p>  else if(key==15) //清除按鈕</p><p><b>  {</b></p><p>  i=0,j=0,inp1=0,i

73、np2=0,on_off=0,disp=0,num=0;</p><p>  for(m=0;m<10;m++)</p><p>  for(n=0;n<5;n++)</p><p>  a[m][n]=0; </p><p><b>  }</b></p><p>  els

74、e if(key==14) //輸入清除按鈕</p><p><b>  {</b></p><p>  for(j=0;j<6;j++) a[i][j]=0;</p><p><b>  inp1=0;</b></p><p><b>  j=0;</b><

75、/p><p><b>  }</b></p><p>  }else{ //數(shù)據(jù)按鈕輸入</p><p>  if(key<3) {num=key+1;}//num為1~3</p><p>  else if(key>3&&key<7) {num=key;

76、}//num為4~6</p><p>  else if(key>7&&key<11) {num=key-1;}//num為7~9</p><p>  else if(key==13) {num=0;}//num為0</p><p>  if(disp==0&&on_off==1){</p>

77、<p>  if(inp1==0){i++; a[i][0]=num;}//數(shù)據(jù)存儲</p><p>  else if(inp1==1) {j++;a[i][j]=num;} </p><p>  }else if(inp2==1)</p><p><b>  {</b></p><p&g

78、t;  a[0][i]=num;</p><p><b>  i++;</b></p><p>  if(i==6) i=0;</p><p><b>  SBUF=num;</b></p><p><b>  }</b></p><p><b&g

79、t;  }</b></p><p><b>  }</b></p><p><b>  /* </b></p><p><b>  */</b></p><p>  void display(void)</p><p><b>

80、;  {</b></p><p><b>  while(1){</b></p><p><b>  P0=0xbf;</b></p><p>  keydown();</p><p>  while(on_off){//數(shù)據(jù)輸入和顯示</p><p>

81、<b>  P2=0x01;</b></p><p>  P0=table[a[i][0]];</p><p>  delay(10);</p><p><b>  P2=0x04;</b></p><p>  P0=table[a[i][1]];</p><p>  del

82、ay(10);</p><p><b>  P2=0x08;</b></p><p>  P0=table[a[i][2]];</p><p>  delay(10);</p><p><b>  P2=0x10;</b></p><p>  P0=table[a[i][3]

83、];</p><p>  delay(10);</p><p><b>  P2=0x20;</b></p><p>  P0=table[a[i][4]];</p><p>  delay(10);</p><p>  keydown();</p><p>  while

84、(disp)</p><p><b>  {</b></p><p>  keydown();</p><p>  for(m=0;m<11;m++)</p><p><b>  {</b></p><p>  if(num==a[m][0])k=m;</p>

85、;<p><b>  } </b></p><p><b>  P2=0x01;</b></p><p>  P0=table[a[k][0]];</p><p>  delay(10);</p><p><b>  P2=0x04;</b></p>

86、<p>  P0=table[a[k][1]];</p><p>  delay(10);</p><p><b>  P2=0x08;</b></p><p>  P0=table[a[k][2]];</p><p>  delay(10);</p><p><b>  P

87、2=0x10;</b></p><p>  P0=table[a[k][3]];</p><p>  delay(10);</p><p><b>  P2=0x20;</b></p><p>  P0=table[a[k][4]];</p><p>  delay(10);</

88、p><p><b>  }</b></p><p><b>  }</b></p><p>  while(inp2)</p><p><b>  {</b></p><p><b>  k=0x01;</b></p>&

89、lt;p>  for(j=0;j<6;j++) </p><p><b>  { </b></p><p>  P2=k; //點(diǎn)亮最右邊的數(shù)碼管 </p><p>  P0=table[a[0][j]]; //顯示該數(shù)值 </p><p>  delay(10); //延時,便于眼睛看清 </

90、p><p>  k=_crol_(k,1);//循環(huán)右移一位 </p><p>  if(k==0x40) k=0x01;</p><p><b>  } </b></p><p>  keydown();</p><p><b>  }</b></p><

91、p><b>  }</b></p><p><b>  }</b></p><p>  void init(void)</p><p><b>  {</b></p><p>  // while(1){P0=0xbf;}</p><p>  T

92、MOD=0x20;//T1工作在方式2 </p><p>  TH1=0XF4; //波特率為:4.8kbit/s,發(fā)送與接收的波特率要相等 </p><p>  TL1=0XF4; </p><p>  TR1=1; //啟動定時器1 </p><p>  SCON=0X50;//串口中斷工作在方式1,允許接收</p><

93、;p><b>  }</b></p><p><b>  /* </b></p><p><b>  接收程序 </b></p><p>  線路連接:同上, 主從單片機(jī)用3線連接,共地,rxd,txd交叉 </p><p>  程序效果:用于顯示主機(jī)發(fā)送的數(shù)值 <

94、/p><p><b>  */ </b></p><p>  #include<reg52.h> //頭文件 </p><p>  #include<intrins.h> //循環(huán)文件 </p><p>  #define uchar unsigned char//宏定義 </p>&l

95、t;p>  #define uint unsigned int </p><p>  uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x84}; </p><p>  uchar table_tr[6];//暫存最后按下的六個數(shù)值 <

96、/p><p>  uchar count,cnt;//定義全局變量 </p><p>  //延時子函數(shù),用于數(shù)碼管顯示 </p><p>  void delay(uchar i) </p><p><b>  { </b></p><p>  uchar x,y; </p><

97、p>  for(x=i;x>0;x--) </p><p>  for(y=110;y>0;y--); </p><p><b>  } </b></p><p><b>  //初始化子函數(shù) </b></p><p>  void init() </p><p

98、><b>  { </b></p><p>  TMOD=0x20;//T1工作在方式2 </p><p>  TH1=0XF4; //波特率為:4.8kbit/s,發(fā)送與接收的波特率要相等 </p><p>  TL1=0XF4; </p><p>  TR1=1; //啟動定時器1 </p>&l

99、t;p>  SCON=0X50;//串口中斷工作在方式1,允許接收 </p><p><b>  } </b></p><p><b>  //顯示子函數(shù) </b></p><p>  void display() </p><p><b>  { </b></p

100、><p>  uchar i,j;//定義局部變量 </p><p>  j=0x01; //賦值 </p><p>  for(i=0;i<6;i++) //顯示六個數(shù)值 </p><p><b>  { </b></p><p><b>  P2=j; </b><

101、/p><p>  P0=table[table_tr[i]]; </p><p>  delay(10); </p><p>  j=_crol_(j,1);//循環(huán)左移一位 </p><p>  if(j==0x40) j=0x01; </p><p><b>  } </b></p>

102、<p><b>  } </b></p><p><b>  //主函數(shù) </b></p><p>  void main() </p><p><b>  { </b></p><p>  uchar i;//定義局部變量 </p><p>

103、;  init(); //調(diào)用初始化子函數(shù) </p><p><b>  while(1) </b></p><p><b>  { </b></p><p>  while(RI) //判斷是否接受完 </p><p><b>  { </b></p><

104、p>  RI=0;//接受完了,標(biāo)志位清零 </p><p>  for(i=5;i>0;i--) //把數(shù)組的數(shù)值都往前移一位,騰出table_tr【5】 </p><p>  table_tr[i]=table_tr[i-1]; </p><p>  table_tr[0]=SBUF;//裝入接收的數(shù)值 </p><p>&

105、lt;b>  } </b></p><p>  display();//調(diào)用顯示子函數(shù) </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  附錄2:元件清單</b></p><

溫馨提示

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

評論

0/150

提交評論