單片機(jī)課程設(shè)計(jì)報(bào)告 簡(jiǎn)易計(jì)算器設(shè)計(jì)_第1頁
單片機(jī)課程設(shè)計(jì)報(bào)告 簡(jiǎn)易計(jì)算器設(shè)計(jì)_第2頁
單片機(jī)課程設(shè)計(jì)報(bào)告 簡(jiǎn)易計(jì)算器設(shè)計(jì)_第3頁
單片機(jī)課程設(shè)計(jì)報(bào)告 簡(jiǎn)易計(jì)算器設(shè)計(jì)_第4頁
單片機(jī)課程設(shè)計(jì)報(bào)告 簡(jiǎn)易計(jì)算器設(shè)計(jì)_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)原理與接口技術(shù)課程設(shè)計(jì)(報(bào)告)《單片機(jī)原理與接口技術(shù)》課程設(shè)計(jì)(報(bào)告)題目:簡(jiǎn)易計(jì)算器設(shè)計(jì)摘要計(jì)算器在人們的日常中是比較的常見的電子產(chǎn)品之一??墒撬€在發(fā)展之中,以后必將出現(xiàn)功能更加強(qiáng)大的計(jì)算器,基于這樣的理念,本次設(shè)計(jì)使用單片機(jī)來設(shè)計(jì)的位計(jì)算器。該設(shè)計(jì)系統(tǒng)是以STC89C51為單片機(jī),P1口作為輸入端,外接4*4的鍵盤,通過鍵盤掃描來對(duì)輸入數(shù)的控制,系統(tǒng)采用LCD1602作為顯示器,軟件程序采用均采用C語言編寫,便于移植與升級(jí)[1]。報(bào)告詳細(xì)介紹了整個(gè)系統(tǒng)的硬件組成結(jié)構(gòu)、工作原理和系統(tǒng)的軟件程序設(shè)計(jì)。程序在Keil軟件中使用C語言編寫,計(jì)算器將完成的功能有整數(shù)的加,減,乘,除等功能。關(guān)鍵詞:計(jì)算器STC89C51LCD1602煙臺(tái)南山學(xué)院?jiǎn)纹瑱C(jī)原理與接口技術(shù)課程設(shè)計(jì)目錄TOC\o"1-3"\h\u1140第1章緒論 第1章緒論1.1項(xiàng)目設(shè)計(jì)背景及意義計(jì)算工具最早誕生于中國(guó),中國(guó)古代最早采用的一種計(jì)算工具叫籌策,也被叫做算籌。這種算籌多用竹子制成,也有用木頭,獸骨充當(dāng)材料的,約二百七十枚一束,放在布袋里可隨身攜帶。另外直到今天仍在使用的珠算盤,是中國(guó)古代計(jì)算工具領(lǐng)域中的另一項(xiàng)發(fā)明,明代時(shí)的珠算盤已經(jīng)與現(xiàn)代的珠算盤幾乎相同。17世紀(jì)初,西方國(guó)家的計(jì)算工具有了較大的發(fā)展,英國(guó)數(shù)學(xué)家納皮爾發(fā)明的“納皮爾算籌”,英國(guó)牧師奧卻德發(fā)明了圓柱形對(duì)數(shù)計(jì)算尺,這種計(jì)算尺不僅能做加、減、乘、除、乘方和開方運(yùn)算,甚至可以計(jì)算三角函數(shù)、指數(shù)函數(shù)和對(duì)數(shù)函數(shù)。這些計(jì)算工具不僅帶動(dòng)了計(jì)算器的發(fā)展,也為現(xiàn)代計(jì)算器發(fā)展奠定了良好的基礎(chǔ),成為現(xiàn)代社會(huì)應(yīng)用廣泛的計(jì)算工具。1642年,年僅19歲的法國(guó)偉大科學(xué)家帕斯卡引用算盤的原理,發(fā)明了第一部機(jī)械式計(jì)算器,在他的計(jì)算器中有一些互相連鎖的齒輪,一個(gè)轉(zhuǎn)過十位的齒輪會(huì)使另一個(gè)齒輪轉(zhuǎn)過一位,人們可以像撥電話號(hào)碼盤那樣,把數(shù)字撥進(jìn)去,計(jì)算結(jié)果就會(huì)出現(xiàn)在另一個(gè)窗口中,但是它只能做加減運(yùn)算。1694年,萊布尼茨在德國(guó)將其改進(jìn)成可以進(jìn)行乘除的計(jì)算。此后,一直到20世紀(jì)50年代末才有電子計(jì)算器的出現(xiàn)[2]。1.2設(shè)計(jì)目的本設(shè)計(jì)旨在進(jìn)一步掌握單片機(jī)理論知識(shí),理解嵌入式單片機(jī)系統(tǒng)的硬軟件設(shè)計(jì),加強(qiáng)對(duì)實(shí)際應(yīng)用系統(tǒng)設(shè)計(jì)的能力。通過本設(shè)計(jì)的學(xué)習(xí),使我掌握單片機(jī)程序設(shè)計(jì)和微機(jī)接口應(yīng)用的基本方法,并能綜合運(yùn)用本科階段所學(xué)軟、硬件知識(shí)分析實(shí)際問題,提高解決課程設(shè)計(jì)實(shí)際問題的能力,為單片機(jī)應(yīng)用和開發(fā)打下良好的基礎(chǔ)。通過本次課程設(shè)計(jì),運(yùn)用所學(xué)知識(shí)及查閱相關(guān)資料,完成簡(jiǎn)易計(jì)算器的設(shè)計(jì),達(dá)到理論知識(shí)與實(shí)踐更好結(jié)合、提高綜合運(yùn)用所學(xué)知識(shí)和設(shè)計(jì)能力的目的。通過本次設(shè)計(jì)訓(xùn)練,可以使我們?cè)诨舅悸泛突痉椒ㄉ蠈?duì)基于51單片機(jī)的嵌入式系統(tǒng)設(shè)計(jì)有一個(gè)比較感性的認(rèn)識(shí),并具備一定程度的設(shè)計(jì)能力。1.3設(shè)計(jì)要求1、由于要設(shè)計(jì)的是簡(jiǎn)單的計(jì)算器,可以進(jìn)行四則運(yùn)算,為了得到較好的顯示效果,采用LCD顯示數(shù)據(jù)和結(jié)果。2、另外鍵盤包括數(shù)字鍵(0-9)、符號(hào)鍵(“+”、“-”、“*”、“/”)、清除鍵和等號(hào)鍵,故只需要16個(gè)按鍵即可,設(shè)計(jì)中采用4*4矩陣式鍵盤作為輸入電路。3、執(zhí)行程序:開機(jī)顯示零,等待鍵入數(shù)值,當(dāng)鍵入數(shù)字,通過LCD顯示出來,當(dāng)鍵入“+”、“-”、“*”、“/”運(yùn)算符,計(jì)算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲(chǔ),并等待再次鍵入數(shù)值后將顯示鍵入的數(shù)值,點(diǎn)擊“=”就會(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上提示“溢出”;當(dāng)除數(shù)為0時(shí),計(jì)算器會(huì)在LCD上提示錯(cuò)誤。1.4設(shè)計(jì)內(nèi)容計(jì)算器設(shè)計(jì)硬件電路采用三部分電路模塊構(gòu)成,第一部分是鍵盤模塊電路,采用4*4矩陣式鍵盤作為輸入電路;第二部分是LCD1602液晶顯示模塊;第三部分是以51單片機(jī)作為控制核心[3]。軟件程序主要由三部分組成:主程序、按鍵掃描程序和LCD1602顯示程序。本計(jì)算器是以STC89C51單片機(jī)為核心構(gòu)成的簡(jiǎn)易計(jì)算器系統(tǒng)。該系統(tǒng)通過單片機(jī)控制,實(shí)現(xiàn)對(duì)4*4鍵盤掃描進(jìn)行實(shí)時(shí)的按鍵檢測(cè),并把檢測(cè)數(shù)據(jù)存儲(chǔ)下來。整個(gè)計(jì)算器系統(tǒng)的工作過程為:首先存儲(chǔ)單元初始化,顯示初始值和鍵盤掃描,判斷按鍵位置,查表得出按鍵值,單片機(jī)則對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存與相應(yīng)處理轉(zhuǎn)換,之后送入LCD顯示器做動(dòng)態(tài)顯示。第2章設(shè)計(jì)方案的比較2.1系統(tǒng)整體基本結(jié)構(gòu)總體工作原理:系統(tǒng)上電后,初始化結(jié)束,等待輸入端的輸入信號(hào),當(dāng)輸入端有信號(hào)輸入是,單片機(jī)響應(yīng),作出相應(yīng)的處理,輸入信號(hào)經(jīng)單片機(jī)處理后(單片機(jī)中燒錄的程序執(zhí)行),將數(shù)字、符號(hào)送向LCD液晶顯示器[4]。STC89C51系統(tǒng)框圖如圖2.1所示。STC89C51STC89C51STC89C51LCD液晶顯示4*4矩陣鍵盤LCD液晶顯示4*4矩陣鍵盤圖2.1系統(tǒng)框圖2.2控制系統(tǒng)的比較選定方案1:采用FPGA控制FPGA是一種高密度的可編程邏輯器件,自從Xilinx公司1985年推出第一片F(xiàn)PGA以來,F(xiàn)PGA的集成密度和性能提高很快,其集成密度最高達(dá)500萬門/片以上,系統(tǒng)性能可達(dá)200MHz。由于FPGA器件集成度高,方便易用,開發(fā)和上市周期短,在數(shù)字設(shè)計(jì)和電子生產(chǎn)中得到迅速普及和應(yīng)用,并一度在高密度的可編程邏輯器件領(lǐng)域中獨(dú)占鰲頭。但是而基于SRAM編程的FPGA,其編程信息需存放在外部存儲(chǔ)器上,需外部存儲(chǔ)器芯片,且使用方法復(fù)雜,保密性差,而其對(duì)于一個(gè)簡(jiǎn)單的計(jì)算器而言,使用FPGA有點(diǎn)大材小用,成本太高,所以這個(gè)方案Pass。方案2:采用可編程邏輯器件CPLD作為控制器CPLD可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能、規(guī)模大、密度高、體積小、穩(wěn)定性高、IO資源豐富、易于進(jìn)行功能擴(kuò)展。采用并行的輸入輸出方式,提高了系統(tǒng)的處理速度,適合作為大規(guī)??刂葡到y(tǒng)的控制核心。但本系統(tǒng)不需要復(fù)雜的邏輯功能,對(duì)數(shù)據(jù)的處理速度的要求也不是非常高。且從使用及經(jīng)濟(jì)的角度考慮還是放棄了此方案。方案3:采用STC89C51采用STC89C51單片機(jī)作為整個(gè)系統(tǒng)的核心[5],用其控制密碼鎖控制,以實(shí)現(xiàn)其既定的性能指標(biāo)。充分分析我們的系統(tǒng),其關(guān)鍵在于密碼鎖的控制,而在這一點(diǎn)上,單片機(jī)就顯現(xiàn)出來它的優(yōu)勢(shì)——控制簡(jiǎn)單、方便、快捷。這樣一來,單片機(jī)就可以充分發(fā)揮其資源豐富、有較為強(qiáng)大的控制功能及可位尋址操作功能、價(jià)格低廉等優(yōu)點(diǎn)。STC89C51單片機(jī)具有功能強(qiáng)大的位操作指令,I/O口均可按位尋址,程序空間多達(dá)8K,對(duì)于本設(shè)計(jì)也綽綽有余,更可貴的是STC89C51單片機(jī)價(jià)格非常低廉。因此,這種方案是一種較為理想的方案。所以,從方便使用的角度考慮,咱肯定選擇方案3呀。2.3顯示模塊的比較選定方案1:LCD液晶顯示模塊內(nèi)部自帶字符發(fā)生存儲(chǔ)器(CGROM),字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是(41H),顯示時(shí)模塊把代碼41H發(fā)給液晶模塊,我們就能在液晶上看到字母“A”。LCD的特點(diǎn):1、低壓微功耗;2、平板型結(jié)構(gòu);3、被動(dòng)顯示型(無眩光,不刺激人眼,不會(huì)引起眼睛疲勞);4、顯示信息量大(因?yàn)橄袼乜梢宰龅煤苄。?、易于彩色化(在色譜上可以非常準(zhǔn)確的復(fù)現(xiàn));6、無電磁輻射(對(duì)人體安全,利于信息保密);7、長(zhǎng)壽命(這種器件幾乎沒有什么劣化問題,因此壽命極長(zhǎng),但是液晶背光壽命有限,不過背光部分可以更換)。LCD1602液晶模塊內(nèi)部的控制器共有11條控制指令,豐富的指令可以完成液晶的時(shí)序控制、工作方式設(shè)置和數(shù)據(jù)顯示等。但是可視角度小早期的液晶顯示器可視偏轉(zhuǎn)角度只有90度,只能從正面觀看,從側(cè)面看就會(huì)出現(xiàn)較大的亮度和色彩失真。響應(yīng)時(shí)間過慢響應(yīng)時(shí)間是液晶顯示器的一個(gè)特殊指標(biāo)。液晶顯示器的響應(yīng)時(shí)間指的是顯示器各像素點(diǎn)對(duì)輸入信號(hào)反應(yīng)的速度,響應(yīng)時(shí)間短,則顯示運(yùn)動(dòng)畫面時(shí)就不會(huì)產(chǎn)生影像拖尾的現(xiàn)象[6]。方案2:LED數(shù)碼管顯示數(shù)碼管LED顯示消耗電力比LCD液晶顯示多一點(diǎn),但是數(shù)碼管顯示,在白天等強(qiáng)光條件下顯示會(huì)比液晶屏更加清晰。但在室內(nèi)數(shù)碼管會(huì)有散光滲漏導(dǎo)致所顯示的圖案有重影,液晶屏則不會(huì),所以液晶屏更適合在室內(nèi)使用,液晶極其省電,但是使用有溫度范圍限制,且因是反光式的,在外界光線很明亮的情況下很容易看不清楚。2、數(shù)碼管LED顯示內(nèi)容單一,LCD液晶顯示則比較豐富;數(shù)碼管一般就是一個(gè)7段的8字,當(dāng)然多的有16段的中間米字形的,LCD液晶可以顯示各種內(nèi)容[7]。(最基本的)3、數(shù)碼管是自發(fā)光的,液晶是靠背光(環(huán)境)的。數(shù)碼管是LED發(fā)光的效果,液晶是分子偏轉(zhuǎn)引起的暗影效果。數(shù)碼管比液晶耗電。4、數(shù)碼管厚大笨重,占用產(chǎn)品結(jié)構(gòu)尺寸大,液晶屏則相反。在一開始連接實(shí)物的時(shí)候我先想到的就是數(shù)碼管顯示,因?yàn)椴逶诿姘迳线B上線就行制作實(shí)物過程也簡(jiǎn)單,但是制作完成后顯示的結(jié)果不理想,數(shù)碼管顯示不出那些加、減、乘、除、等于這些特殊符號(hào),運(yùn)算完后直接顯示得數(shù),這讓誰知道這個(gè)得數(shù)是怎么來的。然后換了液晶顯示,這次就很nice了,那些得數(shù)過程和特殊符號(hào)也顯示出來了,這就體現(xiàn)了液晶顯示的優(yōu)越之處也更符合計(jì)算器這個(gè)設(shè)計(jì)的要求。所以,偶買噶選它選它就選它方案1LCD液晶顯示我值得擁有。2.4鍵盤的比較選定方案1:獨(dú)立按鍵式鍵盤這個(gè)方案中獨(dú)立鍵盤與\t"/qq_41824064/article/details/_blank"單片機(jī)連接時(shí),每一個(gè)按鍵都需要一個(gè)獨(dú)立的I/O口。如果某單片機(jī)系統(tǒng)需要較多按鍵,使用獨(dú)立按鍵便會(huì)占用較多的I/O口資源[8]。這個(gè)方案只適合在沒有矩陣鍵盤的情況下使用,因?yàn)樗娴睦速M(fèi)I/O口啊。方案2:矩陣式鍵盤在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤[9]。

