畢業(yè)論文設(shè)計(jì)-簡(jiǎn)易計(jì)算器的制作_第1頁(yè)
已閱讀1頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  存檔編號(hào) </p><p><b>  畢 業(yè) 設(shè) 計(jì)</b></p><p>  題目 簡(jiǎn)易計(jì)算器的制作 </p><p>  學(xué) 院 信息工程學(xué)院 </p><p>  專(zhuān) 業(yè) 通信

2、工程 </p><p>  姓 名 XX </p><p>  學(xué) 號(hào) 2XXXX </p><p>  指導(dǎo)教師 XX </p><p>  完成時(shí)間 2014.5.14 </p>&l

3、t;p><b>  目 錄</b></p><p><b>  摘 要1</b></p><p>  Abstract2</p><p><b>  第一章緒論3</b></p><p>  1.1 開(kāi)發(fā)背景3</p><p>  1

4、.2 設(shè)計(jì)目的4</p><p>  第二章方案論證與設(shè)計(jì)5</p><p>  2.1設(shè)計(jì)指標(biāo)5</p><p>  2.2方案論證與設(shè)計(jì)5</p><p>  第三章硬件模塊介紹8</p><p>  3.1主控及運(yùn)算模塊8</p><p>  3.2顯示模塊13

5、</p><p>  3.3輸入模塊16</p><p>  第四章軟件設(shè)計(jì)18</p><p>  4.1主程序的設(shè)計(jì)18</p><p>  4.2鍵盤(pán)掃描的程序設(shè)計(jì)19</p><p>  4.3顯示模塊程序設(shè)計(jì)21</p><p>  4.4運(yùn)算模塊程序設(shè)計(jì)23&

6、lt;/p><p>  第五章仿真及調(diào)試24</p><p><b>  結(jié)束語(yǔ)25</b></p><p><b>  致 謝26</b></p><p><b>  參考文獻(xiàn)27</b></p><p>  附錄一:硬件實(shí)物圖28</

7、p><p>  附錄二:系統(tǒng)程序29</p><p>  附錄三:任務(wù)書(shū)40</p><p>  附錄四:開(kāi)題報(bào)告42</p><p>  附錄五:外文原文與外文譯文47</p><p>  基于AT89C51單片機(jī)的簡(jiǎn)易計(jì)算器的設(shè)計(jì)</p><p><b>  摘 要</b

8、></p><p>  計(jì)算器在人們的日常生活中是較為常見(jiàn)的電子產(chǎn)品之一。初期的計(jì)算器僅僅能實(shí)現(xiàn)簡(jiǎn)單的加減乘除運(yùn)算,而現(xiàn)在人們所廣泛使用的科學(xué)計(jì)算器功能已不再停留于此,除了加減乘除運(yùn)算外,它還能進(jìn)行乘方,開(kāi)方,指數(shù),對(duì)數(shù),三角函數(shù),反三角函數(shù)等的存儲(chǔ)和運(yùn)算。而且計(jì)算器的種類(lèi)和模式也在逐漸多樣化,如使用太陽(yáng)能電池的計(jì)算器,使用ASIC制作的計(jì)算器,使用純軟件設(shè)計(jì)的計(jì)算器和被集成到手機(jī)、平板電腦等電子產(chǎn)品中的計(jì)

9、算器??梢哉f(shuō)計(jì)算器還正在發(fā)展之中而且還將有很大的發(fā)展空間,未來(lái)必將出現(xiàn)功能更加強(qiáng)大的計(jì)算器?;谶@樣的理念,本設(shè)計(jì)以AT89C51單片機(jī)為核心,以軟硬件結(jié)合的方式設(shè)計(jì)了一個(gè)簡(jiǎn)易計(jì)算器。該計(jì)算器以4*4矩陣鍵盤(pán)為輸入方式,可以進(jìn)行4位帶符號(hào)數(shù)的加減乘除運(yùn)算,并在LCD1602液晶顯示器上顯示操作過(guò)程。該論文詳細(xì)介紹了整個(gè)系統(tǒng)的硬件組成結(jié)構(gòu)、工作原理和軟件設(shè)計(jì)思想與流程。</p><p>  關(guān)鍵詞: 計(jì)算器 AT

10、89C51 LCD1602 矩陣鍵盤(pán)</p><p>  Simple calculator designed based on AT89C51</p><p><b>  Abstract</b></p><p>  The calculator in People's Daily life is one of the most

11、common electronic products. Early computing calculator can only implement simple addition, subtraction, multiplication, and division, but now the scientific calculator which widely used by people’s functions are no longe

12、r stay, operation besides addition, subtraction, multiplication, and division, it can also power, prescribe, index, logarithmic, trigonometric function, inverse trigonometric function such as storage and computation. And

13、 th</p><p>  key words: calculator AT89C51 LCD1602 matrix keyboard</p><p><b>  緒論</b></p><p><b>  1.1 開(kāi)發(fā)背景</b></p><p>  計(jì)算器是日常生活中比較常見(jiàn)的電子產(chǎn)品之

14、一,它已在數(shù)十年間遍布千家萬(wàn)戶。計(jì)算器(calculator ;counter)一般是指“電子計(jì)算器”,該名詞由日文傳入中國(guó)。它是能進(jìn)行數(shù)學(xué)運(yùn)算的手持機(jī)器,擁有集成電路芯片,但結(jié)構(gòu)簡(jiǎn)單,比現(xiàn)代電腦結(jié)構(gòu)簡(jiǎn)單得多,可以說(shuō)是第一代的電子計(jì)算機(jī)(電腦),且功能也較弱,但較為方便與廉價(jià),可廣泛運(yùn)用于商業(yè)交易中,是必備的辦公用品之一。除顯示計(jì)算結(jié)果外,還常有溢出指示、錯(cuò)誤指示等。對(duì)于計(jì)算器的百年歷史,1946年2月15日,在美國(guó)賓夕法尼亞大學(xué),世界

15、上第一臺(tái)電子計(jì)算器ENIAC正式投入了運(yùn)行。在隆重的揭幕儀式上,ENIAC表演了它的“絕招”:在1秒鐘內(nèi)進(jìn)行5000次加法運(yùn)算;在1秒鐘內(nèi)進(jìn)行500次乘法運(yùn)算。這比當(dāng)時(shí)最快的電器計(jì)算器的運(yùn)算速度要快1000多倍。全場(chǎng)起立歡呼,歡呼科學(xué)技術(shù)進(jìn)入了一個(gè)新的歷史發(fā)展時(shí)期。 </p><p>  電子計(jì)算器不僅是一種工具,它與其它的工具都不相同:電子計(jì)算器是人腦的一個(gè)側(cè)面的延伸。因?yàn)殡娮佑?jì)算器不僅具有非凡的計(jì)算

