課程設(shè)計(jì)單片機(jī)課程設(shè)計(jì)論文4位數(shù)加法運(yùn)算器的設(shè)計(jì)_第1頁
課程設(shè)計(jì)單片機(jī)課程設(shè)計(jì)論文4位數(shù)加法運(yùn)算器的設(shè)計(jì)_第2頁
課程設(shè)計(jì)單片機(jī)課程設(shè)計(jì)論文4位數(shù)加法運(yùn)算器的設(shè)計(jì)_第3頁
課程設(shè)計(jì)單片機(jī)課程設(shè)計(jì)論文4位數(shù)加法運(yùn)算器的設(shè)計(jì)_第4頁
課程設(shè)計(jì)單片機(jī)課程設(shè)計(jì)論文4位數(shù)加法運(yùn)算器的設(shè)計(jì)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 電氣信息學(xué)院?jiǎn)纹瑱C(jī)課程設(shè)計(jì)報(bào)告課題名稱 4位數(shù)加法運(yùn)算器的設(shè)計(jì) 專業(yè)班級(jí) 學(xué) 號(hào) 學(xué)生姓名 指導(dǎo)教師 評(píng) 分 2012年 1月 3日 至 1 月 10 日目 錄第一章 緒 論.1第二章 方案論證與設(shè)計(jì).22.1 設(shè)計(jì)目標(biāo)和實(shí)現(xiàn)方法.22.2 方案論證與設(shè)計(jì).2第三章 主體設(shè)計(jì)部分.3第四章 硬件設(shè)計(jì).54.1 總體硬件設(shè)計(jì).54.2 單片機(jī)接口電路說明.54.3 鍵盤接口電路.84.4 LCD顯示模塊.114.5 運(yùn)算模塊(單片機(jī)控制).124.6 軟件設(shè)計(jì).12主函數(shù)設(shè)計(jì).124.6.2 鍵盤中斷程序設(shè)計(jì).174.6.3 LCD顯示程序.194.6.4 頭文件 .21第五章 仿真及調(diào)試.2

2、2總 結(jié).23參考文獻(xiàn).24 第一章 緒 論隨著社會(huì)的發(fā)展,科學(xué)的進(jìn)步,人們的生活水平在逐步的提高,尤其是微電子技術(shù)的發(fā)展,猶如雨后春筍般的變化電子產(chǎn)品的更新速度快就不足驚奇了, 單片機(jī)的應(yīng)用已經(jīng)越來越貼近生活,用單片機(jī)來實(shí)現(xiàn)一些電子設(shè)計(jì)也變得容易起來近年來,單片機(jī)以其體積小、價(jià)格廉、面向控制等獨(dú)特優(yōu)點(diǎn),在各種工業(yè)控制、儀器儀表、設(shè)備、產(chǎn)品的自動(dòng)化、智能化方面獲得了廣泛的應(yīng)用與此同時(shí),單片機(jī)應(yīng)用系統(tǒng)的可靠性成為人們?cè)絹碓疥P(guān)注的重要課題影響可靠性的因素是多方面的,如構(gòu)成系統(tǒng)的元器件本身的可靠性、系統(tǒng)本身各部分之間的相互耦合因素等其中系統(tǒng)的抗干擾性能是系統(tǒng)可靠性的重要指標(biāo)本設(shè)計(jì)采用80c51 芯片

3、,實(shí)現(xiàn)了利用單片機(jī)進(jìn)行了一個(gè)簡(jiǎn)單計(jì)算器設(shè)計(jì)允許對(duì)輸入數(shù)據(jù)進(jìn)行加減乘除運(yùn)算及LCD 顯示如果設(shè)計(jì)對(duì)象是更為復(fù)雜的計(jì)算器系統(tǒng),其實(shí)際原理與方法與本設(shè)計(jì)基本相同LCD液晶顯示器是 Liquid Crystal Display 的簡(jiǎn)稱,LCD 的構(gòu)造是在兩片平行的玻璃基板當(dāng)中放置液晶盒,下基板玻璃上設(shè)置TFT(薄膜晶體管),上基板玻璃上設(shè)置彩色濾光片,通過TFT上的信號(hào)與電壓改變來控制液晶分子的轉(zhuǎn)動(dòng)方向,從而達(dá)到控制每個(gè)像素點(diǎn)偏振光出射與否而達(dá)到顯示目的現(xiàn)在LCD已經(jīng)替代CRT成為主流,價(jià)格也已經(jīng)下降了很多,并已充分的普及故采用LCD設(shè)計(jì)的關(guān)鍵所在,必須非常熟悉單片機(jī)的原理與結(jié)構(gòu),同時(shí)還要對(duì)整個(gè)設(shè)計(jì)流

