畢業設計-基于STC89C52RC單片機的簡易計算器設計_第1頁
畢業設計-基于STC89C52RC單片機的簡易計算器設計_第2頁
畢業設計-基于STC89C52RC單片機的簡易計算器設計_第3頁
畢業設計-基于STC89C52RC單片機的簡易計算器設計_第4頁
畢業設計-基于STC89C52RC單片機的簡易計算器設計_第5頁
已閱讀5頁,還剩37頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、電子設計實驗名稱:基于STC89C52RC單片機的簡易計算器設計 姓 名: _學 號:指導老師: 目錄一、可行性研究.3二、設計方案簡述.4 2.1、功能介紹.4基本功能.4擴展功能.4 2.2、總體設計方案.5總體設計思路.5方案論證與比較.6系統組成.7三、詳細設計.12 1.各個模塊設計.12 輸入模塊:鍵盤掃描.13 運算模塊:單片機控制.14 顯示模塊:LCD1602顯示.15 2.硬件電路設計.16 硬件連接.16 3.元件的介紹17 STC89C52單片機組成.17 復位和復位電路.18 LCD1602顯示器.19 4.PCB設計以及結果顯示.225、 總結24附錄主要程序代碼.

2、25一、設可行性分析:1.2.1 經濟可行性由于只是實驗性質的編程,所以在設計和開發都不需要過多的經費,但是系統投入運行以后,硬件維護和損耗所造成的耗費是必須的,但是數目也不會很大。所以經過初步分析,經濟上基本上是可行的1.2.2技術可行性在技術方面,因為都學習了C語言,硬件課程設計等課程,對于開發語言c語言也有一定的掌控能力,應該能夠完成相應的任務。1.2.3 運行可行性該成果簡單易操作,非常容易使用。1.2.4 法律可行性由于我們需要完成的功能相對簡單,沒有太多涉及到很專業方面的內容,更沒有計劃將系統利用到商業用途,所以不存在侵權或者版權糾紛方面的問題。1.2.5結論該系統的軟硬件都比較容

3、易理解和實現,所以,具有實現一計算器的可行性。二、設計方案簡述2.1功能概述系統基本功能:(1)由于設計的計算器要進行四則運算,為了得到較好的顯示效果,經綜合分析后,最后采用LCD 顯示數據和結果。(2)采用鍵盤輸入方式,鍵盤包括數字鍵(09)、符號鍵(+、-、×、÷)、清除鍵(onc)和等號鍵(=),故只需要16 個按鍵即可,設計中采用集成的計算鍵盤。(3)在執行過程中,開機顯示零,等待鍵入數值,當鍵入數字,通過LCD顯示出來,當鍵入+、-、*、/運算符,計算器在內部執行數值轉換和存儲,并等待再次鍵入數值,當再鍵入數值后將顯示鍵入的數值,按等號就會在LCD上輸出運算結果。

4、(4)錯誤提示:當計算器執行過程中有錯誤時,會在LCD上顯示相應的提示,如:當輸入的數值或計算得到的結果大于計算器的表示范圍時,計算器會在LCD上提示overflow;當除數為0時,計算器會在LCD上提示error。擴展功能:加上括號的混合運算2.2總體設計思路本設計主要采用以下基本模塊來實現:控制器模塊,輸入模塊,輸出模塊和電源模塊。通過對控制器進行編程。使其對輸入模塊的信號進行處理計算,然后通過輸出模塊反饋給使用者以計算結果。STC89C52單片機4*4鍵盤LCD顯示 晶振電路復位電路線路原理框圖方案論證與比較控制部分的設計方案論證與選擇根據設計要求,控制器主要用于紅外信號的接收和辨認、控

5、制步進電機的動作,控制顯示步進電機的轉速等。對于控制器的選擇有以下三種方案。方案一:采用計算器專用芯片實現。用計算器專用芯片進行設計并編程實現。這種設計方案計算效率高、速度快、而且成本也相對較低,是廠家做計算器的最佳方案。但是本人對計算器專用芯片掌握的不夠,還不足以實現設計計算器,所以這個方案不可去。 方案二:采用FPGA(現場可編程門陣列)作為系統的控制器。FPGA將所有器件集成到一塊芯片上,體積小,節省空間,提高了穩定性;直接面向用戶,具有極大的靈活性和通用性,使用方便,硬件測試和實現快捷,開發效率高,工作可靠性好。可以實現各種復雜的邏輯功能,規模大,密度高,采用并行的輸入輸出方式,系統處

