基于單片機的多功能計算器的設(shè)計_第1頁
基于單片機的多功能計算器的設(shè)計_第2頁
基于單片機的多功能計算器的設(shè)計_第3頁
基于單片機的多功能計算器的設(shè)計_第4頁
基于單片機的多功能計算器的設(shè)計_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 2011 屆畢業(yè)設(shè)計說明書 題 目:基于單片機的多功能計算器的設(shè)計 系 、 部: 電 氣 與 信 息 工 程 系 學(xué)生姓名: 指導(dǎo)教師: 職 稱 高 級 講 師 專 業(yè): 通 信 技 術(shù) 班 級: 0 8 0 1 學(xué) 號: 完成時間: 2011年5月9號 目錄摘要1一、系統(tǒng)設(shè)計21.1、功能介紹.21.1.1、基本功能.21.1.2、擴展功能.21.2、總體設(shè)計方案.21.2.1、總體設(shè)計思路.21.2.2、方案論證與比較.21.2.3、系統(tǒng)組成.8二、重要器件的知識介紹82.1、單片機的知識介紹.82.1.1、單片機的主要性能.82.1.2、單片機的功能特性描敘.92.1.3、單片機的內(nèi)部

2、結(jié)構(gòu)方框圖及芯片引腳圖.92.1.4、單片機各引腳功能說明.102.1.5、單片機時鐘電路.112.1.6、單片機復(fù)位電路.122.1.7、單片機下載口電路.12三、軟件設(shè)計133.1、液晶顯示設(shè)計.133.2、鍵盤輸入設(shè)計.153.3、計算器函數(shù)設(shè)計.153.4、程序流程圖.183.5、程序清單.20產(chǎn)品使用說明21參考文獻22附錄1、元器件清單23附錄2、系統(tǒng)原理圖24附錄3、實物照片24附錄4、程序清單27致 謝46摘要本設(shè)計采用單片機作為控制芯片,用C語言對其進行編程實現(xiàn),輸入由4*4行列式鍵盤控制,輸出采用人性化的SBY12864K-ZK型液晶實現(xiàn)。該計算器為多功能計算器,在未進行計

3、算時,它是一個萬年歷時鐘,并且?guī)X鐘和星期顯示,所以數(shù)據(jù)均可隨時進行校準(zhǔn),校準(zhǔn)數(shù)據(jù)采用的是獨立式鍵盤,是將4*4行列式鍵盤的一根線拉低,然后讀取與這根線交叉的4根線的所處狀態(tài)來判斷按鍵是否被按下。對于計算這個部分我采用的是行列鍵盤,10個數(shù)字鍵,一個小數(shù)點鍵,四個符號鍵,一個多功能鍵,通過判別該多功能鍵連續(xù)按的次數(shù)來決定該鍵此時的命令。由于C語言庫函數(shù)繁多,所以我采用調(diào)用C語言庫函數(shù)來解決多種運算類型,這樣編程更簡單,運行起來也更可靠。關(guān)鍵字:單片機,點陣圖形液晶,行列鍵盤,C語言庫函數(shù)。Abstract The design uses a single-chip microcomputer

4、as the control chip, using C programming language of its input from 4 * 4 matrix keyboard control, the output of the use of human SBY12864K-ZK-type liquid crystal to achieve. Multi-function calculator for the calculator, before the calculation, it is a calendar clock and bell and weeks with the brai

5、n showed that there may at any time calibration data, calibration data is used in stand-alone keyboard, is a 4 * 4 matrix keyboard down one line, and then read with the root of the cross-line 4-line state to determine which button has been pressed, which is only four keys for the three calendar butt

6、on calibration and the control of the brain clock, and the other button is used to switch into the mode of calculation. For this part of the calculation I used the keyboard matrix, 10 numeric keys, a decimal point key, four symbol keys, a multi-function keys, multi-function through the identificatio

7、n of the row by the number of keys to determine the order of the key at this time. C language library function as a result of many, so I used to call C language library function to solve a wide range of operator types, such programming is much simpler, it is also more reliable. Keywords: Single-chip