16、能力,速度之快令人望塵莫及,而且還能夠仿真人的某些思維功能,按照一定的規(guī)則進(jìn)行邏輯判和邏輯推理,代替人的部分腦力勞動(dòng)。1976年,數(shù)學(xué)家憑借電子計(jì)算器去證明四色定理,“依靠機(jī)器完成了人沒(méi)有能夠完成的事情”,轟動(dòng)了整個(gè)國(guó)際數(shù)學(xué)界。 </p><p>  隨著社會(huì)的發(fā)展和科學(xué)技術(shù)的進(jìn)步,電子產(chǎn)品變得越來(lái)越先進(jìn),功能變得越來(lái)越強(qiáng)大,集成化程度也變得越來(lái)越高,其更新速度令人吃驚。對(duì)于計(jì)算器人們也在不斷地對(duì)它進(jìn)行

17、改進(jìn),然而技術(shù)的進(jìn)步是無(wú)止境的,如何讓計(jì)算器技術(shù)更加的成熟,充分利用現(xiàn)有的軟件和硬件條件,制作出更加好用的計(jì)算器,讓我們更方便的使用它,讓它更好的為我們的生活服務(wù),始終是當(dāng)今電子領(lǐng)域的重要研究課題。而另一方面,近年來(lái),單片機(jī)以其體積小、價(jià)格廉、面向控制等諸多優(yōu)點(diǎn),在各種工業(yè)控制、儀器儀表、產(chǎn)品、設(shè)備的自動(dòng)化、智能化方面獲得了極為廣泛的應(yīng)用。與此同時(shí),單片機(jī)系統(tǒng)的可靠性成為人們?cè)絹?lái)越關(guān)注的重要課題。影響系統(tǒng)可靠性的因素是多方面的,如構(gòu)成系

18、統(tǒng)的各種元器件本身的可靠性、系統(tǒng)本身各部分之間的相互耦合因素等。其中抗干擾性能是系統(tǒng)可靠性的重要指標(biāo)。</p><p>  本設(shè)計(jì)采用AT89C51芯片和LCD1602液晶顯示器,實(shí)現(xiàn)了利用單片機(jī)來(lái)設(shè)計(jì)一個(gè)簡(jiǎn)易計(jì)算器的目的。該計(jì)算器允許對(duì)四位輸入數(shù)據(jù)進(jìn)行帶符號(hào)加減乘除運(yùn)算,用C語(yǔ)言編寫(xiě)程序驅(qū)動(dòng)整個(gè)系統(tǒng)的運(yùn)行,便于移植和升級(jí)。如果所要設(shè)計(jì)的對(duì)象是更為復(fù)雜的計(jì)算器系統(tǒng),其實(shí)際原理和實(shí)現(xiàn)方法與本設(shè)計(jì)基本相同。本設(shè)計(jì)關(guān)鍵

19、在于必須非常熟悉單片機(jī)的原理與結(jié)構(gòu),并能熟練的運(yùn)用51C語(yǔ)言來(lái)編寫(xiě)程序,同時(shí)還要對(duì)整個(gè)系統(tǒng)的設(shè)計(jì)流程有很好的把握,從而將單片機(jī)和其他模塊完整的銜接。</p><p>  在現(xiàn)今的日常生活中,計(jì)算器毫無(wú)疑問(wèn)是人們的最重要工具之一,它的身影遍布在社會(huì)的各個(gè)角落,例如商店,學(xué)校等等。所以設(shè)計(jì)一款簡(jiǎn)單但卻極其實(shí)用的計(jì)算器具有很大的實(shí)際意義,而本文中利用單片機(jī)和LCD1602液晶結(jié)合設(shè)計(jì)的計(jì)算器充分利用了以上所講的單片機(jī)的

20、諸多優(yōu)點(diǎn),具有很好的實(shí)用價(jià)值。</p><p><b>  1.2 設(shè)計(jì)目的</b></p><p>  本設(shè)計(jì)旨在進(jìn)一步掌握單片機(jī)理論知識(shí),理解嵌入式單片機(jī)系統(tǒng)的硬軟件設(shè)計(jì),加強(qiáng)對(duì)實(shí)際應(yīng)用系統(tǒng)設(shè)計(jì)的能力。通過(guò)本設(shè)計(jì)的學(xué)習(xí),使我掌握單片機(jī)程序設(shè)計(jì)和微機(jī)接口應(yīng)用的基本方法,并能綜合運(yùn)用本科階段所學(xué)軟、硬件知識(shí)分析實(shí)際問(wèn)題,提高解決畢業(yè)設(shè)計(jì)實(shí)際問(wèn)題的能力,為單片機(jī)應(yīng)用和

21、開(kāi)發(fā)打下良好的基礎(chǔ)。</p><p><b>  方案論證與設(shè)計(jì)</b></p><p><b>  設(shè)計(jì)指標(biāo)</b></p><p>  本次設(shè)計(jì)的簡(jiǎn)易計(jì)算器的基本性能如下:</p><p>  能夠進(jìn)行4位整數(shù)的加減乘除運(yùn)算(除法的結(jié)果中可以有小數(shù))。</p><p> 

22、 能夠?qū)⒂?jì)算結(jié)果輸出到LCD1602液晶顯示屏中以便于觀察。</p><p>  能夠?qū)崿F(xiàn)清除數(shù)據(jù)的功能。</p><p>  能夠進(jìn)行錯(cuò)誤提示(比如當(dāng)輸入數(shù)據(jù)除數(shù)為0時(shí)會(huì)在LCD1602上顯示error)。</p><p><b>  方案論證與設(shè)計(jì)</b></p><p>  根據(jù)功能和以上對(duì)設(shè)計(jì)指標(biāo)的描述,本系統(tǒng)采

23、用AT89C51單片機(jī)為控制芯片,LCD1602為顯示芯片,輔以其他電路所需基本器件,完成對(duì)簡(jiǎn)易計(jì)算器的設(shè)計(jì)。具體的設(shè)計(jì)考慮如下:</p><p>  由于本次所要設(shè)計(jì)的是一個(gè)簡(jiǎn)易計(jì)算器, 要求能夠進(jìn)行4位整數(shù)的加減乘除運(yùn)算,功能較為簡(jiǎn)單,所編寫(xiě)程序不會(huì)太長(zhǎng),故使用AT89C51單片機(jī)即可滿足需求。</p><p>  由于LCD1602液晶顯示器相比于8段數(shù)碼管而言,擁有更大的顯示量,更