6、理速度高,適合作為大規模實時系統的控制核心。由FPGA內部編程實現計算器功能,本設計對數據處理速度的要求不是很高,FPGA的高速處理的優勢得不到充分的體現,由于其集成度高,使其成本偏高,同時由于芯片的引腳較多,實物電路板布線復雜,加重了電路設計和實際焊接的工作。并且FPGA的價格相對較高,性價比太低。 方案三、用單片機實現。由于單片機集成了運算器電路、控制電路、存儲器、中斷系統、定時器/計數器以及輸入/輸出口電路等,所以用單片機設計控制電路省去了很多分立元器件。由于單片機是可編程芯片,并且它可以運用C語言編寫,對于一些復雜的計算功能,可以調用C語言庫函數。使編寫程序變得非常簡單。所以該課題用單

7、片機實現,不僅功能易于實現,而且精確度高,穩定性好,抗干擾能力強。并且由于其成本低、體積小、技術成熟和功耗小等優點,且技術比較成熟。性價比也相當高。更重要的是本人經過幾年的學習,對單片機已有深刻的理解,并且可以靈活運用。綜上所述,并通過各個方面綜合比較為達到最佳效果。我們采用方案三利用單片機控制器。顯示電路的設計方案論證與選擇方案一:數碼管顯示方案。數碼管顯示使用兩個四位一體動態數碼管顯示方案,此設計電路如圖所示。采用動態數碼管顯示,具有程序簡單, 對外界環境要求低,易于維護,同時其精度比較高,精確可靠,操作簡單。顯示直觀的特點。但只能顯示數字和一些代碼,不能顯示漢字及一些常用的符號,且硬件設

8、計比較復雜。方案二;LCD1602顯示器所謂1602是指顯示的內容為16*2,即可以顯示兩行,每行16個字符。目前字符液晶絕大多數是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應用于大部分的字符型液晶。字符型LCD1602通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,引腳定義如下表所示: HD44780內置了DDRAM、CGROM和CGRAM。  DDRAM就是顯示數據RAM,用來寄存待顯示的字符代碼。共80個字節,其地址和屏幕的對應

9、關系如下表: HD44780的指令集1.清屏指令 功能:<1> 清除液晶顯示器,即將DDRAM的內容全部填入"空白"的ASCII碼20H;             <2> 光標歸位,即將光標撤回液晶顯示屏的左上方;             <3> 將地址計數器(AC)的值設為0。 2.光標歸位指令 功能

10、:<1> 把光標撤回到顯示器的左上方;             <2> 把地址計數器(AC)的值設置為0;             <3> 保持DDRAM的內容不變 3.進入模式設置指令 功能:設定每次定入1位數據后光標的移位方向,并且設定每次寫入的一個字符是否移動。參數設定的情況如下所示:   

11、60;                位名              設置     I/D               0=寫入新

12、數據后光標左移                                                 

13、0;   1=寫入新數據后光標右移      S                0=寫入新數據后顯示屏不移動                      

14、0;  1=寫入新數據后顯示屏整體右移1個字 4.顯示開關控制指令 功能:控制顯示器開/關、光標顯示/關閉以及光標是否閃爍。參數設定的情況如下:                 位名              設置      &#

15、160;           D                0=顯示功能關           1=顯示功能開           &#

16、160;      C                0=無光標                   1=有光標         

17、         B                0=光標閃爍               1=光標不閃爍 5.設定顯示屏或光標移動方向指令  功能:使光標移位或使整個顯示屏幕移位。參數設定的情況如下: S/

18、C               R/L                設定情況 0                 0  

19、;        光標左移1格,且AC值減1   0                 1          光標右移1格,且AC值加1   1      

20、60;          0          顯示器上字符全部左移一格,但光標不動 1                 1          顯示器

21、上字符全部右移一格,但光標不動 6.功能設定指令  功能:設定數據總線位數、顯示的行數及字型。參數設定的情況如下:   位名              設置    DL                    &

22、#160;        0=數據總線為4位                     1=數據總線為8位    N                &#

23、160;              0=顯示1行                     1=顯示2行    F           

24、60;                    0=5×7點陣/每字符                           

25、;                          1=5×10點陣/每字符 7.設定CGRAM地址指令  功能:設定下一個要存入數據的CGRAM的地址。 8.設定DDRAM地址指令  功能:設定下一個要存入數據的CGRAM的地址。 (注意這里我們送地址的時候應該是0x80+Address,這也是前面說到寫地址命令的

26、時候要加上0x80的原因) 9.讀取忙信號或AC地址指令   功能:<1> 讀取忙碌信號BF的內容,BF=1表示液晶顯示器忙,暫時無法接收單片機送來的數據或指令;                      當BF=0時,液晶顯示器可以接收單片機送來的數據或指令;         