8、, dot-matrix graphic LCD, matrix keyboard, C language library function. 一、系統(tǒng)設(shè)計1.1、功能介紹1.1.1、基本功能根據(jù)所學(xué)知識,自行設(shè)計一個計算器,要求自行設(shè)計供電電源,該計算器能夠?qū)崿F(xiàn)加減乘除四則混合運算,能夠?qū)崿F(xiàn)連續(xù)計算。1.1.2、擴展功能(1)、該計算器能夠?qū)崿F(xiàn)浮點數(shù)的運算。(2)、該計算器在不進行計算時能夠當(dāng)時鐘用,并且該時鐘可顯示星期和日歷,同時能夠修改其值。(3)、該計算器能夠?qū)崿F(xiàn)加減乘除以外的其他運算。1.2、總體設(shè)計方案1.2.1、總體設(shè)計思路本設(shè)計主要采用以下基本模塊來實現(xiàn),控制器模塊,輸入模塊,

9、輸出模塊和電源模塊。通過對控制器進行編程。使其對輸入模塊的信號進行處理計算,然后通過輸出模塊反饋給使用者以計算結(jié)果。1.2.2、方案論證與比較1.2.2.1、控制部分的設(shè)計方案論證與選擇根據(jù)設(shè)計要求,控制器主要用于紅外信號的接收和辨認(rèn)、控制步進電機的動作,控制顯示步進電機的轉(zhuǎn)速等。對于控制器的選擇有以下三種方案。方案一:采用計算器專用芯片實現(xiàn)。用計算器專用芯片進行設(shè)計并編程實現(xiàn)。這種設(shè)計方案計算效率高、速度快、而且成本也相對較低,是廠家做計算器的最佳方案。但是本人對計算器專用芯片掌握的不夠,還不足以實現(xiàn)設(shè)計計算器,所以這個方案不可去。方案二:采用FPGA(現(xiàn)場可編程門陣列)作為系統(tǒng)的控制器。F

10、PGA將所有器件集成到一塊芯片上,體積小,節(jié)省空間,提高了穩(wěn)定性;直接面向用戶,具有極大的靈活性和通用性,使用方便,硬件測試和實現(xiàn)快捷,開發(fā)效率高,工作可靠性好??梢詫崿F(xiàn)各種復(fù)雜的邏輯功能,規(guī)模大,密度高,采用并行的輸入輸出方式,系統(tǒng)處理速度高,適合作為大規(guī)模實時系統(tǒng)的控制核心。由FPGA內(nèi)部編程實現(xiàn)計算器功能,本設(shè)計對數(shù)據(jù)處理速度的要求不是很高,F(xiàn)PGA的高速處理的優(yōu)勢得不到充分的體現(xiàn),由于其集成度高,使其成本偏高,同時由于芯片的引腳較多,實物電路板布線復(fù)雜,加重了電路設(shè)計和實際焊接的工作。并且FPGA的價格相對較高,性價比太低。方案三、用單片機實現(xiàn)。由于單片機集成了運算器電路、控制電路、存

11、儲器、中斷系統(tǒng)、定時器/計數(shù)器以及輸入/輸出口電路等,所以用單片機設(shè)計控制電路省去了很多分立元器件。由于單片機是可編程芯片,并且它可以運用C語言編寫,對于一些復(fù)雜的計算功能,可以調(diào)用C語言庫函數(shù)。使編寫程序變得非常簡單。所以該課題用單片機實現(xiàn),不僅功能易于實現(xiàn),而且精確度高,穩(wěn)定性好,抗干擾能力強。并且由于其成本低、體積小、技術(shù)成熟和功耗小等優(yōu)點,且技術(shù)比較成熟。性價比也相當(dāng)高。更重要的是本人經(jīng)過幾年的學(xué)習(xí),對單片機已有深刻的理解,并且可以靈活運用。綜上所述,并通過各個方面綜合比較為達到最佳效果。我們采用方案三利用單片機控制器。1.2.2.3、顯示電路的設(shè)計方案論證與選擇方案一:數(shù)碼管顯示方案

12、。數(shù)碼管顯示使用兩個四位一體動態(tài)數(shù)碼管顯示方案,此設(shè)計電路如圖1-1所示。采用動態(tài)數(shù)碼管顯示,具有程序簡單, 對外界環(huán)境要求低,易于維護,同時其精度比較高,精確可靠,操作簡單。顯示直觀的特點。但只能顯示數(shù)字和一些代碼,不能顯示漢字及一些常用的符號,且硬件設(shè)計比較復(fù)雜。圖1-1、兩個四位一體數(shù)碼電路圖方案二;采用AT1602型液晶顯示(一)、基本特性a、顯示特性b、物理特性c外形尺寸如圖1-2所示圖1-2、液晶的外形尺寸(二)、接口定義AT1602與單片機的接口電路如圖1-3所示,該液晶有16個引腳,它能顯示32個字符,并且硬件電路設(shè)計簡單,顯示美觀,但驅(qū)動程序相對數(shù)碼管來說要復(fù)雜一些,其次穩(wěn)定