24、好的顯示效果,更全面的顯示字符類(lèi)型,因此這里選用LCD1602液晶顯示器作為顯示模塊。</p><p>  根據(jù)計(jì)算器的功能要求,鍵盤(pán)包括數(shù)字鍵(0-9)、符號(hào)鍵(+、—、*、÷)、清除鍵(CE)和等號(hào)鍵,故需要16個(gè)按鍵(4*4鍵盤(pán))。</p><p>  系統(tǒng)模塊圖如圖2.1所示:</p><p>  圖2.1 系統(tǒng)模塊圖</p>&l

25、t;p>  為了更好的實(shí)現(xiàn)系統(tǒng)的功能,硬件電路的設(shè)計(jì)應(yīng)該遵循以下原則:</p><p><b>  1、優(yōu)化硬件電路</b></p><p>  采用軟件設(shè)計(jì)與硬件設(shè)計(jì)相結(jié)合的方法;盡管采用軟件來(lái)實(shí)現(xiàn)硬件系統(tǒng)的功能時(shí),也許響應(yīng)時(shí)間會(huì)比單純使用硬件時(shí)長(zhǎng),而且還要占用微處理器(MCU)的時(shí)間;但是,用軟件實(shí)現(xiàn)硬件的功能可以簡(jiǎn)化硬件結(jié)構(gòu),提高電路的可靠性。所以,在設(shè)計(jì)

26、本系統(tǒng)得時(shí)候,在滿足可靠性和實(shí)時(shí)性的前提下,盡可能的通過(guò)軟件來(lái)實(shí)現(xiàn)硬件功能。</p><p>  2、可靠性及抗干擾設(shè)計(jì)</p><p>  根據(jù)可靠性設(shè)計(jì)理論,系統(tǒng)所用芯片數(shù)量越少,系統(tǒng)的平均無(wú)故障時(shí)間越長(zhǎng)。而且,所用芯片數(shù)量越少,地址和數(shù)據(jù)總線在電路板上受干擾的可能性也就越小。因此,系統(tǒng)的設(shè)計(jì)思想是在滿足功能的情況下力爭(zhēng)使用較少數(shù)量的芯片。</p><p>&l

27、t;b>  3、靈活的功能擴(kuò)展</b></p><p>  功能擴(kuò)展是否靈活是衡量一個(gè)系統(tǒng)優(yōu)劣的重要指標(biāo)。一次設(shè)計(jì)往往不能完全考慮到系統(tǒng)的各個(gè)方面,系統(tǒng)需要不斷完善以及進(jìn)行功能升級(jí)。進(jìn)行功能擴(kuò)展時(shí),應(yīng)該在原有設(shè)計(jì)的基礎(chǔ)上,通過(guò)修改軟件程序和少量硬件完成。對(duì)于本系統(tǒng)而言,就是要求在系統(tǒng)硬件不變的情況下,能夠通過(guò)修改軟件程序,完成功能的升級(jí)和擴(kuò)展。</p><p>  而在軟

28、件方面根據(jù)設(shè)計(jì)需要我們可以采用自上而下的程序設(shè)計(jì)方法,這種方法先從主程序開(kāi)始設(shè)計(jì),之后再編制各從屬程序和子程序,層層細(xì)化逐步求精,最后完成一個(gè)復(fù)雜程序的設(shè)計(jì)。這種設(shè)計(jì)方法比較符合人們的日常思維,但是缺點(diǎn)是一級(jí)的程序錯(cuò)誤將會(huì)對(duì)整個(gè)程序產(chǎn)生影響。計(jì)算器的程序流程圖如圖2.2所示:</p><p>  圖2.2 程序流程圖</p><p><b>  硬件模塊介紹</b>

29、</p><p>  主控及運(yùn)算模塊 </p><p>  AT89C51單片機(jī)是將微處理器(CPU),數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(4KB Flash ROM)、并行I/O 口、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)這些一臺(tái)計(jì)算機(jī)所需要的基本功能部件集成在了一塊芯片上,它靠程序運(yùn)行,并可以修改程序以通過(guò)不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,通

30、過(guò)單片機(jī)及其程序可以實(shí)現(xiàn)高智能,高效率,以及高可靠性!所以設(shè)計(jì)采用單片機(jī)作為該計(jì)算器的主控及運(yùn)算模塊,可以很好的實(shí)現(xiàn)控制和運(yùn)算功能。</p><p>  AT89C51單片機(jī)引腳圖如圖3.1,其實(shí)際外觀圖如圖3.2:</p><p>  圖3.1 AT89C51單片機(jī)引腳圖</p><p>  圖3.2 AT89C51單片機(jī)實(shí)際外觀圖</p>&

31、lt;p><b>  其各引腳功能如下:</b></p><p><b>  電源引腳</b></p><p>  Vcc: 正電源腳,接+5V電源。</p><p><b>  GND: 接地端。</b></p><p><b>  外接晶體引腳</b&

32、gt;</p><p>  外接晶體引腳圖如圖3.3所示:</p><p>  圖3.3 外接晶體管引腳</p><p>  XTAL1:片內(nèi)振蕩器反相放大器和時(shí)鐘發(fā)生器電路的輸入端。使用片內(nèi)振蕩器時(shí),該引腳連接外部石英晶體和微調(diào)電容。</p><p><b>  XTAL2:</b></p><p

33、>  片內(nèi)振蕩器反相放大器和時(shí)鐘發(fā)生器電路的輸出端,當(dāng)使用片內(nèi)振蕩器時(shí),該引腳連接外部石英晶體和微調(diào)電容。當(dāng)采用外部時(shí)鐘源時(shí),引腳XTAL1接收外部時(shí)鐘振蕩器的信號(hào),XTAL2懸空。</p><p>  內(nèi)部方式時(shí),時(shí)鐘發(fā)生器對(duì)振蕩脈沖二分頻,比如晶振為12MHz,時(shí)鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇,而電容則取30PF左右。</p><p>  型號(hào)同樣

34、是AT89C51的芯片,在其后面還會(huì)有頻率編號(hào),有12,16,20,24MHz可選,在購(gòu)買(mǎi)和選用時(shí)需注意。比如AT89C51 24PC就是最高振蕩頻率24MHz,40P封裝的普通商用芯片。</p><p><b>  控制引腳</b></p><p><b>  RST</b></p><p>  復(fù)位信號(hào)輸入端,高電平有

