版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 摘 要1</b></p><p> Abstract2</p><p> 1設計原理與方法3</p><p> 1.1 硬件設計原理3</p><p> 1.2 程序的結(jié)構(gòu)化設計方
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 單片機最小系統(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 復位電路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程序設計軟件Protel18</p><p> 3.2程序編寫軟件Keil18</p><p> 3.3程序仿真軟件Proteus18</p><p> 4 仿真電路測試.........................................................................
6、.................................19</p><p> 5 實物圖及其調(diào)試20</p><p> 6 小結(jié)與體會22</p><p><b> 7 參考文獻23</b></p><p> 附錄1:C語言源程序24</p><p> 附錄2:元件清
7、單34</p><p> 附錄3:單片機實習日記35</p><p><b> 摘要</b></p><p> 單片計算機即單片微型計算機。由RAM ,ROM,CPU構(gòu)成,定時,計數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應用于智能產(chǎn)業(yè)和工業(yè)自動化上。而51系列單片機是各單片機中最為典型和最有代表性的一種。這次課程設
8、計通過對它的學習,應用,從而達到學習、設計、開發(fā)軟、硬的能力。</p><p> 本次課程設計包括STC89S52單片機最小系統(tǒng)包括復位和時鐘電路及供電系統(tǒng)、4×4矩陣鍵盤、獨立6個8段LED數(shù)碼管顯示電路。利用相關(guān)設計軟件進行原理圖設計即利用Keil軟件編程以及Proteus軟件仿真來鞏固單片機應用、模擬電路、數(shù)字電路課程及學會各種工程軟件的使用。 </p><p> 關(guān)鍵
9、字:單片機 最小系統(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設計原理與方法</b></p><p> 1.1 硬件設計原理</p><p> 本次課程設計是基于MCS-52單片機的擴展設計,利用52單片機為核心,根據(jù)課程設計的要求先編寫程序并在開發(fā)板上進行調(diào)試,調(diào)試成功之后再進一步設
15、計硬件電路,最后將硬件電路和編寫的程序結(jié)合實現(xiàn)要求的功能,并不斷檢錯調(diào)試,最后達到設計目的。</p><p> 功能選擇:通過功能選擇鍵,使得單片機處于不同的工作狀態(tài)并通過LED顯示相應的內(nèi)容;可選擇的功能包括:數(shù)據(jù)輸入;數(shù)據(jù)顯示;串口通信。</p><p> 數(shù)據(jù)輸入:通過功能選擇鍵選擇“數(shù)據(jù)輸入”后,可分次輸入10個4位十進制數(shù)據(jù),并將輸入的數(shù)據(jù)保存在內(nèi)部RAM中。</p&g
16、t;<p> 數(shù)據(jù)顯示:通過功能選擇鍵選擇“數(shù)據(jù)顯示”后,可顯示之前輸入的10個4位十進制數(shù)據(jù)中的任一個。</p><p> 4)串口通信:將兩個單片機最小系統(tǒng)通過串口連接起來,其中一個作為主系統(tǒng),另一個作為輔系統(tǒng)。當通過功能選擇鍵選擇“串行通信”后,當在主系統(tǒng)上按下數(shù)字鍵后主系統(tǒng)的LED按從左向右移動的方式顯示按鍵輸入的數(shù)字,同時輔系統(tǒng)的LED上顯示與主系統(tǒng)同樣的內(nèi)容。</p>
17、<p> 1.2 程序的結(jié)構(gòu)化設計方法</p><p> 如圖所示,發(fā)送機程序設計結(jié)構(gòu)如下:</p><p> 圖1.1 發(fā)送機程序設計結(jié)構(gòu)</p><p> 接收機程序設計結(jié)構(gòu)圖如下:</p><p> 圖1.2 接收機程序設計結(jié)構(gòu)圖</p><p> 2 硬件電路及其說明</p>
18、<p> 2.1 顯示電路單元</p><p> 2.1.1 74HC573資料</p><p> 74HC573是八進制3 態(tài)非反轉(zhuǎn)透明鎖存器,是高性能硅門CMOS器件。 </p><p> 原理說明:74HC573的八個鎖存器都是透明的D 型鎖存器,當使能(G)為高時,Q 輸出 將隨數(shù)據(jù)(D)輸入而變。當使能為低時,輸出將鎖存在已建立的數(shù)據(jù)
19、電平上。輸出控制不影響鎖存器的內(nèi)部工作,即老數(shù)據(jù)可以保持,甚至當輸出被關(guān)閉時, 新的數(shù)據(jù)也可以置入。這種電路可以驅(qū)動大電容或低阻抗負載,可以直接與系統(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ù)碼管顯示是利用半導體發(fā)光制成條形的發(fā)光二極管,封裝在一起組成數(shù)字或其他符號形狀。數(shù)碼管根據(jù)公共端不同,分為共陰極和共陽極兩種形式。 本次設計采用共陰
21、級數(shù)碼管,考慮到六位數(shù)碼顯示管顯示,本次設計采用了數(shù)碼管LG5631AH。 </p><p> 2.1.3 顯示電路原理圖及其說明</p><p> 圖2-3 顯示部分電路原理圖</p><p> 說明:從原理圖我們可以清晰的看到電路的硬件連接,我們采用兩個共陰級數(shù)碼管LG5631AH作為顯示部分,74HC573作為數(shù)碼管與單片機的連
22、接的中間部分,其中一片74HC573作為位選控制端口,控制六個數(shù)碼管的選中,另一片作為段選端口,選中每一位七段數(shù)碼管的數(shù)字顯示。這樣就可以實現(xiàn)要求中關(guān)于矩陣鍵盤的顯示電路和溫度檢測顯示電路的要求。</p><p> 其他與單片機功能相關(guān)部分由排針引出,實現(xiàn)外接。</p><p> 2.2 矩陣鍵盤單元</p><p> 2.2.1矩陣鍵盤的原理與檢測方式<
23、;/p><p><b> 原理說明:</b></p><p> 列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。</p><p>
24、鍵盤的工作方式一般有循環(huán)掃描和中斷掃描兩種。</p><p> 循環(huán)掃描方式利用CPU在完成其他工作的空余,調(diào)用鍵盤掃描子程序來響應鍵輸入要求。在執(zhí)行鍵功能程序時,CPU不再響應鍵輸入要求。鍵盤掃描程序通常具備4項功能:第一,判斷鍵盤上有無鍵按下。第二,去除鍵抖動影響。在判斷有鍵按下,軟件延時一段時間后,再判斷鍵盤狀態(tài)。如果仍為有鍵按下狀態(tài),則確定;否則按鍵抖動處理。第三,掃描鍵盤,得到按鍵的鍵號。第四,判別閉
25、合的鍵是否釋放。在系統(tǒng)初始化后,CPU必須反復輪流調(diào)用掃描式顯示子程序和鍵盤輸入程序。在識別有鍵閉合后,執(zhí)行規(guī)定的操作,然后再重新進人上述循環(huán)。</p><p> 循環(huán)工作方式采用掃描鍵盤的工作方式,雖然能響應鍵輸人的命令或數(shù)據(jù),但是這種方式不管鍵盤上有無鍵按下,CPU總要定時掃描鍵盤;而應用系統(tǒng)在工作時,并不經(jīng)常需要按鍵輸入,因此,CPU常處于空掃描狀態(tài)。為了提高CPU的工作效率,可采用中斷掃描工作方式,即只
26、在鍵盤有鍵按下時發(fā)中斷請求,CPU響應中斷請求后,轉(zhuǎn)中斷服務程序,進行鍵盤掃描,識別鍵碼。中斷掃描工作方式的一種簡易鍵盤接口電路。其直接由P1口中高、低字節(jié)構(gòu)成4x4行列式鍵盤。鍵盤的列線與P1口的低4位相接,鍵盤的行線接到Pl口的高4位。圖5中“與”門的4輸入端分別與各列線相連,而輸出端接單片機外部中斷輸入INT0。初始化時,鍵盤行輸出口全部置0。當有鍵按下時,1NT0端為低電平,向CPU發(fā)出中斷請求,若CPU開放外部中斷,則響應該中
27、斷請求,進人中斷服務程序。此外還須注意保護與恢復現(xiàn)場。</p><p> 2.2.2 矩陣鍵盤電路部分及其說明</p><p> 圖2-4 矩陣鍵盤電路</p><p> 說明:本次設計采用循環(huán)掃描的方法,每次檢測有按鍵按下,由于行列電平的變化,便開始查詢此時行列電平值所對應的鍵盤編碼,再由鍵盤編碼輸出對應的數(shù)碼管顯示編碼并顯示鍵值,由此按下一個按鍵,便可以得
28、到相應的顯示部分。本設計可實現(xiàn)要求。</p><p> 2.3 單片機最小系統(tǒng)及外圍電路</p><p> 2.3.1 MAX232資料</p><p> max232在這里作為電平轉(zhuǎn)換功能,應用電路如下:</p><p> 圖2-5 max232應用電路</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.特點:1)RS232的規(guī)范中,電壓值在+3V~+15V(一般使用+6V)稱為"0"或"ON"。電壓在-3V~-15V(一般使用-6V)稱為"1"或"OFF";</p><p> 2)RS232為全雙工工作模式,其信號的電壓是參考地線而得到的,可以同時進行數(shù)據(jù)的傳送和接收。</p><p> c.引腳
33、功能介紹和引腳圖:1 數(shù)據(jù)載波檢測 DCD 2 接收數(shù)據(jù) RXD 3 發(fā)送數(shù)據(jù) TXD 4數(shù)據(jù)終端準備 DTR 5信號地 GND 6 數(shù)據(jù)設備準備好 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為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標準功能
35、: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復位電路,2個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬
36、件復位為止。最高運作頻率35MHz,6T/12T可選。 </p><p><b> 2)參數(shù):</b></p><p> 1. 增強型8051 單片機,6 時鐘/機器周期和12 時鐘/機器周期可以任意 選擇,指令代碼完全兼容傳統(tǒng)8051. </p><p> 工作電壓:5.5V~3.3V(5V 單片機)/3.8V~2.0V(3V 單片機
37、) </p><p> 工作頻率范圍:0~40MHz,相當于普通8051 的0~80MHz,實際工作 頻率可達48MHz 4. 用戶應用程序空間為8K 字節(jié) </p><p> 片上集成512 字節(jié)RAM </p><p> 通用I/O 口(32 個),復位后為:P0/P1/P2/P3 是準雙向口/弱上拉, P0 口是漏極開路輸出,作為總
38、線擴展用時,不用加上拉電阻,作為 I/O 口用時,需加上拉電阻。 </p><p> .ISP(在系統(tǒng)可編程)/IAP(在應用可編程),無需專用編程器,無 需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數(shù)秒即可完成一片 </p><p> 共3 個16 位定時器/計數(shù)器。即定時器T0、T1、T2 </p><p>
39、 外部中斷4 路,下降沿中斷或低電平觸發(fā)電路,Power Down 模式可 由外部中斷低電平觸發(fā)中斷方式喚醒 </p><p> 通用異步串行口(UART),還可用定時器軟件實現(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 復位電路</p><p> 復位一般有上電和按鍵復位兩種方式,本次設計采用按鍵復位,按鍵接在單片機的RST(30引腳)端口。電路如下:</p><p> 圖2-9 按鍵復位電路</p><p><b> 2.
41、3.5振蕩電路</b></p><p> 單片機系統(tǒng)里都有晶振,在單片機系統(tǒng)里晶振作用非常大,全稱叫晶體振蕩器,它結(jié)合單片機內(nèi)部電路產(chǎn)生單片機所需的時鐘頻率,單片機晶振提供的時鐘頻率越高,那么單片機運行速度就越快,單片接的一切指令的執(zhí)行都是建立在單片機晶振提供的時鐘頻率。電路如下:</p><p> 圖2-10 晶體震蕩電路</p><p> 2.
42、3.6 串口電路</p><p> 圖 2-11串口電路</p><p> 說明:各部分均通過對應引腳標號相連,串口電路可實現(xiàn)串口通信,通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。如圖。</p><p> 2.3.7 最小系統(tǒng)原理圖</p><p> 由單片機為核心構(gòu)成有基本功能的最小系統(tǒng),原理圖如下:</p>
43、<p> 圖2-12 最小系統(tǒng)原理圖</p><p><b> 3仿真軟件介紹</b></p><p> 3.1程序設計軟件Protel</p><p> Protel公司于80年代末推出了Protel——電子行業(yè)的CAD軟件,由于最初在國內(nèi)普及率較高,所以發(fā)展較好,大多數(shù)公司中低頻電路設計都采用此軟件。早期的版本主要用于
44、印刷版自動布線。后來推出著名的Protel 99se,能夠Windows 9X/XP下運行。2000年以后,Altium公司又推出了該軟件的升級版Altium Designer。Altium Designer在原有的基礎上做出了很大的改進,能夠打開如Pspice等仿真軟件做出的文件。雖然市場上還有很多電路設計軟件,但是該軟件還是占有很大的市場份額。現(xiàn)在業(yè)界最高版本為Altium Desi
45、gner Winter 09版。本次設計采用的是Altium Designer進行電路原理圖的繪制。 </p><p> 3.2程序編寫軟件Keil</p><p>
46、; Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。本次設計編程主要使用Keil軟件進行編程。</p><p> 3.3仿真
47、軟件Proteus</p><p> Protues軟件是英國Labcenter electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機愛好者、從事單片機教學的教師、致力于單片機開發(fā)應用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代
48、碼調(diào)試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設計,真正實現(xiàn)了從概念到產(chǎn)品的完整設計。是目前世界上唯一將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三合一的設計平臺,在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯。本次設計采用的是Proteus進行仿真。</p><p><b> 4 仿真電路測試</b></p><p><b> 圖4
49、-1 上電復位</b></p><p> 圖4-2 數(shù)據(jù)輸入顯示</p><p> 圖4-3 數(shù)據(jù)串行通信顯示</p><p><b> 5 實物圖及其調(diào)試</b></p><p> 圖5-1 上電復位 </p><p> 圖5-2 數(shù)據(jù)輸入顯示</p>
50、<p> 圖5-3 實物背面圖 </p><p> 圖5-4 串行通信顯示圖</p><p><b> 6 小結(jié)與體會</b></p><p> 本次課程設計結(jié)合本學期所學習的單片機的基礎知識,將硬件和軟件的知識全都聯(lián)系起來,硬件方面有電路的連接和芯片的選取,軟件方面有程序的設計和編寫,這也為以后進一步學習嵌入式系統(tǒng)打好了
51、基礎。</p><p> 通過這些天來的實習,印象最深的是編寫程序和焊接電路的時候,前者是軟件方面的算法問題,實現(xiàn)功能切換的程序方法有很多,我考慮的是利用中斷來實現(xiàn),可是并不滿足程序的要求,經(jīng)過調(diào)試和改善后得以成功。后者是硬件電路的焊接,很多同學已經(jīng)學會PCB,所以硬件電路對他們很輕松容易,而硬件電路連接復雜,單純的技術(shù)焊接費時難測,讓我覺得與一些同學還是有很大的差距,有待改進。</p><
52、p> 當然,最終實物實現(xiàn)了所要求的功能,可是還是有很多地方需要改進,例如PCB的設計和制作,例如程序的書寫規(guī)范,不過總的來說這次單片機實習還是讓我學到非常多的東西,也增加了我的動手機會,希望自己以后更加嚴格的要求自己,做到更好。</p><p><b> 7 參考文獻</b></p><p> [1] 尹勇 撒繼銘等,單片計算機原理及應用(第1版), 科學
53、出版社, 2013年</p><p> [2] 謝自美.電子線路設計·實驗·測試(第三版).武漢:華中科技大學出版社</p><p> [3] 李群芳. 單片微型計算機與接口技術(shù)(第3版).電子工業(yè)出版社,2008</p><p> [4] 劉教瑜. 單片機原理及應用.武漢理工大學出版社,2011</p><p>
54、 [5] 張東亮. 單片機原理與應用.人民郵電出版社,2009</p><p> 附錄1:C語言源程序</p><p><b> 發(fā)送機主程序:</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> //**********為每個按鈕設置一個編號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; //點亮最右邊的數(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> 線路連接:同上, 主從單片機用3線連接,共地,rxd,txd交叉 </p><p> 程序效果:用于顯示主機發(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;//接受完了,標志位清零 </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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計---鍵盤按鍵識別及l(fā)ed數(shù)碼顯示
- 單片機課程設計--單片機44矩陣式鍵盤
- 單片機課程設計(led顯示管)
- 單片機課程設計----led點陣漢字顯示
- led顯示屏單片機課程設計
- 旋轉(zhuǎn)led顯示旋轉(zhuǎn)單片機課程設計
- 單片機課程設計--鍵盤輸入在led數(shù)碼管上的顯示
- 單片機課程設計(實驗)--led顯示游戲機
- 基于單片機的led點陣顯示課程設計
- 單片機課程設計---鍵盤接口課程設計
- 單片機課程設計--點陣led電子顯示屏
- 單片機課程設計--led數(shù)字顯示電子時鐘
- 《單片機原理》課程設計4x4矩陣鍵盤設計
- 單片機課程設計---點陣led電子顯示屏
- 單片機課程設計報告—led顯示電子鐘
- 單片機課程設計報告(4×4矩陣鍵盤)
- 課程設計-制作單片機的4x4矩陣鍵盤
- 單片機鍵盤輸入課程設計
- 單片機課程設計--顯示電路
- lcd顯示設計單片機課程設計
評論
0/150
提交評論