13、性也不如數(shù)碼管。而且它只能顯示ASCII碼,不能夠顯示漢字,人機交互能力較差。 圖1-3、AT1602與單片機接口電路方案三:采用漢字圖形點陣液晶顯示器RT12864顯示方案。RT12864M漢字圖形點陣液晶顯示模塊,可顯示漢字及圖形。供電電源為3.3V+5V(內(nèi)置升壓電路,無需負壓),能采用并行和串行兩種通信方式。并有光標(biāo)顯示、畫面移位、自定義字符、睡眠模式等功能。綜上所敘,12864的顯示效果好、功能齊全,所以我們選用12864液晶顯示。其與單片機的接口電路如圖1-4所示。圖1-4、12864與單片機的接口電路1.2.2.4、單片機電源部分的設(shè)計方案論證與選擇由于本次設(shè)計中單片機工作電源為

14、5V,所以需要穩(wěn)壓,對于5V電源這里有以下兩種方案。方案一:用固定式三端穩(wěn)壓器7805。如圖1-5,7805系列穩(wěn)壓器輸出固定的正電壓5V,輸入端接電容C1可以進一步濾除紋波,輸出端接電容C2能改變負載的瞬態(tài)影響,使電路穩(wěn)定工作C1、C2最好采用漏電流小的鉭電容。如果采用電解電容,則電容要比圖中數(shù)值增加10倍。圖1-5、固定式三端穩(wěn)壓器方案二:用7805加一些外圍器件。雖然7805三端集成穩(wěn)壓管內(nèi)部有過流、過熱和安全區(qū)的保護電路,但其輸出仍有可能發(fā)生過壓的危險。因此本電路加了過壓保護電路,電路如圖1-6所示,該電路由穩(wěn)壓管VD3、電阻R3和晶閘管VS組成。另外由于7805的最大輸出電流為1.5

15、A,可以通過在7805的1腳與VT1的基極相連,7805的2腳與VT1的集電極相連,這樣就可輸出1.6A2A的電流。如需更大的電流,可再并聯(lián)幾個大功率三極管。圖1-6、可擴流過壓保護5V穩(wěn)壓電源綜上所述,方案一電路簡單,而且已符合本次設(shè)計的要求,再加上第二種方案所用元件較多,性能價格比不高,所以我們選擇方案一,基于本次設(shè)計我們需要5V和12V電源,12V應(yīng)用于步進電機。其電路如圖1-7所示。圖1-7、電源模塊電路1.2.2.5、鍵盤設(shè)計方案與選擇方案一:獨立鍵盤。獨立鍵盤為一端接地,另一端接I/O口,并且要接上拉電阻。這種鍵盤的硬件都很容易實現(xiàn),但每一個按鍵就要用一個I/O口,非常的浪費單片機

16、的I/O口資源,不適合本次設(shè)計。方案二:通過PS2協(xié)義,用鍵盤同單片機相接,從而實現(xiàn)單片機與鍵盤通信。其電路如圖1-8所示?,F(xiàn)在PC機廣泛采用的PS/2接口為miniDIN 6引腳的連接器。1數(shù)據(jù)線(DATA);未用;3電源地(GND);4電源(+5 V);5時鐘(CLK);6未用。 圖1-8、鍵盤與單片機接口圖由此圖可知,使用鍵盤硬件結(jié)構(gòu)比較簡單,但鍵盤的體積太大,所以此系統(tǒng)不采用此方案。方案三:自制編碼鍵盤。編碼鍵盤的電路如圖1-9所示,這種鍵盤有編程簡單,占用資源少,但其硬件比較復(fù)雜,要用很多的二極管,不是很理想。 圖1-9、自制編碼鍵盤電路圖方案四:4*4行列式鍵盤。其電路圖如圖圖1-

