




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、經(jīng)典文下載可復(fù)制粘貼單片機技術(shù)課程設(shè)計說明書計算器系 、 部: 電氣與信息工程系學(xué)生姓名: 詹志敏指導(dǎo)教師: 王韌 職稱 副教授專 業(yè):電子信息工程班 級:電子 0901 班完成時間: 2012-01-01摘要近年來隨著計算機在社會領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展, 單片機的應(yīng) 用正在不斷地走向深入,由于它具有功能強,體積小,功耗低,價格便宜,工作 可靠,使用方便等特點, 因此特別適合于與控制有關(guān)的系統(tǒng), 越來越廣泛地應(yīng)用 于自動控制,智能化儀器,儀表,數(shù)據(jù)采集,軍工產(chǎn)品以及家用電器等各個領(lǐng)域, 作為微型機的一個主要分支,單片機在結(jié)構(gòu)上的最大特點是把CPU 、 RAM 和ROM 存儲器、定時器
2、和多種 I/O 接口電路集成在一塊超大規(guī)模集成電路芯片上。 從它的組成和功能來看,一塊單片機芯片其實就是一臺計算機。本次設(shè)計是采用 MSC-51 單片機來設(shè)計的簡易應(yīng)用型計算器 , 采用 C 語言 進行程序編寫實現(xiàn)計算器功能。同時外接 4X4 的矩陣式鍵盤,通過鍵盤掃描程 序?qū)λ枰臄?shù)據(jù)的控制, 通過 LCD 顯示屏完成數(shù)值輸入與結(jié)果上的正常顯示, 在完成計算器時并設(shè)有清零鍵和返回菜單鍵以用來隨時完成計算與顯示的清零。 計算器可以實現(xiàn)八位數(shù)字一次的加 /減 /乘/除運算。執(zhí)行過程如下:開機顯示湖南 工學(xué)院和作者的個人信息, 延時后進入選項菜單, 等待鍵入數(shù)值進行選擇, 進入 計算模式,數(shù)據(jù)的
3、計算過程和結(jié)果將會在 LCD 上的顯示,在輸入、 -、*、/運 算符之后, 計算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲, 并等待再次輸入數(shù)值, 當(dāng)在鍵入 數(shù)值后將顯示鍵入的數(shù)值,按等號就會在 LCD 上顯示運算結(jié)果。關(guān)鍵詞 計算器;單片機;鍵盤; LCDABSTRACTIn recent years along with computer penetration in the social sphere and the large scale integrated circuit development, SCM applications are constantly deepening, because
4、 it has strong function, small volume, low power consumption, cheap, reliable, use convenient wait for a characteristic, thus it is especially suitable for and control of relevant system, more and more widely used in automatic control, intelligent instruments, instrumentation, data acquisition, mili
5、tary products and household appliances and other fields, as a miniature machine is one of the main branch, SCM in the structure is characterized by CPU, RAM and ROM memory, timer and a variety of I / O interface circuit integrated on a very large scale integrated circuit chip. From its composition a
6、nd function, a single chip microcomputer is a computer.This design is the use of MSC-51 microcontroller to design the simple application of calculator, using C programming language to achieve the calculator function. At the same time the external 4X4 matrix keyboard, through the keyboard scan proced
7、ure on the data needed by the LCD display screen control, to complete the numerical value input and results on the normal display, at the completion of calculator and reset button and menu key to return at the finish calculation and display clear. Calculator can achieve eight digit an add / drop / m
8、ultiply / divide. The implementation process is as follows: the starting up display Hunan Institute and the authors personal information, delay into the options menu, waiting for the type selection calculation of numerical data, into the model, the calculation process and results will be displayed o
9、n the LCD, in the input +, -, *, / operator, calculator in the internal implementation of numerical conversion and storage again, and waiting for input values, when typing in numerical will display type value, according to the sign will be displayed on the LCD operational results.Key words calculato
10、r ;MCU ;keyboard ;LCD目錄 TOC o 1-5 h z HYPERLINK l bookmark10 o Current Document 功能概述 1 HYPERLINK l bookmark12 o Current Document 課題任務(wù)與功能要求 1 HYPERLINK l bookmark14 o Current Document 方案概述 1 HYPERLINK l bookmark16 o Current Document 課題硬件系統(tǒng)設(shè)計 2 HYPERLINK l bookmark18 o Current Document 單片機各模塊電路簡介 2單片機
11、最小系統(tǒng) 2矩陣式鍵盤電路 2液晶顯示電路 2下載口電路 3硬件測試 3 HYPERLINK l bookmark20 o Current Document 課題軟件系統(tǒng)設(shè)計 4單片機資源使用情況 4 HYPERLINK l bookmark24 o Current Document 軟件各模塊簡要介紹 4液晶顯示程序 4鍵處理和鍵掃描程序 4延時 1ms程序 4計算程序設(shè)計 5主函數(shù) 5程序主流程圖 6 HYPERLINK l bookmark26 o Current Document 設(shè)計結(jié)論 7 HYPERLINK l bookmark28 o Current Document 使用說明
12、 7 HYPERLINK l bookmark30 o Current Document 心得體會 7 HYPERLINK l bookmark32 o Current Document 結(jié)束語 8致 謝 9 HYPERLINK l bookmark36 o Current Document 參考文獻 10附 錄 A 11附 錄 B 12附 錄 C 131 功能概述課題任務(wù)與功能要求設(shè)計一個具有特定功能的計算器。該計算器上電或按鍵復(fù)位后能自動顯示系統(tǒng)提示符“ P. ”,進入準(zhǔn)備工作狀態(tài),其中計算器能實現(xiàn)(1)基本的加、減、乘、除、平方、開方;(2)三角函數(shù)運算;3)十進制、十六進制轉(zhuǎn)換運算;
13、4)其他功能方案概述本設(shè)計采用單片機以及其外部設(shè)備組成硬件電路,其中包括單片機、 LCD液 晶顯示器、矩陣式鍵盤。 其中矩陣式鍵盤接在 P1口上,除此之外還有晶振電路, 復(fù)位電路,電源電路和下載口電路。程序設(shè)計采用 C51語言編寫。 開機時,液晶面板顯示湖南工學(xué)院及作者個人 信息。其后,選擇菜單欄中的計算器,進入計算器模式,本實驗的計算器可以實 現(xiàn)十六位無符號數(shù)字的加、減、乘、除運算,并顯示結(jié)果后的三位小數(shù)。當(dāng)計算 方式出錯時候,顯示 error! ,并提示操作者清零后,并再次輸入,同時計算器 還可以實現(xiàn)十進制、 十六進制轉(zhuǎn)換運算, 三角函數(shù)運算及平方和開方運算。 滿足 要求之外, 本課程設(shè)計
14、還可以實現(xiàn)對數(shù)的運算, 同時在運算結(jié)果中保留三位小數(shù)方案設(shè)計框圖如圖 1 所示:LCD顯示部分時鐘電路和復(fù)位電路51系類單片機4*4 矩陣式鍵盤圖 1 系統(tǒng)設(shè)計框圖課題硬件系統(tǒng)設(shè)計單片機各模塊電路簡介單片機最小系統(tǒng)單片機最小系統(tǒng)包括電源電路、時鐘電路、復(fù)位電路、液晶顯示電路。只有 當(dāng)單片機有了這些電路才會工作。 電源電路給單片機供電, 時鐘電路給單片機提 供計數(shù)時間, 復(fù)位電路可以實現(xiàn)單片機的復(fù)位。 而液晶顯示模塊顯示單片機計算 的各種狀態(tài)。通過一系列的連接構(gòu)成完整的單片機系統(tǒng)。矩陣式鍵盤電路單片機的 P1 口用作鍵盤 I/O 口,鍵盤的列線接到 P1 口的低 4 位,鍵盤的 行線接到P1 口
15、的高4位,也就是把列線 P1.0-P1.3 分別接4 個上拉電阻到電源, 把列線 P1.0-P1.3 設(shè)置為輸入線,行線 P1.4-P1.7 設(shè)置為輸出線,4 根行線和 4 根 列線形成 16 個相交點,檢測當(dāng)前是否有鍵被按下:檢測的方法是 P1.4-P1.7 輸 出全“0,”讀取 P1.0-P1.3 的狀態(tài),若 P1.0-P1.3 為全“1,”則說明無鍵閉合;否 則有鍵閉合。 去除鍵抖動: 當(dāng)檢測到有鍵按下后, 延時一段時間再做下一次的檢 測判斷, 若仍有鍵按下, 應(yīng)識別出是哪一個鍵閉合, 方法是對鍵盤的行線進行掃 描,在每組行輸出時讀取 P1.0-P1.3;若全為 “1,”則表示為 “0這
16、”一行沒有鍵閉 合;否則就是有鍵閉合。 由此得到閉合鍵的行值和列值, 然后可采用計算法或查 表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。 為了保證按鍵每閉合一次 CPU 僅作一次處理,必須去除鍵釋放時的抖動。液晶顯示電路帶中文字庫的 128X64 是一種具有 4 位/8 位并行、2 線或 3 線串行多種接口 方式,內(nèi)部含有國標(biāo)一級、 二級簡體中文字庫的點陣圖形液晶顯示模塊; 其顯示 分辨率為 12864, 內(nèi)置 8192 個 16*16 點漢字,和 128 個 16*8 點 ASCII 字符集 . 利用該模塊靈活的接口方式和簡單、方便的操作指令 。DB三態(tài)數(shù)據(jù)口線連接到 P0 口,而 RW連接
17、到 P3.1,RS接到 P3.0。而 PSB 和 K連接 VCC直流電源,液晶的 RESTE腳通過電阻接地。 同時 1 腳和 2腳分別接 地和接 VCC。下載口電路下載口的 1 腳接 P1.5 口, 2 腳懸空, 3 腳接單片機的復(fù)位口, 4 腳接 P1.6 口,5 腳接 P1.7 口,6 腳接地, 7、8、8、10腳接地。硬件測試板子做好后通過老師給的測試程序測得各模塊的功能均正常。 單片機最小系 統(tǒng)正常工作,液晶顯示正常,矩陣式鍵盤正常工作,復(fù)位電路正常。課題軟件系統(tǒng)設(shè)計單片機系統(tǒng)軟件的總體設(shè)計在利用編程語言當(dāng)中,匯編語言比較接近底層,編程效率高; C 語言則語言 靈活,在編寫算法中會比較
18、方便。雖然我們在單片機技術(shù)中是學(xué)習(xí)的匯編語言, 但相對而言我還是對于單片機的 C語言編程更加熟悉, 而且 C 語言在計算器中涉 及到的大量計算中會比較簡便。軟件各模塊簡要介紹液晶顯示程序液晶的顯示函數(shù)顯示,將相應(yīng)數(shù)據(jù)送至液晶指定的地址,讀取 ASCII 碼后, 讀取存儲于液晶中的漢字代碼, 之后再于液晶屏幕上顯示。 實現(xiàn)顯示需要的字符 信息。鍵處理和鍵掃描程序鍵處理函數(shù)主要是將從 P1 口取值送往單片機進行取反處理。鍵掃描函數(shù)主 要是判斷是否真的有鍵按下, 即度過前沿抖動之后再判斷是否有鍵按下, 如果確 實有鍵按下再判斷是否釋放, 同樣也要度過后沿抖動。 最終將處理完的鍵值作為 返回值返回。延
19、時 5ms 程序此函數(shù)要在矩陣式鍵盤中函數(shù)中用到, 由于時間比較短, 就采用純軟件的方 法延時。計算程序設(shè)計選擇進入計算模式,在進入計算函數(shù)后,然后進入鍵盤掃描程序的死循環(huán), 當(dāng)沒有鍵按下 , 循環(huán)一直執(zhí)行,當(dāng)有鍵按下時,通過延遲技術(shù)來進行按鍵去抖, 判斷按鍵是否松開, 如松開則將得到的鍵值進行判斷是哪一個鍵。 同時利用液晶 的寫入指令, 讓按鍵值顯示與液晶板上, 之后不斷的將按下的鍵值存入緩沖的變 量中,將原來的數(shù)值乘十加上剛鍵入的鍵值的數(shù)則是變量的值, 當(dāng)輸入出現(xiàn)小數(shù) 時,小數(shù)點的標(biāo)志位打開, 之后鍵入的數(shù)值則通過不斷乘以 0.1 存入小數(shù)點后幾 位,當(dāng)寫入功能運算符時,開啟運算符標(biāo)志位,
20、并將得到的數(shù)值保存,同時將緩 沖單元清零,等待輸入運算數(shù)據(jù)。 之后不斷的重復(fù)將數(shù)值輸入并與液晶面板上顯 示,同時計算器也可以實現(xiàn)其他動能的運算, SHIFT按鍵可以進行按鍵的切換, 分別實現(xiàn)三角函數(shù)的運算, 十六進制十進制的轉(zhuǎn)換, 求對數(shù), 平方和開根號的 運算。當(dāng)按下等號時,根據(jù)記錄的運算符標(biāo)志,判斷運算類型,執(zhí)行運算并將結(jié) 果乘以 1000,在進行顯示時候則將結(jié)果依次除以 1000 取余數(shù)放入結(jié)果顯示緩沖 區(qū),利用編寫的顯示函數(shù),依次循環(huán)執(zhí)行主函數(shù)主函數(shù)是程序的入口, 在主函數(shù)中一直調(diào)用液晶顯示函數(shù)和鍵掃描函數(shù), 當(dāng)沒有鍵按下時一直顯示菜單,當(dāng)有選擇的按鍵按下后,則進入計算模式。3.2.6
21、 程序主流程圖圖 1 程序主流程圖設(shè)計結(jié)論使用說明本設(shè)計的矩陣式鍵盤分為數(shù)字鍵和功能鍵, A為平方, B為根號, C為 SHIFT 鍵,D為小數(shù)點鍵, E為清零鍵, F為等于鍵,當(dāng)按鍵進入 SHIFT模式時,0為加, 1 為減, 2 為乘, 3 為除, 4 為正弦鍵, 5 為余弦鍵, 6 為正切鍵, 7 為對數(shù)功能 鍵,8 為十轉(zhuǎn)十六鍵, 9 為十六轉(zhuǎn)十鍵, A 為輸入 A 鍵,B 為輸入 B鍵,C為輸入 C 鍵, D為輸入 D鍵,E 為輸入 E 鍵,F 為輸入 F 鍵。心得體會本次 C 語言計算器編程給我很多幫助,其實暑假時候已經(jīng)編好了,但是精 確度不夠, 不能進行帶小數(shù)點的運算, 于是我決
22、定在這次課程設(shè)計中再次選擇計 算器,在期末考試接近的情況下, 我最終將計算器搞定, 雖然計算器運行處理數(shù) 據(jù)及顯示存在小小的誤差, 但是最終我知道了誤差原因, 這些計算誤差是來自本 身函數(shù)調(diào)用的誤差,這點確實無法改正。這個實驗給我的感覺, 硬件和軟件上都不是很難。 在期末的時候我原本是要 用到匯編語言編的計算器, 但是一直存在問題, 無法運用, 最后我決定先編好自 己的 C 語言,通過不斷的實驗和改正,我最終完成了這個計算器,當(dāng)然在過程 中讓我對 C 語言編程有了更好的了解,在這次實驗上,感覺收獲良多。遺憾的 是,我的匯編語言版本的計算器存在問題,沒有上交老師。同時在實驗中,我居然發(fā)現(xiàn)單片機的
23、 RAM 不夠,出現(xiàn)這些問題主要原因是 我把計算器的計算精度調(diào)的太高,而且 C51 中無法定義位變量,這些都是造成 問題的主要原因。 但是通過我不斷調(diào)低精確度, 最終還是解決了問題。 當(dāng)然遺憾 就是我沒有實現(xiàn)網(wǎng)絡(luò)上的定義結(jié)構(gòu)體位變量, 和將 RAM 中的低位字節(jié)移到高位 RAM 中的方法。結(jié)束語將本設(shè)計的程序下載到單片機中,通過測試,完美的完成了任務(wù)書的要求, 但是遺憾的是計算的精確度有一定的誤差,因為在調(diào)用計算程序是調(diào)用的庫函 數(shù),所以多次取值后存在誤差, 當(dāng)然對于高精度的計算器, 本設(shè)計的精度還是不 夠的,還需要進一步的改進,甚至可以精度提高到小數(shù)點后六位。而且 51 單片 機的 RAM
24、不夠, ROM 也不夠,這些也是造成誤差的原因。致謝本次計算器課題在進行過程中得到了王韌老師的悉心指導(dǎo)和同學(xué)們的熱心 幫助。在這里特意感謝在課程設(shè)計中幫助過我的老師和同學(xué)。 在暑假的時候由于 王老師的悉心指導(dǎo)才讓我能夠完成本次的計算器的課程設(shè)計, 再多華麗的言語也 顯蒼白。在此,謹(jǐn)向王老師致以誠摯的謝意和崇高的敬意。在設(shè)計過程中, 我通過查閱大量有關(guān)資料, 與同學(xué)交流經(jīng)驗和自學(xué), 并向老 師請教等方式,使自己學(xué)到了不少知識,也經(jīng)歷了不少艱辛,但收獲同樣巨大。 在整個設(shè)計中我懂得了許多東西, 也培養(yǎng)了我獨立工作的能力, 樹立了對自己能 力的信心, 相信會對今后的學(xué)習(xí)工作生活有非常重要的影響。 使
25、我充分體會到了 在創(chuàng)造過程中探索的艱難和成功時的喜悅。感謝暑假和我一起培訓(xùn)的同學(xué), 在本次課程設(shè)計中給予我很多幫助。 感謝班 上同學(xué)的積極支持和鼓勵,讓我能夠在困難中最終完成了計算器。參考文獻李廣弟.單片機技術(shù)基礎(chǔ)M.第三版.北京:北京航空航天大學(xué)出版社, 2007馬忠梅.單片機的 C語言應(yīng)用程序設(shè)計 M. 第四版.北京航空航天大學(xué)出版 社, 2007李光飛.單片機課程設(shè)計實例指導(dǎo) M. 北京:北京航空航天大學(xué)出版社, 2004鍵掃描函數(shù)流程圖電路原理圖如圖 B1C語言程序清單:/* 項目名稱 : 計算器 */* 設(shè) 計 者: 詹志敏 */* 時間:2011 年 12月 1日 */* 項目功能
26、 : 設(shè)計一個具有特定功能的計算器。 該計算器上電或按鍵復(fù)位后 能自動顯示系統(tǒng)提示符“ P. ”,進入準(zhǔn)備工作狀態(tài),其中計算器能實現(xiàn)(1)基本的加、減、乘、除、平方、開方;(2)三角函數(shù)運算;(3)十進制、十六進制轉(zhuǎn)換運算;(4)其他功能。/* 標(biāo)題:計算器*日期: 2011-8-11* 作者:詹志敏*版本: 4.0*/#include#define JING_GLOBALS#define uchar unsigned char#define uint unsigned intextern void js(void);/=extern rs ; extern rw ; extern en ;/
27、= sbit psb = P21; sbit ret = P23; uchar data0,count; uchar v;主程序void main(void)lcd_clear();lcd_int();lcdset();display0();delay3s();while(1)display1(); v=keyscan();switch(v)case 0 x00:break;case 0 x11:lcd_clear();年歷界面break;case 0 x21:lcd_clear();陣屏界面break;case 0 x41:lcd_clear();率計界面break;case 0 x81:l
28、cd_clear();碼鎖界面break;case 0 x12:lcd_clear();號源界面break;case 0 x22:lcd_clear();壓表界面break;case 0 x42:lcd_clear(); 度計界面/ 按下 0 鍵,進入萬/ 按下 1 鍵,進入點/ 按下 2 鍵,進入頻/ 按下 3 鍵,進入密/ 按下 4 鍵,進入信/ 按下 5 鍵,進入電/ 按下 6 鍵,進入溫/ 按下 7 鍵,進入計break;case 0 x82:lcd_clear();算器界面js();LCD初始化void lcd_int(void)ret=0; delay(10);ret=1;_nop
29、_();psb=1;_nop_();清屏程序void lcd_clear()writecommand(0 x01);writecommand(0 x30); /*延時程序 */void delay(uint m) while(-m);/*void delay3s(void)/精確延時 3s*/誤差 0usunsigned char a,b,c; for(c=189;c0;c-) for(b=230;b0;b-)for(a=33;a0;a-);顯示程序 */void display0(void)湖南工學(xué)院 );電氣與信息工程系);display(1,2, display(2,1, delay(1
30、0000); delay(10000); delay(10000); display(3,2, display(4,3,電子零九零一 ); 詹志敏 );/*目錄*/void display1()display(1,1, writecommand(0 x90);一萬年歷二點陣屏);writedata(0 xc8); writedata(0 xfd); display(2,2, display(3,1, display(4,1,#include #define uchar unsigned char #define uint unsigned int sbit rs = P30; sbit rw
31、= P31; sbit en = P35;頻率計四密碼鎖 ); 五信號源六電壓表 七計算器八溫度計););uchar command,com0;uchar data1 ,data2; / 數(shù)據(jù)高位和地位 uchar lcd_bufh,lcd_bufl;/ 緩沖區(qū)uchar ks;/* 液晶 */ /=判= 忙 = void checkbusy()rs=0;rw=1;P0=0 xff;while(1)en = 1;if(P0 0 x80)break;/P0的最高位為忙標(biāo)志為, H:忙,L: 空閑en = 0;en=0;/=液晶寫指令 = void writecommand(uchar comma
32、nd)checkbusy();rs=0;rw=0;en=1;P0=command; / 液晶數(shù)據(jù)線 P0en=0;/=液晶寫數(shù)據(jù) = void writedata(uchar date)checkbusy();rs=1;rw=0;en=1;P0=date;en=0;/=液晶設(shè)置 =void lcdset(void) writecommand(0 x30); / writecommand(0 x01); / writecommand(0 x02); / writecommand(0 x0c); /基本指令集清屏, DDRAM的地址歸零 地址歸位 顯示開,光標(biāo)關(guān),反白關(guān)writecommand(0
33、 x06); /DDRAM 地址加 1 /=字符顯示 = void display(uchar y, uchar x, uchar *p) switch (y) case 1:writecommand(0 x7f+x); break; / 液晶第一行case 2:writecommand(0 x8f+x); break; /0 x90+(x-1)case 3:writecommand(0 x87+x);break;case 4:writecommand(0 x97+x);break; default:break;while(*p) writedata(*p+);#includeunsigned
34、 char keyscan(void);void delay1(unsigned int m)while(-m);/ 鍵掃子程序unsigned char keyscan(void)unsigned char scan,tmp;P1=0 xf0;if(P1&0 xf0)!=0 xf0) /delay1(1000); / if(P1&0 xf0)!=0 xf0) /scan=0 xfe; while(scan&0 x10)!=0) / P1=scan; / if(P1&0 xf0)!=0 xf0) /tmp=(P1&0 xf0)|0 x0f; while(P1&0 xf0)!=0 xf0); /
35、 return (scan)|(tmp);/ 還回鍵值else scan=(scan1)|0 x01;移一位/ 發(fā)全行 0 掃描碼若有鍵按下延時去抖延時再判鍵是否還按下逐行掃描輸出行掃描碼本行有鍵按下設(shè)定為上升沿有效/ 行掃描碼左return (0); / 無鍵按下 , 還回 0 */* Module Name : jing_51.H */* File Name : jing_51.H */* Function : 用于管理頭文件*/ 編譯控制#ifndef JING_51_H#define JING_51_Htypedef unsigned int uint ; / 枚舉體typedef u
36、nsigned char uchar ;typedef unsigned long unlong ; #include #include #include #include#define NULL 0#define PI 3.14125#define PAGE_LIMIT 4/=/ 在此聲明全局函數(shù) 用 extern 修飾否則會出現(xiàn)函數(shù)多重聲明的錯誤/ 在其它 C 文件中定義函數(shù)即可 無須再次聲明(不同的編譯器可能會報錯 和警告)/=extern void checkbusy();extern void writecommand(uchar command);extern void write
37、data(uchar date);extern void lcdset(void);extern void display(uchar y, uchar x, uchar *p);extern void display0();extern void lcd_int(void);extern void lcd_clear();extern void delay(uint m);extern void delay3s(void);extern void display1();extern void delay0(uint i);/extern uchar keyscan();/extern voi
38、d fre();/ 全局變量宏定義 避免在每個 C 文件中啟用 extern/=/#ifdef JING_GLOBALS#define JING_EXT #else#define JING_EXT extern#endif/= =/ 在此處聲明全局變量,但是要在最前面加上 字符 JING_EXT 切忌只能 是聲明不能是定義(初始化)/ 并且要在主函數(shù) #include 之前 定義宏 #define JING_EXT 不 能有 CODE后者 const 修飾的常量全局/* 默 認(rèn) data*/存取類 型只 能 直接 尋址片內(nèi) 低 128 個 單元/*idata間 址 尋 址 能 訪 問 片 內(nèi)
39、256 個 單 元*/ 這里/ 頁 碼 標(biāo)/JING_EXT uchar idata list = 0; 既有聲明又有定義 會出錯(只能是聲明) JING_EXT uchar idata pageflag ;志/#endif /end of JING_51_H /= /no more/= #include long int h, c,N;uchar k, i;int m;float x,u,j,bj,o;uchar flag8,shuzi8,a8,shuzi18,flag18;bit g,t,q ,p;bit xuan,qie, jia,jian,chen,chu,sixteen,ten,si
40、nhan,coshan,tanhan,loghan,kaifang,pin gfang;uchar ge,shi,bai,qian,wan,sw,bw,qw;code yuanma=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E ,F; /數(shù)值 19的 ASCII 碼void js() / 定義計算器 函數(shù)while(1)display(1,1, 進入計算器? e/f); / 選擇進入計算器模式 e 進入, f 退出函數(shù)switch(keyscan()case 0 x48:lcd_clear(); display(1,1,請輸入 :);display(4,6, 返回 D);writ
41、ecommand(0 x90); / 從第二行開始顯 示while(1)start: switch(keyscan()case 0 x11: if(sixteen=1)shuzi10=0;flag11=1; / 數(shù)字 0 鍵else flag0=1;shuzi0=0; /flag 數(shù)組的作用 作為標(biāo)志位,起檢查那一個鍵按下的作用 writedata(0 x30);break;/ shuzi 數(shù)組的作用就是保存按下的每一位,case 0 x21:if(sixteen=1)shuzi11=1;flag11=1; / 數(shù)字 1 鍵else flag1=1;shuzi1=1; writedata(0
42、x31);break;case 0 x41:if(sixteen=1)shuzi12=2;flag12=1; / 數(shù)字 2 鍵 else shuzi2=2;flag2=1; writedata(0 x32);break;case 0 x81:if(sixteen=1)shuzi13=3;flag13=1; / 數(shù)字 3 鍵 else shuzi3=3;flag3=1; writedata(0 x33);break;case 0 x12:if(sixteen=1)shuzi14=4;flag14=1; / 數(shù)字 4 鍵 else shuzi4=4;flag4=1; writedata(0 x34
43、);break;case 0 x22:if(sixteen=1)shuzi15=5;flag15=1; / 數(shù)字 5 鍵 else shuzi5=5;flag5=1; writedata(0 x35);break;case 0 x42:if(sixteen=1)shuzi16=6;flag16=1; / 數(shù)字 6 鍵 else shuzi6=6;flag6=1; writedata(0 x36);break;case 0 x82:if(sixteen=1)shuzi17=7;flag17=1; / 數(shù)字 7 鍵 else shuzi7=7;flag7=1; writedata(0 x37);b
44、reak;case 0 x14:if(sixteen=1)shuzi18=8;flag18=1; / 數(shù)字 8 鍵 else shuzi8=8;flag8=1; writedata(0 x38);break;case0 x24:if(sixteen=1)shuzi19=9;flag19=1; / 數(shù)字 9 鍵else shuzi9=9;flag9=1;writedata(0 x39);break;case0 x44:writedata(0 x5e);pingfang=1;j=x;x=0;break; /顯示 鍵開方case0 x84:writedata(0 x7e);kaifang=1;j=x
45、;x=0;break; /顯示 鍵平方case 0 x18: m=4000;doswitch(keyscan()/ 按鍵進入 shift 換擋/+ 鍵case 0 x11:jia=1;k=0;j=1.00*(1.0*x+u);x=0;u=0;q=0;/ 將按下鍵值的整數(shù)部分與小數(shù)部分相加writedata(0 x2b);break;case 0 x21:jian=1;k=0; /- 鍵 j=1.00*(1.0*x+u);x=0;u=0;q=0; writedata(0 x2d);break;case 0 x41:chen=1;k=0; /* 鍵 j=1.00*(1.0*x+u);x=0;u=0
46、;q=0; writedata(0 x2a);break;case 0 x81:chu=1;k=0; /chu 鍵j=1.00*(1.0*x+u);x=0;u=0;q=0;writedata(0 x2f);break;case0 x12:lcd_clear();display(1,1, sin:);display(1,6,shift);display(4,6, );sinhan=1;j=0;x=0;break;/ 液晶顯示 sincase0 x22:lcd_clear();display(1,1, cos:);display(1,6,shift);display(4,6, );coshan=1
47、;j=0;x=0;break;/ 液晶顯示 coscase0 x42:lcd_clear();display(1,1,tan:);display(1,6,shift);display(4,6,);tanhan=1;j=0;x=0;break;/ 液晶顯示 tan求返 回 D);display(2,1,求返 回 D);display(2,1,求返 回 D);display(2,1,case0 x82:lcd_clear();display(1,1, 求log10:);display(1,6,shift);display(4,6,返回D);display(2,1,);loghan=1;j=0;x=
48、0;break;/ 液晶顯示 cotcase0 x14:writedata(0 x18);lcd_clear();display(1,1,轉(zhuǎn) 16 進制 :);display(1,6,shift);display(4,6,返回D);display(2,1,);ten=1;j=x;x=0;break; /顯示十轉(zhuǎn)十六鍵case0 x24:writedata(0 x19);lcd_clear();display(1,1,轉(zhuǎn)10 進制 :);display(1,6,shift);display(4,6,返回D);display(2,1,);sixteen=1;j=x;x=0;break; /顯示十六
49、轉(zhuǎn)十鍵case0 x44:if(sixteen=1)shuzi110=10;flag110=1;writedata(0 x41);break; / 字母 A 鍵case0 x84:if(sixteen=1)shuzi111=11;flag111=1;writedata(0 x42);break;/ 字母 B 鍵case 0 x18:writedata(0 x43);flag112=1;shuzi112=12;break; /顯示 C 鍵case 0 x28:writedata(0 x44);flag113=1;shuzi113=13;break; / 顯示 D 鍵 case 0 x48:wri
50、tedata(0 x45);flag114=1;shuzi114=14;break; /顯示 E 鍵case 0 x88:writedata(0 x46);flag115=1;shuzi115=15;break;/ 顯示 F 鍵while(m-); break;case 0 x28:writedata(0 x2e);q=1;break; /寫入小數(shù)點/ 按鍵 E 清屏,按鍵 D 返回主頁面case 0 x48:m=4000; do switch(keyscan() case 0 x48:u=0;i=0;k=0;u=0;o=0;t=0;c=0;h=0;g=0;q=0;bj=0;x=0;j=0;N
51、=0;xuan=0;qie=0;jia=0;jian=0;chen=0;chu=0;sixteen=0;ten =0;sinhan=0;coshan=0;tanhan=0;loghan=0;kaifang=0;pingfang=0; lcd_clear();display(1,1, 請 輸 入 :);display(4,6, 返 回 D);display(2,1, );goto start; / 返回主頁面鍵case 0 x28:u=0;i=0;k=0;u=0;o=0;t=0;c=0;h=0;g=0;q=0; bj=0;x=0;j=0;N=0;xuan=0;qie=0;jia=0;jian=0
52、;chen=0;chu=0;sixteen=0;ten =0;sinhan=0;coshan=0;tanhan=0;loghan=0;kaifang=0;pingfang=0;goto loop00; while(m-);break;case 0 x88: bj=1.00*(1.00*x+u);x=0;u=0;q=0;/bj 作用為再次寫入的數(shù),if(jia=1) / 加法運算結(jié)果 g=1; / 開啟小數(shù)點功能jia=0;c=(1000*(1.00*(j+bj);if(jian=1) / 減法運算結(jié)果 if(bjj)jian=0;c=(1000*(1.00*(bj-j);t=1;g=1;els
53、ejian=0;c=(1000*(1.00*(j-bj);g=1;if(chen=1) / 乘法運算結(jié)果 g=1; / 開啟小數(shù)點功能 chen=0; c=(1000*j*bj);if(chu=1) / 除 法 運 算 結(jié) 果 if(bj!=0)chu=0;c=(1000*j*1.0/(1.0*bj);g=1;elsedisplay(1,1,error!back); if(sinhan=1) 算結(jié)果sinhan=0;N=(int)1000*sin(h*PI/180);xuan=1;x=0;h=0; if(coshan=1) 數(shù)結(jié)果coshan=0;N=(int)1000*cos(h*PI/18
54、0);xuan=1;x=0;h=0; if(tanhan=1) 數(shù)結(jié)果tanhan=1;N=(int)1000*tan(h*PI/180);qie=1;x=0;h=0; if(loghan=1) 數(shù)結(jié)果/ 正弦函數(shù)運/ 進入余弦函/ 進入 正切函/ 進入余切函loghan=0;/ 正弦余弦函數(shù)標(biāo)N=(int)1000*log10(h);qie=1;x=0;h=0;if(xuan=1)志位確認(rèn)ge=N%10;shi=N/10%10;bai=N/100%10;writedata(0 x3d);/ 等號delay(1000);writecommand(0 x89);writedata(0 x30);
55、writedata(0 x2e);writedata(yuanmabai);if(shi!=0|bai!=0)writedata(yuanmashi);writedata(yuanmage);xuan=0;N=0;ge=0;shi=0;bai=0;if(pingfang=1) / 進入平方函數(shù)確認(rèn)N=1000*pow(o+h,2);pingfang=0;h=0;o=0;qie=1;x=0;k=0; if(kaifang=1) / 進入開方函數(shù)確認(rèn)N=1000*pow(h+o,0.5);kaifang=0;x=0;h=0;qie=1;o=0;k=0; if(qie=1) ge=N%10; / 正
56、切余切函數(shù)標(biāo)志位 確認(rèn)shi=N/10%10; bai=N/100%10;qian=N/1000%10; wan=N/10000%10; sw=N/ 100000%10; bw=N/ 1000000%10; qw=N/ 10000000%10;writedata(0 x3d);/ 等號 delay(1000); writecommand(0 x89);if(qw!=0) writedata(yuanmaqw); if(qw!=0|bw!=0) writedata(yuanmabw); if(qw!=0|bw!=0|sw!=0) writedata(yuanmasw); if(qw!=0|bw!=0|sw!=0|wan!=0) writedata(yuanmawan);if(qw!=0|bw!=0|sw!=0|wan!=0|qian!=0) writedata(yuanmaqian); elsewritedata(0 x30);writedata(0 x2e);if(qw!=
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年教師編制考試教育學(xué)基礎(chǔ)知識必會題庫完整版【答案】
- 2025年廈門市湖里生態(tài)環(huán)境局輔助崗位人員招聘考試筆試試題【答案】
- 2025年電子計步器實驗分析儀器項目發(fā)展計劃
- 湘藝版二年級下冊教案第四課 簫
- 2025年上半年公司網(wǎng)管述職報告范文
- 2025年陶瓷生產(chǎn)加工機械項目發(fā)展計劃
- 智慧城市發(fā)展中的版權(quán)問題及解決方案
- 教育創(chuàng)新設(shè)計思維與高等教育師資培養(yǎng)
- 教育心理學(xué)在智慧教室建設(shè)中的作用研究
- 智慧城市管理中的大數(shù)據(jù)分析應(yīng)用
- 【中班幼兒分享行為現(xiàn)狀及其培養(yǎng)策略研究(數(shù)據(jù)圖表論文)5000字】
- 速凍隧道安全操作規(guī)程
- (骨科)維生素D水平評估在骨科的應(yīng)用及研究新進展課件
- 煙草證遷移申請書范本
- 獅子王-中英文-劇本臺詞(全)
- 13G322-1~4《鋼筋混凝土過梁(2013年合訂本)》
- 商鋪租賃合同(有利于承租方)
- C語言開發(fā)基礎(chǔ)教程(Dev-C++)(第2版)PPT完整全套教學(xué)課件
- 寧波大學(xué)崗位設(shè)置管理實施辦法匯編-征求意見稿
- 外研版(2019)選擇性必修第三冊 Unit 1-6 課文知識點語法填空(含答案)
- 施耐德ATS48軟啟動器使用手冊
評論
0/150
提交評論