4、程有很好的把握,將單片機(jī)和其他模塊完整的銜接本設(shè)計(jì)是基于51系列單片機(jī)來進(jìn)行的數(shù)字計(jì)算器系統(tǒng)設(shè)計(jì),可以完成計(jì)算器的鍵盤輸入,進(jìn)行加、減、乘、除基本四則運(yùn)算,并在LCD上顯示相應(yīng)的結(jié)果;設(shè)計(jì)電路采用AT89C51單片機(jī)為主要控制電路,顯示采用字符LCD靜態(tài)顯示;軟件方面使用C語言編程,并用PROTUES仿真 。第二章 方案論證與設(shè)計(jì)2.1設(shè)計(jì)目標(biāo)和實(shí)現(xiàn)方法為了滿足計(jì)算器的基本要求,可以基本的運(yùn)算(加減乘除),數(shù)據(jù)歸零和出錯(cuò)警告提示,我們采用基于單片機(jī)設(shè)計(jì)計(jì)算器,并用LCD顯示器顯示數(shù)據(jù),4*4 的矩陣鍵盤實(shí)現(xiàn)數(shù)據(jù)輸入分別對(duì)鍵盤輸入檢測(cè)模塊;LCD顯示模塊;算術(shù)運(yùn)算模塊;錯(cuò)誤處理及提示模塊進(jìn)行設(shè)計(jì)

5、,并用Visio畫系統(tǒng)方框圖,keil與protues仿真分析其設(shè)計(jì)結(jié)果2.2方案論證與設(shè)計(jì)根據(jù)功能和指標(biāo)要求,本系統(tǒng)選用MCS 51 單片機(jī)為主控機(jī)通過擴(kuò)展必要的外圍接口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)具體設(shè)計(jì)考慮如下:本系統(tǒng)選用AT89C51單片機(jī)為主控機(jī)通過擴(kuò)展必要的外圍接口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì),具體設(shè)計(jì)如下:(1)由于設(shè)計(jì)的計(jì)算器要進(jìn)行四則運(yùn)算,為了得到較好的顯示效果,經(jīng)綜合分析后,最后采用LCD 顯示數(shù)據(jù)和結(jié)果(2)采用鍵盤輸入方式,鍵盤包括數(shù)字鍵(09)、符號(hào)鍵(+、-、)、清除鍵(onc)和等號(hào)鍵(=),故只需要16 個(gè)按鍵即可,設(shè)計(jì)中采用集成的計(jì)算鍵盤(3)在執(zhí)行過程中,開機(jī)顯示零

6、,等待鍵入數(shù)值,當(dāng)鍵入數(shù)字,通過LCD顯示出來,當(dāng)鍵入+、-、*、/運(yùn)算符,計(jì)算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲(chǔ),并等待再次鍵入數(shù)值,當(dāng)再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號(hào)就會(huì)在LCD上輸出運(yùn)算結(jié)果(4)錯(cuò)誤提示:當(dāng)計(jì)算器執(zhí)行過程中有錯(cuò)誤時(shí),會(huì)在LCD上顯示相應(yīng)的提示,如:當(dāng)輸入的數(shù)值或計(jì)算得到的結(jié)果大于計(jì)算器的表示范圍時(shí),計(jì)算器會(huì)在LCD上提示E.第三章、主體設(shè)計(jì)部分(1)、系統(tǒng)模塊圖:(2)、算術(shù)運(yùn)算程序流程圖:(3)、系統(tǒng)總流程圖:第四章、硬件設(shè)計(jì)4.1、總體硬件設(shè)計(jì):本設(shè)計(jì)選用AT89C51單片機(jī)為主控單元; 顯示部分:采用LCD靜態(tài)顯示;按鍵部分:采用4*4鍵盤;用MM74C922為4*4