17、10所示,這種鍵盤的硬件簡單,使用的I/O口也不多,而且這種鍵盤的編程方法已很成熟。所以本次設(shè)計采用這種行列式鍵盤。其電路圖如圖圖1-10、4*4行列式鍵盤電路圖1.2.3、系統(tǒng)組成經(jīng)過方案比較與論證,最終確定的系統(tǒng)組成框圖如圖1-11所示。其中單片機作為主控設(shè)備對采集輸入信號后并進行處理,最后通過輸出設(shè)備輸出給使用者。,該系統(tǒng)的結(jié)構(gòu)框圖如圖。圖1-11、系統(tǒng)組成方框圖二、重要器件的知識介紹2.1、單片機的知識介紹由于ATMEL公司生產(chǎn)的AT89S52型單片機是即便于下載又好用,而且能夠滿足本設(shè)計的要求。所以我選擇AT89S52型單片機。2.1.1、單片機的主要性能2.1.2、單片機的功能特性

18、描敘2.1.3、單片機的內(nèi)部結(jié)構(gòu)方框圖及芯片引腳圖如圖2-1和圖2-2所示圖2-1、單片機的內(nèi)部結(jié)構(gòu)方框圖及2.1.4、單片機各引腳功能說明VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入

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

20、和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89S52的一些特殊功能口,如表3-1所示。 表2.1 AT89S52的一些特殊功能口管腳備選功能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時器0外部輸入)P3.5 T1(記時器1外部輸入)P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)P3.7 /RD(

21、外部數(shù)據(jù)存儲器讀選通)P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如

22、果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。2.1.5、單片機時鐘電路時鐘

23、電路用于產(chǎn)生單片機工作所需要的時鐘信號,單片機本身就是一個復(fù)雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路應(yīng)在唯一的時鐘信號控制下嚴(yán)格地按時序進行工作。在MCS-51芯片內(nèi)部有一個高增益反相放大器,其輸入端為芯片引腳X1,輸出端為引腳X2,在芯片的外部跨接晶體振蕩器和微調(diào)電容,形成反饋電路,就構(gòu)成了一個穩(wěn)定的自激振蕩器。 此電路采用12MHz的石英晶體。時鐘電路如下圖2-2: 圖2.2時鐘電路2.1.6、單片機復(fù)位電路復(fù)位是單片機的初始化操作,其主要功能是把PC初始化為0000H,使單片機從0000H單元開始執(zhí)行程序。除了進入系統(tǒng)的正常初始化之外,當(dāng)由于程序運行出錯或操作錯誤是系統(tǒng)處于死鎖

24、狀態(tài)時,為擺脫困境,也需要按復(fù)位鍵以重新啟動。RST引腳是單片機復(fù)位信號的輸入端,復(fù)位信號是高電平有效,其有效時間應(yīng)持續(xù)24個振蕩周期(即2個機器周期)以上,若使用頻率為12MHz的晶振,則復(fù)位信號持續(xù)時間應(yīng)超過4s才能完成復(fù)位操作。復(fù)位操作有上電自動復(fù)位和按鍵手動復(fù)位兩種方式。上電自動復(fù)位是通過外部復(fù)位電路的電容充電來實現(xiàn)的。按鍵電平復(fù)位是通過使復(fù)位端經(jīng)電阻與Vcc電源接通而實現(xiàn)的。在本設(shè)計中采用了按鍵電平復(fù)位方式,其復(fù)位電路如下圖2-3。圖2-3、復(fù)位電路2.1.7、單片機下載口電路下載口電路以一塊74HC373芯片為主,電路原理圖如圖2-4所示。由于電路中只用了一片74HC373所以完全

25、可以把電路裝在DB25插針式并口插頭內(nèi)部,這個可以做到很小巧,可以很方便的使用。為了穩(wěn)定也可以芯片外圍加一些電阻、電容等元件,具體電路網(wǎng)上有提供下載。光是做好下載線是不行的,S51系統(tǒng)的ISP下載方式還要求要下載程序單片機運行在最小化系統(tǒng)中。只要把的相應(yīng)引腳連接起來就可以對S51進行ISP下載了。要接的引線是S51的6,7,8,9,20,40引腳。晶振可以在3M24M間選用,當(dāng)然是看你的目標(biāo)板而選擇。為了方便使用我們需要做一個下載頭,電路簡單接線正確的話一般無需要調(diào)整就可以正常使用,如有問題可以用軟件中的IspTest.exe(下載線調(diào)試程序) 檢查你的74HC373芯片是否正常和你的電腦并口

