版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《單片機課程設(shè)計報告》</p><p> 教 學(xué) 院: </p><p> 專業(yè)班級: </p><p> 學(xué) 號: </p><p> 學(xué)生姓名: </p>
2、<p> 指導(dǎo)教師: </p><p> 時 間: </p><p> 地 點: </p><p> 單片機課程設(shè)計任務(wù)書</p><p><b> 一、課題名稱</b></p&g
3、t;<p><b> 單片機課程設(shè)計</b></p><p><b> 二、設(shè)計目的 </b></p><p> 為了進(jìn)一步鞏固學(xué)習(xí)的理論知識,增強學(xué)生對所學(xué)知識的實際應(yīng)用能力和運用所學(xué)的知識解決實際問題的能力,開始為期兩周的單片機課程設(shè)計。通過實訓(xùn)使學(xué)生在鞏固所學(xué)知識的基礎(chǔ)之上具有初步的單片機系統(tǒng)設(shè)計與應(yīng)用能力。</p
4、><p><b> 三、設(shè)計內(nèi)容</b></p><p> 設(shè)計基于51單片機的簡易計算器系統(tǒng)電路,并以該電路為基礎(chǔ)進(jìn)行編程,要求能夠?qū)崿F(xiàn)0-99之間的數(shù)進(jìn)行加、減、乘、除運算的功能。 </p><p><b> 四、設(shè)計要求 </b></p><p> 1、設(shè)計簡易計算器,要求能對0-99之間
5、的數(shù)進(jìn)行加、減、乘、除運算。</p><p> 2、用4×4的鍵盤作為輸入設(shè)備。</p><p> 3、用LED或LCD進(jìn)行顯示。</p><p> 4、編寫無符號數(shù)加、減、乘、除運算、輸入和顯示的程序。</p><p> 5、對系統(tǒng)的進(jìn)行綜合和調(diào)試,使其具有對0-99之間的數(shù)進(jìn)行加、減、乘、除運算的功能。</p>
6、;<p> 6、編寫課程設(shè)計的總結(jié)</p><p><b> 五、設(shè)計進(jìn)度表</b></p><p><b> 六、設(shè)計報告</b></p><p> 課程設(shè)計報告的基本內(nèi)容至少包括封面、正文、附錄三部分。課程設(shè)計報告要求統(tǒng)一格式,字體工整規(guī)范。</p><p><b&g
7、t; 1、封面</b></p><p> 封面包括“《單片機課程設(shè)計》課程設(shè)計報告”、班級、姓名、學(xué)號以及完成日期等。</p><p><b> 2、正文</b></p><p> 正文是實踐設(shè)計報告的主體,具體由以下幾部分組成:</p><p> ?。?)課程設(shè)計題目;</p><
8、;p> (2)課程設(shè)計任務(wù)與要求;</p><p> ?。?)設(shè)計過程(包括設(shè)計方案、設(shè)計原理、創(chuàng)新點以及采用的新技術(shù)等);</p><p> (4)方案的比較與論證;</p><p> ?。?)硬件電路設(shè)計,各個模塊的設(shè)計與器件的選擇;</p><p> ?。?)軟件程序的設(shè)計與調(diào)試;</p><p>
9、(7)課程設(shè)計總結(jié)(包括自己的收獲與體會;遇到的問題和解決的方法;技術(shù)實現(xiàn)技巧和創(chuàng)新點;作品存在的問題和改進(jìn)設(shè)想等);</p><p><b> 3.附錄</b></p><p> 附錄1:系統(tǒng)設(shè)計原理圖</p><p> 附錄2:系統(tǒng)硬件元器件清單</p><p><b> 附錄3:系統(tǒng)的程序<
10、/b></p><p> 七、考核方式與成績評定辦法</p><p> 備注:成績等級:優(yōu)(90分~100分)、良(80分~89分)、中(70分~79分)、及格(60分~69分)、60分以下為不及格。</p><p><b> 八、參考書目</b></p><p> [1] 李朝青.單片機原理及接口技術(shù)(簡
11、明修訂版).杭州:北京航空航天大學(xué)出版社,1998</p><p> [2] 李廣弟.單片機基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,1994</p><p> [3] 閻石.數(shù)字電子技術(shù)基礎(chǔ)(第三版). 北京:高等教育出版社,1989</p><p> [4] 廖常初.現(xiàn)場總線概述[J].電工技術(shù),1999.</p><p> [5
12、] 徐仁貴等編著.《單片微型計算機應(yīng)用技術(shù)》.北京:機械工業(yè)出版社.2001年2月第1版 </p><p> [6] 張毅剛等編著.《單片機原理及應(yīng)用》. 北京:高等教育出版社.2004年1月第1版</p><p> 一、課程設(shè)計任務(wù)與要求</p><p> 設(shè)計基于51單片機的簡易計算器系統(tǒng)電路,并以該電路為基礎(chǔ)進(jìn)行編程,要求能夠?qū)崿F(xiàn)0-99之間的數(shù)
13、進(jìn)行加、減、乘、除運算的功能,并要求如下:</p><p> 1、設(shè)計簡易計算器,要求能對0-99之間的數(shù)進(jìn)行加、減、乘、除運算;</p><p> 2、用4×4的鍵盤作為輸入設(shè)備;</p><p> 3、用LED或LCD進(jìn)行顯示;</p><p> 4、使用C語言編寫無符號數(shù)加、減、乘、除運算、輸入和顯示的程序;</
14、p><p> 5、對系統(tǒng)的進(jìn)行綜合和調(diào)試,使其具有對0-99之間的數(shù)進(jìn)行加、減、乘、除運算的功能,還具有清零功能等;</p><p> 6、編寫課程設(shè)計的總結(jié)。</p><p> 二、設(shè)計方案與選擇方案</p><p><b> 1、芯片</b></p><p><b> 1.1、
15、方案構(gòu)思</b></p><p> 本設(shè)計中的芯片可以采用兩種方案,一種是以FPGA為核心處理芯片,配備相應(yīng)的外設(shè);另一種是以STC89C52處理器,配備相應(yīng)的外設(shè)。</p><p> ?。?)方案一:采用FPGA控制</p><p> FPGA是一種高密度的可編程邏輯器件,自從Xilinx公司1985年推出第一片F(xiàn)PGA以來,F(xiàn)PGA的集成密度和性
16、能提高很快,其集成密度最高達(dá)500萬門/片以上,系統(tǒng)性能可達(dá)200MHz。由于FPGA器件集成密度高,方便易用,開發(fā)和上市周期短,在數(shù)字設(shè)計和電子生產(chǎn)中得到迅速普及和應(yīng)用,并一度在高密度的可編程邏輯器件領(lǐng)域中獨占鰲頭。</p><p> 但是基于SRAM編程的FPGA,其編程信息需存放在外部存儲器上,需外部存儲器芯片,且使用方法復(fù)雜,保密性差,而其對于一個簡單的計算器而言,使用FPGA有點大材小用,成本太高。&
17、lt;/p><p> (2)方案二:采用AT89C51</p><p> 單片機是單片微型機的簡稱,故又稱為微控制器MCU(Micro Control Unit)。通常由單塊集成電路芯片組成,內(nèi)部包含有計算機的基本功能部件:中央處理器CPU,存儲器和I/O接口電路等。因此,單片機只要和適當(dāng)?shù)能浖巴獠吭O(shè)備相結(jié)合,便可成為一個單片機控制系統(tǒng)。單片機廣泛應(yīng)用于智能產(chǎn)品,智能儀表,測控技術(shù),智能
18、接口等,具有操作簡單、實用方便、價格便宜等優(yōu)點。</p><p> AT89C51是一種帶4K字節(jié)FLASH存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATM
19、EL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器。</p><p> 1.2、方案比較與選擇</p><p> 通過以上兩種方案的論證和比較,從設(shè)計的實用性、方便性和成本等諸多方面考慮,最終選擇了以AT89C51單片機作為中央處理單元進(jìn)行計算器的設(shè)計,這樣
20、設(shè)計能夠?qū)崿F(xiàn)對六位整數(shù)、兩位小數(shù)的加、減、乘、除的四則運算。</p><p><b> 2、輸入模塊</b></p><p><b> 2.1、方案構(gòu)思</b></p><p> ?。?)方案一:采用獨立式按鍵作為輸入模塊</p><p> 獨立式按鍵輸入模塊,其特點是:直接用I/O口構(gòu)成單個
21、按鍵電路,接口電路配置靈活、按鍵識別和軟件結(jié)構(gòu)簡單;但是當(dāng)鍵數(shù)較多時,占用I/O口較多,比較浪費資源。其原理圖如圖1所示。</p><p> 圖 1 獨立的功能按鍵 圖 2 矩陣鍵盤輸入</p><p> ?。?)方案二:采用矩陣式鍵盤作為輸入模塊</p><p> 矩陣式按鍵輸入模塊,其特點是:電路和軟件稍復(fù)雜,但相比之下,當(dāng)鍵數(shù)
22、越多時,越節(jié)約I/O口,比較節(jié)省資源。其原理圖如圖2所示。</p><p> 2.2、方案比較與選擇</p><p> 本設(shè)計中的輸入模塊使用的是矩陣鍵盤輸入。</p><p> 鍵盤輸入預(yù)置用于計算,按鍵較多。若是采用獨立按鍵,需頻繁按鍵,為軟件設(shè)計增加負(fù)擔(dān),且操作界面不友好;若是采用矩陣式按鍵,可以方便地輸入一個數(shù)值,使操作界面更具有人性化,且節(jié)約了寶貴的
23、I/O口資源。</p><p> 通過對比,故采用方案二作為系統(tǒng)輸入模塊。</p><p><b> 3、顯示模塊</b></p><p><b> 3.1、方案構(gòu)思</b></p><p> ?。?)方案一:采用LED數(shù)碼管靜態(tài)顯示</p><p> 采用LED數(shù)碼
24、管的靜態(tài)顯示,其特點是:其亮度較高;這種顯示方式接口,編程容易且管理簡單;不足的是,占用的I/O的線資源較多。如果采用單片機或CPLD/FPGA來控制的話,勢必存在浪費I/O口資源的問題。如圖3所示。</p><p> 圖 3 4位數(shù)碼管靜態(tài)顯示</p><p> ?。?)方案二:采用LED數(shù)碼管動態(tài)顯示</p><p> 采用LED數(shù)碼管的動態(tài)顯示,其特點是
25、:其亮度比靜態(tài)顯示的亮度要差一些;但其電路比較簡單,適合于顯示位數(shù)較多的情況。如圖4所示。</p><p> 圖 4 4位數(shù)碼管的動態(tài)顯示</p><p> (3)方案三:采用LCD1602液晶顯示</p><p> 采用LCD1602液晶顯示,其特點是:可以調(diào)節(jié)其背光亮度,這種顯示方式接口,編程雖然有些麻煩,但管理較方便,占用的I/O口資源線也不多。<
26、;/p><p> 3.2、方案比較與選擇</p><p> 本設(shè)計中的顯示模塊使用的是LCD1602液晶顯示。</p><p> 在計算器運算中,需顯示的數(shù)字、符號較多,按很據(jù)個方面的特點,而后可以發(fā)現(xiàn)LCD液晶顯示,雖然在價格上的確是稍貴于LED數(shù)碼管;但數(shù)碼管在硬件設(shè)計電路中,會因線太多、線路復(fù)雜而過于繁瑣,則舍棄LED數(shù)碼管,選擇LCD液晶顯示。</p
27、><p> 通過對比,故采用方案三作為系統(tǒng)顯示模塊。</p><p> 三、整體方案原理框圖</p><p> 1.1硬件與軟件系統(tǒng)設(shè)計</p><p> 依據(jù)系統(tǒng)分析及實現(xiàn)功能,硬件小系統(tǒng)方框圖如圖1所示:</p><p><b> 圖5 </b></p><p>
28、 依據(jù)系統(tǒng)硬件設(shè)計,軟件系統(tǒng)主要包括:</p><p> 單片機控制程序模塊:作為系統(tǒng)的主控制程序模塊,用KeilC編程控制其他程序模塊的協(xié)調(diào)工作;</p><p> 鍵盤程序模塊:用來輸入用戶的功能,使單片機完成相應(yīng)的控制功能;</p><p> 液晶顯示模塊:使用字符型液晶顯示器顯示用戶的選擇。</p><p> 1.2 單片機
29、模塊 </p><p> 單片機控制主程序流程圖如下:</p><p><b> 圖6 </b></p><p> 單片機外圍擴展電路程序模塊</p><p> 為了節(jié)約成本,本設(shè)計中液晶顯示模塊與單片機之間采用模擬口線的方式控制,鍵盤與單片機之間采用掃描的工作方式。</p><p>
30、 鍵盤程序流程圖(掃描方式)</p><p> 鍵盤程序流程圖如下所示:</p><p><b> 圖7</b></p><p> LCM程序流程圖如下所示:</p><p><b> 圖8</b></p><p> 本設(shè)計的軟件系統(tǒng)分別用偉福E6000和KeilC
31、編寫及編譯。4*4鍵盤程序模塊用匯編語言和C語言編寫,實現(xiàn)直接從P2口掃描得到鍵盤碼,并采用查詢方式得到與之對應(yīng)的LCD字型碼,在LCD上顯示出來。</p><p><b> 四、單元電路設(shè)計</b></p><p><b> 1.1鍵盤輸入</b></p><p> 計算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果
32、采用獨立按鍵的方式,在這種情況下,編程會很簡單,但是會占用大量的I/O口資源,因此在很多情況下都不采用這種方式。為此,我們引入了矩陣鍵盤的應(yīng)用,采用四條I/O線作為行線,四條I/O線作為列線組成鍵盤。在行線和列線的每個交叉點上設(shè)置一個按鍵。這樣鍵盤上按鍵的個數(shù)就為4×4個。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機系統(tǒng)中I/O口的利用率。</p><p> 矩陣鍵盤的工作原理:</p><
33、;p> 計算器的鍵盤布局如圖5所示:一般有16個鍵組成,在單片機中正好可以用一個P口實現(xiàn)16個按鍵功能,這種形式在單片機系統(tǒng)中也最常用。 </p><p><b> 圖9 鍵盤布局圖</b></p><p> 圖10 矩陣鍵盤內(nèi)部電路圖</p><p> 鍵盤上的每一個按鍵都有一個鍵值。給鍵賦值的最直接辦法是將行、列線按二進(jìn)制順
34、序排列,當(dāng)某一鍵按下時,鍵盤掃描程序執(zhí)行到給該列置低電平0,若讀出各行狀態(tài)為非全1,這時的行、列數(shù)據(jù)組合成鍵值。鍵盤鍵值從左到右、從上到下依次是77,7B,7D,7E;B7,BB,BD,BE,…,E7,EB,ED,EE。這種負(fù)邏輯表示往往不夠直觀,因而采用行、列線加反向器或軟件求反的方法將鍵盤改成正邏輯。這時,鍵值依次為88,84,82,81;48,44,42,41,…,18,14,12,11。不論是正邏輯還是負(fù)邏輯,這種鍵值表示方式分
35、散度在且不等距,用于指令不太方便。對于不是4*4或8*4或8*8鍵盤,使用也不容易,故在許多場合下,采用依次排列鍵值的方法。這時的鍵值與鍵號相一致。</p><p><b> 1.2 單片機控制</b></p><p> MCS-51單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多功能I/O等一臺計算機所需要的基本功能部件。如果按功能劃分,它由
36、如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲器(RAM)、程序存儲器(ROM/EPROM)、并行I/O口、串行口、定時器/計數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)。</p><p> 單片機是靠程序運行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨特的一些功能,通過使用單片機編寫的程序可以實現(xiàn)高智能,高效率,以及高可靠性!因此我們采用單片機作為計算器的主要功能部件,可以進(jìn)行很快地實現(xiàn)運算功
37、能。</p><p> 圖11 單片機控制電路的時鐘電路和復(fù)位電路</p><p><b> LCD1602顯示</b></p><p> 圖12 LCD1602顯示</p><p> 1602點陣字符液晶模塊(LCM)引腳及功能</p><p> 1腳(VDD/VSS):電源5V
38、77;10%或接地。</p><p> 2腳(VSS/ VDD):接地或電源(5±0.5)V。</p><p> 3腳(VO):反視度調(diào)整。使用可變電阻調(diào)整,通常接地。</p><p> 4腳(RS):寄存器選擇(1:選擇數(shù)據(jù)寄存器;0:選擇指令寄存器)。</p><p> 5腳(R/W):讀/寫選擇(1:讀;0:寫)。&l
39、t;/p><p> 6腳(E):使能操作(1:LCM可做讀寫操作;0:LCM不可做讀寫操作)。</p><p> 7腳(DB0):雙向數(shù)據(jù)總線的第0位。</p><p> 8腳(DB1):雙向數(shù)據(jù)總線的第1位。</p><p> 9腳(DB2):雙向數(shù)據(jù)總線的第2位。</p><p> 10腳(DB3):雙向數(shù)據(jù)
40、總線的第3位。</p><p> 11腳(DB4):雙向數(shù)據(jù)總線的第4位。</p><p> 12腳(DB5):雙向數(shù)據(jù)總線的第5位。</p><p> 13腳(DB6):雙向數(shù)據(jù)總線的第6位。</p><p> 14腳(DB7):雙向數(shù)據(jù)總線的第7位。</p><p> 15腳(VDD):背光顯示器電源+5
41、V。</p><p> 16腳(VSS):背光顯示器接地。</p><p><b> 五、實物效果圖</b></p><p> 圖13 實物效果圖</p><p><b> 六、心得體會</b></p><p> 兩周的時間,終于順利完成了單片機的課程設(shè)計。由于
42、自己對單片機編程還不是很熟悉,結(jié)果在設(shè)計的時候遇到了一系列問題,程序總是調(diào)試部處理,不過還好,最后在同學(xué)的幫助下終于把程序調(diào)試出來了,雖然程序設(shè)計實現(xiàn)的功能與老師要求的不盡相同,不過勉強還算可以。從這里我知道了基本知識的重要性。其實進(jìn)行程序設(shè)計的時候主要是對各功能模塊的把握。計算器里面最難的一部分是矩陣鍵盤的掃描和編碼,那個費了很大力氣。</p><p> 另外一點就是硬件焊接調(diào)試部分。焊接的時候到時輕松,一個
43、下午就焊接好了,然后是調(diào)試部分。調(diào)試花費的時間還是比較長的。不過有了上個學(xué)期數(shù)字電路焊接調(diào)試的經(jīng)驗,這次單片機調(diào)試還算是比較順利。我也是從電路板的正負(fù)電源檢測起,一步一步來,最終得到了想要的結(jié)果。調(diào)試的時候主要遇到了兩個問題。一個是鍵盤總是沒有反應(yīng),為了這個自己調(diào)試了很久,前前后后把電路板檢查了幾次,最后才發(fā)現(xiàn)是鍵盤本身的問題,和同學(xué)們換了個好鍵盤才行。另一個問題是總是顯示不出來1、4、7這三個數(shù)字。檢測來檢測去,發(fā)現(xiàn)來是在測試最小系統(tǒng)
44、時在一個位選端接了高電平,對位選信號產(chǎn)生了影響。當(dāng)把那個高電平去掉后,終于得到了正確的結(jié)果。</p><p> 總的來說這次課程設(shè)計達(dá)到了完成了基本任務(wù),達(dá)到了基本要求。通過親身對程序設(shè)計和電路焊接調(diào)試的體會,自己對單片機有了進(jìn)一步的了解,單片機編程能力也得到了提高。電路板的焊接與調(diào)試,使自己電路調(diào)試的方法和思想進(jìn)一步加強了。這次單片機課程設(shè)計應(yīng)該說是比較成功的。</p><p><
45、;b> 七、參考文獻(xiàn)</b></p><p> [1] 李朝青.單片機原理及接口技術(shù)(簡明修訂版).杭州:北京航空航天大學(xué)出版社,1998</p><p> [2] 李廣弟.單片機基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,1994</p><p> [3] 閻石.數(shù)字電子技術(shù)基礎(chǔ)(第三版). 北京:高等教育出版社,1989</p>
46、;<p> [4] 廖常初.現(xiàn)場總線概述[J].電工技術(shù),1999.</p><p><b> 八、附錄</b></p><p><b> 1. 系統(tǒng)程序</b></p><p> #include <reg52.h></p><p> #define uchar
47、 unsigned char</p><p> #define uint unsigned int</p><p> sbit rs=P1^0;</p><p> sbit rw=P1^1;</p><p> sbit e=P1^2;</p><p> void write_dat(uchar dat); &
48、lt;/p><p> void write_com(uchar com);</p><p> void keyscan();</p><p> /********************** </p><p><b> 功能說明:</b></p><p> 顯示編碼,加上0x30,</
49、p><p> 分別為'1','2','3','+',</p><p> '4','5','6','-',等</p><p> **********************/</p><p> uchar code
50、 table1[]=</p><p><b> {</b></p><p> 1,2,3,0x2b-0x30,</p><p> 4,5,6,0x2d-0x30,</p><p> 7,8,9,0x2a-0x30,</p><p> 0,0x3d-0x30,0x01-0x30,0x2f-
51、0x30</p><p><b> };</b></p><p> uchar k=0,flag=0,num,fuhao,i;</p><p> long a,b,c;</p><p> void delay(uint z)</p><p><b> {</b>&l
52、t;/p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> void keyscan()<
53、/p><p><b> {</b></p><p> uchar temp;</p><p><b> P2=0xfe;</b></p><p><b> temp=P2;</b></p><p> temp=temp&0xf0;</
54、p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> temp=P2;</b></p><p> temp=temp&0xf0
55、;</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P2;</b></p><p> switch(temp)</p><p><b> {</b></p&g
56、t;<p> case 0xee:num=0;</p><p><b> break; </b></p><p> case 0xde:num=1;</p><p><b> break;</b></p><p> case 0xbe:num=2;</p>
57、<p><b> break;</b></p><p> case 0x7e:num=3;</p><p><b> break;</b></p><p><b> } </b></p><p> while(temp!=0xf0)</p>
58、<p> { temp=P2;</p><p> temp=temp&0xf0;</p><p><b> }</b></p><p><b> }</b></p><p> /*當(dāng)按下1,2,3,松手后執(zhí)行下面這段語句*/</p><p>
59、if(num==0||num==1||num==2)</p><p><b> {</b></p><p> if(flag==0)</p><p> a=a*10+table1[num];//如果沒有按符號鍵,符號前的數(shù)值為a</p><p> else if(flag==1)</p><p
60、> b=b*10+table1[num]; //如果按了符號鍵,符號后的數(shù)值為b</p><p> if(k==1) //如果之前按了'='號,再按鍵時清屏,進(jìn)行下一次計算</p><p><b> {</b></p><p><b> k=0;</b></p><
61、p> write_com(0x01);</p><p><b> }</b></p><p><b> } </b></p><p> else if(num==3) //判斷按下'+'</p><p><b> {</b></p>
62、;<p><b> flag=1;</b></p><p><b> fuhao=1;</b></p><p><b> } </b></p><p> i=table1[num]; //顯示按下的鍵</p><p> write_dat(0x30
63、+i); </p><p><b> }</b></p><p><b> P2=0xfd;</b></p><p><b> temp=P2;</b></p><p> temp=temp&0xf0;</p><p> while(t
64、emp!=0xf0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> temp=P2;</b></p><p> temp=temp&0xf0;</p><p> w
65、hile(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P2;</b></p><p> switch(temp)</p><p><b> {</b></p><p> case 0xed:
66、num=4;</p><p><b> break; </b></p><p> case 0xdd:num=5;</p><p><b> break;</b></p><p> case 0xbd:num=6;</p><p><b> break
67、;</b></p><p> case 0x7d:num=7;</p><p><b> break;</b></p><p><b> } </b></p><p> while(temp!=0xf0)</p><p> { temp=P2;<
68、;/p><p> temp=temp&0xf0;</p><p><b> }</b></p><p><b> }</b></p><p> if(num==4||num==5||num==6) //判斷是否按下'4','5','6'&l
69、t;/p><p><b> {</b></p><p><b> if(k==1)</b></p><p><b> {</b></p><p><b> k=0;</b></p><p> write_com(0x01);&
70、lt;/p><p><b> }</b></p><p> if(flag==0)</p><p> a=a*10+table1[num];</p><p> else if(flag==1)</p><p> b=b*10+table1[num]; </p><
71、;p><b> }</b></p><p> else if(num==7)</p><p><b> {</b></p><p><b> flag=1;</b></p><p> fuhao=2; </p><p><b&g
72、t; }</b></p><p> i=table1[num]; //顯示按下的鍵</p><p> write_dat(0x30+i); </p><p><b> }</b></p><p><b> P2=0xfb;</b></p><p
73、><b> temp=P2;</b></p><p> temp=temp&0xf0;</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> delay(5);</b></p>
74、<p><b> temp=P2;</b></p><p> temp=temp&0xf0;</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P2;</b></p
75、><p> switch(temp) //</p><p><b> {</b></p><p> case 0xeb:num=8;</p><p><b> break; </b></p><p> case 0xdb:num=9; </p>
76、<p><b> break;</b></p><p> case 0xbb:num=10;</p><p><b> break; </b></p><p> case 0x7b:num=11;</p><p> break; </p>&
77、lt;p><b> } </b></p><p> while(temp!=0xf0)</p><p> { temp=P2;</p><p> temp=temp&0xf0;</p><p><b> }</b></p><p><b>
78、; }</b></p><p> if(num==8||num==9||num==10) //判斷是否按下'7','8','9'</p><p><b> {</b></p><p><b> if(k==1)</b></p><p&
79、gt;<b> {</b></p><p><b> k=0;</b></p><p> write_com(0x01);</p><p><b> }</b></p><p> if(flag==0)</p><p> a=a*10+tab
80、le1[num];</p><p> else if(flag==1)</p><p> b=b*10+table1[num];</p><p><b> }</b></p><p> else if(num==11) //判斷是否按下'*'</p><p>&l
81、t;b> {</b></p><p><b> flag=1;</b></p><p><b> fuhao=3;</b></p><p><b> }</b></p><p> i=table1[num];</p><p>
82、 write_dat(0x30+i);</p><p><b> }</b></p><p><b> P2=0xf7;</b></p><p><b> temp=P2;</b></p><p> temp=temp&0xf0;</p><
83、;p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> temp=P2;</b></p><p> temp=temp&0xf0;</p>
84、;<p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P2;</b></p><p> switch(temp)</p><p><b> {</b></p><p&
85、gt; case 0xe7:num=12; // 0鍵</p><p><b> break; </b></p><p> case 0xd7:num=13; // '='</p><p><b> break;</b></p><p> case 0xb
86、7:num=14; //清零鍵</p><p><b> break; </b></p><p> case 0x77:num=15; //'/'</p><p> break; </p><p><b> } </b></p>
87、<p> while(temp!=0xf0)</p><p> { temp=P2;</p><p> temp=temp&0xf0;</p><p><b> } </b></p><p><b> }</b></p><p> swit
88、ch(num)</p><p><b> {</b></p><p><b> case 12: </b></p><p><b> {</b></p><p><b> if(k==1)</b></p><p><b
89、> {</b></p><p><b> k=0;</b></p><p> write_com(0x01);</p><p><b> }</b></p><p> if(flag==0)</p><p><b> a=a*10;&l
90、t;/b></p><p> else if(flag==1) </p><p><b> b=b*10;</b></p><p> write_dat(0x30);</p><p><b> }</b></p><p><b> break;<
91、;/b></p><p> case 13: //按=鍵</p><p><b> {</b></p><p><b> k=1;</b></p><p> if(fuhao==1) //如果符號鍵是+,執(zhí)行+運算</p><p><
92、;b> {</b></p><p> write_com(0x80+0x4f);</p><p> write_com(0x04);</p><p><b> c=a+b;</b></p><p> while(c!=0) </p><p><b>
93、 {</b></p><p> write_dat(0x30+c%10);</p><p><b> c=c/10; </b></p><p><b> }</b></p><p> write_dat(0x3d);</p><p><b>
94、fuhao=0;</b></p><p> a=0;b=0;flag=0;</p><p><b> }</b></p><p> if(fuhao==2)//如果符號鍵是-,執(zhí)行-運算</p><p><b> {</b></p><p> wri
95、te_com(0x80+0x4f);</p><p> write_com(0x04);</p><p><b> if(a>=b)</b></p><p><b> { </b></p><p><b> c=a-b;</b></p><p&
96、gt; while(c!=0)</p><p><b> {</b></p><p> write_dat(0x30+c%10);</p><p><b> c=c/10;</b></p><p> } </p><p><b>
97、 }</b></p><p> else if(a<b)</p><p><b> {</b></p><p><b> c=b-a;</b></p><p> while(c!=0)</p><p><b> {</b>&
98、lt;/p><p> write_dat(0x30+c%10);</p><p><b> c=c/10;</b></p><p><b> }</b></p><p> write_dat(0x2d);</p><p><b> }</b><
99、;/p><p> write_dat(0x3d);</p><p> a=0;b=0;flag=0;fuhao=0;</p><p><b> }</b></p><p> if(fuhao==3) //如果符號鍵是*</p><p><b> {</b></
100、p><p> write_com(0x80+0x4f);</p><p> write_com(0x04);</p><p><b> c=a*b;</b></p><p> while(c!=0)</p><p><b> {</b></p><p
101、> write_dat(0x30+c%10);</p><p><b> c=c/10;</b></p><p><b> }</b></p><p> write_dat(0x3d); </p><p> a=0;b=0;flag=0;fuhao=0;</p
102、><p><b> }</b></p><p> if(fuhao==4) //如果符號鍵是/</p><p><b> { </b></p><p><b> i=0;</b></p><p> write_com(0x80+0x4f
103、);</p><p> write_com(0x04);</p><p> c=(long)(((float)a/b)*1000000); //結(jié)果保留6位小數(shù)</p><p> while(c!=0)</p><p><b> {</b></p><p> write_dat(0x3
104、0+c%10);</p><p><b> c=c/10;</b></p><p><b> i++;</b></p><p> if(i==6) // 顯示完六位小數(shù)后,顯示·</p><p> write_dat(0x2e); </p>
105、<p><b> }</b></p><p> if(a/b<=0)</p><p> write_dat(0x30);</p><p> write_dat(0x3d);</p><p> a=0;b=0;flag=0;fuhao=0;</p><p><b>
106、; }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> case 14:</b></p><p> { write_com(0x01);</p><p> a
107、=0;b=0;flag=0;fuhao=0;</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 15:</b></p><p><b> {</b></p>&l
108、t;p><b> flag=1;</b></p><p><b> fuhao=4;</b></p><p> write_dat(0x30+table1[num]);</p><p><b> }</b></p><p><b> break;<
109、;/b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*******led1602*******/</p><p> void write_com(
110、uchar com)</p><p><b> {</b></p><p> rs=0;//選擇寫指令</p><p><b> rw=0;</b></p><p><b> P3=com;</b></p><p><b> e=1;
111、</b></p><p> delay(5);//無延時不能正常工作</p><p><b> e=0;</b></p><p><b> }</b></p><p> void write_dat(uchar dat)</p><p><b>
112、 {</b></p><p> rs=1;//選擇寫數(shù)據(jù)</p><p><b> rw=0;</b></p><p><b> P3=dat;</b></p><p><b> e=1;</b></p><p> delay(5
113、);//無延時不能正常工作</p><p><b> e=0;</b></p><p><b> }</b></p><p> void init() //初始化</p><p><b> {</b></p><p> delay(15);&
114、lt;/p><p> write_com(0x38);</p><p><b> delay(6);</b></p><p> write_com(0x38);</p><p><b> delay(6);</b></p><p> write_com(0x38);&l
115、t;/p><p> write_com(0x38);</p><p> write_com(0x0c); //開顯示,關(guān)光標(biāo)</p><p> write_com(0x06);//光標(biāo)移動 設(shè)置</p><p> write_com(0x01);//清屏</p><p><b> }</b>
116、</p><p> void main()</p><p><b> { </b></p><p><b> init();</b></p><p><b> while(1)</b></p><p><b> {</b&g
117、t;</p><p> keyscan();</p><p><b> }</b></p><p><b> }</b></p><p><b> 電路圖</b></p><p><b> 3. 原器件清單</b><
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計-制作單片機的4x4矩陣鍵盤
- 《單片機原理》課程設(shè)計4x4矩陣鍵盤設(shè)計
- 單片機課程設(shè)計報告計算器4
- 基于單片機的4x4光立方課程設(shè)計
- 單片機計算器課程設(shè)計
- 單片機課程設(shè)計--計算器
- 單片機課程設(shè)計-計算器
- 課程設(shè)計-單片機計算器
- 單片機課程設(shè)計——計算器設(shè)計
- 單片機課程設(shè)計--簡易計算器
- 單片機課程設(shè)計簡易計算器
- 單片機課程設(shè)計---計算器實驗
- 單片機課程設(shè)計-簡易計算器
- 單片機課程設(shè)計簡易計算器
- 單片機課程設(shè)計報告---計算器
- 單片機課程設(shè)計--簡易計算器
- 基于單片機的計算器設(shè)計-單片機課程設(shè)計
- 單片機系統(tǒng)設(shè)計課程設(shè)計--計算器
- 51單片機計算器設(shè)計課程設(shè)計
- 課程設(shè)計---單片機簡易計算器設(shè)計
評論
0/150
提交評論