




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、職業(yè)技術(shù)師大學(xué)電子工程學(xué)院電子信息工程課程設(shè)計(jì)報(bào)告同組學(xué)生(學(xué)號(hào)): 佩航王芝利 瑤 班 級(jí): 電信1302班 任務(wù)分工: 佩航 程序編寫 王芝利 電路原理設(shè)計(jì) 瑤 報(bào)告編寫 設(shè)計(jì)時(shí)間: 2015年12月28 日 2016 年 1月8日指導(dǎo)教師: 成丹、梅建強(qiáng) 目 錄 題目:一、課程設(shè)計(jì)的目的與要求3二、方案論證選擇3三、原理設(shè)計(jì)3四、程序設(shè)計(jì)8五、方案實(shí)現(xiàn)與測(cè)試11六、課程設(shè)計(jì)小結(jié)七、參考文獻(xiàn)個(gè)人總結(jié)19一、 課程設(shè)計(jì)的目的與要求(含設(shè)計(jì)指標(biāo))1.1設(shè)計(jì)目的: 要求通過(guò)軟件設(shè)計(jì)實(shí)現(xiàn)加減乘除計(jì)算等功能,并顯示。1.2設(shè)計(jì)要求(1)對(duì)計(jì)算器硬件系統(tǒng)進(jìn)行設(shè)計(jì),利用AT89S52作為主控器件,組成一
2、個(gè)能實(shí)現(xiàn)加減乘除等運(yùn)算的計(jì)算器,能進(jìn)行數(shù)據(jù)歸零,按鍵提示。(2) 運(yùn)用keil進(jìn)行計(jì)算器軟件系統(tǒng)的設(shè)計(jì)。1.3設(shè)計(jì)方案按照系統(tǒng)設(shè)計(jì)的功能的要求,確定設(shè)計(jì)系統(tǒng)由主控模塊、顯示模塊、鍵盤掃描接口電路、按鍵提示電路4個(gè)模塊組成。系統(tǒng)構(gòu)成框圖如圖所示:系統(tǒng)構(gòu)成框圖1-3-14.單片機(jī)最小硬件系統(tǒng)單片機(jī)最小應(yīng)用系統(tǒng),是指用最少的原件組成的單片機(jī)可以工作的系統(tǒng)。對(duì)51系列單片機(jī)來(lái)說(shuō),最小系統(tǒng)應(yīng)包括單片機(jī)、晶振電路、復(fù)位電路。下面介紹51單片機(jī)的最小系統(tǒng)電路圖:?jiǎn)纹瑱C(jī)最小系統(tǒng)圖1-4-1二、 方案論證及選擇1、方案一:采用FPGA控制FPGA是一種高密度的可編程邏輯器件,自從Xilinx公司1985年推出第
3、一片F(xiàn)PGA以來(lái),FPGA的集成密度和性能提高很快,其集成密度最高達(dá)500萬(wàn)門/片以上,系統(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ì)算器而言,實(shí)用FPGA有點(diǎn)大材小用,成本太高。2、方案二:采用AT89S52單片機(jī)是單片微型機(jī)的簡(jiǎn)稱,故又稱為微控制器MCU(Micro Control Unit)。通常由單塊集成電路芯片組成,部包含有計(jì)算機(jī)的
4、基本功能部件:中央處理器CPU,存儲(chǔ)器和I/O接口電路等。因此,單片機(jī)只要和適當(dāng)?shù)能浖巴獠吭O(shè)備相結(jié)合,便可成為一個(gè)單片機(jī)控制系統(tǒng)。單片機(jī)廣泛用于智能產(chǎn)品,智能儀表,測(cè)控技術(shù),智能接口等,具有操作簡(jiǎn)單,實(shí)用方便,價(jià)格便宜等優(yōu)點(diǎn),而其中AT89S52以MCS-51為核,是單片機(jī)中最典型的代表,應(yīng)用于各種控制領(lǐng)域。 通過(guò)以上兩種方案論證和比較,從設(shè)計(jì)的實(shí)用性,方便性和成本出發(fā),選擇了以AT89S52單片機(jī)作為中央處理單元進(jìn)行計(jì)算器的設(shè)計(jì),這樣設(shè)計(jì)能夠?qū)崿F(xiàn)對(duì)六位浮點(diǎn)數(shù)的加減和三位浮點(diǎn)數(shù)的乘除運(yùn)算。三、 原理設(shè)計(jì)(或基本原理)基本原理,電路仿真,系統(tǒng)組成框圖、單元電路設(shè)計(jì)、總體電路圖、元件列表3.1時(shí)
5、鐘電路 XTAL1是片振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時(shí),外部振蕩信號(hào)應(yīng)直接加到XTAL1,而XTAL2懸空。部方式時(shí),時(shí)鐘發(fā)生器對(duì)振蕩脈沖二分頻,如晶振為12MHz,時(shí)鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz選擇。電容取30PF左右。系統(tǒng)的時(shí)鐘電路設(shè)計(jì)是采用的部方式,即利用芯片部的振蕩電路。AT89單片機(jī)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器。引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外晶體諧振器一起構(gòu)成一個(gè)自激振蕩器。外接晶體諧振器以及電容C1和C2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。對(duì)外接電
6、容的值雖然沒有嚴(yán)格的要求,但電容的大小會(huì)影響震蕩器頻率的高低、震蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。因此,此系統(tǒng)電路的晶體振蕩器的值為12MHz,電容應(yīng)盡可能的選擇瓷電容,電容值約為22F。在焊接刷電路板時(shí),晶體振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近,以減少寄生電容,更好地保證震蕩器穩(wěn)定和可靠地工作。單片機(jī)復(fù)位電路如下圖所示:時(shí)鐘電路圖3-1-13.2復(fù)位電路在振蕩器運(yùn)行時(shí),有兩個(gè)機(jī)器周期(24個(gè)振蕩周期)以上的高電平出現(xiàn)在此引腿時(shí),將使單片機(jī)復(fù)位,只要這個(gè)腳保持高電平,51芯片便循環(huán)復(fù)位。復(fù)位后P0P3口均置1引腳表現(xiàn)為高電平,程序計(jì)數(shù)器和特殊功能寄存器SFR全部清零。當(dāng)復(fù)位腳由高
7、電平變?yōu)榈碗娖綍r(shí),芯片為ROM的00H處開始運(yùn)行程序。復(fù)位是由外部的復(fù)位電路來(lái)實(shí)現(xiàn)的。片復(fù)位電路是復(fù)位引腳RST通過(guò)一個(gè)斯密特觸發(fā)器與復(fù)位電路相連,斯密特觸發(fā)器用來(lái)抑制噪聲,它的輸出在每個(gè)機(jī)器周期的S5P2,由復(fù)位電路采樣一次。復(fù)位電路通常采用上電自動(dòng)復(fù)位和按鈕復(fù)位兩種方式,此電路系統(tǒng)采用的是上電與按鈕復(fù)位電路。當(dāng)時(shí)鐘頻率選用6MHz時(shí),C取22F,Rs約為200,Rk約為1K。復(fù)位操作不會(huì)對(duì)部RAM有所影響。常用的復(fù)位電路如下圖所示: 復(fù)位電路圖3-2-23.3鍵盤接口電路鍵盤接口電路如下圖所示: 鍵盤接口電路3-3-34*4矩陣鍵盤工作原理:矩陣鍵盤又稱為行列式鍵盤。它由4條I/O線為行線
8、,4條I/O線做列線組成,在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤中的按鍵數(shù)為4*4個(gè),所以稱之為4*4矩陣鍵盤,這種行列行線置高電平,接P1口的低四位P1.3- P1.0,列線置低電平,接P1口的高四位P1.7- P1.4高四位為輸入,低四位為輸出。1.檢測(cè)當(dāng)前是否有鍵按下,采用逐行掃描法,檢測(cè)方法為先將P1.7-P1.4依次置0,檢驗(yàn)P1.3-P1.0狀態(tài),若全為1則無(wú)鍵閉合,否則有鍵閉合。2.取出鍵抖動(dòng),當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步判斷。3.若有鍵按下,應(yīng)判斷究竟是哪一鍵按下。方法是對(duì)鍵盤的行線進(jìn)行掃描 將P1.7-P1.4依次置0時(shí),P1.3-P1.0狀態(tài)表如下:
9、P1.31110P1.21101P1.11011P1.00111閉合狀態(tài)第一行閉合第二行閉合第三行閉合第四行閉合P10-P13狀態(tài)表3.4液晶顯示電路本設(shè)計(jì)液晶顯示部分采用LCD1206電路圖如下: LCD1206電路圖3-4-1液晶顯示原理:線段的顯示:圖象形式的液晶顯示裝置有M×N個(gè)基本的顯示單元,假設(shè)LCD顯示64行,每行有128列,一字節(jié)的8位對(duì)應(yīng)每8位,即組成方式是由每行16字節(jié),共16×8=128個(gè)點(diǎn)而組成的,64×16顯示單元與RAM的顯示區(qū)對(duì)應(yīng)于1024個(gè)字節(jié),以對(duì)應(yīng)于每一個(gè)顯示位置上的每個(gè)字節(jié)的顯示的亮暗程度。例如,屏幕亮和暗的第一行的容由16個(gè)
10、字節(jié)的RAM區(qū)容來(lái)決定,而當(dāng)000H - 00FH(000H)= FFH時(shí)顯示在屏幕左上角的短亮線,長(zhǎng)度是8個(gè)小點(diǎn),而當(dāng)(3FFH)= FFH,就在屏幕的右下角會(huì)顯示一個(gè)簡(jiǎn)短的亮線;(000H)= FFH(001H)=00H(002H)=00H,. (00EH)=00H(00FH)= 00H,第8段亮線和8個(gè)暗線,在屏幕頂部顯示一條虛線。這是液晶顯示器(LCD)顯示的基本原理。字符的顯示:一個(gè)字符在液晶顯示中顯示是比較復(fù)雜的,因?yàn)橐粋€(gè)字符是由6×8或者8×8的點(diǎn)陣構(gòu)成的,不僅要找到和顯示在屏幕上的顯示RAM的8個(gè)字節(jié)的位置對(duì)應(yīng)的字節(jié),而且還要使每個(gè)字節(jié)不同的位是“1”,另一
11、個(gè)是“0”,把“1”點(diǎn)亮,而“0”是不亮。用這樣的方法來(lái)組成一個(gè)字符。但是顯示字符對(duì)于帶有字符發(fā)生器的控制器,是比較簡(jiǎn)單的,可以允許控制器工作在文本模式中,根據(jù)液晶屏上開始顯示的行和列的號(hào),和就可以找出RAM所對(duì)應(yīng)的地址,設(shè)置一個(gè)游標(biāo),發(fā)送這個(gè)字符所對(duì)應(yīng)的代碼就可以了。漢字的顯示:對(duì)于漢字的顯示一般是采用圖形的方式,將要顯示的中國(guó)漢字的點(diǎn)陣碼(字模提取軟件)從微機(jī)中提取,每個(gè)漢字占32B,分為左,右兩半,每半各16B,左邊是基數(shù)1,3,5右邊是偶數(shù)2,4,6.正確的顯示中文字符,根據(jù)在LCD上現(xiàn)實(shí)的行列號(hào),及行列數(shù)可以找出在RAM上所對(duì)應(yīng)的的地址,在光標(biāo)的位置上加1,發(fā)送的第二個(gè)字節(jié),先換行再
12、按列對(duì)齊,給第三個(gè)字節(jié).直到32B完全被顯示,就可以在液晶顯示屏上得到一個(gè)完整的中文字符。LCD1206引腳如下圖所示:LCD1206引腳圖3-4-2LCD1602采用標(biāo)準(zhǔn)的16腳接口,但在proteus仿真中無(wú)字庫(kù),故為14腳第1腳:VSS為電源接地第2腳:VCC接5V電源的正極第3腳:V0為液晶顯示器的對(duì)比度調(diào)整端,當(dāng)接正電源的時(shí)時(shí)候?qū)Ρ榷茸钊酰拥仉娫磿r(shí)對(duì)比度最高(而當(dāng)對(duì)比度過(guò)高時(shí)會(huì) ,就會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)接一個(gè)10K的電位器來(lái)調(diào)整對(duì)比度)。第4腳:RS為寄存器選擇腳,當(dāng)高電平1時(shí)就選擇數(shù)據(jù)寄存器,當(dāng)?shù)碗娖?時(shí)就選擇指令寄存器。第5腳:RW是讀寫信號(hào)線,當(dāng)高電平時(shí)進(jìn)行讀操作
13、,當(dāng)?shù)碗娖綍r(shí)進(jìn)行寫操作。第6腳:E(或EN)端為使能端,當(dāng)高電平1時(shí)讀取信息,當(dāng)負(fù)跳變時(shí)執(zhí)行指令。第714腳:D0D7為8位雙向數(shù)據(jù)端。在單片機(jī)系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個(gè)優(yōu)點(diǎn):LCD1602的指令碼如下表所示:指令碼功能令RSR/WD7D6D5D4D3D2D1D0清除顯示0000000001將DDRAM填滿"20H",并且設(shè)定DDRAM的地址計(jì)數(shù)器(AC)到"00H"地址歸位000000001X設(shè)定DDRAM的地址計(jì)數(shù)器(AC)到"00H",并且將游標(biāo)移到開頭原點(diǎn)位置;這個(gè)指令不改變DDRAM 的容顯示狀態(tài)開/關(guān)000
14、0001DCBD=1: 整體顯示 ONC=1: 游標(biāo)ON B=1:游標(biāo)位置反白允許進(jìn)入點(diǎn)設(shè)定00000001I/DS指定在數(shù)據(jù)的讀取與寫入時(shí),設(shè)定游標(biāo)的移動(dòng)方向及指定顯示的移位游標(biāo)或顯示移位控制000001S/CR/LXX設(shè)定游標(biāo)的移動(dòng)與顯示的移位控制位;這個(gè)指令不改變DDRAM 的容功能設(shè)定00001DLXREXXDL=0/1:4/8位數(shù)據(jù)RE=1: 擴(kuò)充指令操作RE=0: 基本指令操作設(shè)定CGRAM地址0001AC5AC4AC3AC2AC1AC0設(shè)定CGRAM 地址設(shè)定DDRAM地址0010AC5AC5AC3AC2AC1AC0設(shè)定DDRAM 地址(顯示位址)第一行:80H87H第二行:90
15、H97H讀取忙標(biāo)志和地址01BFAC6AC5AC5AC3AC2AC1AC0讀取忙標(biāo)志(BF)可以確認(rèn)部動(dòng)作是否完成,同時(shí)可以讀出地址計(jì)數(shù)器(AC)的值寫數(shù)據(jù)到RAM10將數(shù)據(jù)D7D0寫入到部的RAM (DDRAM/CGRAM/IRAM/GRAM)讀出RAM的值11從部RAM讀取數(shù)據(jù)D7D0(DDRAM/CGRAM/IRAM/GRAM)3.5蜂鳴器滴滴電路當(dāng)矩陣鍵盤有鍵按下時(shí),蜂鳴器發(fā)出滴滴的聲音提示。蜂鳴器由單片機(jī)P32口控制,用三極管驅(qū)動(dòng)。蜂鳴器報(bào)警電路圖3-5-13.6課程設(shè)計(jì)總圖: 電路圖3-6-1四、程序設(shè)計(jì)4.1鍵盤掃描部分程序設(shè)計(jì)鍵掃程序的過(guò)程為:開始時(shí),先判斷是否有鍵閉合,無(wú)鍵閉
16、合時(shí),返回繼續(xù)判斷,有鍵閉合時(shí),先去抖動(dòng),然后確定是否有鍵按下,若無(wú)鍵按下,則返回繼續(xù)判斷是否有鍵閉合,若有鍵按下,則判斷鍵號(hào),然后釋放,若釋放按鍵完畢,則返回,若沒有釋放按鍵,則返回繼續(xù)釋放。流程圖如下:鍵盤掃描流程圖4-1-14.2運(yùn)算部分程序設(shè)計(jì)算術(shù)運(yùn)算程序的過(guò)程為:首先判斷當(dāng)前輸入的運(yùn)算符是以下運(yùn)算符中的哪一個(gè)+、-、*、/ ,如果是+或者是*,則要先判斷運(yùn)算結(jié)果是否會(huì)溢出,如果結(jié)果溢出則不顯示運(yùn)算結(jié)果,沒溢出就顯示運(yùn)算結(jié)果,若是/,則要先判斷除數(shù)是否為零,為零就不顯示結(jié)果,不為零則顯示運(yùn)算結(jié)果,若是-,則直接顯示運(yùn)算結(jié)果。其流程圖如下圖所示: 運(yùn)算流程圖4-2-14.3顯示部分程序設(shè)
17、計(jì)顯示程序的過(guò)程為:顯示開始時(shí),先進(jìn)行LCD的初始化,判斷是否顯示漢字或ACSII碼或圖形,若不顯示,則返回,若顯示的是漢字或ACSII碼,則進(jìn)行相應(yīng)功能的設(shè)置,然后送地址和數(shù)據(jù),再判斷是否顯示完,顯示完則返回,沒有顯示完則繼續(xù)送地址,若顯示的是圖形,則先進(jìn)行相應(yīng)功能的設(shè)置,再送行地址和列地址,然后送數(shù)據(jù),最后判斷是否顯示完,顯示完則返回,沒有顯示完則繼續(xù)送行地址和列地址。其流程圖如下所示:顯示流程圖4-3-14.4主函數(shù)程序設(shè)計(jì) 主函數(shù)流程圖如下所示: 主函數(shù)流程圖4-4-1 五、方案實(shí)現(xiàn)與測(cè)試(或調(diào)試)功能和操作:加減乘除運(yùn)算和顯示。上電后,屏幕初始化。計(jì)算。按下數(shù)字鍵,屏幕顯示要運(yùn)算的第
18、一個(gè)數(shù)字,再按下符號(hào)鍵,然后再按下數(shù)字鍵,屏幕顯示要運(yùn)算的第二個(gè)數(shù)字,最后按下“”號(hào)鍵,屏幕上顯示出計(jì)算結(jié)果。如果要再次計(jì)算,可以按下“ON/C”鍵清零,或者按下單片機(jī)的復(fù)位鍵,重新初始化。 #include<reg51.h>#define uint unsigned int#define uchar unsigned char/-LCD1602-/P00-07= D0-7sbit rs=P22; /指令or數(shù)據(jù)sbit wela=P21; /讀or寫sbit lcden=P20; /使能信號(hào)/-LCD1602-/-KEY-/P1口/-KEY-/-BUZZER-sbit buzze
19、r = P32;/蜂鳴器/-BUZZER-uchar code table= " "long int data_a,data_b; /第一個(gè)數(shù)和第二個(gè)數(shù)long int data_c;/計(jì)算結(jié)果uchar dispaly10; /顯示緩沖/=5ms延時(shí)=void Delay5Ms(void)unsigned int TempCyc = 5552;while(TempCyc-);/*/ 描述: 延時(shí)t us函數(shù)/*/void LCD_Delay_us(unsigned int t)while(t-); /t=0,退出/*/ 描述: 延時(shí)t ms函數(shù)/*/void LCD_De
20、lay_ms(unsigned int t)unsigned int i,j;for(i=0;i<t;i+) /執(zhí)行t次循環(huán)for(j=0;j<113;j+); /執(zhí)行113次循環(huán)/=一聲提示音,表示有效輸入=void OneBuzzer(void)buzzer=0;Delay5Ms(); buzzer=1;/*/ 描述: 1602液晶寫指令/*/void write_(uchar ) /1602液晶寫指令rs=0; /寫指令lcden=0; /使能1602 P0=; /寫入指令comLCD_Delay_ms(1); /延時(shí)1mslcden=1; /使能1602LCD_Delay_
21、ms(2); /延時(shí)2ms lcden=0; /使能1602/*/ 描述:1602液晶寫數(shù)據(jù) /*/void write_date(uchar date) /1602液晶寫數(shù)據(jù)rs=1; /寫數(shù)據(jù)lcden=0; /使能1602 P0=date; /寫入數(shù)據(jù)date LCD_Delay_ms(1); /延時(shí)1mslcden=1; /使能1602LCD_Delay_ms(2); /延時(shí)2mslcden=0; /使能1602/*/ 描述:指定x,y寫入字符函數(shù)/*/void W_lcd(unsigned char x,unsigned char y,unsigned char Data) if (
22、y = 0)write_(0x80 + x); /第一行 elsewrite_(0xc0 + x); /第二行 write_date( Data); /寫入數(shù)據(jù) /指定x,y寫入字符串函數(shù) void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) if (y = 0)write_(0x80 + x); /第一行 elsewrite_(0xC0 + x); /第二行 while (*s) / write_date( *s); s+; /寫入數(shù)據(jù) /*/ 描述:初始化液晶,及畫面初始化 /*/void init_
23、lcd(void) /初始化液晶,及畫面初始化wela=0; /寫液晶lcden=0; /使能1602write_(0x38); /8 位總線,雙行顯示,5X7 的點(diǎn)陣字符LCD_Delay_us(100); /延時(shí)100uswrite_(0x0c); /開顯示,無(wú)光標(biāo),光標(biāo)不閃爍write_(0x06); /光標(biāo)右移動(dòng)write_(0x01); /清屏write_(0x80); /DDRAM 地址歸0/=按鍵檢測(cè)并返回按鍵值=unsigned char keynum(void) /鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法 uchar cord_h,cord_l;/行列值中間變量 P1=0x0f; /
24、行線輸出全為0 cord_h=P1&0x0f; /讀入列線值 if(cord_h!=0x0f) /先檢測(cè)有無(wú)按鍵按下 Delay5Ms(); Delay5Ms(); /去抖 if(cord_h!=0x0f) cord_h=P1&0x0f; /讀入列線值 P1=cord_h|0xf0; /輸出當(dāng)前列線值 cord_l=P1&0xf0; /讀入行線值while(P1&0xf0)!=0xf0);/等待松手OneBuzzer(); return(cord_h+cord_l);/鍵盤最后組合碼值 return(0); /返回該值/*/ 描述: 逐行鍵盤掃描 /*/shor
25、t keycheckdown()/* 反轉(zhuǎn)法鍵盤掃描 */short temp1,temp2,temp,a=0xff;/P2=0xf0;/* 輸入行值(或列值) */LCD_Delay_ms(20);/* 延時(shí) */temp1=P2;/* 讀列值(或行值) */P2=0xff;/LCD_Delay_ms(20);/* 延時(shí) */P2=0x0f;/* 輸入列值(或行值) */LCD_Delay_ms(20);/* 延時(shí) */temp2=P2;/* 讀行值(或列值) */P2=0xff;/temp=(temp1&0xf0)|(temp2&0xf);/* 將兩次讀入數(shù)據(jù)組合 */un
26、signed char temp,a;temp=keynum();switch(temp)/* 通過(guò)讀入數(shù)據(jù)組合判斷按鍵位置 */ /*case 0x77 :a=0x0d;break;/ 按鍵/ case 0x7b :a=0x0e; break;/ 按鍵=case 0x7d :a=0; break;/ 按鍵0case 0x7e :a=0x0f; break;/ 按鍵CEcase 0xb7 :a=0x0c;break;/ 按鍵*case 0xbb :a=0x9;break; / 按鍵9case 0xbd :a=0x8;break; / 按鍵8 case 0xbe :a=0x7;break; /
27、按鍵7case 0xd7 :a=0x0b;break;/ 按鍵-case 0xdb :a=0x6;break; / 按鍵6case 0xdd :a=0x5;break; / 按鍵5case 0xde :a=0x4;break; / 按鍵4case 0xe7 :a=0x0a; break;/ 按鍵+case 0xeb :a=3;break;/ 按鍵3case 0xed :a=2;break;/ 按鍵2case 0xee :a=1;break;/ 按鍵1*/case 0x77 :a=0x0a;break;/ 按鍵/ case 0x7b :a=0x0b; break;/ 按鍵=case 0x7d :
28、a=0x0c; break;/ 按鍵0case 0x7e :a=0x0d; break;/ 按鍵CEcase 0xb7 :a=0x03;break;/ 按鍵*case 0xbb :a=0x6;break; / 按鍵9case 0xbd :a=0x9;break; / 按鍵8 case 0xbe :a=0xe;break; / 按鍵7 case 0xd7 :a=2;break;/ 按鍵-case 0xdb :a=0x5;break; / 按鍵6case 0xdd :a=0x8;break; / 按鍵5case 0xde :a=0x0;break; / 按鍵4case 0xe7 :a=1; bre
29、ak;/ 按鍵+case 0xeb :a=4;break;/ 按鍵3case 0xed :a=7;break;/ 按鍵2case 0xee :a=0x0f;break;/ 按鍵1default :a=0xff;return a;/* 返回按鍵值 */void display_a() /顯示數(shù)據(jù)adispaly3=data_a%10000/1000; /千dispaly2=data_a%1000/100; /百dispaly1=data_a%100/10; /十dispaly0=data_a%10; /個(gè) write_(0x80+0); /顯示數(shù)據(jù)aif(data_a>999)write_
30、date('0'+dispaly3); /顯示千位if(data_a>99)write_date('0'+dispaly2); /顯示百位if(data_a>9)write_date('0'+dispaly1); /顯示十位 write_date('0'+dispaly0); /顯示個(gè)位void display_b() /顯示數(shù)據(jù)bwrite_(0x80+7); /第一行dispaly3=data_b%10000/1000; /千dispaly2=data_b%1000/100; /百dispaly1=data_b%1
31、00/10; /十dispaly0=data_b%10; /個(gè) if(data_b>999)write_date('0'+dispaly3); /顯示千位 if(data_b>99) write_date('0'+dispaly2); /顯示百位 if(data_b>9) write_date('0'+dispaly1); /顯示十位 write_date('0'+dispaly0); /顯示個(gè)位/計(jì)算結(jié)果void display_c(x)if(data_c<100000000&&data_
32、c>-1)/溢出時(shí)顯示錯(cuò)誤dispaly8=data_c%1000000000/100000000; /萬(wàn)萬(wàn)dispaly7=data_c%100000000/10000000; /千萬(wàn)dispaly6=data_c%10000000/1000000; /百萬(wàn)dispaly5=data_c%1000000/100000; /十萬(wàn)dispaly4=data_c%100000/10000; /萬(wàn)dispaly3=data_c%10000/1000; /千dispaly2=data_c%1000/100; /百dispaly1=data_c%100/10; /十dispaly0=data_c%
33、10; /個(gè) write_(0x80+6+0x40); /第一行if(x=4) if(data_c>99999999)write_date('0'+dispaly8); /顯示萬(wàn)萬(wàn)if(data_c>9999999)write_date('0'+dispaly7); /千萬(wàn)if(data_c>999999)write_date('0'+dispaly6); /百萬(wàn)if(data_c>99999)write_date('0'+dispaly5); /十萬(wàn)write_date('0'+dispa
34、ly4); /萬(wàn)write_date('.');write_date('0'+dispaly3); /千write_date('0'+dispaly2); /百write_date('0'+dispaly1); /十 write_date('0'+dispaly0); /個(gè) elseif(data_c>99999999)write_date('0'+dispaly8); /顯示萬(wàn)萬(wàn)if(data_c>9999999)write_date('0'+dispaly7); /千
35、萬(wàn)if(data_c>999999)write_date('0'+dispaly6); /百萬(wàn)if(data_c>99999)write_date('0'+dispaly5); /十萬(wàn)if(data_c>9999)write_date('0'+dispaly4); /萬(wàn)if(data_c>999)write_date('0'+dispaly3); /千if(data_c>99)write_date('0'+dispaly2); /百if(data_c>9)write_date(&
36、#39;0'+dispaly1); /十write_date('0'+dispaly0); /個(gè) else /溢出時(shí)顯示錯(cuò)誤write_(0x80+11+0x40); /第一行write_date('E'); /顯示 E write_date('r'); /顯示Rwrite_date('r'); /顯示Rwrite_date('o'); /顯示Owrite_date('r'); /顯示Evoid eql(uchar x)/加減乘除運(yùn)算switch(x)/*功能鍵選擇*/ case 1:dat
37、a_c=data_a+data_b;break; /加 /* + S=1 */ /* 數(shù)值轉(zhuǎn)換函數(shù) */case 2:if(data_a>=data_b)data_c=data_a-data_b; /* - S=2 */減 elsedata_c=data_b-data_a;W_lcd(5,1,'-'); /負(fù)數(shù)符號(hào) break; case 3:data_c=(data_a*data_b);break; /* * S=3 */乘case 4:if(data_b=0)LCD_Write_String(0,1,"Error !");elsedata_c=(d
38、ata_a*10000)/data_b;break; /* / S=4 */除/溢出時(shí)顯示錯(cuò)誤case 0:break; void main()uchar key=0xff; /鍵值初始化uchar n=0; /第1個(gè)數(shù)可以按1-4次uchar m=5; /第2個(gè)數(shù)可以按1-4次uchar x=0; data_a=0; /前一個(gè)數(shù)data_b=0; /后一個(gè)數(shù)data_c=0; /結(jié)果 init_lcd(); /1602液晶初始化display_a(); while(1) key=keycheckdown();/*動(dòng)態(tài)掃描鍵盤,返回按鍵對(duì)應(yīng)值,賦給j key=0到f */if(0xff!=ke
39、y)/*若返回值有效,進(jìn)入部處理程序*/ if(key<10) if(n<4)data_a=data_a*10+key;m=5;display_a();n+; /首先輸入第一個(gè)數(shù) if(m<4)data_b=data_b*10+key;n=5;display_b();m+; /必須按了+-*/才能輸入第二個(gè)數(shù) else switch(key)/*功能鍵選擇*/case 0xa:n=5;m=0;x=1;W_lcd(5,0,'+');break; /加 /* + S=1 */ /* 數(shù)值轉(zhuǎn)換函數(shù) */case 0xb:n=5;m=0;x=2;W_lcd(5,0,&
40、#39;-');break; /* - S=2 */減case 0xc:n=5;m=0;x=3;W_lcd(5,0,'*');break; /* * S=3 */乘case 0xd:n=5;m=0;x=4;W_lcd(5,0,'/');break; /* / S=4 */除case 0xe:n=5;m=5;eql(x);W_lcd(12,0,'=');display_c(x);break; /* = */case 0xf:n=0;x=0;m=5; data_a=0;data_b=0;data_c=0;LCD_Write_String(0,
41、0,table);LCD_Write_String(0,1,table);W_lcd(0,0,'0');break; /* C*/六、總結(jié) 我們?cè)O(shè)計(jì)的簡(jiǎn)易計(jì)算器,基于AT89C52單片機(jī),選用4*4矩陣鍵盤作為輸入模塊,LCD1602液晶顯示模塊能實(shí)現(xiàn)基本的四則運(yùn)算,通過(guò)這次設(shè)計(jì)的學(xué)習(xí),著重培養(yǎng)了我獨(dú)立思考、綜合運(yùn)用所學(xué)有關(guān)知識(shí)的能力,能更好的鞏固單片機(jī)、C 語(yǔ)言、模擬電路、數(shù)字電路學(xué)習(xí)的容。通過(guò)設(shè)計(jì),不僅完成了一個(gè)作品,更重要的是在實(shí)際設(shè)計(jì)和試驗(yàn)中形成了更加科學(xué)合理的認(rèn)識(shí),不斷形成更為合理和具有科學(xué)性的思想方式。在這次設(shè)計(jì)中接住了互聯(lián)網(wǎng)等途徑查詢相關(guān)信息,并在圖書館查閱了大量
42、單片機(jī)資料。這不但擴(kuò)展了有關(guān)單片機(jī)領(lǐng)域的眼界,而且完善了以往的知識(shí)體系。提高了運(yùn)用知識(shí)的綜合能力。 七、參考文獻(xiàn)1 邱關(guān)源.電路(第四版)M.:高等教育,2006.9.2 康華光.電子技術(shù)基礎(chǔ)模擬部分(第五版)M.: 高等教育,2008.1.3 馬剛.用Proteus和Keil整合構(gòu)建單片機(jī)虛擬仿真平臺(tái)J,現(xiàn)代電子技術(shù),2006.24:129-1314 迎.單片微型計(jì)算機(jī)原理、應(yīng)用及接口技術(shù)M.國(guó)防工業(yè).2007.15 戴佳.單片機(jī)C語(yǔ)言應(yīng)用程序設(shè)計(jì)實(shí)例精講M,電子工業(yè),2006.6 胡漢才. 單片機(jī)原理及接口技術(shù)M. 清華大學(xué)7 華成英. 模擬電子技術(shù)基礎(chǔ)M. 高等教育8 凌志浩.AT89C
43、52單片機(jī)原理與接口技術(shù)M.高等教育,2011.39 閻石. 數(shù)字電子技術(shù)基礎(chǔ). 高等教育M10 徐愛鈞.智能化測(cè)量控制儀表原理與設(shè)計(jì)(第二版).航天航空大學(xué),2004.911 育才 等.MCS-51系列單片微型計(jì)算機(jī)及其應(yīng)用(第4版).東南大學(xué),2004.312 萍 等.智能儀器實(shí)驗(yàn)指導(dǎo)書.交通大學(xué),2007.913 周立功.單片機(jī)實(shí)驗(yàn)與實(shí)踐.航天航空大學(xué),2004.314 龔運(yùn)新單片機(jī)C語(yǔ)言開發(fā)技術(shù).清華大學(xué),2006.10個(gè)人總結(jié)【佩航】課程設(shè)計(jì)給我的幫助,我認(rèn)為最重要的就是做好設(shè)計(jì)的預(yù)習(xí),認(rèn)真的研究老師給的題目,選一個(gè)自己有興趣的題目。其次,老師對(duì)實(shí)驗(yàn)的講解要一絲不茍的去聽去想,因?yàn)橹?/p>
44、有都明白了,做起設(shè)計(jì)就會(huì)事半功倍,如果沒弄明白,就迷迷糊糊的去選題目做設(shè)計(jì),到頭來(lái)一點(diǎn)收獲也沒有。最后,要重視程序的模塊化,修改的方便,也要注重程序的調(diào)試,掌握其方法。硬件的設(shè)計(jì)、編程都要我們自己動(dòng)手去,軟件的編程也要我們不斷的調(diào)試,最終一個(gè)能完成課程設(shè)計(jì)的勞動(dòng)成果出來(lái)了,很高興它能按著設(shè)計(jì)的思想與要求運(yùn)動(dòng)起來(lái)。熟悉單片機(jī)的人都知道,要學(xué)好單片機(jī)可不是一件容易的事,倒不是因?yàn)閱纹瑱C(jī)很難學(xué),而是很難找到一本專為單片機(jī)入門者而編寫的教材。翻一下身邊的單片機(jī)教材,都好像是為已經(jīng)懂單片機(jī)的人而寫的,一般先介紹單片機(jī)的硬件結(jié)構(gòu)和指令系統(tǒng),再是系統(tǒng)擴(kuò)展和外圍器件,順便講一些應(yīng)用設(shè)計(jì)。如果按照此種學(xué)習(xí)方法,想進(jìn)行產(chǎn)品開發(fā),就必須先把所有的知識(shí)全部掌握了才可以進(jìn)行實(shí)際應(yīng)用。當(dāng)然,這次課設(shè)是對(duì)我的學(xué)習(xí)態(tài)度的一次檢驗(yàn)。對(duì)于這次單片機(jī)綜合課程實(shí)習(xí),我的第一大心得體會(huì)就是作為一名工程技術(shù)人員,要求具備的首要素質(zhì)絕對(duì)應(yīng)該是嚴(yán)謹(jǐn)。我們這次實(shí)習(xí)所遇到的多半問(wèn)題多數(shù)都是由于我們不夠嚴(yán)謹(jǐn)。在做人上,我認(rèn)識(shí)到,無(wú)論做什么事情,只要你足夠堅(jiān)強(qiáng),有足夠的毅力與決心,有足夠的挑戰(zhàn)困難的勇氣,就沒有什么辦不到的。在這次難得的課程設(shè)計(jì)過(guò)程中我鍛煉了自己的思考能力和動(dòng)手能力。通過(guò)題目選擇和設(shè)計(jì)電路的過(guò)程中,加強(qiáng)了我思考問(wèn)題的完整性和實(shí)際生活聯(lián)系的可行性。在方案設(shè)計(jì)選擇和芯片的選擇上,培養(yǎng)了我們綜合應(yīng)
溫馨提示
- 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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 股權(quán)落地保密協(xié)議書
- 翡翠項(xiàng)目代銷協(xié)議書
- 老年女性再婚協(xié)議書
- 移風(fēng)易俗共建協(xié)議書
- 綠化養(yǎng)護(hù)終止協(xié)議書
- 舞臺(tái)場(chǎng)地安置協(xié)議書
- 經(jīng)營(yíng)廠房承租協(xié)議書
- 苗木全球采購(gòu)戰(zhàn)略協(xié)議
- 2025年幼兒園秋季學(xué)期游樂設(shè)施安全計(jì)劃
- 房地產(chǎn)開發(fā)項(xiàng)目增值稅清算服務(wù)計(jì)劃
- 有機(jī)水果市場(chǎng)分析與可行性研究
- 二零二四年度版權(quán)許可合同:電影《未來(lái)世界》的播放權(quán)
- 勞務(wù)雇傭免責(zé)協(xié)議書范本兩篇
- 非中醫(yī)類別醫(yī)師學(xué)習(xí)中醫(yī)藥專業(yè)知識(shí)管理辦法(試行)
- 第20課 社會(huì)主義國(guó)家的發(fā)展與變化 課件歷史下學(xué)期統(tǒng)編版(2019)必修中外歷史綱要下
- 2024年學(xué)年八年級(jí)道德與法治下冊(cè) 第二單元 理解權(quán)利義務(wù)教案 新人教版
- 2024年學(xué)校空調(diào)租賃服務(wù)條款
- 《基于渦激振動(dòng)的陣列式壓電風(fēng)能采集系統(tǒng)》
- 《學(xué)前教育中幼兒創(chuàng)新思維培養(yǎng)的策略探究》開題報(bào)告5500字
- 戶外廣告資源租用協(xié)議范本
- 先兆性早產(chǎn)的護(hù)理
評(píng)論
0/150
提交評(píng)論