第3章硬件電路的設(shè)計(jì)3.1控制系統(tǒng)模塊STC89C51是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲(chǔ)器。使用高密度非易失性存儲(chǔ)器技術(shù)制造[10]。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在線系統(tǒng)可編程Flash,使得STC89C51為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。STC89C51具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,STC89C51可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇省電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。8位微控制器8K字節(jié)在系統(tǒng)可編程Flash。如圖3.1所示STC89C51引腳圖。圖3.1STC89C51引腳圖3.2單片機(jī)的時(shí)鐘電路與復(fù)位電路設(shè)計(jì)時(shí)鐘電路就是產(chǎn)生像時(shí)鐘一樣準(zhǔn)確運(yùn)動(dòng)的振蕩電路。用于產(chǎn)生這個(gè)時(shí)間的電路就是時(shí)鐘電路。時(shí)鐘電路一般由\t"/item/%E6%97%B6%E9%92%9F%E7%94%B5%E8%B7%AF/_blank"晶體振蕩器、晶振控制芯片和電容組成。復(fù)位電路的第一功能是上電復(fù)位。按鍵放開時(shí),\t"/article/88/131/ctrlsc/switch/2021/_blank"電容充滿電后相當(dāng)于\t"/article/88/131/ctrlsc/switch/2021/_blank"斷路,\t"/article/88/131/ctrlsc/switch/2021/_blank"RST通過\t"/article/88/131/ctrlsc/switch/2021/_blank"電阻接地為低電平。按鍵按下時(shí),RST通過電阻鏈接到VCC為高電平,當(dāng)按鍵松開后,電容充電保持一定時(shí)間高電平,系統(tǒng)復(fù)位[11]。本系統(tǒng)采用內(nèi)部方式的時(shí)鐘電路和復(fù)位電路,如下圖3.2所示時(shí)鐘電路,圖3.3復(fù)位電路:圖3.2時(shí)鐘電路圖3.3復(fù)位電路由于單片機(jī)P0口內(nèi)部不含上拉電阻,為高阻態(tài),不能正常地輸出高/低電平,因而該組I/O口在使用時(shí)必須外接上拉電阻。3.3鍵盤電路的設(shè)計(jì)在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤設(shè)計(jì)主要為了控制運(yùn)行狀態(tài),輸入一些命令或數(shù)據(jù)。以按鍵的形式來設(shè)置控制功能或輸入數(shù)據(jù),按鍵的輸入狀態(tài)本質(zhì)上是一個(gè)開關(guān)量。對(duì)于簡(jiǎn)單的開關(guān)量的輸入可以采用獨(dú)立式按鍵,這種方法接口簡(jiǎn)單,但占用單片機(jī)I/O端口資源較多。對(duì)于輸入?yún)?shù)較多、功能復(fù)雜的系統(tǒng),需要采用矩陣式鍵盤進(jìn)行輸入控制。本系統(tǒng)采用4*4矩陣式鍵盤,鍵盤連接方式如圖3.4所示:圖3.4鍵盤電路3.4液晶顯示電路設(shè)計(jì)液晶顯示器(LCD)是一種功耗很低的顯示器,它的使用非常廣泛,比如電子表、計(jì)算器、數(shù)碼相機(jī)、計(jì)算機(jī)的顯示器和液晶電視等。計(jì)算器中需要顯示的信息比較多,為了能直觀地看到結(jié)果,并且為了設(shè)計(jì)顯得美觀,使用總線和排阻進(jìn)行簡(jiǎn)化連接方式,本設(shè)計(jì)采用液晶顯示屏LCD進(jìn)行顯示,具體連接方式如圖3.5所示。圖3.5液晶顯示電路