35、效。當(dāng)單片機(jī)運(yùn)行時(shí),在此引腳加上持續(xù)時(shí)間大于2個(gè)機(jī)器周期(24個(gè)時(shí)鐘振蕩周期)的高電平時(shí),就可以對(duì)單片機(jī)完成復(fù)位操作且只要這個(gè)腳保持高電平,51芯片便循環(huán)復(fù)位。在單片機(jī)復(fù)位后P0-P3口均置1,引腳表現(xiàn)為高電平,程序計(jì)數(shù)器和特殊功能寄存器SFR全部清零。當(dāng)RST腳電平由高變低時(shí),單片機(jī)開(kāi)始從ROM的0000H處開(kāi)始運(yùn)行程序。</p><p>  在單片機(jī)正常工作時(shí),此引腳應(yīng)為<=0.5V的低電平。</

36、p><p>  比較常用的復(fù)位電路如圖3.4所示。</p><p>  圖3.4 復(fù)位電路圖</p><p>  復(fù)位操作并不會(huì)對(duì)內(nèi)部RAM有影響。當(dāng)AT89C51通電后,時(shí)鐘電路開(kāi)始工作,在RST引腳上出現(xiàn)24個(gè)時(shí)鐘周期以上的高電平,系統(tǒng)便初始復(fù)位,也就是說(shuō)單片機(jī)開(kāi)始重新執(zhí)行程序代碼。AT89C51的復(fù)位方式可以是自動(dòng)復(fù)位,也同樣可以是手動(dòng)復(fù)位,如圖3.5所示。<

37、;/p><p><b>  圖3.5 復(fù)位方式</b></p><p><b>  EA/Vpp</b></p><p>  EA為外部程序存儲(chǔ)器訪問(wèn)控制端。</p><p>  當(dāng)EA引腳為高電平時(shí),單片機(jī)讀片內(nèi)程序存儲(chǔ)器,但在PC值超過(guò)0FFFH時(shí),將自動(dòng)轉(zhuǎn)向訪問(wèn)外部程序存儲(chǔ)器中的程序。</p

38、><p>  當(dāng)EA引腳為低電平時(shí),對(duì)程序存儲(chǔ)器的讀操作只限定在外部程序存儲(chǔ)器,地址為0000H~FFFFH,片內(nèi)的4KBFlash程序存儲(chǔ)器不起作用。</p><p>  Vpp為該引腳的第二功能,為編程電壓輸入端。對(duì)于89C51,在片內(nèi)Flash固化編程時(shí),加在Vpp引腳的編程電壓為+5V或+12V。在編程校驗(yàn)時(shí),該引腳接Vcc。</p><p><b>

39、  ALE/PROG</b></p><p>  ALE為低8位地址鎖存允許信號(hào)。在系統(tǒng)擴(kuò)展時(shí)ALE的負(fù)跳沿將P0口發(fā)出的低8位地址鎖存在外接的地址鎖存器中,然后P0口再作為數(shù)據(jù)端口,以實(shí)現(xiàn)P0口的低8位地址和數(shù)據(jù)的分時(shí)傳送。</p><p>  PROG為該引腳的第二功能,在對(duì)片內(nèi)Flash存儲(chǔ)器編程時(shí),該引腳作為編程脈沖輸入端。</p><p>&l

40、t;b>  PSEN</b></p><p>  片外程序存儲(chǔ)器的讀選通信號(hào)。在單片機(jī)讀外部程序存儲(chǔ)器時(shí),此引腳輸出脈沖的負(fù)跳沿作為讀外部程序存儲(chǔ)器的選通信號(hào)。此引腳接外部程序存儲(chǔ)器的OE端;在訪問(wèn)外部RAM時(shí),PSEN信號(hào)無(wú)效。</p><p><b>  I/O引腳</b></p><p>  P0口:8位,漏極開(kāi)路的雙向

41、I/O口。</p><p>  當(dāng)89C51擴(kuò)展外部存儲(chǔ)器及I/O接口芯片時(shí),P0口作為地址總線(低8位)及數(shù)據(jù)總線的分時(shí)復(fù)用端口。</p><p>  P0口也可作為通用的I/O口使用,但需加上拉電阻,這時(shí)為準(zhǔn)雙向口。當(dāng)作為普通的I/O口輸入時(shí),應(yīng)先向端口的輸出鎖存器寫(xiě)入1。P0口可驅(qū)動(dòng)8個(gè)LS型的TTL負(fù)載。</p><p>  P1口:8位,準(zhǔn)雙向I/O口,具

42、有內(nèi)部上拉電阻。</p><p>  P1口是專(zhuān)為用戶使用的準(zhǔn)雙向I/O口,當(dāng)作為普通的I/O口輸入時(shí),應(yīng)先向端口的輸出鎖存器寫(xiě)入1,P1口可驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。</p><p>  P2口:8位,準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻。</p><p>  當(dāng)89C51擴(kuò)展外部存儲(chǔ)器及I/O口時(shí),P2口可輸出高8位地址。</p><p> 

43、 P2口也可作為普通的I/O口使用。當(dāng)作為普通的I/O口輸入時(shí),應(yīng)先向端口的輸出鎖存器寫(xiě)入1。P2口可驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。</p><p>  P3口:8位,準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻。</p><p>  P3口可作為通用I/O口使用,當(dāng)作為通用的I/O口輸入時(shí)應(yīng)先向端口的輸出鎖存器寫(xiě)入1。P2口可驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。</p><p>  P3口

44、還可提供第二功能。其第二功能定義如下表:</p><p>  表3.1 P3口第二功能定義</p><p><b>  顯示模塊</b></p><p>  在本設(shè)計(jì)中使用LCD1602液晶顯示器作為顯示模塊。其實(shí)際外觀如圖3.6所示:</p><p>  圖3.6 LCD1602實(shí)際外觀圖</p>

45、<p>  LCD1602模塊內(nèi)部自帶字符發(fā)生存儲(chǔ)器(CGROM),字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫(xiě)的英文字母“A”的代碼是(41H),顯示時(shí)模塊把代碼41H發(fā)給液晶模塊,我們就能在液晶上看到字母“A”。</p><p>  1602液晶模塊內(nèi)部的控制器共有11條控制指令,豐富的指令可以完成液晶的時(shí)序控制、工作方式式設(shè)置和數(shù)據(jù)顯示等。

46、</p><p>  采用的LCD1602液晶模塊是標(biāo)準(zhǔn)16針插座,接口電路如圖3.7所示: </p><p>  圖3.7 LCD1602接口接口電路</p><p>  LCD1602的引腳功能和指令分別如表3.1和表3.2所示:</p><p>  表3.2 LCD1602引腳功能</p><p>  表

