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

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論