第4章軟件的設(shè)計(jì)4.1主程序流程圖開始首先初始化參數(shù),送LCD低位顯示“0”,高位不顯示。然后掃描鍵盤看是否有鍵輸入,若有,讀取鍵碼。判斷鍵碼是數(shù)字鍵、還是功能鍵(“+”“=”),是數(shù)值鍵則送LCD顯示并保存數(shù)值,是功能鍵則又判斷是“=”還是運(yùn)算鍵,若是“=”則計(jì)算最后結(jié)果并送LCD顯示,若是運(yùn)算鍵則保存相對(duì)運(yùn)算程序的首地址。開始初始化初始化LCD顯示零LCD顯示零鍵盤列掃描鍵盤列掃描有鍵按下有鍵按下數(shù)字鍵清零鍵數(shù)字鍵清零鍵記憶對(duì)應(yīng)鍵值運(yùn)算功能鍵記憶對(duì)應(yīng)鍵值運(yùn)算功能鍵是“=”?是“=”?LCD顯示其它鍵NoLCD顯示其它鍵計(jì)算最后結(jié)果Yes計(jì)算最后結(jié)果記憶其運(yùn)算符號(hào)記憶其運(yùn)算符號(hào)LCD顯示LCD顯示LCD顯示LCD顯示圖4.1主流程圖4.2程序設(shè)計(jì)思路頭文件和宏定義:#include<reg52.h> //調(diào)用單片機(jī)頭文件#include<stdio.h>//調(diào)用單片機(jī)頭文件#include<string.h>//調(diào)用單片機(jī)頭文件#include<stdlib.h>//調(diào)用單片機(jī)頭文件#defineucharunsignedchar//無符號(hào)字符型宏定義 變量范圍0~255#defineuintunsignedint//無符號(hào)整型宏定義 變量范圍0~65535延時(shí):voiddelay_uint(uintq){while(q--);}1602指令函數(shù)輸入的指令值:write_com(ucharcom)1602寫數(shù)據(jù)函數(shù),輸入需要寫入1602的數(shù)據(jù):write_data(uchardat)按鍵程序:ucharKey_io;//暫存IO值ucharkey_new;//松手檢測(cè)自鎖變量ucharkey_can;//按鍵值ucharKey_D_bit;while(1){key();//讀按鍵值delay_1ms(10);if(key_can<18)//是否有按鍵按下,小于18時(shí)有按鍵按下}