47、3.3 LCD1602 指令表</p><p><b>  LCD的特點(diǎn):</b></p><p><b>  1、低壓微功耗;</b></p><p><b>  2、平板型結(jié)構(gòu);</b></p><p>  3、被動(dòng)顯示型(無(wú)眩光,不刺激人眼,不會(huì)引起眼睛疲勞);<

48、;/p><p>  4、顯示信息量大(因?yàn)橄袼乜梢宰龅煤苄?;</p><p>  5、易于彩色化(在色譜上可以非常準(zhǔn)確的復(fù)現(xiàn));</p><p>  6、無(wú)電磁輻射(對(duì)人體安全,利于信息保密);</p><p>  7、長(zhǎng)壽命(這種器件幾乎沒(méi)有什么劣化問(wèn)題,因此壽命極長(zhǎng),但是液晶背光壽命有限,不過(guò)背光部分可以更換)。</p>&l

49、t;p><b>  輸入模塊</b></p><p>  計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,假如采用獨(dú)立按鍵的方式,這種情況下,編程會(huì)比較簡(jiǎn)單,但卻會(huì)占用大量的I/O 口資源,所以在很多情況下都不采用這種方式。為此,我們引入矩陣鍵盤(pán),即采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤(pán),在行線和列線的每一個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤(pán)上按鍵的個(gè)數(shù)就為4×4

50、個(gè)。這種行列式的鍵盤(pán)結(jié)構(gòu)能夠有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率。</p><p>  矩陣鍵盤(pán)的按鍵設(shè)在行列線交點(diǎn)上,鍵盤(pán)的行線或列線接上正電。 假如鍵盤(pán)的行線接上正電,則無(wú)按鍵按下時(shí),行線處于高電平狀態(tài);當(dāng)有按鍵按下時(shí),行線電平狀態(tài)將由與此行線相連的列線決定。列線的電平如果為低,則行線電平為低;列線電平如果為高,則行線的電平也為高,這一點(diǎn)是識(shí)別行列式鍵盤(pán)按鍵是否按下的關(guān)鍵所在。由于行列式鍵盤(pán)中行列線為多鍵

51、共用,各按鍵均影響該鍵所在行和列的電平,因此各按鍵彼此將相互發(fā)生影響,所以必須將行、列線信號(hào)配合起來(lái)并做適當(dāng)?shù)奶幚恚拍艽_定閉合鍵的位置。</p><p>  本設(shè)計(jì)中所用到的鍵盤(pán)電路如圖3.8所示:</p><p><b>  圖3.8 鍵盤(pán)電路</b></p><p>  綜合以上模塊的設(shè)計(jì)介紹,可以確定系統(tǒng)硬件的設(shè)計(jì)。其設(shè)計(jì)圖如圖3.9所

52、示:</p><p>  圖3.9 系統(tǒng)硬件原理圖</p><p><b>  軟件設(shè)計(jì)</b></p><p>  簡(jiǎn)易計(jì)算器的程序主要包括以下功能模塊: </p><p><b>  按鍵掃描模塊。 </b></p><p>  2、基于LCD液晶顯示屏的顯示模塊。&l

53、t;/p><p><b>  3、運(yùn)算模塊。 </b></p><p><b>  主模塊。 </b></p><p><b>  主程序的設(shè)計(jì)</b></p><p>  主程序通過(guò)調(diào)用函數(shù)實(shí)現(xiàn)對(duì)整個(gè)程序的控制,包括對(duì)LCD1602液晶的初始化,對(duì)輸入按鍵判斷,進(jìn)行加減乘除運(yùn)算,

54、輸出計(jì)算結(jié)果等。</p><p>  其程序流程圖如圖4.1所示:</p><p>  圖4.1 主程序流程圖</p><p><b>  鍵盤(pán)掃描的程序設(shè)計(jì)</b></p><p>  按鍵的識(shí)別分為掃描法和線反轉(zhuǎn)法兩種。掃描法要逐列掃描查詢,當(dāng)被按下的鍵處于最后一列時(shí),則要經(jīng)過(guò)多次掃描才能最后獲得此按鍵所處的行

55、列值。而線反轉(zhuǎn)法則很簡(jiǎn)練,無(wú)論被按鍵是處于第一列或最后一列,均只需經(jīng)過(guò)兩步便能獲得此按鍵所在的行列值。由于線反轉(zhuǎn)法更加簡(jiǎn)單實(shí)用,故本設(shè)計(jì)采用線反轉(zhuǎn)法來(lái)完成鍵盤(pán)掃描程序的設(shè)計(jì)。線反轉(zhuǎn)法的兩個(gè)具體操作步驟如下:</p><p>  讓行線編程為輸入線,列線編程為輸出線,并使輸出線輸出為全低電平,則行線中電平由高變低的所在行為按鍵所在行。</p><p>  再把行線編程為輸出線,列線編程為輸入

56、線,并使輸出線輸出為全低電平,則行線中電平由高變低的所在列為按鍵所在列。</p><p>  在鍵盤(pán)掃描程序中當(dāng)數(shù)字鍵按下則將相應(yīng)的數(shù)字送入緩存區(qū),當(dāng)功能鍵按下則執(zhí)行相應(yīng)的程序。</p><p>  另外,鍵盤(pán)的工作方式有三種,分別是編程掃描,定時(shí)掃描和中斷掃描。其中,編程掃描只有當(dāng)單片機(jī)空閑時(shí),才調(diào)用鍵盤(pán)掃描子程序,反復(fù)掃描鍵盤(pán),等待用戶從鍵盤(pán)上輸入命令或數(shù)據(jù),來(lái)響應(yīng)鍵盤(pán)的輸入請(qǐng)求。定時(shí)

57、掃描即每隔一定的時(shí)間對(duì)鍵盤(pán)掃描一次。中斷掃描只有在鍵盤(pán)有鍵按下時(shí),才執(zhí)行鍵盤(pán)掃描程序并執(zhí)行該按鍵功能程序,如果無(wú)鍵按下,單片機(jī)將不理睬鍵盤(pán),這種方式可進(jìn)一步提高單片機(jī)掃描鍵盤(pán)的工作效率。</p><p>  由于本設(shè)計(jì)中單片機(jī)除了鍵盤(pán)掃描、計(jì)算和LCD顯示控制外并無(wú)其它工作,所以用簡(jiǎn)單的編程掃描方式更為合適。</p><p>  其流程圖如圖4.2所示:</p><p&

58、gt;<b>  N</b></p><p><b>  Y</b></p><p>  圖4.2 按鍵掃描程序流程圖</p><p>  鍵盤(pán)掃描程序的主體如下:</p><p>  short temp1,temp2,temp,a=0xff;</p><p>  P1=