26、是否正常。圖2-4、下載口電路原理圖三、軟件設(shè)計本設(shè)計中采用C語言對單片機進行編程。采用的是自下而上的設(shè)計方式,先設(shè)計出每一個模塊(子程序),然后再慢慢擴大,最后組成整個系統(tǒng)。3.1、液晶顯示設(shè)計本次設(shè)計我采用SYB12864K-ZK型液晶來作顯示模塊。對這種器件只要會看時序圖,那么所有的問題都會迎難而解。其時序圖如圖3-1。圖3-1 (a)、液晶讀時序圖圖3-1 (b)、液晶寫時序圖由時序圖我們可以寫出液晶的初始化函數(shù)、功能設(shè)置函數(shù)、清屏函數(shù)、寫指令函數(shù)、寫數(shù)據(jù)函數(shù)。/LCD初始化/void lcd_int()ret=0;delay(10);ret=1;_nop_();psb=1; /將PS

27、B置1,通信方式為8BIT數(shù)據(jù)并口/_nop_();/LCD功能設(shè)置/void lcd_set()command=0x30; /基本指令集/write_command(command);command=0x01;write_command(command);command=0x06;write_command(command);command=0x0c;write_command(command);/清屏程序/void clear_lcd ()command=0x01;write_command(command);command=0x34;write_command(command);comm

28、and=0x30;write_command(command); /寫指令程序/ void write_command(uchar command)delay(5);rs=0;rw=0;P0=command;en=1;_nop_();_nop_();en=0;/寫數(shù)據(jù)程序/void write_data(uchar data0) delay(5);rs=1;rw=0;P0=data0;en=1;_nop_();_nop_();en=0;3.2、鍵盤輸入設(shè)計這里我先用4*4行列式鍵盤。鍵盤掃描函數(shù)如下:/鍵掃描程序/uchar keyscan()uchar scancode,tmpcode; P

29、1=0xf0; / 行全為0 if(P1&0xf0)!=0xf0) /有鍵按下 delay(100); /延時去抖動 if(P1&0xf0)!=0xf0) /判是否真的有鍵按下 scancode=0xfe; /諑行掃描 while(scancode&0x10)!=0) P1=scancode; if(P1&0xf0)!=0xf0) /本行有鍵按下 tmpcode=(P1&0xf0)|0x0f; /返回特征字節(jié)碼,為1的位即對應(yīng)于行和列 return(scancode)+(tmpcode); else scancode=(scancode1)|0x01; /行掃描碼左移一位 return(0);

30、 /無鍵按下,返回值為03.3、計算器函數(shù)設(shè)計計算器的設(shè)計是本次設(shè)計的重點。因為考慮到該硬件中只有16個按鍵,所以我采用了按鍵復(fù)用的方式來解決這一難題。這16個鍵分別是09十個數(shù)字鍵。四個運算符號鍵,一個小數(shù)點鍵,一個多功能鍵。這個多功能鍵單擊時為“=”,雙擊時為請零鍵,三擊時為運算類型選擇鍵。在待機時,該計算器顯示萬年歷,如果要進行計算則按任意鍵即可進入計算界面。默認(rèn)的計算是加減乘除,如果說要進行加減乘除以外的運算,那么就三鍵等號鍵,就可進入運算類型選擇模式。選擇好相應(yīng)的類型就可以進行運算啦。下面我來介紹幾個重要的函數(shù)。(1)、函數(shù)名:sin 功能:正弦函數(shù) 用法:doublesin(dou

31、blex); #include intmain(void) doubleresult,x=0.5; result=sin(x); printf(Thesin()of%lfis%lfn,x,result); return0; (2)、函數(shù)名: cos 功 能: 余弦函數(shù) 用 法: double cos(double x); #include int main(void) double result; double x = 0.5; result = cos(x); printf(The cosine of %lf is %lfn, x, result); return 0; (3)、函數(shù)名:ta

32、n 功能:正切函數(shù) 用法:doubletan(doublex); #include intmain(void) doubleresult,x; x=0.5; result=tan(x); printf(Thetanof%lfis%lfn,x,result); return0; (4)函數(shù)名: asin 功 能: 反正弦函數(shù) 用 法: double asin(double x); #include #include int main(void) double result; double x = 0.5; result = asin(x); printf(The arc sin of %lf i