第5章系統(tǒng)調(diào)試5.1系統(tǒng)調(diào)試系統(tǒng)調(diào)試:根據(jù)系統(tǒng)設(shè)計(jì)方案,本系統(tǒng)的調(diào)試共分為兩大部分:硬件調(diào)試,軟件調(diào)試。(1)硬件調(diào)試對(duì)各個(gè)模塊的功能進(jìn)行調(diào)試,主要調(diào)試各模塊能否實(shí)現(xiàn)指定的功能。首先用數(shù)字萬用表對(duì)實(shí)物板上的各元器件進(jìn)行測(cè)試,在測(cè)試過程中,檢驗(yàn)出一些錯(cuò)誤,如LCD1602的引腳接錯(cuò)了,導(dǎo)致液晶顯示屏無法顯示,將LCD各引腳正確焊接后,液晶顯示屏正常工作(2)軟件調(diào)試軟件調(diào)試采用單片機(jī)仿真器keiluVision4及Proteus,將編好的程序進(jìn)行調(diào)試,主要是檢查語法錯(cuò)誤。再進(jìn)行仿真,檢驗(yàn)各個(gè)子程序是否正確執(zhí)行,和硬件模塊的協(xié)調(diào)性。5.2調(diào)試結(jié)果加法運(yùn)算調(diào)試成功如圖5.1。圖5.1加法運(yùn)算仿真圖減法運(yùn)算調(diào)試成功如圖5.2。圖5.2減法運(yùn)算仿真圖乘法運(yùn)算調(diào)試成功如圖5.3。圖5.3乘法運(yùn)算仿真圖除法運(yùn)算調(diào)試成功如圖5.4。圖5.4除法運(yùn)算仿真圖

