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