7、鍵盤掃描IC,讀取輸入的鍵值總體設(shè)計(jì)效果如下圖:4.2、單片機(jī)接口電路說明:1、手動(dòng)上電復(fù)位電路:當(dāng)VCC上電時(shí),C充電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位;幾個(gè)毫秒后,C充滿,10K電阻上電流降為0,電壓也為0,使得單片機(jī)進(jìn)入工作狀態(tài)工作期間,按下S,C放電S松手,C又充電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位幾個(gè)毫秒后,單片機(jī)進(jìn)入工作狀態(tài)2、內(nèi)部時(shí)鐘模式電路:當(dāng)單片機(jī)工作于內(nèi)部時(shí)鐘模式的時(shí)候,只需在XTAL1和XTAL2引腳連接一個(gè)晶體振蕩器或者陶瓷振蕩器,并接兩個(gè)電容后接地即可,在使用時(shí)對(duì)于電容的選擇有一定的要求:當(dāng)外接晶體振蕩器的時(shí)候,電容值一般選擇C1=C2=30+10pF或3

8、0-10pF;當(dāng)外接陶瓷振蕩器的時(shí)候,電容值一般選擇C1=C2=40+10pF或40-10pF;3、AT89C51單片機(jī)引腳介紹:VCC: 供電電壓 GND:接地 P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流當(dāng)P0口的管腳第一次寫1時(shí),被定義為高阻輸入P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高 P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部

9、下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收 P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流這是由于內(nèi)部上拉的緣故P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào) P3口:P3口管

10、腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故 P3口也可作為AT89C51的一些特殊功能口:P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 /INT0(外部中斷0) P3.3 /INT1(外部中斷1) P3.4 T0(記時(shí)器0外部輸入) P3.5 T1(記時(shí)器1外部輸入) P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通) P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通) P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào) RST:復(fù)位輸入

11、當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間 ALE/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)在FLASH編程期間,此引腳用于輸入編程脈沖在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖如想禁止ALE的輸出可在SFR8EH地址上置0此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用另外,該引腳被略微拉高如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效 /PSEN:外部程序存儲(chǔ)器的選通信號(hào)在由外部程序存儲(chǔ)器取指

12、期間,每個(gè)機(jī)器周期兩次/PSEN有效但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn) /EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器在FLASH編程期間,此引腳也用于施加12V編程電源(VPP) XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入 XTAL2:來自反向振蕩器的輸出4、單片機(jī)與復(fù)位、時(shí)鐘電路連接電路圖:4.3、鍵盤接口電路:計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編

13、程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵這樣鍵盤上按鍵的個(gè)數(shù)就為44個(gè)這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率矩陣鍵盤的工作原理:計(jì)算器的鍵盤布局如圖1所示:一般有16個(gè)鍵組成,在單片機(jī)中正好可以用一個(gè)P口實(shí)現(xiàn)16個(gè)按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用圖 1 矩陣鍵盤布局圖矩陣鍵盤內(nèi)部電路圖如圖所示:我們?cè)谠O(shè)計(jì)中還使用了6264靜態(tài)RAM芯片,如圖所示: Intel 6264的容量為8KB,是28引腳雙列直

14、插式芯片,采用CMOS工藝制造A12A0(address inputs):地址線,可尋址8KB的存儲(chǔ)空間D7D0(data bus):數(shù)據(jù)線,雙向,三態(tài)OE(output enable):讀出允許信號(hào),輸入,低電平有效WE(write enable):寫允許信號(hào),輸入,低電平有效CE1(chip enable):片選信號(hào)1,輸入,在讀/寫方式時(shí)為低電平CE2(chip enable):片選信號(hào)2,輸入,在讀/寫方式時(shí)為高電平VCC:+5V工作電壓GND:信號(hào)地Intel 6264的操作方式由OE,WE, CE1 , CE2的共同作用決定 寫入:當(dāng)WE和CE1為低電平,且OE和CE2為高電平時(shí),