結(jié)論在這次的單片機(jī)課程設(shè)計(jì)中,我們選了簡(jiǎn)易計(jì)算器的設(shè)計(jì)這個(gè)設(shè)計(jì)課題,為了實(shí)現(xiàn)最終的課程設(shè)計(jì)目的,我下載并使用了keiluvision4程序軟件和Proteus8仿真軟件,最后實(shí)現(xiàn)了程序的完成和仿真的完成。在設(shè)計(jì)的初期我使用的是LED數(shù)碼管顯示器充當(dāng)顯示輸出端,但是它的最終顯示結(jié)果應(yīng)該用很不理想來形容,不能顯示那些運(yùn)算符,運(yùn)算過程也是不能同時(shí)顯示,但是結(jié)果是可以算出來的。后來改用了LCD液晶顯示屏顯示,首先它的顯示內(nèi)容就很多,解決了運(yùn)算符號(hào)不能顯示的問題,同時(shí)LCD液晶顯示屏是兩行顯示,這讓設(shè)計(jì)的簡(jiǎn)易計(jì)算器更加的完美更加的像一個(gè)計(jì)算器,也更加的符合了我們?cè)O(shè)計(jì)的題目要求。在設(shè)計(jì)過程中,最難解決的就是程序問題,因?yàn)槌绦蜉^長(zhǎng),寫著寫著就寫亂了,或者停下來思考的時(shí)候就忘了這程序?qū)懙侥牧耍瑢?dǎo)致很多次軟件一直給我報(bào)錯(cuò)誤警告,后來經(jīng)過查閱資料和翻閱書籍,翻看老師上課講過的內(nèi)容最終把問題解決掉了,這說明我對(duì)程序的書寫運(yùn)用的還是很不熟練。仿真軟件Proteus運(yùn)用的很熟練,元件的認(rèn)知也是很透徹。最后就是實(shí)物的制作,通過社團(tuán)同學(xué)的幫助把散件焊接在一起完成了課程設(shè)計(jì)的最后一步。最后,設(shè)計(jì)完成后我覺得我這個(gè)設(shè)計(jì)還是有改進(jìn)之處的,比如這次設(shè)計(jì)我用的是USB接線供電,可以把它換成電池盒供電這樣使用起來也算是方便使用和攜帶。致謝本次課程設(shè)計(jì),由于沒有足夠的經(jīng)驗(yàn),難免有諸多考慮不周的地方,好在有老師的指導(dǎo)和同學(xué)們的幫助,我才能按時(shí)完成任務(wù)。感謝我的指導(dǎo)老師,從課題的選擇到設(shè)計(jì)的最終完成,老師都給予了我們細(xì)心的指導(dǎo)和不懈的支持。他嚴(yán)謹(jǐn)細(xì)致、一絲不茍的作風(fēng)一直是我們學(xué)習(xí)中的榜樣,并將繼續(xù)影響我今后的學(xué)習(xí)和工作。在此向老師致以誠(chéng)摯的感謝。課程設(shè)計(jì)培養(yǎng)了我獨(dú)立思考問題,分析問題與解決問題的能力,在設(shè)計(jì)中我明白了理論與實(shí)踐有很大的區(qū)別,理論上可以實(shí)現(xiàn)的,但要做具體的實(shí)物,卻要多方面考慮。我再次感謝學(xué)校和老師給了我這次實(shí)踐鍛煉的機(jī)會(huì),以及很多同學(xué)對(duì)我的幫助,為此我將盡最大的努力,回報(bào)社會(huì)。