33、s %lfn, x, result); return(0); (5)、函數(shù)名: acos 功 能: 反余弦函數(shù) 用 法: double acos(double x); #include int main(void) double result; double x = 0.5; result = acos(x); printf(The arc cosine of %lf is %lfn, x, result); return 0; (6)、函數(shù)名: atan 功 能: 反正切函數(shù) 用 法: double atan(double x); #include int main(void) double

34、 result; double x = 0.5; result = atan(x); printf(The arc tangent of %lf is %lfn, x, result); return(0); (7)、函數(shù)名: exp 功 能: 指數(shù)函數(shù) 用 法: double exp(double x); #include int main(void) double result; double x = 4.0; result = exp(x); printf(e raised to the power of %lf (e %lf) = %lfn, x, x, result); return

35、 0; 3.4、程序流程圖主程序流程圖顯示程序流程圖鍵掃程序流程圖3.5、程序清單程序清單見附錄4。產(chǎn)品使用說明該產(chǎn)品16個按鍵作為輸入信號,液晶為顯示器,按鍵功能如下圖所示。09為數(shù)字鍵,其中03有第二功能,一個小數(shù)點鍵,一個等號鍵,該鍵為四功能鍵,四個運算符號鍵。如果要使用計算器功能,則直接按3鍵即可進入計算器模式,等號鍵單鍵為“=”,雙鍵為清除,默認(rèn)計算類型為加減乘除,若要進行其他類型的計算,則可使用等號鍵三鍵,然后選擇運算類型進行運算,此時符號鍵所對應(yīng)的運算符號也有相應(yīng)的變化。該計算器的計算功能可實現(xiàn)加減乘除、正弦余弦正切余切、反正弦反余弦反正切反余切、平方、立方、m的k次方(m和k均

36、由鍵盤輸入)、e為底的m次方、自然對數(shù)、常用對數(shù)、開平方根??芍^功能齊全,操作簡單,給使用帶來極大方便。參考文獻1 李廣弟 單片機原理及應(yīng)用 北京航天航空大學(xué)出版社 2008.22 潘新民 微型計算機控制技術(shù) 電子工業(yè)出版社 2008.53 梅麗鳳 單片機原理及接口技術(shù) 清華大學(xué)出版社 2004.64 戴佳 51單片機C語言應(yīng)用程序設(shè)計實例精講 電子工業(yè)出版社 2006.45 趙秀珍.單片微型計算機原理及其應(yīng)用M.北京:中國水利水電出版社,2001 6 胡如龍,胡彪,鄧湘鳳.一種基于AT89C51 單片機嵌入式系統(tǒng)的溫濕度檢測控制系統(tǒng)J. 中國科技論文在線,7 張毅剛.MCS-51單片機應(yīng)用設(shè)

37、計M.哈爾濱:哈爾濱工大學(xué)出版社,1990 8 馬忠梅,張凱,馬巖,單片機的C語言應(yīng)用程序設(shè)計,M,北京:北京航空航天大學(xué)出版社,2003.11 9 李華.MCS-51 系列單片機實用接口技術(shù)M.北京:北京航空航天大學(xué)出版社,199310 馬忠梅.單片機的C語言Windows環(huán)境編程寶典M. 北京:北京航空航天大學(xué)出版社,2003 11 李光飛.單片機C程序設(shè)計指導(dǎo)M.北京:北京航空航天大學(xué)出版社,200312 陳景初.單片機應(yīng)用系統(tǒng)設(shè)計與實踐M.北京:北京航空航天大學(xué)出版社,2004附錄2、系統(tǒng)原理圖原理圖附錄3、實物照片附錄4、程序清單#include #include #include

38、#include #define uchar unsigned char#define uint unsigned int#define ulong unsigned long sbit rs=P20;sbit rw=P21;sbit en=P22;sbit psb=P23;sbit ret=P25;sbit rd=P37; sbit s=P10;sbit s1=P14;sbit s2=P15;sbit s3=P16;sbit s4=P17;uchar count,s1num;unsigned int nin,ss;char yue,re,qi,shi,fen,miao;uchar dshi,

39、dfen,dmiao,ling,aa,t1,p;uchar command,data0,data1,data2,com0,j,l;unsigned char command,data1,data2,com0,bb,bb0,aa,cc,i,yun;/uchar lcdH,lcdL,key; float ds,m,k;ulong ds0;bit flag,flag1,flag2,flag3,flag4;uchar disbuf9=0; /定義顯示緩沖區(qū)/uchar code table=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e;u