15、數(shù)據(jù)輸入緩沖器打開,數(shù)據(jù)由數(shù)據(jù)線D7D0寫入被選中的存儲(chǔ)單元 讀出:當(dāng)OE和CE1為低電平,且WE和CE2為高電平時(shí),數(shù)據(jù)輸出緩沖器選通,被選中單元的數(shù)據(jù)送到數(shù)據(jù)線D7D0上 保持:當(dāng)CE1為高電平,CE2為任意時(shí),芯片未被選中,處于保持狀態(tài),數(shù)據(jù)線呈現(xiàn)高阻狀態(tài)此外,還用了74ls373八D鎖存器,如圖:內(nèi)部引腳圖如下:當(dāng)三態(tài)允許控制端 OE 為低電平時(shí),Q0Q7為正常邏輯狀態(tài),可用來驅(qū)動(dòng)負(fù)載或總線當(dāng) OE 為高電平時(shí),Q0Q7 呈高阻態(tài),即不驅(qū)動(dòng)總線,也不為總線的負(fù)載,但鎖存器內(nèi)部的邏輯操作不受影響當(dāng)鎖存允許端 LE 為高電平時(shí),Q 隨數(shù)據(jù) D 而變當(dāng) LE 為低電平時(shí),D 被鎖存在已建立的

16、數(shù)據(jù)電平當(dāng) LE 端施密特觸發(fā)器的輸入滯后作用,使交流和直流噪聲抗擾度被改善 400mV4.4、LCD顯示模塊:本設(shè)計(jì)采用LCD液晶顯示器來顯示輸出數(shù)據(jù)通過D0-D7引腳向LCD寫指令字或?qū)憯?shù)據(jù)以使LCD實(shí)現(xiàn)不同的功能或顯示相應(yīng)數(shù)據(jù) LCD模塊4.5、運(yùn)算模塊(單片機(jī)控制):MCS-51 單片機(jī)是在一塊芯片中集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能I/O等一臺(tái)計(jì)算機(jī)所需要的基本功能部件如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM/EPROM)、并行I/O 口、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)單片機(jī)是靠

17、程序運(yùn)行的,并且可以修改通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,通過使用單片機(jī)編寫的程序可以實(shí)現(xiàn)高智能,高效率,以及高可靠性!因此我們采用單片機(jī)作為計(jì)算器的主要功能部件,可以很快地實(shí)現(xiàn)運(yùn)算功能4.6、軟件設(shè)計(jì):主函數(shù)設(shè)計(jì):/* 主程序calc.c * * 2012/1/8 */#include #include #include calc.h/定義變量static data LONG lvalue;static data LONG rvalue;static data CHAR currtoken;static data CHAR lasttoken;static data

18、CHAR lastpress;static xdata CHAR outputbufferMAX_DISPLAY_CHAR;VOID main (VOID)/給變量初始化并調(diào)用匯編程序初始化LCD顯示器; lvalue = 0; rvalue = 0; currtoken = =; lasttoken = 0; initialise(); / 初始化LCD顯示器 calc_output(OK); calc_evaluate(); VOID calc_evaluate() CHAR data key; INT data i; CHAR xdata numberMAX_DISPLAY_CHAR;