參考文獻(xiàn)張揚(yáng).基于單片機(jī)STC89C51的計(jì)算器研究[J].計(jì)算機(jī)教育,2020,41(03):43-47.[2]梁建華.一種基于89c51控制的數(shù)字系統(tǒng)的設(shè)計(jì)[J].商丘師范學(xué)院學(xué)報(bào),2020,36(06):18-21.[3]陳仁,霍建振.智能鍵盤無線輸入系統(tǒng)的連接研究[D].浙江:浙江大學(xué),2019.[4]李建中.單片機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2018.[5]周航慈.單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù)[M].北京:北京航空航天大學(xué)出版社,2019.[6]何立民.單片機(jī)的數(shù)控系統(tǒng)研制[J].武漢電力職業(yè)技術(shù)學(xué)院學(xué)報(bào),2018,29(62):52-65.[7]劉肖德.單片機(jī)學(xué)習(xí)的新思路[N].人民日?qǐng)?bào),2019-6-25(16).[8]賈飛.基于單片機(jī)技術(shù)的應(yīng)用方式[P].中國(guó):2020100036145,2021-10-19.[9]吳國(guó)經(jīng).單片機(jī)應(yīng)用技術(shù)[M].北京:機(jī)械工業(yè)出版社,2018.[10]李全利.單片機(jī)原理及接口技術(shù)[M].北京:高等教育出版社,2019.[11]張琦.單片機(jī)的應(yīng)用探討[D].北京:北京大學(xué),2018.