27、0;   <2> 讀取地址計數器(AC)的內容。 10.數據寫入DDRAM或CGRAM指令一覽  功能:<1> 將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應的字符;             <2> 將使用者自己設計的圖形存入CGRAM。 11.從CGRAM或DDRAM讀出數據的指令一覽 功能:讀取DDRAM或CGRAM中的內容。 基本操作時序: 讀狀態   

28、0;       輸入:RS=L,RW=H,E=H                                         

29、0;             輸出:DB0DB7=狀態字 寫指令           輸入:RS=L,RW=L,E=下降沿脈沖,DB0DB7=指令碼                  輸出:無 讀數據 

30、;          輸入:RS=H,RW=H,E=H                                       

31、;                            輸出:DB0DB7=數據 寫數據           輸入:RS=H,RW=L,E=下降沿脈沖,DB0DB7=數據     

32、;             輸出:無 2.2.2.3、鍵盤設計方案與選擇方案一:獨立鍵盤。獨立鍵盤為一端接地,另一端接I/O口,并且要接上拉電阻。這種鍵盤的硬件都很容易實現,但每一個按鍵就要用一個I/O口,適合本次設計。方案二:通過PS2協義,用鍵盤同單片機相接,從而實現單片機與鍵盤通信。其電路如圖所示。現在PC機廣泛采用的PS/2接口為miniDIN 6引腳的連接器。1數據線(DATA);未用;3電源地(GND);4電源(+5 V);5時鐘(CLK);6未用。由此圖可知,使

33、用鍵盤硬件結構比較簡單,但鍵盤的體積太大,所以此系統不采用此方案。方案三:自制編碼鍵盤。編碼鍵盤的電路如圖所示,這種鍵盤有編程簡單,占用資源少,但其硬件比較復雜,要用很多的二極管,不是很理想。 方案四:4*4矩陣式鍵盤。其電路圖如圖所示,這種鍵盤的硬件簡單,使用的I/O口也不多,而且這種鍵盤的編程方法已很成熟。本次設計也可以采用這種矩陣式鍵盤。其電路圖如圖主體設計部分:(1)、系統模塊圖:(2)、算術運算程序流程圖:(3)、系統總流程圖:(4)、硬件設計:(一)、總體硬件設計:本設計選用AT89C51單片機為主控單元; 顯示部分:采用LCD靜態顯示;按鍵部分:采用4*4鍵盤;用MM74C922

34、為4*4鍵盤掃描IC,讀取輸入的鍵值。總體設計效果如下圖:(二)、單片機接口電路說明:1、手動上電復位電路:當VCC上電時,C充電,在10K電阻上出現電壓,使得單片機復位;幾個毫秒后,C充滿,10K電阻上電流降為0,電壓也為0,使得單片機進入工作狀態。工作期間,按下S,C放電。S松手,C又充電,在10K電阻上出現電壓,使得單片機復位。幾個毫秒后,單片機進入工作狀態。 2、內部時鐘模式電路:當單片機工作于內部時鐘模式的時候,只需在XTAL1和XTAL2引腳連接一個晶體振蕩器或者陶瓷振蕩器,并接兩個電容后接地即可,在使用時對于電容的選擇有一定的要求:當外接晶體振蕩器的時候,電容值一般選擇C1=C2

35、=30+10pF或30-10pF;當外接陶瓷振蕩器的時候,電容值一般選擇C1=C2=40+10pF或40-10pF;3、 STC89C52介紹:STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統可編程Flash,使得STC89C52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節Flash,512字節RAM, 32 位I/O 口線,看門狗電路,內置4KB EEPROM,MAX810復位電路,三個16 位 定時器/計數器,一個6向量2級中斷結構,全雙工串行口。另外

36、STC89X52 可降至0Hz 靜態邏輯操作,支持2種軟件可選擇節電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35Mhz,6T/12T可選。和atmel的對比STC89C52RC單片機:8K字節程序存儲空間;512字節數據存儲空間;內帶4K字節EEPROM存儲空間;可直接使用串口下載;AT89S52單片機:8K字節程序存儲空間;256字節數據存儲空間;沒有內帶EEPROM存儲空間; 4、 LCD1602介紹:1602采用標準的16腳接口,其中:

37、第1腳:VSS為電源地第2腳:VDD接5V電源正極第3腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會 產生“鬼影”,使用時可以通過一個10K的電位器調整對比度)。第4腳:RS為寄存器選擇,高電平1時選擇數據寄存器、低電平0時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。第6腳:E(或EN)端為使能(enable)端。第714腳:D0D7為8位雙向數據端。第1516腳:空腳或背燈電源。15腳背光正極,16腳背光負極602LCD的特性n+5V電壓,對比度可調n內含復位電路n提供各種控制命令,如:清屏、字符

38、閃爍、光標閃爍、顯示移位等多種功能n有80字節顯示數據存儲器DDRAMn內建有192個5X7點陣的字型的字符發生器CGROMn8個可由用戶自定義的5X7的字符發生器CGRAM讀的時候,先讀左邊那列,再讀上面那行,如:感嘆號!的ASCII為0x21,字母B的ASCII為0x42(前面加0x表示十六進制)1602通過D0D7的8位數據端傳輸數據和指令。顯示模式設置: (初始化)0011 0000 0x38 設置16×2顯示,5×7點陣,8位數據接口;顯示開關及光標設置: (初始化)0000 1DCB D顯示(1有效)、C光標顯示(1有效)、B光標閃爍(1有效)0000 01NS

39、 N=1(讀或寫一個字符后地址指針加1 &光標加1),N=0(讀或寫一個字符后地址指針減1 &光標減1),S=1 且 N=1 (當寫一個字符后,整屏顯示左移)s=0 當寫一個字符后,整屏顯示不移動數據指針設置:數據首地址為80H,所以數據地址為80H+地址碼(0-27H,40-67H)其他設置:01H(顯示清屏,數據指針=0,所有顯示=0);02H(顯示回車,數據指針=0)。(三)、鍵盤接口電路:計算器輸入數字和其他功能按鍵要用到很多按鍵,如果采用獨立按鍵的方式,在這種情況下,編程會很簡單,但是會占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案

40、。矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個交叉點上設置一個按鍵。這樣鍵盤上按鍵的個數就為4×4個。這種行列式鍵盤結構能有效地提高單片機系統中I/O 口的利用率。矩陣鍵盤的工作原理:計算器的鍵盤布局如圖1所示:一般有16個鍵組成,在單片機中正好可以用一個P口實現16個按鍵功能,這種形式在單片機系統中也最常用。圖 1 矩陣鍵盤布局圖矩陣鍵盤內部電路圖如圖2所示: (四)、LCD顯示模塊:本設計采用LCD液晶顯示器來顯示輸出數據。通過D0-D7引腳向LCD寫指令字或寫數據以使LCD實現不同的功能或顯示相應數據。圖5 LCD 模塊(五)運算模塊(

41、單片機控制):MCS-51 單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數器和多功能I/O等一臺計算機所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數據存儲器(RAM)、程序存儲器(ROM/EPROM)、并行I/O 口、串行口、定時器/計數器、中斷系統及特殊功能寄存器(SFR)。單片機是靠程序運行的,并且可以修改。通過不同的程序實現不同的功能,尤其是特殊的獨特的一些功能,通過使用單片機編寫的程序可以實現高智能,高效率,以及高可靠性!因此我們采用單片機作為計算器的主要功能部件,可以很快地實現運算功能。PCB設計:1、實驗現象、數據記錄數碼顯示及

42、運算最多九位顯示及運算當超出時溢出顯示五、總結在實驗中遇到了這樣那樣的問題,軟件的編輯中使得c語言的應用更加熟練;在硬件的實現中又出現了軟件和硬件不統一的問題,本實驗我做了兩次,第一次的時候STC89C52單片機的P2口的P2.0P2.7分別對應連接到LCD1602的D7D0口,這就使得在寫程序的時候需要把所有讀寫的數據以及地址都按位取反,改寫程序比較復雜,最終調試失敗,又改變了硬件電路。最終成功; 本次設計不管在軟件,或是在硬件方面都讓我受益匪淺,讓我所學的知識得以應用到實踐,經過這次創新性實驗,也令我看到了很多的不足,在實驗中的一些程序不能夠及時編輯正確,需要很長時間的設計。硬件中我對單片