59、0xf0;/* 輸入行值(或列值) */</p><p>  LCD_Delay_ms(20);/* 延時(shí) */</p><p>  temp1=P1;/* 讀列值(或行值) */</p><p><b>  P1=0xff;</b></p><p>  LCD_Delay_ms(20);

60、/* 延時(shí)程序 */</p><p>  P1=0x0f;/* 輸入列值(或行值) */</p><p>  LCD_Delay_ms(20);/* 延時(shí) */</p><p>  temp2=P1;/* 讀行值(或列值) */</p><p><b>  P1=0xff;</b>

61、;</p><p>  temp=(temp1&0xf0)|(temp2&0xf);/* 將兩次讀入數(shù)據(jù)組合 */</p><p><b>  顯示模塊程序設(shè)計(jì)</b></p><p>  顯示模塊程序需要首先要對(duì)顯示模塊進(jìn)行初始化,然后向LCD1602液晶寫(xiě)入指令,最后向LCD1602液晶寫(xiě)入數(shù)據(jù)。因此其需要三個(gè)函數(shù)來(lái)完成該

62、程序的設(shè)計(jì),三個(gè)函數(shù)分別如下:</p><p>  LCD1602液晶初始化函數(shù);</p><p><b>  寫(xiě)入指令函數(shù);</b></p><p><b>  寫(xiě)入數(shù)據(jù)函數(shù);</b></p><p>  指定顯示器坐標(biāo)寫(xiě)入字符(字符串)函數(shù)。</p><p>  其中LC

63、D1602液晶初始化函數(shù)包括設(shè)置顯示類(lèi)型、光標(biāo)、清屏、開(kāi)顯示、顯示位置的首地址和初始顯示數(shù)據(jù)等等。其程序主體如下:</p><p>  wela=0; //寫(xiě)液晶</p><p>  lcden=0; //使能1602</p><p>  write_com(0x38);

64、 //8 位總線,雙行顯示,5X7 的點(diǎn)陣字符</p><p>  LCD_Delay_us(100); //延時(shí)100us</p><p>  write_com(0x0c); //開(kāi)顯示,無(wú)光標(biāo),光標(biāo)不閃爍</p><p>  write_com(0x06); //光標(biāo)右移動(dòng)</

65、p><p>  write_com(0x01); //清屏</p><p>  write_com(0x80); //DDRAM 地址歸0</p><p>  顯示模塊程序流程圖如圖4.3所示:</p><p>  圖4.3 顯示模塊程序流程圖</p><p><b&

66、gt;  運(yùn)算模塊程序設(shè)計(jì)</b></p><p>  運(yùn)算模塊的功能是利用單片機(jī)計(jì)算輸入數(shù)據(jù)運(yùn)算的結(jié)果,這個(gè)功能運(yùn)用C語(yǔ)言中的加減乘除運(yùn)算符即可實(shí)現(xiàn)。特別要注意的是在運(yùn)算除法時(shí)除數(shù)不能為零,即除數(shù)為零時(shí)程序要報(bào)錯(cuò)(在LCD1602液晶顯示器上顯示error!)。</p><p><b>  其程序主體如下:</b></p><p>

67、;  switch(x)/*功能鍵選擇*/</p><p><b>  { </b></p><p>  case 1:data_c=data_a+data_b;break; //加 /* + S=1 */ /* 數(shù)值轉(zhuǎn)換函數(shù) */</p><p>  case 2:if(data_a>=data_b)

68、{data_c=data_a-data_b;} /* - S=2 *///減</p><p>  else{data_c=data_b-data_a;W_lcd(5,1,'-');} //負(fù)數(shù)符號(hào)</p><p>  break; </p><p>  case 3:data_c=(data_a*data_b);break; /* * S

69、=3 *///乘</p><p>  case4:if(data_b==0){LCD_Write_String(0,1,"Error !");}else{data_c=(data_a*10000)/data_b;}break; /* / S=4 *///除//溢出時(shí)顯示錯(cuò)誤</p><p>  case 0:break;</p><p>&

70、lt;b>  } </b></p><p><b>  仿真及調(diào)試</b></p><p>  在本設(shè)計(jì)中使用keil C軟件對(duì)程序進(jìn)行編譯,然后再將其編譯連接后所生成的執(zhí)行文件放入已搭建好的proteus仿真圖中的AT89C51單片機(jī)上進(jìn)行仿真。其仿真圖如圖5.1所示:</p><p>  圖5.1 簡(jiǎn)易計(jì)算器仿真圖&

71、lt;/p><p>  首先輸入第一個(gè)數(shù)據(jù),然后再輸入功能鍵(+,-,*,/)和另一個(gè)數(shù)據(jù),最后按等號(hào)鍵就可以看到LCD顯示屏的第二行顯示出相應(yīng)的結(jié)果。如上圖中輸入“222/5=”,就在第二行顯示出結(jié)果“44.4000”,從這個(gè)結(jié)果可以看出,當(dāng)計(jì)算結(jié)果為小數(shù)時(shí),計(jì)算器能夠顯示小數(shù),小數(shù)位為四位。另外,在計(jì)算除法時(shí),如果輸入除數(shù)為0,可以看到LCD的第二行顯示出“Error 0.0000”的字樣。</p>

72、<p><b>  結(jié)束語(yǔ)</b></p><p>  在硬件的制作過(guò)程中我走了好多的彎路,主要是在系統(tǒng)還沒(méi)有設(shè)計(jì)很有把握就開(kāi)始動(dòng)手制作了。后來(lái)發(fā)現(xiàn)與設(shè)計(jì)的要求還有偏差,反復(fù)的改過(guò)了幾次,浪費(fèi)了大量的時(shí)間和體力。感受到設(shè)計(jì)人員要有耐心,要認(rèn)真的從要求開(kāi)始研究。軟件的編寫(xiě)過(guò)程中費(fèi)了很大的力氣,因?yàn)檐浖木帉?xiě)要求很高,要很細(xì)心,一不小心就會(huì)調(diào)用錯(cuò)誤,很深刻的體會(huì)到作為軟件編程人員是絕

73、不能粗心大意的。一個(gè)程序的完成的速度和質(zhì)量高低與細(xì)心與否有著很大聯(lián)系。編程時(shí),我充分使用了結(jié)構(gòu)化的思想。這樣因?yàn)檎Z(yǔ)句較少,程序調(diào)試比較方便,功能模塊可以逐一的調(diào)試,充分體現(xiàn)了結(jié)構(gòu)化編程的優(yōu)勢(shì)。當(dāng)每個(gè)模塊都完成時(shí),將其功能加到一起就完成了整體的設(shè)計(jì)。</p><p><b>  致 謝</b></p><p>  本次畢業(yè)設(shè)計(jì)得到導(dǎo)師張帆老師的熱心指導(dǎo),在這里對(duì)張帆老