40、char code table1=0xc8,0xd5,0xd2,0xbb,0xb6,0xfe,0xc8,0xfd,0xcb,0xc4,0xce,0xe5,0xc1,0xf9;/日六/uchar code table2=0x32,0x30,0x30,0x39,0xc4,0xea,0x30,0x35,0xd4,0xc2,0x30,0x31,0xc8,0xd5; /年月日/uchar code table4=0xd0,0xc7,0xc6,0xda,0xc1,0xf9; /星期六/uchar code tabping=32,29,32,31,32,31,32,32,31,32,31,32;uchar

41、code tabrun=32,30,32,31,32,31,32,32,31,32,31,32;uchar code xing1=3,6,0,3,5,1,3,6,2,4,0,2;uchar code xing2=4,0,0,3,5,1,3,6,2,4,0,2;uchar xing12=0;uchar tab12=0; /延時/void delay(uint ms) /延時250usuchar i;while(ms-)for(i=0;i125;i+);/LCD初始化/void lcd_int()ret=0;delay(3);ret=1;_nop_();psb=1; /將PSB置1,通信方式為8B

42、IT數(shù)據(jù)并口/_nop_();/寫指令程序/void write_command(uchar command)delay(3);rs=0;rw=0;P0=command;en=1;_nop_();_nop_();en=0;/寫數(shù)據(jù)程序/void write_data(uchar data0) delay(3);rs=1;rw=0;P0=data0;en=1;_nop_();_nop_();en=0;/LCD功能設(shè)置/void lcd_set()command=0x30; /基本指令集/write_command(command);command=0x01;write_command(comma

43、nd);command=0x06;write_command(command);command=0x0c;write_command(command);/清屏程序/void clear_lcd ()command=0x01;write_command(command);command=0x34;write_command(command);command=0x30;write_command(command);void display()command=com0;write_command(command);data2=lcdH;write_data(data2);data1=lcdL;wri

44、te_data(data1);void display1(uchar y, uchar x, uchar *p) switch (y) case 1:write_command(0x7f+x); break; /液晶第一行case 2:write_command(0x8f+x); break; /0x90+(x-1)case 3:write_command(0x87+x);break;case 4:write_command(0x97+x);break;default:break;while(*p) write_data(*p+); void xiaoshu()/先判斷k是否為小數(shù),如果k為小

45、數(shù),就將k轉(zhuǎn)化為小數(shù)/uchar i;uint mg=1;if(flag1)for(i=0;icc;i+)mg*=10;k=k/(mg*1.0);cc=0;flag1=0; /鍵掃描程序/uchar keyscan()uchar scancode,tmpcode; P1=0xf0; / 行全為0 if(P1&0xf0)!=0xf0) /有鍵按下 delay(100); /延時去抖動 if(P1&0xf0)!=0xf0) /判是否真的有鍵按下 scancode=0xfe; /諑行掃描 while(scancode&0x10)!=0) P1=scancode; if(P1&0xf0)!=0xf0)

46、 /本行有鍵按下 tmpcode=(P1&0xf0)|0x0f; /返回特征字節(jié)碼,為1的位即對應(yīng)于行和列 return(scancode)+(tmpcode); else scancode=(scancode1)|0x01; /行掃描碼左移一位 return(0); /無鍵按下,返回值為0disjia()com0=0x83;lcdH=0xbc;lcdL=0xd3;display();com0+; lcdH=0xb7;lcdL=0xa8;display();com0=0x87;disjian()com0=0x83;lcdH=0xbc;lcdL=0xf5;display();com0+; lcd

47、H=0xb7;lcdL=0xa8;display();com0=0x87;discheng()com0=0x83;lcdH=0xb3;lcdL=0xcb;display();com0+; lcdH=0xb7;lcdL=0xa8;display();com0=0x87;dischu()com0=0x83;lcdH=0xb3;lcdL=0xfd;display();com0+; lcdH=0xb7;lcdL=0xa8;display();com0=0x87;void jishu()/把ds0處理后放入顯示緩沖區(qū)中/disbuf0=ds0/%10;disbuf1=ds0/%10;disbuf2=ds0/%10;disbuf3=ds0/%10;disbuf4=ds0/%10;disbuf5=ds0/10

溫馨提示

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

最新文檔

評論

0/150

提交評論