43、機實驗板上的很多硬件不是很清楚,使得在下載程序后,又進行了很長時間的調整。六、主要程序代碼Key.C #include<reg52.h> #define uchar unsigned char #define uint unsigned int #define KEYDATA P1 uchar key; uchar dis_buff; void Delay1(uint x) uint i,j; for(i=0;i<x;i+) for(j=0;j<112;j+) ; uchar KeyScan(void) uchar temp=0; key=0; KEYDATA=0xf0

44、; Delay1(1); temp=KEYDATA; temp=temp&0xf0; temp=(temp>>4)|0xf0); if(temp=1)key=0; else if(temp=2)key=1; else if(temp=4)key=2; else if(temp=8)key=3; else key=16; KEYDATA=0x0f; Delay1(1); temp=KEYDATA; temp=temp&0x0f; temp=(temp|0xf0); if(temp=1)key+=12; else if(temp=2)key+=8; else if(te

45、mp=4)key+=4; else if(temp=8)key+=0; else key=16; if(key<16) dis_buff=key; return dis_buff; uchar KeyDown(void) uchar keyFlag; uchar temp; KEYDATA=0xf0; if(KEYDATA!=0xf0) temp=KEYDATA; Delay1(200); if(temp=KEYDATA) keyFlag=1; else keyFlag=0; else keyFlag=0; return keyFlag; 1602. C #include<reg5

46、2.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit rs=P25; sbit rw=P26; sbit e=P27; sbit bf=P07; void delay1ms(void) uchar i,j; for(i=0;i<10;i+) for(j=0;j<33;j+) ; void delay(uchar n) uchar i; for(i=0;i<n;i+) delay1ms(); uchar BusyTest(void) bit res

47、ult1; rs=0; rw=1; e=1; _nop_(); _nop_(); _nop_(); _nop_(); result1=bf; e=0; return result1; void WriteCommand(uchar command) while(BusyTest()=1); rs=0; rw=0; e=0; _nop_(); _nop_();P0=command;_nop_();e=1;_nop_();e=0;void WriteAddress(uchar addr) WriteCommand(addr|0x80); void WriteData(uchar d)while(B

48、usyTest()=1);rs=1;rw=0;e=0;_nop_();P0=d;e=1;_nop_();e=0;void LcdInit(void)delay(15);WriteCommand(0x38);delay(5);WriteCommand(0x38);delay(5); WriteCommand(0x38);delay(5);WriteCommand(0x06);delay(5);WriteCommand(0x01);delay(5);WriteCommand(0x0c);delay(5);WriteCommand(0x0e);delay(5);Main.c#include<r

49、eg52.h>#define uchar unsigned char#define uint unsigned intuchar position=0x00;uchar string30;/存放輸入的表達式uchar code warn="ERROR"uchar code num='q','7','4','1','0','8','5','2','=','9','6','3',&#

50、39;s','k','c','j'uchar Curtime7=50,15,13,7,5,1,8;uchar opr15; /操作符int opt15; /操作數uchar iopt,iopr; /記錄操作數和操作符數組的下標bit flag=0; /標記是否輸入“(”操作符 循環嵌套long result=0; uchar pp; /記錄表達式的字符位置bit equal=0; /標記是否開始計算int op=0;/用來記錄合成的數值bit normal=1;/用來記錄是否正常,正常就進行運算,否則停止運算uchar operate;/

51、用來標記操作數和操作符的堆棧bit equalFlag=0;/用來標記等號是否按下,按下之后為1相當于清屏uchar shift=0; /shift鍵 sbit m1=P37; sbit m2=P36;sbit m3=P35; /用來標識shift鍵是否按下,按下則滅uchar pzp=0;/用來保存修改狀態下等號的位置uchar WriteAddress(uchar addr);uchar WriteData(uchar d);uchar WriteCommand(uchar command);void LcdInit();uchar KeyDown(void);uchar KeyScan(

52、void);void Init(void) int i; position=0x00; for(i=0;i<30;i+) stringi='a' flag=0; pp=0; equal=0; normal=1; shift=0; opr0=0; iopt=0; iopr=0; pzp=0; op=0;void DisplayNumble(long numble) /顯示結果,把結果轉換為字符串形式在輸出 uchar numx8='a','a','a','a','a','a',&

53、#39;a','a' uchar i=1,j=0x42; LcdInit(); WriteCommand(0x0c);/關光標顯示 WriteAddress(0x40);WriteData('='); if(numble<0) WriteAddress(0x41); WriteData('-'); numble=0-numble; if(numble=0)WriteAddress(0x42);WriteData(0+0x30);else while(numble>0) numxi=numble%10; i+; numble=n