19、CHAR xdata *bufferptr; / 程序開始前先清除所有緩沖區(qū). for (i = 0; i = MAX_DISPLAY_CHAR; i+) numberi = ; bufferptr = number; for (;) key = calc_getkey(); if (calc_testkey(key) / 按鍵測(cè)試為1是數(shù)字,將其寫入緩沖區(qū). / 數(shù)字的大小限制,主要是數(shù)字的數(shù)目. if (bufferptr != &numberMAX_DISPLAY_CHAR - 2) *bufferptr = key; calc_display(number); bufferptr+;

20、else / 否則就是運(yùn)算符. /分配值. if (lasttoken = 0) lvalue = calc_asciidec (number); else rvalue = calc_asciidec (number); /清除緩沖. bufferptr = number; for (i = 0;i = MAX_DISPLAY_CHAR; i+) numberi = ; /處理運(yùn)算符. currtoken = key;if (currtoken = C) calc_opfunctions(currtoken); else calc_opfunctions(lasttoken); / 清除輸出

21、緩沖,為下一個(gè)運(yùn)算符做準(zhǔn)備. for (i = 0;i = 0x30) & (lastpress = 0x30) & (lastpress = 0x30) & (lastpress = 0x30) & (lastpress = -9999) & (num = 9999) return OK; else return ERROR; VOID calc_output (INT status)/ 根據(jù)操作狀態(tài)輸出 switch (status) case OK : calc_display(calc_decascii(lvalue); break; case SLEEP : break;case E

22、RROR : calc_display(E ); break; default : calc_display(E ); break; LONG calc_asciidec (CHAR *buffer)/ 將ASCII碼轉(zhuǎn)換為浮點(diǎn)數(shù). LONG data value; LONG data digit; value = 0; while (*buffer != ) digit = *buffer - 48; value = value*10 + digit; buffer+; return value; CHAR *calc_decascii (LONG num)/ 將浮點(diǎn)數(shù)轉(zhuǎn)換成ASCII碼.

23、LONG data temp = num; CHAR xdata *arrayptr = &outputbufferMAX_DISPLAY_CHAR; LONG data divisor = 10; LONG data result; CHAR data remainder,asciival; INT data i; / 如果計(jì)算結(jié)果是0,直接將0插入緩沖區(qū)即可. if (!temp) *arrayptr = 48; goto done; / 處理負(fù)數(shù). if (temp 0) outputbuffer0 = -; temp -= 2*temp; for (i=0 ; i = 0x30) &

24、(key = 0x39) return 1; else return 0; /* 輸入輸出部分函數(shù) */CHAR calc_getkey (VOID)/使用*Keypad_Read* 匯編文件函數(shù)掃描鍵和返回按下的鍵的 ASCII 值 CHAR data mykey; do mykey = input(); while (mykey = 0); /等待按鍵; return mykey; VOID calc_display (CHAR bufMAX_DISPLAY_CHAR)/ 使用輸出和 *LCD_Write* 的匯編文件輸出LCD的值 INT data i = 0; clearscreen(

25、); for (i ; i = MAX_DISPLAY_CHAR ; i+) if (bufi != ) output(bufi); /輸出LCD的值; 4.6.2、鍵盤中斷程序設(shè)計(jì):/* 控制按鍵的匯編 * *keypad.asm * * 2012/1/8 */NAME KEYPAD; 從鍵盤讀出一個(gè)字符然后返回到R7中.;設(shè)立部分無參輸入程序.?PR?input?KEYPAD SEGMENT CODEPUBLICinput?DT?input?KEYPAD SEGMENT DATARSEG ?DT?input?KEYPAD ; 局部變量的輸出程序段.KEY_ROW1equ0EFhKEY_RO

26、W2equ0DFhKEY_ROW3equ0BFhKEY_ROW4equ07Fhkeyflags:ds16RSEG ?PR?input?KEYPAD ; 輸出程序的代碼段.input:keyscan:push DPHpush DPLmov R0,#keyflags ; R0 處理按鍵的切換字節(jié)mov R1,#KEY_ROW1; R1 處理鍵盤的行地址mov R2,#4; R2 計(jì)數(shù)行ksrow:mov P2,R1; 將行地址給P2口nopmov A,P1; 從P1口讀取列地址mov R3,#4; 每行按鍵用R3計(jì)數(shù)anl A,#3Fhks0:rrc A; 移動(dòng)到下一位mov R4,A; R4 保

27、存行數(shù)據(jù)jc ks1; 如果沒有按鍵就跳到ks1mov A,R0; 測(cè)試按鍵是否已被按下mov R0,#1; 按下之后將R0給#0,標(biāo)志按下jz ksnew; 如果有新的按鍵按下就跳轉(zhuǎn)到ksnewjmp ks2ks1:mov R0,#0; 沒有按鍵就標(biāo)記為0ks2:inc R0; R0自增,進(jìn)入這行里面的下一個(gè)按鍵的循環(huán)mov A,R4djnz R3,ks0mov A,R1; 將R1循環(huán)移位去處理下一行rl A mov R1,Adjnz R2,ksrowclr Amov R7,A; 如果沒有按鍵,返回0.jmp ksendksnew:mov DPTR,#keycodes;發(fā)現(xiàn)有新的按鍵按下:m

28、ov A,R0; 按鍵的標(biāo)志從R0取出clr Csubb A,#keyflagsmovc A,A+DPTRmov R7,A; 將按鍵給R7.ksend:mov P2,#0FFhpop DPLpop DPHret;按鍵表keycodes:db 7,8,9, /db4,5,6, *db1,2,3, -dbC,0,=, +END4.6.3、LCD顯示程序:/* LCD顯示的匯編代碼 * * 時(shí)間2013/1/8 * * */NAME LCD;設(shè)置代碼段和輸出:LCD SEGMENT CODERSEG LCD PUBLIC _output PUBLIC initialise PUBLIC clears

29、creen;LCD寄存器地址.LCD_CMD_WRequ 00hLCD_DATA_WRequ01hLCD_BUSY_RDequ02hLCD_DATA_RDequ03hLCD_PAGEequ80h;LCD命令LCD_CLSequ1LCD_HOMEequ2LCD_SETMODEequ4LCD_SETVISIBLEequ8LCD_SHIFTequ16LCD_SETFUNCTIONequ32LCD_SETCGADDRequ64LCD_SETDDADDRequ128; LCD顯示器的初始化.initialise: mov A,#030h;1 line, 8 bitscall wrcmdmov A,#LC

30、D_SETVISIBLE + 4call wrcmdmov A,#LCD_SETDDADDR+15; 從顯示器的右邊開始顯示;call wrcmdmov A,#LCD_SETMODE + 3; 自動(dòng)遞增,顯示左移. call wrcmd ret;寫數(shù)據(jù)之前之前先將R7里面的參數(shù)寫到累加器中保存;_output:mov A,R7call wrdataret;清空LCD顯示重新初始化;clearscreen:mov A,#LCD_CLScall wrcmdmov A,#LCD_SETDDADDR + 15call wrcmdret;*;* SUBROUTINES *;*;寫命令的子程序:wrcmd

31、:mov P2,#LCD_PAGEmov R0,#LCD_CMD_WRmovx R0,Ajmp wtbusy; 該子程序?qū)⒁粋€(gè)字符寫到LCD顯示器里.wrdata:MOV P2,#LCD_PAGEMOV R0,#LCD_DATA_WRMOV A,R7MOVX R0,A;子程序等待繁忙的狀態(tài).wtbusy:MOV R1,#LCD_BUSY_RDMOVX A,R1JB ACC.7,wtbusy ret END4.6.4、頭文件:typedef void VOID;typedef int INT;typedef unsigned short WORD;typedef char CHAR;typede

32、f unsigned char BYTE;typedef float FLOAT;typedef double DOUBLE;typedef long LONG;/定義ASCII字符在顯示屏上可以容納的最大數(shù)量.#define MAX_DISPLAY_CHAR 9/錯(cuò)誤的處理狀態(tài)enum ERROR OK = 0, SLEEP = 1, ERROR = 2;/* 函數(shù)原型 */VOID calc_evaluate();/Operator indirect function.VOID calc_opfunctions (CHAR token);/Utility functions.CHAR ca

33、lc_testkey (CHAR ch);LONG calc_asciidec (CHAR *buffer);CHAR *calc_decascii (LONG num);INT calc_chkerror (LONG num);VOID calc_output (INT status);/ I/O functions.CHAR calc_getkey (VOID);VOID calc_display (CHAR bufMAX_DISPLAY_CHAR);/Assembly Function prototypes.void initialise();char input ();char out

34、put(char ch);void clearscreen(); 第五章 仿真及調(diào)試在程序設(shè)計(jì)方法上,模塊化程序設(shè)計(jì)是單片機(jī)應(yīng)用中最常用的程序設(shè)計(jì)方法設(shè)計(jì)的中心思想是把一個(gè)復(fù)雜應(yīng)用程序按整體功能劃分成若干相對(duì)獨(dú)立的程序模塊,各模塊可以單獨(dú)設(shè)計(jì)、編程和調(diào)試,然后組合起來這種方法便于設(shè)計(jì)和調(diào)試,容易實(shí)現(xiàn)多個(gè)程序共存,但各個(gè)模塊之間的連接有一定的難度根據(jù)需要我們可以采用自上而下的程序設(shè)計(jì)方法,此方法先從主程序開始設(shè)計(jì),然后再編制各從屬程序和子程序,層層細(xì)化逐步求精,最終完成一個(gè)復(fù)雜程序的設(shè)計(jì)這種方法比較符合人們的日常思維,缺點(diǎn)是一級(jí)的程序錯(cuò)誤會(huì)對(duì)整個(gè)程序產(chǎn)生影響功能和操作:加減乘除運(yùn)算和顯示上電后,

35、屏幕初始化計(jì)算按下數(shù)字鍵,屏幕顯示要運(yùn)算的第一個(gè)數(shù)字,再按下符號(hào)鍵,然后再按下數(shù)字鍵,屏幕顯示要運(yùn)算的第二個(gè)數(shù)字,最后按下“”號(hào)鍵,屏幕上顯示出計(jì)算結(jié)果按下“ON/C”鍵清零調(diào)試成功總結(jié)經(jīng)過這一周的努力,終于完成了課程設(shè)計(jì)剛開始,我們頭緒不是很清楚,不知道從哪里入手,但通過老師的耐心指導(dǎo)并和同學(xué)認(rèn)真研究設(shè)計(jì)課題,跑圖書館查資料、確定基本設(shè)計(jì)方案、對(duì)所用芯片功能進(jìn)行查找、調(diào)試、上機(jī)仿真等,經(jīng)歷了一次次的困難,卻積累了很多寶貴的經(jīng)驗(yàn)在整個(gè)設(shè)計(jì)的過程中遇到的問題主要有以下三點(diǎn),第一:基礎(chǔ)知識(shí)掌握的不牢固,主要表現(xiàn)在一些常用的電路的形式和功能不清楚,對(duì)書本上的內(nèi)容理解不夠透徹第二:對(duì)一些常用的應(yīng)用軟件

36、缺少應(yīng)用,體現(xiàn)在畫電路圖和系統(tǒng)的仿真的時(shí)候,對(duì)這些軟件的操作不熟練,浪費(fèi)了很多時(shí)間第三:相關(guān)知識(shí)掌握的不夠全面,缺少系統(tǒng)設(shè)計(jì)的經(jīng)驗(yàn)這次設(shè)計(jì)進(jìn)一步端了我的學(xué)習(xí)態(tài)度,學(xué)會(huì)了實(shí)事求是,嚴(yán)謹(jǐn)?shù)淖黠L(fēng),對(duì)自己要嚴(yán)格要求,不能夠一知半解,要力求明明白白急于求成是不好的,我有所感受如果省略了那些必要的步驟,急于求成,不僅會(huì)浪費(fèi)時(shí)間,還會(huì)適得其反我覺得動(dòng)手之前,頭腦里必須清楚該怎么做,這一點(diǎn)是很重要的就目前來說,我的動(dòng)手能力雖然差一點(diǎn),但我想,通過我的不懈努力,在這方面,我總會(huì)得到提高這一點(diǎn),我堅(jiān)信因?yàn)閯e人能做到的,我也一定能做到在此次的課程設(shè)計(jì)中我最大的體會(huì)就是進(jìn)一步認(rèn)識(shí)到了理論聯(lián)系實(shí)踐的重要性一份耕耘,一份收獲通過這段時(shí)間的設(shè)計(jì),讓我明白科學(xué)的思維方法和學(xué)習(xí)方法是多么重要,只有這樣才能夠有很高的效率,才能夠讓自己的工作更完美總而言之,此次課程設(shè)計(jì)讓我學(xué)到了好多平時(shí)在課堂上學(xué)不到的東西,增加了我的知識(shí)運(yùn)用能力,增強(qiáng)我的實(shí)際操作能力謝謝老師給我們提供這么好的機(jī)會(huì),為我們之后走向社會(huì)奠定了一個(gè)好的基礎(chǔ)本次課程設(shè)計(jì)讓我學(xué)到了很多,也學(xué)會(huì)到了要怎么樣去面對(duì)困難,不要對(duì)知識(shí)一知半截,要有的求實(shí)的能力,通過老師的幫助我學(xué)到了很多在平時(shí)的沒有注意到的動(dòng)?xùn)|西及知識(shí),更美沒有深入的的去理解,通過這次我要更加的明確自己更要注重自己在各方面的鍛煉能力,把握機(jī)會(huì)這次的設(shè)計(jì)非常的感謝老師們g an employmen

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論