版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 2011 屆畢業(yè)設(shè)計(jì)說明書 題 目:基于單片機(jī)的多功能計(jì)算器的設(shè)計(jì) 系 、 部: 電 氣 與 信 息 工 程 系 學(xué)生姓名: 指導(dǎo)教師: 職 稱 高 級(jí) 講 師 專 業(yè): 通 信 技 術(shù) 班 級(jí): 0 8 0 1 學(xué) 號(hào): 完成時(shí)間: 2011年5月9號(hào) 目錄摘要1一、系統(tǒng)設(shè)計(jì)21.1、功能介紹.21.1.1、基本功能.21.1.2、擴(kuò)展功能.21.2、總體設(shè)計(jì)方案.21.2.1、總體設(shè)計(jì)思路.21.2.2、方案論證與比較.21.2.3、系統(tǒng)組成.8二、重要器件的知識(shí)介紹82.1、單片機(jī)的知識(shí)介紹.82.1.1、單片機(jī)的主要性能.82.1.2、單片機(jī)的功能特性描敘.92.1.3、單片機(jī)的內(nèi)部
2、結(jié)構(gòu)方框圖及芯片引腳圖.92.1.4、單片機(jī)各引腳功能說明.102.1.5、單片機(jī)時(shí)鐘電路.112.1.6、單片機(jī)復(fù)位電路.122.1.7、單片機(jī)下載口電路.12三、軟件設(shè)計(jì)133.1、液晶顯示設(shè)計(jì).133.2、鍵盤輸入設(shè)計(jì).153.3、計(jì)算器函數(shù)設(shè)計(jì).153.4、程序流程圖.183.5、程序清單.20產(chǎn)品使用說明21參考文獻(xiàn)22附錄1、元器件清單23附錄2、系統(tǒng)原理圖24附錄3、實(shí)物照片24附錄4、程序清單27致 謝46摘要本設(shè)計(jì)采用單片機(jī)作為控制芯片,用C語言對(duì)其進(jìn)行編程實(shí)現(xiàn),輸入由4*4行列式鍵盤控制,輸出采用人性化的SBY12864K-ZK型液晶實(shí)現(xiàn)。該計(jì)算器為多功能計(jì)算器,在未進(jìn)行計(jì)
3、算時(shí),它是一個(gè)萬年歷時(shí)鐘,并且?guī)X鐘和星期顯示,所以數(shù)據(jù)均可隨時(shí)進(jìn)行校準(zhǔn),校準(zhǔn)數(shù)據(jù)采用的是獨(dú)立式鍵盤,是將4*4行列式鍵盤的一根線拉低,然后讀取與這根線交叉的4根線的所處狀態(tài)來判斷按鍵是否被按下。對(duì)于計(jì)算這個(gè)部分我采用的是行列鍵盤,10個(gè)數(shù)字鍵,一個(gè)小數(shù)點(diǎn)鍵,四個(gè)符號(hào)鍵,一個(gè)多功能鍵,通過判別該多功能鍵連續(xù)按的次數(shù)來決定該鍵此時(shí)的命令。由于C語言庫函數(shù)繁多,所以我采用調(diào)用C語言庫函數(shù)來解決多種運(yùn)算類型,這樣編程更簡(jiǎn)單,運(yùn)行起來也更可靠。關(guān)鍵字:?jiǎn)纹瑱C(jī),點(diǎ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è)計(jì)1.1、功能介紹1.1.1、基本功能根據(jù)所學(xué)知識(shí),自行設(shè)計(jì)一個(gè)計(jì)算器,要求自行設(shè)計(jì)供電電源,該計(jì)算器能夠?qū)崿F(xiàn)加減乘除四則混合運(yùn)算,能夠?qū)崿F(xiàn)連續(xù)計(jì)算。1.1.2、擴(kuò)展功能(1)、該計(jì)算器能夠?qū)崿F(xiàn)浮點(diǎn)數(shù)的運(yùn)算。(2)、該計(jì)算器在不進(jìn)行計(jì)算時(shí)能夠當(dāng)時(shí)鐘用,并且該時(shí)鐘可顯示星期和日歷,同時(shí)能夠修改其值。(3)、該計(jì)算器能夠?qū)崿F(xiàn)加減乘除以外的其他運(yùn)算。1.2、總體設(shè)計(jì)方案1.2.1、總體設(shè)計(jì)思路本設(shè)計(jì)主要采用以下基本模塊來實(shí)現(xiàn),控制器模塊,輸入模塊,
9、輸出模塊和電源模塊。通過對(duì)控制器進(jìn)行編程。使其對(duì)輸入模塊的信號(hào)進(jìn)行處理計(jì)算,然后通過輸出模塊反饋給使用者以計(jì)算結(jié)果。1.2.2、方案論證與比較1.2.2.1、控制部分的設(shè)計(jì)方案論證與選擇根據(jù)設(shè)計(jì)要求,控制器主要用于紅外信號(hào)的接收和辨認(rèn)、控制步進(jìn)電機(jī)的動(dòng)作,控制顯示步進(jìn)電機(jī)的轉(zhuǎn)速等。對(duì)于控制器的選擇有以下三種方案。方案一:采用計(jì)算器專用芯片實(shí)現(xiàn)。用計(jì)算器專用芯片進(jìn)行設(shè)計(jì)并編程實(shí)現(xiàn)。這種設(shè)計(jì)方案計(jì)算效率高、速度快、而且成本也相對(duì)較低,是廠家做計(jì)算器的最佳方案。但是本人對(duì)計(jì)算器專用芯片掌握的不夠,還不足以實(shí)現(xiàn)設(shè)計(jì)計(jì)算器,所以這個(gè)方案不可去。方案二:采用FPGA(現(xiàn)場(chǎng)可編程門陣列)作為系統(tǒng)的控制器。F
10、PGA將所有器件集成到一塊芯片上,體積小,節(jié)省空間,提高了穩(wěn)定性;直接面向用戶,具有極大的靈活性和通用性,使用方便,硬件測(cè)試和實(shí)現(xiàn)快捷,開發(fā)效率高,工作可靠性好。可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能,規(guī)模大,密度高,采用并行的輸入輸出方式,系統(tǒng)處理速度高,適合作為大規(guī)模實(shí)時(shí)系統(tǒng)的控制核心。由FPGA內(nèi)部編程實(shí)現(xiàn)計(jì)算器功能,本設(shè)計(jì)對(duì)數(shù)據(jù)處理速度的要求不是很高,F(xiàn)PGA的高速處理的優(yōu)勢(shì)得不到充分的體現(xiàn),由于其集成度高,使其成本偏高,同時(shí)由于芯片的引腳較多,實(shí)物電路板布線復(fù)雜,加重了電路設(shè)計(jì)和實(shí)際焊接的工作。并且FPGA的價(jià)格相對(duì)較高,性價(jià)比太低。方案三、用單片機(jī)實(shí)現(xiàn)。由于單片機(jī)集成了運(yùn)算器電路、控制電路、存
11、儲(chǔ)器、中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器以及輸入/輸出口電路等,所以用單片機(jī)設(shè)計(jì)控制電路省去了很多分立元器件。由于單片機(jī)是可編程芯片,并且它可以運(yùn)用C語言編寫,對(duì)于一些復(fù)雜的計(jì)算功能,可以調(diào)用C語言庫函數(shù)。使編寫程序變得非常簡(jiǎn)單。所以該課題用單片機(jī)實(shí)現(xiàn),不僅功能易于實(shí)現(xiàn),而且精確度高,穩(wěn)定性好,抗干擾能力強(qiáng)。并且由于其成本低、體積小、技術(shù)成熟和功耗小等優(yōu)點(diǎn),且技術(shù)比較成熟。性價(jià)比也相當(dāng)高。更重要的是本人經(jīng)過幾年的學(xué)習(xí),對(duì)單片機(jī)已有深刻的理解,并且可以靈活運(yùn)用。綜上所述,并通過各個(gè)方面綜合比較為達(dá)到最佳效果。我們采用方案三利用單片機(jī)控制器。1.2.2.3、顯示電路的設(shè)計(jì)方案論證與選擇方案一:數(shù)碼管顯示方案
12、。數(shù)碼管顯示使用兩個(gè)四位一體動(dòng)態(tài)數(shù)碼管顯示方案,此設(shè)計(jì)電路如圖1-1所示。采用動(dòng)態(tài)數(shù)碼管顯示,具有程序簡(jiǎn)單, 對(duì)外界環(huán)境要求低,易于維護(hù),同時(shí)其精度比較高,精確可靠,操作簡(jiǎn)單。顯示直觀的特點(diǎn)。但只能顯示數(shù)字和一些代碼,不能顯示漢字及一些常用的符號(hào),且硬件設(shè)計(jì)比較復(fù)雜。圖1-1、兩個(gè)四位一體數(shù)碼電路圖方案二;采用AT1602型液晶顯示(一)、基本特性a、顯示特性b、物理特性c外形尺寸如圖1-2所示圖1-2、液晶的外形尺寸(二)、接口定義AT1602與單片機(jī)的接口電路如圖1-3所示,該液晶有16個(gè)引腳,它能顯示32個(gè)字符,并且硬件電路設(shè)計(jì)簡(jiǎn)單,顯示美觀,但驅(qū)動(dòng)程序相對(duì)數(shù)碼管來說要復(fù)雜一些,其次穩(wěn)定
13、性也不如數(shù)碼管。而且它只能顯示ASCII碼,不能夠顯示漢字,人機(jī)交互能力較差。 圖1-3、AT1602與單片機(jī)接口電路方案三:采用漢字圖形點(diǎn)陣液晶顯示器RT12864顯示方案。RT12864M漢字圖形點(diǎn)陣液晶顯示模塊,可顯示漢字及圖形。供電電源為3.3V+5V(內(nèi)置升壓電路,無需負(fù)壓),能采用并行和串行兩種通信方式。并有光標(biāo)顯示、畫面移位、自定義字符、睡眠模式等功能。綜上所敘,12864的顯示效果好、功能齊全,所以我們選用12864液晶顯示。其與單片機(jī)的接口電路如圖1-4所示。圖1-4、12864與單片機(jī)的接口電路1.2.2.4、單片機(jī)電源部分的設(shè)計(jì)方案論證與選擇由于本次設(shè)計(jì)中單片機(jī)工作電源為
14、5V,所以需要穩(wěn)壓,對(duì)于5V電源這里有以下兩種方案。方案一:用固定式三端穩(wěn)壓器7805。如圖1-5,7805系列穩(wěn)壓器輸出固定的正電壓5V,輸入端接電容C1可以進(jìn)一步濾除紋波,輸出端接電容C2能改變負(fù)載的瞬態(tài)影響,使電路穩(wěn)定工作C1、C2最好采用漏電流小的鉭電容。如果采用電解電容,則電容要比圖中數(shù)值增加10倍。圖1-5、固定式三端穩(wěn)壓器方案二:用7805加一些外圍器件。雖然7805三端集成穩(wěn)壓管內(nèi)部有過流、過熱和安全區(qū)的保護(hù)電路,但其輸出仍有可能發(fā)生過壓的危險(xiǎn)。因此本電路加了過壓保護(hù)電路,電路如圖1-6所示,該電路由穩(wěn)壓管VD3、電阻R3和晶閘管VS組成。另外由于7805的最大輸出電流為1.5
15、A,可以通過在7805的1腳與VT1的基極相連,7805的2腳與VT1的集電極相連,這樣就可輸出1.6A2A的電流。如需更大的電流,可再并聯(lián)幾個(gè)大功率三極管。圖1-6、可擴(kuò)流過壓保護(hù)5V穩(wěn)壓電源綜上所述,方案一電路簡(jiǎn)單,而且已符合本次設(shè)計(jì)的要求,再加上第二種方案所用元件較多,性能價(jià)格比不高,所以我們選擇方案一,基于本次設(shè)計(jì)我們需要5V和12V電源,12V應(yīng)用于步進(jìn)電機(jī)。其電路如圖1-7所示。圖1-7、電源模塊電路1.2.2.5、鍵盤設(shè)計(jì)方案與選擇方案一:獨(dú)立鍵盤。獨(dú)立鍵盤為一端接地,另一端接I/O口,并且要接上拉電阻。這種鍵盤的硬件都很容易實(shí)現(xiàn),但每一個(gè)按鍵就要用一個(gè)I/O口,非常的浪費(fèi)單片機(jī)
16、的I/O口資源,不適合本次設(shè)計(jì)。方案二:通過PS2協(xié)義,用鍵盤同單片機(jī)相接,從而實(shí)現(xiàn)單片機(jī)與鍵盤通信。其電路如圖1-8所示。現(xiàn)在PC機(jī)廣泛采用的PS/2接口為miniDIN 6引腳的連接器。1數(shù)據(jù)線(DATA);未用;3電源地(GND);4電源(+5 V);5時(shí)鐘(CLK);6未用。 圖1-8、鍵盤與單片機(jī)接口圖由此圖可知,使用鍵盤硬件結(jié)構(gòu)比較簡(jiǎn)單,但鍵盤的體積太大,所以此系統(tǒng)不采用此方案。方案三:自制編碼鍵盤。編碼鍵盤的電路如圖1-9所示,這種鍵盤有編程簡(jiǎn)單,占用資源少,但其硬件比較復(fù)雜,要用很多的二極管,不是很理想。 圖1-9、自制編碼鍵盤電路圖方案四:4*4行列式鍵盤。其電路圖如圖圖1-
17、10所示,這種鍵盤的硬件簡(jiǎn)單,使用的I/O口也不多,而且這種鍵盤的編程方法已很成熟。所以本次設(shè)計(jì)采用這種行列式鍵盤。其電路圖如圖圖1-10、4*4行列式鍵盤電路圖1.2.3、系統(tǒng)組成經(jīng)過方案比較與論證,最終確定的系統(tǒng)組成框圖如圖1-11所示。其中單片機(jī)作為主控設(shè)備對(duì)采集輸入信號(hào)后并進(jìn)行處理,最后通過輸出設(shè)備輸出給使用者。,該系統(tǒng)的結(jié)構(gòu)框圖如圖。圖1-11、系統(tǒng)組成方框圖二、重要器件的知識(shí)介紹2.1、單片機(jī)的知識(shí)介紹由于ATMEL公司生產(chǎn)的AT89S52型單片機(jī)是即便于下載又好用,而且能夠滿足本設(shè)計(jì)的要求。所以我選擇AT89S52型單片機(jī)。2.1.1、單片機(jī)的主要性能2.1.2、單片機(jī)的功能特性
18、描敘2.1.3、單片機(jī)的內(nèi)部結(jié)構(gòu)方框圖及芯片引腳圖如圖2-1和圖2-2所示圖2-1、單片機(jī)的內(nèi)部結(jié)構(gòu)方框圖及2.1.4、單片機(jī)各引腳功能說明VCC:供電電壓。GND:接地。P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門流。當(dāng)P1口的管腳第一次寫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)部上拉為高,可用作輸入
19、,P1口被外部下拉為低電平時(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)
20、和控制信號(hào)。P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)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(記時(shí)器0外部輸入)P3.5 T1(記時(shí)器1外部輸入)P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7 /RD(
21、外部數(shù)據(jù)存儲(chǔ)器讀選通)P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。RST:復(fù)位輸入。當(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才起作用。另外,該引腳被略微拉高。如
22、果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。/PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(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:來自反向振蕩器的輸出。2.1.5、單片機(jī)時(shí)鐘電路時(shí)鐘
23、電路用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號(hào),單片機(jī)本身就是一個(gè)復(fù)雜的同步時(shí)序電路,為了保證同步工作方式的實(shí)現(xiàn),電路應(yīng)在唯一的時(shí)鐘信號(hào)控制下嚴(yán)格地按時(shí)序進(jìn)行工作。在MCS-51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳X1,輸出端為引腳X2,在芯片的外部跨接晶體振蕩器和微調(diào)電容,形成反饋電路,就構(gòu)成了一個(gè)穩(wěn)定的自激振蕩器。 此電路采用12MHz的石英晶體。時(shí)鐘電路如下圖2-2: 圖2.2時(shí)鐘電路2.1.6、單片機(jī)復(fù)位電路復(fù)位是單片機(jī)的初始化操作,其主要功能是把PC初始化為0000H,使單片機(jī)從0000H單元開始執(zhí)行程序。除了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運(yùn)行出錯(cuò)或操作錯(cuò)誤是系統(tǒng)處于死鎖
24、狀態(tài)時(shí),為擺脫困境,也需要按復(fù)位鍵以重新啟動(dòng)。RST引腳是單片機(jī)復(fù)位信號(hào)的輸入端,復(fù)位信號(hào)是高電平有效,其有效時(shí)間應(yīng)持續(xù)24個(gè)振蕩周期(即2個(gè)機(jī)器周期)以上,若使用頻率為12MHz的晶振,則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)超過4s才能完成復(fù)位操作。復(fù)位操作有上電自動(dòng)復(fù)位和按鍵手動(dòng)復(fù)位兩種方式。上電自動(dòng)復(fù)位是通過外部復(fù)位電路的電容充電來實(shí)現(xiàn)的。按鍵電平復(fù)位是通過使復(fù)位端經(jīng)電阻與Vcc電源接通而實(shí)現(xiàn)的。在本設(shè)計(jì)中采用了按鍵電平復(fù)位方式,其復(fù)位電路如下圖2-3。圖2-3、復(fù)位電路2.1.7、單片機(jī)下載口電路下載口電路以一塊74HC373芯片為主,電路原理圖如圖2-4所示。由于電路中只用了一片74HC373所以完全
25、可以把電路裝在DB25插針式并口插頭內(nèi)部,這個(gè)可以做到很小巧,可以很方便的使用。為了穩(wěn)定也可以芯片外圍加一些電阻、電容等元件,具體電路網(wǎng)上有提供下載。光是做好下載線是不行的,S51系統(tǒng)的ISP下載方式還要求要下載程序單片機(jī)運(yùn)行在最小化系統(tǒng)中。只要把的相應(yīng)引腳連接起來就可以對(duì)S51進(jìn)行ISP下載了。要接的引線是S51的6,7,8,9,20,40引腳。晶振可以在3M24M間選用,當(dāng)然是看你的目標(biāo)板而選擇。為了方便使用我們需要做一個(gè)下載頭,電路簡(jiǎn)單接線正確的話一般無需要調(diào)整就可以正常使用,如有問題可以用軟件中的IspTest.exe(下載線調(diào)試程序) 檢查你的74HC373芯片是否正常和你的電腦并口
26、是否正常。圖2-4、下載口電路原理圖三、軟件設(shè)計(jì)本設(shè)計(jì)中采用C語言對(duì)單片機(jī)進(jìn)行編程。采用的是自下而上的設(shè)計(jì)方式,先設(shè)計(jì)出每一個(gè)模塊(子程序),然后再慢慢擴(kuò)大,最后組成整個(gè)系統(tǒng)。3.1、液晶顯示設(shè)計(jì)本次設(shè)計(jì)我采用SYB12864K-ZK型液晶來作顯示模塊。對(duì)這種器件只要會(huì)看時(shí)序圖,那么所有的問題都會(huì)迎難而解。其時(shí)序圖如圖3-1。圖3-1 (a)、液晶讀時(shí)序圖圖3-1 (b)、液晶寫時(shí)序圖由時(shí)序圖我們可以寫出液晶的初始化函數(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è)計(jì)這里我先用4*4行列式鍵盤。鍵盤掃描函數(shù)如下:/鍵掃描程序/uchar keyscan()uchar scancode,tmpcode; P
29、1=0xf0; / 行全為0 if(P1&0xf0)!=0xf0) /有鍵按下 delay(100); /延時(shí)去抖動(dòng) if(P1&0xf0)!=0xf0) /判是否真的有鍵按下 scancode=0xfe; /諑行掃描 while(scancode&0x10)!=0) P1=scancode; if(P1&0xf0)!=0xf0) /本行有鍵按下 tmpcode=(P1&0xf0)|0x0f; /返回特征字節(jié)碼,為1的位即對(duì)應(yīng)于行和列 return(scancode)+(tmpcode); else scancode=(scancode1)|0x01; /行掃描碼左移一位 return(0);
30、 /無鍵按下,返回值為03.3、計(jì)算器函數(shù)設(shè)計(jì)計(jì)算器的設(shè)計(jì)是本次設(shè)計(jì)的重點(diǎn)。因?yàn)榭紤]到該硬件中只有16個(gè)按鍵,所以我采用了按鍵復(fù)用的方式來解決這一難題。這16個(gè)鍵分別是09十個(gè)數(shù)字鍵。四個(gè)運(yùn)算符號(hào)鍵,一個(gè)小數(shù)點(diǎn)鍵,一個(gè)多功能鍵。這個(gè)多功能鍵單擊時(shí)為“=”,雙擊時(shí)為請(qǐng)零鍵,三擊時(shí)為運(yùn)算類型選擇鍵。在待機(jī)時(shí),該計(jì)算器顯示萬年歷,如果要進(jìn)行計(jì)算則按任意鍵即可進(jìn)入計(jì)算界面。默認(rèn)的計(jì)算是加減乘除,如果說要進(jìn)行加減乘除以外的運(yùn)算,那么就三鍵等號(hào)鍵,就可進(jìn)入運(yùn)算類型選擇模式。選擇好相應(yīng)的類型就可以進(jìn)行運(yùn)算啦。下面我來介紹幾個(gè)重要的函數(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個(gè)按鍵作為輸入信號(hào),液晶為顯示器,按鍵功能如下圖所示。09為數(shù)字鍵,其中03有第二功能,一個(gè)小數(shù)點(diǎn)鍵,一個(gè)等號(hào)鍵,該鍵為四功能鍵,四個(gè)運(yùn)算符號(hào)鍵。如果要使用計(jì)算器功能,則直接按3鍵即可進(jìn)入計(jì)算器模式,等號(hào)鍵單鍵為“=”,雙鍵為清除,默認(rèn)計(jì)算類型為加減乘除,若要進(jìn)行其他類型的計(jì)算,則可使用等號(hào)鍵三鍵,然后選擇運(yùn)算類型進(jìn)行運(yùn)算,此時(shí)符號(hào)鍵所對(duì)應(yīng)的運(yùn)算符號(hào)也有相應(yīng)的變化。該計(jì)算器的計(jì)算功能可實(shí)現(xiàn)加減乘除、正弦余弦正切余切、反正弦反余弦反正切反余切、平方、立方、m的k次方(m和k均
36、由鍵盤輸入)、e為底的m次方、自然對(duì)數(shù)、常用對(duì)數(shù)、開平方根。可謂功能齊全,操作簡(jiǎn)單,給使用帶來極大方便。參考文獻(xiàn)1 李廣弟 單片機(jī)原理及應(yīng)用 北京航天航空大學(xué)出版社 2008.22 潘新民 微型計(jì)算機(jī)控制技術(shù) 電子工業(yè)出版社 2008.53 梅麗鳳 單片機(jī)原理及接口技術(shù) 清華大學(xué)出版社 2004.64 戴佳 51單片機(jī)C語言應(yīng)用程序設(shè)計(jì)實(shí)例精講 電子工業(yè)出版社 2006.45 趙秀珍.單片微型計(jì)算機(jī)原理及其應(yīng)用M.北京:中國水利水電出版社,2001 6 胡如龍,胡彪,鄧湘鳳.一種基于AT89C51 單片機(jī)嵌入式系統(tǒng)的溫濕度檢測(cè)控制系統(tǒng)J. 中國科技論文在線,7 張毅剛.MCS-51單片機(jī)應(yīng)用設(shè)
37、計(jì)M.哈爾濱:哈爾濱工大學(xué)出版社,1990 8 馬忠梅,張凱,馬巖,單片機(jī)的C語言應(yīng)用程序設(shè)計(jì),M,北京:北京航空航天大學(xué)出版社,2003.11 9 李華.MCS-51 系列單片機(jī)實(shí)用接口技術(shù)M.北京:北京航空航天大學(xué)出版社,199310 馬忠梅.單片機(jī)的C語言Windows環(huán)境編程寶典M. 北京:北京航空航天大學(xué)出版社,2003 11 李光飛.單片機(jī)C程序設(shè)計(jì)指導(dǎo)M.北京:北京航空航天大學(xué)出版社,200312 陳景初.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與實(shí)踐M.北京:北京航空航天大學(xué)出版社,2004附錄2、系統(tǒng)原理圖原理圖附錄3、實(shí)物照片附錄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; /延時(shí)/void delay(uint ms) /延時(shí)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); /延時(shí)去抖動(dòng) if(P1&0xf0)!=0xf0) /判是否真的有鍵按下 scancode=0xfe; /諑行掃描 while(scancode&0x10)!=0) P1=scancode; if(P1&0xf0)!=0xf0)
46、 /本行有鍵按下 tmpcode=(P1&0xf0)|0x0f; /返回特征字節(jié)碼,為1的位即對(duì)應(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等.壓縮文件請(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球車展品牌形象合作合同協(xié)議4篇
- 2025年冷鏈物流產(chǎn)品運(yùn)輸全程監(jiān)控合同3篇
- 2025年度生態(tài)修復(fù)工程承包山林合同書2篇
- 2024版香港高管聘用合同
- 2025年度智能倉儲(chǔ)承建與自動(dòng)化裝修服務(wù)合同4篇
- 2024版化妝品供應(yīng)合同協(xié)議書范本
- 檢查檢驗(yàn)結(jié)果互認(rèn)知識(shí)培訓(xùn)考核試題
- 2024版技術(shù)開發(fā)合同:甲方與乙方共同研發(fā)新技術(shù)的具體內(nèi)容
- 2025年度五星級(jí)酒店廚師員工勞動(dòng)合同范本4篇
- 2025年度智能豬舍承包服務(wù)合同3篇
- 2025年度版權(quán)授權(quán)協(xié)議:游戲角色形象設(shè)計(jì)與授權(quán)使用3篇
- 2024年08月云南省農(nóng)村信用社秋季校園招考750名工作人員筆試歷年參考題庫附帶答案詳解
- 防詐騙安全知識(shí)培訓(xùn)課件
- 心肺復(fù)蘇課件2024
- 2024年股東股權(quán)繼承轉(zhuǎn)讓協(xié)議3篇
- 2024-2025學(xué)年江蘇省南京市高二上冊(cè)期末數(shù)學(xué)檢測(cè)試卷(含解析)
- 四川省名校2025屆高三第二次模擬考試英語試卷含解析
- 《城鎮(zhèn)燃?xì)忸I(lǐng)域重大隱患判定指導(dǎo)手冊(cè)》專題培訓(xùn)
- 湖南財(cái)政經(jīng)濟(jì)學(xué)院專升本管理學(xué)真題
- 考研有機(jī)化學(xué)重點(diǎn)
- 全國身份證前六位、區(qū)號(hào)、郵編-編碼大全
評(píng)論
0/150
提交評(píng)論