74、師表示最衷心的感謝。張帆老師平易近人,對(duì)學(xué)生的設(shè)計(jì)進(jìn)度和學(xué)習(xí)很關(guān)心。在畢業(yè)設(shè)計(jì)的前期,首先給我們介紹了不少有用的資料和書(shū)籍;在硬件設(shè)計(jì)等方面給予悉心的指導(dǎo);在調(diào)試的過(guò)程中張帆老師給每個(gè)出現(xiàn)的問(wèn)題給予及時(shí)的指導(dǎo)。在寫(xiě)畢業(yè)設(shè)計(jì)論文的階段,張帆老師讓我們提前給他評(píng)審,不論內(nèi)容字體,還是格式上的問(wèn)題都一一指出。待人平和、工作認(rèn)真、治學(xué)嚴(yán)謹(jǐn)他的給我留下很深刻的印象。更重要的是,他善于與學(xué)生溝通,不僅在畢業(yè)設(shè)計(jì)上給我及時(shí)的指導(dǎo),更為我大學(xué)最后階段的

75、學(xué)習(xí)提出了許多寶貴的意見(jiàn)。這一切都在潛移默化地影響著我,為我以后進(jìn)入工作崗位樹(shù)立了良好的榜樣。</p><p>  最后向所有幫助和關(guān)心過(guò)我的人表示衷心感謝!</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 張毅剛 彭喜元. 單片機(jī)原理與應(yīng)用設(shè)計(jì)[M]. 北京:電子工業(yè)出版社</p><p> 

76、 [2] 張義和 王敏男 許宏昌等. 例說(shuō)51單片機(jī)(第3版)[M]. 北京:人民郵電出版 </p><p>  [3] 恰汗·合孜爾. C語(yǔ)言程序設(shè)計(jì)(第三版)[M]. 北京:中國(guó)鐵道出版社,2010年第三版</p><p>  [4] 陳雷. C51單片機(jī)應(yīng)用實(shí)訓(xùn)[M]. 北京:中國(guó)電力出版社,2011年第一版</p><p>  [5] 張欣 孫宏

77、昌 尹霞. 單片機(jī)原理與C51程序設(shè)計(jì)基礎(chǔ)教程[M]. 北京:清華大學(xué)出版社,2010年第一版</p><p>  [6] 王巧芝 鄭鋒 劉瑞國(guó)等. 51單片機(jī)開(kāi)發(fā)應(yīng)用從入門(mén)到精通[M]. 北京:中國(guó)鐵道出版社</p><p>  [7] 張靖武 周靈杉.單片機(jī)系統(tǒng)的PROTEUS設(shè)計(jì)與仿真[M].北京:北京電子工業(yè)出版社</p><p>  [8] 靳達(dá) 求是科技

78、.單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)實(shí)例導(dǎo)航[M].:人民郵電出版社,2006</p><p>  [9] 劉守義. 單片機(jī)應(yīng)用技術(shù)[M].:西安電子科技大學(xué)出版社,2001</p><p>  [10] 林志琦.基于PROTEUS的單片機(jī)可視化軟硬件仿真[M].北京:北京航空航天大學(xué)出版社,2006</p><p>  [11] 胡漢才.單片機(jī)原理及接口技術(shù).清華大學(xué)出版社,19

79、96</p><p>  [12] 徐江海.單片機(jī)實(shí)用教程[M].北京:機(jī)械工業(yè)出版社,2007.</p><p>  [13] 肖洪兵. 跟我學(xué)用單片機(jī). 北京:北京航空航天大學(xué)出版社,2002.8</p><p>  [14] 夏繼強(qiáng). 單片機(jī)實(shí)驗(yàn)與實(shí)踐教程. 北京:北京航空航天大學(xué)出版社, 2001</p><p>  [15] 譚浩強(qiáng)

80、. C語(yǔ)言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2000.</p><p>  [16] 劉?;? C語(yǔ)言程序設(shè)計(jì)與實(shí)訓(xùn)教程[M].北京:科學(xué)出版社,2004.</p><p>  [17] 張磊. C語(yǔ)言程序設(shè)計(jì)[M].北京:高等教育出版社,2005.</p><p>  [18] 嚴(yán)桂蘭. C語(yǔ)言程序設(shè)計(jì)[M].廈門(mén):廈門(mén)大學(xué)出版社,2006</p>

81、<p>  附錄一:硬件實(shí)物圖(圖6.1和圖6.2):</p><p><b>  圖6.1 正面圖</b></p><p><b>  圖6.2 背面圖</b></p><p><b>  附錄二:系統(tǒng)程序</b></p><p>  #include<

82、;reg51.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  sbit rs=P2^7; //指令or數(shù)據(jù)</p><p>  sbit wela=P2^6; //讀or寫(xiě)</p&g

83、t;<p>  sbit lcden=P2^5; //使能信號(hào)</p><p>  uchar code table[]= " ";</p><p>  long int data_a,data_b; //第一個(gè)數(shù)和第二個(gè)數(shù)</p><p>  long int data_c;//計(jì)算結(jié)果

84、</p><p>  uchar dispaly[10]; //顯示緩沖</p><p>  //************************************************************************/</p><p>  // 延時(shí)t us函數(shù)</p><p>  //*******

85、*****************************************************************/</p><p>  void LCD_Delay_us(unsigned int t)</p><p><b>  {</b></p><p>  while(t--); //t=0,退出&l

86、t;/p><p><b>  }</b></p><p>  //************************************************************************/</p><p>  // 延時(shí)t ms函數(shù)</p><p>  //**********************