附錄仿真原理圖:程序:#include<reg52.h> //調(diào)用單片機(jī)頭文件#include<stdio.h> //調(diào)用單片機(jī)頭文件#include<string.h> //調(diào)用單片機(jī)頭文件#include<stdlib.h> //調(diào)用單片機(jī)頭文件#defineucharunsignedchar//無符號(hào)字符型宏定義 變量范圍0~255#defineuintunsignedint //無符號(hào)整型宏定義 變量范圍0~65535floatnum1; //保存第一個(gè)數(shù)floatnum2; //保存第二個(gè)數(shù)ucharjjcc; //加減乘除標(biāo)志變量ucharLcd_Str[17];//顯示區(qū)緩存ucharNum_str[17]; ucharLcd_num2_add=0; //第二個(gè)數(shù)據(jù)開始位的增量ucharLcd_dis1_i=0; //記錄顯示第一行字符ucharLcd_num1_i=0; //記錄num1是幾位數(shù)ucharLcd_num2_i=0; //記錄num2是幾位數(shù)ucharDian_i=0; //小數(shù)點(diǎn)位數(shù)sbitrs=P1^0; //寄存器選擇信號(hào)H:數(shù)據(jù)寄存器 L:指令寄存器sbitrw=P1^1; //寄存器選擇信號(hào)H:數(shù)據(jù)寄存器 L:指令寄存器sbite=P1^2; //片選信號(hào)下降沿觸發(fā)/*********************************************************************名稱:delay_uint()*功能:小延時(shí)。*輸入:無*輸出:無***********************************************************************/voiddelay_uint(uintq){ while(q--);}/*********************************************************************名稱:write_com(ucharcom)*功能:1602指令函數(shù)*輸入:輸入的指令值*輸出:無***********************************************************************/voidwrite_com(ucharcom){ rs=0; //寫指令 rw=0; //對(duì)1602寫操作 P0=com; //P0口對(duì)1602寫指令數(shù)據(jù) delay_uint(25); e=1; //e=1使能信號(hào) delay_uint(100);//延時(shí)一下等1602完成操作 e=0;}/*********************************************************************名稱:write_data(uchardat)*功能:1602寫數(shù)據(jù)函數(shù)*輸入:需要寫入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidwrite_data(uchardat){ rs=1; //寫數(shù)據(jù) rw=0; //對(duì)1602寫操作 P0=dat; //P0口對(duì)1602寫數(shù)據(jù) delay_uint(25); e=1; //e=1使能信號(hào) delay_uint(100);//延時(shí)一下等1602完成操作 e=0; }/***********************lcd1602上顯示這字符函數(shù)************************/voidDis_str(ucharadd,uchar*p){write_com(add); //寫1602的地址while(*p>0){write_data(*p); //寫數(shù)據(jù) p++; //指針地址加1}}voidinit_1602(){ write_com(0x38);//顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口不檢測(cè)忙信號(hào) write_com(0x0c);//開顯示不顯示光標(biāo) write_com(0x06);//當(dāng)寫一個(gè)字符是,地址指針加1 write_com(0x01);//清除顯示}/****************************************************************名稱:delay_1ms()*功能:延時(shí)1ms函數(shù)*輸入:q*輸出:無****************************************************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}ucharKey_io; //暫存IO值ucharkey_new; //松手檢測(cè)自鎖變量ucharkey_can; //按鍵值ucharKey_D_bit;/********************按鍵程序*****************/voidkey(void){key_can=18;P3=0xf0; //拉低第四位Key_io=P3;if(Key_io!=0xf0)//查看搞四位是否有低電平{ Key_io|=0x0f;//保持高四位出現(xiàn)低電平的管腳,拉高第四位 P3=Key_io;//重新復(fù)制IO口 Key_io=P3;//讀取IO信息,確定鍵值 if(key_new==0)//自鎖變量,松手檢測(cè) { key_new=1; switch(Key_io) { case0x7e:key_can=10; //得到按鍵值 break; case0x7d:key_can=0; //得到按鍵值 break; case0x7b:key_can=11; //得到按鍵值 break; case0x77:key_can=15; //得到按鍵值 break; case0xbe:key_can=7;//得到按鍵值 break; case0xbd:key_can=8; //得到按鍵值 break; case0xbb:key_can=9; //得到按鍵值 break; case0xb7:key_can=14; //得到按鍵值 break; case0xde:key_can=13; //得到按鍵值 break; case0xdd:key_can=6;//得到按鍵值 break; case0xdb:key_can=5;//得到按鍵值 break; case0xd7:key_can=4;//得到按鍵值 break; case0xee:key_can=12; //得到按鍵值 break; case0xed:key_can=3; //得到按鍵值 break; case0xeb:key_can=2; //得到按鍵值 break; case0xe7:key_can=1; //得到按鍵值 break; } } }else{ key_new=0; }}ucharXS_JG(ucharadd,floatn) //顯示函數(shù){ucharlen,p=0;memset(Lcd_Str,0,16); //內(nèi)存空間初始化sprintf(Lcd_Str,"%e",n);while(Lcd_Str[p]!='e'){p++;}if(Lcd_Str[p+2]==0x30&&Lcd_Str[p+3]<0x37){ sprintf(Lcd_Str,"%f",n); len=strlen(Lcd_Str); while(len) { if(Lcd_Str[len-1]=='.') { Lcd_Str[len-1]=0; break; } len--; }}else{ while(p) { if(Lcd_Str[p-1]=='.') { Lcd_Str[p-1]=''; break; } p--; }}Dis_str(add,"");Dis_str(add,Lcd_Str);returnlen;}/*************顯示特殊字符函數(shù)***************/voidfuhao(uchars){if(jjcc<5){ if(jjcc==0) { Num_str[Lcd_dis1_i]=s;Lcd_dis1_i++; Lcd_num2_add=Lcd_dis1_i; } else { if(Num_str[Lcd_num2_add]==0) Num_str[Lcd_dis1_i-1]=s; } Dis_str(0x80,Num_str); }if(jjcc==5){ Lcd_dis1_i=4; Lcd_num2_i=0; Lcd_num2_add=4; memset(Num_str,0,16); //內(nèi)存空間初始化 Num_str[0]='A'; Num_str[1]='n'; Num_str[2]='s'; Num_str[3]=s; Dis_str(0x80,""); Dis_str(0x80,Num_str); }}voidmain(void){init_1602(); //lcd1602初始化write_data('0');memset(Num_str,0,16);while(1){ key(); //讀按鍵值 delay_1ms(10); if(key_can<18) //是否有按鍵按下,小于18時(shí)有按鍵按下 { delay_1ms(30); switch(key_can) { case11:if(Num_str[Lcd_num2_add]<=0x39&&Num_str[Lcd_num2_add]>=0x30) num2=atof(Num_str+Lcd_num2_add); //從數(shù)組中取第二個(gè)數(shù)字 else break; Lcd_num2_i=0; switch(jjcc) { case1:num1+=num2; //加 break; case2:num1-=num2; //減 break; case3:num1*=num2; //乘 break; case4:num1/=num2; //除 break; } XS_JG(0xc0,num1); Dis_str(0x80+Lcd_dis1_i,"="); jjcc=5;//等號(hào)標(biāo)志 break; case12:if(Num_str[0]==0||Lcd_num2_i>0) break; fuhao('+'); jjcc=1;Dian_i=0; break; //按下加號(hào)鍵 case13:if(Num_str[0]==0||Lcd_num2_i>0) break; fuhao('-'); jjcc=2;Dian_i=0; break; //按下減號(hào)鍵 case14:if(Num_str[0]==0||Lcd_num2_i>0) break; fuhao('*'); jjcc=3;Dian_i=0; break; //按下乘號(hào)鍵 case15:if(Num_str[0]==0||Lcd_num2_i>0) break; fuhao('/'); jjcc=4;Dian_i=0; break; //按下除號(hào)鍵 case10:if(Dian_i==0&&(Lcd_num1_i!=0||Lcd_num2_i!=0))//輸入小數(shù)點(diǎn)時(shí)前面必須有數(shù)字 { Dian_i++; //小數(shù)點(diǎn) Num_str[Lcd_dis1_i]='.' ; Lcd_dis1_i++; Dis_str(0x80,Num_str); } break; case16:jjcc=0; Dis_str(0x80,"0");//清除顯示 Dis_str(0xc0,""); /*********************刪除一個(gè)數(shù)字*******************/ case17:if(Lcd_dis1_i==0) break; /*********************刪除一個(gè)數(shù)字

溫馨提示

  • 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. 人人文庫網(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)論