54、umble/10; i=i-1; while(numxi!='a') WriteAddress(j+); WriteData(numxi+0x30); i-; void DisplayError(void) /顯示錯誤uchar i;i=0;normal=0;while(warni!='0')WriteAddress(0x40+i);WriteData(warni);i+;void Calculate(void)/計算int m;switch(opriopr%10)case 0:flag=1;break;case 1:m=opt-iopt+opt-iopt;op

55、tiopt+=m;break;case 2:m=optiopt-2-optiopt-1;iopt=iopt-2;optiopt+=m; break;case 3:m=opt-iopt*opt-iopt;optiopt+=m;break;case 4:m=optiopt-2/optiopt-1;if(optiopt-1=0)DisplayError();elseiopt=iopt-2;optiopt+=m; break; void InsertOpr(uchar operate)reentrantif(operate/10>opriopr/10|operate=10)opr+iopr=op

56、erate;elseif(iopr!=0)Calculate();if(operate=15)iopr-;if(flag=0)InsertOpr(operate);elseflag=0; /用來使遞歸結束elseif(iopr=0)iopr+=1;opriopr=operate;uchar KeyChar(void)uchar ch; uchar n=KeyScan();if(shift!=2)switch(n) case 0:if(shift=0)ch='q' /q表示清除else ch='w'break; /w表示修改case 12:shift=(shift

57、+1)%3;ch='m'break;case 13:if(shift=0)ch='('else ch=')'break;case 14:if(shift=0)ch='*'else ch='/'break;case 15:if(shift=0)ch='+'else ch='-'break;default:ch=numn;break;else ch='t'return ch;void WriteNum(uchar num,uchar add) /顯示數字WriteAddr

58、ess(add);WriteData(num/10+0x30);WriteAddress(add+1);WriteData(num%10+0x30);void Display()WriteNum(Curtime6,0x00);WriteAddress(0x02);WriteData('-');WriteNum(Curtime4,0x03);WriteAddress(0x05);WriteData('-');WriteNum(Curtime3,0x06);WriteAddress(0x09);WriteData('D');WriteAddress(

59、0x0a);WriteData('a');WriteAddress(0x0b);WriteData('y');WriteNum(Curtime5,0x0d);WriteNum(Curtime2,0x44);WriteAddress(0x46);WriteData(':');WriteNum(Curtime1,0x47);WriteAddress(0x49);WriteData(':');WriteNum(Curtime0,0x4a);void main(void)Init();LcdInit();while(1)switch(sh

60、ift)case 0:m1=1;m2=0;m3=0;break;case 1:m1=0;m2=1;m3=0;break;case 2:m1=0;m2=0;m3=1;break;if(shift!=2) if(KeyDown()=1)uchar ch;ch=KeyChar();if(ch!='t') if(ch!='=')/為按下鍵記錄表達式if(equalFlag=1) /進行過運算之后,再運算則初始化Init();LcdInit();equalFlag=0;if(ch!='m'&&ch!='q'&&

61、;ch!='w') /m模式選擇、q清除鍵,w修改鍵stringpp+=ch; if(pp-pzp=1) pzp=pp;WriteAddress(position);position+=1;if(position=15)WriteCommand(0x07);WriteData(stringpp-1);else /實現清除功能 if(ch='q')pp-;position-;WriteAddress(position);WriteData(0x20);WriteAddress(position);stringpp='a' pzp=pp;if(ch=

62、'w') /實現修改功能 pp-;position-;WriteAddress(position);else stringpzp='='pp=0;while(stringpp!='a')if('0'<=stringpp&&stringpp<='9')op=op*10+stringpp-'0'elseif(pp=0&&stringpp!='(')DisplayError(); else if(pp!=0)if(stringpp-1>=&

63、#39;0'&&stringpp-1<='9')optiopt+=op;op=0; switch(stringpp)case '(': if(pp!=0) if(!('0'<=stringpp-1&&stringpp-1<='9')&&stringpp-1!=')') operate=10; /operate第一位表示優先級,第二位標識算符else /1+、 2-、 3*、 4/、 5)DisplayError();elseoperate=1

64、0;break;case '+':if('0'<=stringpp-1&&stringpp-1<='9')|stringpp-1=')')operate=21;elseDisplayError();break;case '-':if('0'<=stringpp-1&&stringpp-1<='9')|stringpp-1=')')operate=22;elseDisplayError();break;case '*':if('0'<=stringpp-1&&stringpp-1<='9')|stringpp-1=')'

溫馨提示

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

評論

0/150

提交評論