87、**************************************************/</p><p>  void LCD_Delay_ms(unsigned int t)</p><p><b>  {</b></p><p>  unsigned int i,j;</p><p>  for(i=0

88、;i<t;i++) //執(zhí)行t次循環(huán)</p><p>  for(j=0;j<113;j++) //執(zhí)行113次循環(huán)</p><p><b>  ;</b></p><p><b>  }</b></p><p>  //*******************

89、*****************************************************/</p><p>  // 1602液晶寫(xiě)指令</p><p>  //************************************************************************/</p><p>  void write

90、_com(uchar com) //1602液晶寫(xiě)指令</p><p><b>  {</b></p><p>  rs=0; //寫(xiě)指令</p><p>  lcden=0; //使能1602 </p><p>  P0=com;

91、 //寫(xiě)入指令com</p><p>  LCD_Delay_ms(1); //延時(shí)1ms</p><p>  lcden=1; //使能1602</p><p>  LCD_Delay_ms(2); //延時(shí)2ms </p>&

92、lt;p>  lcden=0; //使能1602</p><p><b>  }</b></p><p>  //************************************************************************/</p><p>  // 1602液晶寫(xiě)數(shù)據(jù)

93、</p><p>  //************************************************************************/</p><p>  void write_date(uchar date) //1602液晶寫(xiě)數(shù)據(jù)</p><p><b>  {</b></p><p

94、>  rs=1; //寫(xiě)數(shù)據(jù)</p><p>  lcden=0; //使能1602 </p><p>  P0=date; //寫(xiě)入數(shù)據(jù)date</p><p>  LCD_Delay_ms(1); //延時(shí)1

95、ms</p><p>  lcden=1; //使能1602</p><p>  LCD_Delay_ms(2); //延時(shí)2ms</p><p>  lcden=0; //使能1602</p><p><b>  }</b>

96、;</p><p>  //************************************************************************/</p><p>  // 指定x,y寫(xiě)入字符函數(shù)</p><p>  //***********************************************************

97、*************/</p><p>  void W_lcd(unsigned char x,unsigned char y,unsigned char Data) </p><p><b>  { </b></p><p>  if (y == 0){write_com(0x80 + x);} //第一行 </p

98、><p>  else{write_com(0xc0 + x);} //第二行</p><p>  write_date( Data); //寫(xiě)入數(shù)據(jù)</p><p><b>  }</b></p><p>  //指定x,y寫(xiě)入字符串函數(shù)</p><p

99、>  void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) </p><p><b>  { </b></p><p>  if (y == 0){write_com(0x80 + x);} //第一行</p><p>  else{wr

100、ite_com(0xC0 + x);} //第二行</p><p>  while (*s) //</p><p>  {write_date( *s); s++;} //寫(xiě)入數(shù)據(jù)</p><p><b>  }</b></p><p> 

101、 //************************************************************************/</p><p>  // 初始化液晶,及畫(huà)面初始化 </p><p>  //************************************************************************/</p&

102、gt;<p>  void init_lcd(void) //初始化液晶,及畫(huà)面初始化</p><p><b>  {</b></p><p>  wela=0; //寫(xiě)液晶</p><p>  lcden=0; //使能160

103、2</p><p>  write_com(0x38); //8 位總線,雙行顯示,5X7 的點(diǎn)陣字符</p><p>  LCD_Delay_us(100); //延時(shí)100us</p><p>  write_com(0x0c); //開(kāi)顯示,無(wú)光標(biāo),光標(biāo)不閃爍</p><p

104、>  write_com(0x06); //光標(biāo)右移動(dòng)</p><p>  write_com(0x01); //清屏</p><p>  write_com(0x80); //DDRAM 地址歸0</p><p><b>  }</b></p><

105、;p>  //************************************************************************/</p><p>  // 反轉(zhuǎn)法鍵盤(pán)掃描 </p><p>  //************************************************************************/<

106、/p><p>  short keycheckdown()/* 反轉(zhuǎn)法鍵盤(pán)掃描 */</p><p><b>  {</b></p><p>  short temp1,temp2,temp,a=0xff;</p><p>  P1=0xf0;/* 輸入行值(或列值) */</p><

107、p>  LCD_Delay_ms(20);/* 延時(shí) */</p><p>  temp1=P1;/* 讀列值(或行值) */</p><p><b>  P1=0xff;</b></p><p>  LCD_Delay_ms(20);/* 延時(shí) */</p><p>  P1=0x0f

108、;/* 輸入列值(或行值) */</p><p>  LCD_Delay_ms(20);/* 延時(shí) */</p><p>  temp2=P1;/* 讀行值(或列值) */</p><p><b>  P1=0xff;</b></p><p>  temp=(temp1&0xf0

109、)|(temp2&0xf);/* 將兩次讀入數(shù)據(jù)組合 */</p><p>  switch(temp)/* 通過(guò)讀入數(shù)據(jù)組合判斷按鍵位置 */</p><p><b>  {</b></p><p>  case 0x77 :a=0x0d;break;// 按鍵/ </p><p>  cas

110、e 0x7b :a=0x0e; break;// 按鍵=</p><p>  case 0x7d :a=0; break;// 按鍵0</p><p>  case 0x7e :a=0x0f; break;// 按鍵CE</p><p>  case 0xb7 :a=0x0c;break;// 按鍵*</p><p>  case

111、0xbb :a=0x9;break; // 按鍵9</p><p>  case 0xbd :a=0x8;break; // 按鍵8 </p><p>  case 0xbe :a=0x7;break; // 按鍵7</p><p>  case 0xd7 :a=0x0b;break;// 按鍵-</p><p>  case 0xd

112、b :a=0x6;break; // 按鍵6</p><p>  case 0xdd :a=0x5;break; // 按鍵5</p><p>  case 0xde :a=0x4;break; // 按鍵4</p><p>  case 0xe7 :a=0x0a; break;// 按鍵+</p><p>  case 0xeb :a

113、=3;break;// 按鍵3</p><p>  case 0xed :a=2;break;// 按鍵2</p><p>  case 0xee :a=1;break;// 按鍵1</p><p>  default :a=0xff;</p><p><b>  }</b></p><p

114、>  return a;/* 返回按鍵值 */</p><p><b>  }</b></p><p>  void display_a() //顯示數(shù)據(jù)a</p><p><b>  {</b></p><p>  dispaly[3]=data_a%10000/1000;

115、 //千</p><p>  dispaly[2]=data_a%1000/100; //百</p><p>  dispaly[1]=data_a%100/10; //十</p><p>  dispaly[0]=data_a%10; //個(gè) </p><p>  write_com(0x80+

116、0); //顯示數(shù)據(jù)a</p><p>  if(data_a>999){write_date('0'+dispaly[3]);} //顯示千位</p><p>  if(data_a>99){write_date('0'+dispaly[2]);} //顯示百位</p><p&g

117、t;  if(data_a>9){write_date('0'+dispaly[1]);} //顯示十位</p><p>  write_date('0'+dispaly[0]); //顯示個(gè)位</p><p><b>  }</b></p><p>  void display_b()

118、 //顯示數(shù)據(jù)b</p><p><b>  {</b></p><p>  write_com(0x80+7); //第一行</p><p>  dispaly[3]=data_b%10000/1000; //千</p><p>  dispaly[2]=data_b%1000/100; //百<

119、/p><p>  dispaly[1]=data_b%100/10; //十</p><p>  dispaly[0]=data_b%10; //個(gè) </p><p>  if(data_b>999){write_date('0'+dispaly[3]); } //顯示千位 </p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論