計算器是近代人發明的可以進行數字運算的機器。現代的電子計算器能進行數學運算的手持電子機器,擁有集成電路芯片,但結構比電腦簡單得多,可以說是第一代的電子計算機(電腦),且功能也較弱,但較為方便與廉價,可廣泛運用于商業交易中,是必備的辦公用品之?, 以下是為大家整理的關于黨費計算器5篇 , 供大家參考選擇。
黨費計算器5篇

【篇一】黨費計算器
單片機綜合實訓
實訓 (論文)說明書
題 目: 計 算 器
院 (系):
專 業:
學生姓名:
學 號:
指導教師:
2012年 6 月 20 日
摘 要
近年來隨著科技的飛速發展,單片機的應用正在不斷深入,同時帶動傳統控制檢測技術日益更新。在實時檢測和自動控制的單片機應用系統中,單片機往往作為一個核心部件來使用,僅單片機方面知識是不夠的,還應根據具體硬件結構軟硬件結合,加以完善。
本設計是一個實現八位加、減、乘、除的計算器,它的硬件主要由五部分組成,一個AT89S52單片機芯片,LCD1602液晶屏幕,一個4*4的鍵盤,可以加、減、乘、除運算,同時,在P3.2接入蜂鳴器通過軟件設計實現按鍵蜂鳴器響的功能。
關鍵詞:單片機;計算器;加減乘除
Abstract
In recent years, with the rapid development of science and technology, traditional control test technology is also in an increasingly update. In real time detection and automatic control of the single chip microcomputer application system, usually as a single chip microcomputer core components to use that only single chip microcomputer aspect knowledge is not enough, still need according to the specific hardware structure with hardware and software, to be perfect.
This design is a realistic eight of the addition, subtraction, multiplication, and division calculators, it hardware mainly by five parts, a AT89S52 SCM chip, two four of the anode a digital tube, a 4 * 4 keyboard, eight 1 K resistance do pull up resistors of P2 mouth, it can achieve the result of less than 65535 add, subtract, multiply and divide operation, at the same time, in the P3.2 access through software design realize buzzer calculation of 8 bits beyond alarm function.
Key words: Single chip microcomputer; Calculator; Eight; Add, subtract, multiply and divide
目 錄
引言 1
1 單片機概述 1
2 系統主要硬件介紹 1
2.1. AT89S52單片機介紹 1
2.2 AT89S52單片機特性 1
2.3 引腳功能與封裝 2
2.4 存儲器組織 4
2.5 液晶顯示 5
2.6 矩陣按鍵 6
2.7 蜂鳴器按鍵識別電路 7
3.硬件制作與調試 8
3.1 系統PCB板的設計 8
3.2 系統硬件調試 8
4.軟件及聯機調試 9
4.1 Keil調試與仿真 9
4.1.1 keil的使用方法 9
4.1.2.調試過程 10
5 實訓心得體會 10
謝 辭 12
參考文獻 13
附 錄 14
1.電路的ProtelPCB圖: 14
2.實現程序: 14
說起計算器,值得我們驕傲的是,最早的計算工具誕生在中國。中國古代最早采用的一種計算工具叫籌策,又被叫做算籌。這種算籌多用竹子制成,也有用木頭,獸骨充當材料的。約二百七十枚一束,放在布袋里可隨身攜帶。直到今天仍在使用的珠算盤,是中國古代計算工具領域中的另一項發明,明代時的珠算盤已經與現代的珠算盤幾乎相同。17世紀初,西方國家的計算工具有了較大的發展,英國數學家納皮爾發明的"納皮爾算籌",英國牧師奧卻德發明了圓柱型對數計算尺,這種計算尺不僅能做加減乘除、乘方、開方運算,甚至可以計算三角函數,指數函數和對數函數,這些計算工具不僅帶動了計算器的發展,也為現代計算器發展奠定了良好的基礎,成為現代社會應用廣泛的計算工具。
在使用電子計算器進行四則運算的時候,一般要用到數字鍵,四則運算鍵和清除數據鍵。除了這些按鍵,還有一些特殊鍵,可以使計算更加簡便迅速。
1 單片機概述單片機微型計算機是微型計算機的一個重要分支,也是頗具生命力的機種。單片機微型計算機簡稱單片機,特別適用于控制領域,故又稱為微控制器。
通常,單片機由單塊集成電路芯片構成,內部包含有計算機的基本功能部件:中央處理器、存儲器和I/O接口電路等。因此,單片機只需要和適當的軟件及外部設備相結合,便可成為一個單片機控制系統。
單片機經過1、2、3、3代的發展,目前單片機正朝著高性能和多品種方向發展,它們的CPU功能在增強,內部資源在增多,引角的多功能化,以及低電壓底功耗。
2 系統主要硬件介紹2.1. AT89S52單片機介紹AT89S52單片機是一種低功耗高性能的CMOS8位微控制器,內置8KB可在線編程閃存。該器件采用Atmel公司的高密度非易失性存儲技術生產,其指令與工業標準的80C51指令集兼容。片內程序存儲器允許重復在線編程,允許程序存儲器在系統內通過SPI串行口改寫或用同用的非易失性存儲器改寫。通過把通用的8位CPU與可在線下載的Flash集成在一個芯片上,AT89S52便成為一個高效的微型計算機。它的應用范圍廣,可用于解決復雜的控制問題,且成本較低。
2.2 AT89S52單片機特性AT89S52的主要特性如下:
(1)兼容MCS51產品
(2)8K字節可擦寫1000次的在線可編程ISP 閃存
(3)4.0V到5.5V的工作電源范圍
(4)全靜態工作:0Hz ~ 24MHz
(5)3級程序存儲器加密
(6)256字節內部RAM
(7)32條可編程I/O線
(8)3個16位定時器/計數器
(9)8個中斷源
(10)UART串行通道
(11)低功耗空閑方式和掉電方式
(12)通過中斷終止掉電方式
(13)看門狗定時器
(14)雙數據指針
(15)靈活的在線編程(字節和頁模式)
2.3 引腳功能與封裝按照功能,AT89S52的引腳可分為主電源、外接晶體振蕩或振蕩器、多功能I/O口、控制和復位等。其引腳框圖如圖1-1所示。
圖1-1 AT89S52的引腳圖
1.多功能I/O口
AT89S52共有四個8位的并行I/O口:P0、P1、P2、P3端口,對應的引腳分別是P0.0 ~ P0.7,P1.0 ~ P1.7,P2.0 ~ P2.7,P3.0 ~ P3.7,共32根I/O線。每根線可以單獨用作輸入或輸出。
①P0端口,該口是一個8位漏極開路的雙向I/O口。在作為輸出口時,每根引腳可以帶動8個TTL輸入負載。當把“1”寫入P0時,則它的引腳可用作高阻抗輸入。當對外部程序或數據存儲器進行存取時,P0可用作多路復用的低字節地址/數據總線,在該模式,P0口擁有內部上拉電阻。在對Flash存儲器進行編程時,P0用于接收代碼字節;在校驗時,則輸出代碼字節;此時需要外加上拉電阻。
②P1端口,該口是帶有內部上拉電阻的8位雙向I/O端口,P1口的輸出緩沖器可驅動(吸收或輸出電流方式)4個TTL輸入。對端口寫“1”時,通過內部的上拉電阻把端口拉到高電位,此時可用作輸入口。P1口作輸入口使用時,因為有內部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流。在對Flash編程和程序校驗時,P1口接收低8位地址。
另外,P1.0與P1.1可以配置成定時/計數器2的外部計數輸入端(P1.0/T2)與定時/計數器2的觸發輸入端(P1.0/T2EX),如表1-1所示。
端口引腳
復用功能
P1.0
T2(定時器/計算器2的外部輸入端)
P1.1
T2EX(定時器/計算器2的外部觸發端和雙向控制)
P1.5
MOSI(用于在線編程)
P1.6
MISO(用于在線編程)
P1.7
SCK(用于在線編程)
表1-1 P1口管腳復用功能
③ P2端口,該口是帶有內部上拉電阻的8位雙向I/O端口,P2口的輸出緩沖器可驅動(吸收或輸出電流方式)4個TTL輸入。對端口寫“1”時,通過內部的上拉電阻把端口拉到高電位,此時可用作輸入口。P2口作輸入口使用時,因為有內部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流。
在訪問外部程序存儲器或16位的外部數據存儲器(如執行MOVX? @DPTR指令)時,P2口送出高8位地址,在訪問8位地址的外部數據存儲器(如執行MOVX? @RI指令)時,P2口引腳上的內容(就是專用寄存器(SFR)區中P2寄存器的內容),在整個訪問期間不會改變。在對Flash編程和程序校驗期間,P2口也接收高位地址或一些控制信號。
④ P3端口,該口是帶有內部上拉電阻的8位雙向I/O端口,P3口的輸出緩沖器可驅動(吸收或輸出電流方式)4個TTL輸入。對端口寫“1”時,通過內部的上拉電阻把端口拉到高電位,此時可用作輸入口。P3口作輸入口使用時,因為有內部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流。
在AT89S52中,同樣P3口還用于一些復用功能,如表1-2所列。在對Flash編程和程序校驗期間,P3口還接收一些控制信號。
端口引腳
復用功能
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(外部數據存儲器寫選通)
P3.7
RD(外部數據存儲器讀選通)
表1-2 P3端口引腳與復用功能表
2. RST: 復位輸入端。在振蕩器運行時,在此腳上出現兩個機器周期的高電平將使其單片機復位。看門狗定時器(Watchdog)溢出后,該引腳會保持98個振蕩周期的高電平。在SFR AUXR(地址8EH)寄存器中的DISRTO位可以用于屏蔽這種功能。DISRTO位的默認狀態,是復位高電平輸出功能使能。
3. ALE/PROG: 地址鎖存允許信號。在存取外部存儲器時,這個輸出信號用于鎖存低字節地址。在對Flash存儲器編程時,這條引腳用于輸入編程脈沖PROG。一般情況下,ALE是振蕩器頻率的6分頻信號,可用于外部定時或時鐘。但是,在對外部數據存儲器每次存取中,會跳過一個ALE脈沖。在需要時,可以把地址8EH中的SFR寄存器的0位置為“1”,從而屏蔽ALE的工作;而只有在MOVX或MOVC指令執行時ALE才被激活。在單片機處于外部執行方式時,對ALE屏蔽位置“1”并不起作用。
4. PSEN: 程序存儲器允許信號。它用于讀外部程序存儲器。當AT89S52在執行來自外部存儲器的指令時,每一個機器周期PSEN被激活2次。在對外部數據存儲器的每次存取中,PSEN的2次激活會被跳過。
5. EA/Vpp:外部存取允許信號。為了確保單片機從地址為0000H~FFFFH的外部程序存儲器中讀取代碼,故要把EA接到GND端,即地端。但是,如果鎖定位1被編程,則EA在復位時被鎖存。當執行內部程序時,EA應接到Vcc。在對Flash存儲器編程時,這條引腳接收12V編程電壓Vpp。
6. XTAL1: 振蕩器的反相放大器輸入,內部時鐘工作電路的輸入。
7. XTAL2: 振蕩器的反相放大器輸出。
2.4 存儲器組織包括程序存儲器和數據存儲器。
程序和數據存儲器分為不同的邏輯空間,使得可用8位地址來訪問數據存儲器。這樣可提高8位CPU的存儲和處理速度。盡管如此,也可通過數據指針(DPTR)寄存器來產生16位的數據存儲器地址。
程序存儲器只可讀不可寫,用于存放編好的程序和表格常數。89系列單片機可尋址的程序存儲器總空間為64KB。外部程序存儲器的讀選通脈沖為PSEN(程序存儲允許信號)。
數據存儲器在物理上和邏輯上都分為兩個地址空間:一個內部和一個外部數據存儲器空間。外部數據存儲器的尋址空間可達64KB。訪問外部數據存儲器時,CPU發出讀和寫的信號--RD和WR。
將RD和PSEN兩個信號加到一個與門的輸入端,然后用與門的輸出作為外部程序/數據存儲器的讀選通脈沖。這樣就可將外部程序存儲器空間和外部數據存儲器空間合并在一起。
2.5 液晶顯示液晶顯示器以其微功耗、體積小、顯示內容豐富、超薄輕巧的諸多優點,在袖珍式儀表和低功耗應用系統中得到越來越廣泛的應用。
這里介紹的字符型液晶模塊是一種用5x7點陣圖形來顯示字符的液晶顯示器,根據顯示的容量可以分為1行16個字、2行16個字、2行20個字等等,這里以常用的2行16個字的1602液晶模塊來介紹它的編程方法。1602采用標準的16腳接口,其中:
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。
第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。
第5腳:RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以寫入指令或者顯示地址,當RS為低電平RW為高電平時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數據。
第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。
第7~14腳:D0~D7為8位雙向數據線。
第15~16腳:空腳。
2.6 矩陣按鍵鍵盤是單片機系統中最常用的人機對話輸入設備,用戶通過鍵盤向單片機輸入數據或指令。鍵盤控制程序需完成的任務有:監測是否有鍵按下,有鍵按下時,在無硬件去抖的動電路時,應用軟件延時方法消除按鍵抖動影響;當有多個鍵同時按下時,只處理一個按鍵,不管一次按鍵持續多長時間,僅執行一次按鍵功能程序。其電路連接如圖1-3所示。
圖1-3矩陣按鍵
矩陣按鍵掃描程序是一種節省IO口的方法,按鍵數目越多節省IO口就越可觀,思路:先判斷某一列(行)是否有按鍵按下,再判斷該行(列)是那一只鍵按下。但是,在程序的寫法上,采用了最簡單的方法,使得程序效率最高。本程序中,如果檢測到某鍵按下了,就不再檢測其它的按鍵,這完全能滿足絕大多數需要,又能節省大量的CPU時間。
矩陣鍵盤又稱為行列式鍵盤,它是用4條I/O線作為行線,4條I/O線作為列線組成的鍵盤,在行和列線的交叉點上,設置一個按鍵。這樣鍵盤按鍵的個數是4X4個。這種行列式的鍵盤有效的提高了I/O口的利用率。矩陣鍵盤的程序編程對我來說比較難,但是先前的課程試驗中,老師已經教會了我,首先讀取鍵盤的狀態,得到按鍵的特征編碼。先從P1口的低四位輸出低電平,高四位輸出高電平,從P1口的高四位讀取鍵盤狀態,再從P1口的高四位輸出低電平?,低四位輸出高電平,從P1的低四位讀取鍵盤狀態,將兩次讀取的結果組合起來就可以得到當前按鍵的特征編碼,使用上述方法我們得到16個按鍵的特征編碼。假設從P1口的低四位輸出低電平,即P1.0-P1.3為輸出口。高四位輸出高電平,即P1.4-P1.7為輸入口。讀取P1口高四位的狀態為“1101”,其值為“0DH”。再從P1口的低四位輸出高電平,即P1.0-P1.3為輸入口。低四位輸出低電平,即P1.0-P1.3為輸出口。讀取P1口高四位的狀態為“1110”,其值為“0E0H”。將兩次讀出的P0口的狀態值進行邏輯或運算就得到其按鍵的編碼為“EDH”。以同樣的方法得到其他15個按鍵的特征編碼。
本鍵盤掃描程序的優點在于:不用專門的按鍵延時程序,提高了CPU效率,也不用中斷來掃描鍵盤,節省了硬件資源。另外,本鍵盤掃描程序,每次掃描占用CPU時最短,不論有鍵按下或者無鍵按下都可以在很短的時間完成一次掃描。
2.7 蜂鳴器按鍵識別電路電路主要是用于按鍵按下的時候鳴聲,具體電路連接如圖1-4所示。
圖1-4報警電路
流程框圖
圖1-5 流程框圖
3.硬件制作與調試3.1 系統PCB板的設計PCB即印刷電路板,是電子電路的承載體。在現代電子產品中,幾乎都要使用PCB。PCB板的設計是電路設計的最后一個環節,也是對原理電路的再設計。因此PCB板的設計是理論設計到實際應用一個十分重要的內容。
印制電路板(PCB)是電子產品中電路元件和器件的支撐件.它提供電路元件和器件之間的電氣連接。PCB設計的好壞對抗干擾能力影響很大.因此,在進行PCB設計時.必須遵守印制電路板設計原則和抗干擾措施的一般原則,并應符合抗干擾設計的要求。本次設計采用Altium公司PROTEL系列設計完成SCH到PCB的設計,并且手工完成電路焊接以及整機的裝配。
3.2 系統硬件調試本系統的硬件調試分為以下階段進行調試:
(1)電路板線路調試
電路板的線路是由于設計錯誤和加工過程中的工藝性錯誤所造成的。這類錯誤包括:錯線、開路、短路等幾種,其中短路是最常見的故障。檢測的方法:用數字電壓表,即用二極管檔,檢測各個線路是否導通良好。
(2)器件調試元器件失效的原因有兩個方面:一是器件本身已損壞或性能不符合要求;二是由于組裝錯誤造成的元器件失效,如電解電容、二極管的極性錯誤,集成塊安裝方向錯誤等。數碼管的檢測,用數字電壓表的二極管檔,用紅表筆放在二極管的共陽端,黑表筆一次放在段選端,觀察該段是否亮,亮著OK,依次用此方法檢測八位數碼管。按鍵的檢測,還是用數字萬用表的二極管檔,判斷出按鍵沒有按下則不導通,按下著導通,就可判斷出按鍵是良好可以使用。
(3)電路安裝后可靠性調試電路安裝后的調試:1.依然是數碼管的調試,還是用數字萬用表的二極管檔,紅表筆放在數碼管驅動三極管的集電極端,黑表筆依次放在單片機P0.0—P0.7觀察各個段是否亮,按此方法檢測其他數碼管安裝后與單片機的鏈接導通情況。2.矩陣鍵盤安裝后的調試:由于矩陣鍵盤的行與單片機的P1.0—P1.3口鏈接,列于單片機的P1.4—P1.7口鏈接,還是用數字萬用表的二極管檔,不分紅表筆和黑表筆,一個表筆放在單片機的P1.0口,另一只表筆放在P1.4口,在第一行第一列第一個按鍵沒有按下時不導通,但按鍵按下時則導通。依次類推檢測其他按鍵的情況。
4.軟件及聯機調試 4.1 Keil調試與仿真4.1.1 keil的使用方法
KEIL C51標準 C編譯器是眾多單片機應用開發的優秀軟件之一,它集編輯、編譯、仿真于一體,支持匯編、PLM 語言和 C 語言的程序設計。
1. 啟動 KEIL C51 進入編輯界面 建立一個新工程:單擊Project菜單,在彈出的下拉菜單中選中 New Project選項。選擇保存路徑,輸入工程文件名。
2. 工程文件保存完畢之后,提示選擇單片機的型號。KEIL支持近乎所有51核的單片機。單擊 File菜單,選擇New。
3.文件保存:使用匯編編寫,文件后綴名為.asm或 a51。完成后,單擊“保存”按鈕保存文件。
4.在Source Group 上單擊右鍵,找到剛才保存的源文件 ,然后添加ADD
5. 在編輯完成之后,需要進行程序的編譯。點開Project選項,單擊 Build target;或是利用快捷鍵 F7。
6. 在程序調試的時候,點擊Debug 選項,選擇 Start/Stop Debug Session。
7. 以上是使用 KEIL建立一個完整工程文件的過程。下載到單片機之中,則需要 生 成 HEX 文 件 。 單 擊 “Project” 菜 單 , 再 在 下 拉 菜 單 中 單 擊出現選項對話框。在選項對話框的“Output”頁面對話框中,單擊“Create HEX File” 選項,使程序編譯后產生 HEX 代碼,供下載器軟件使用。
4.1.2.調試過程
在Debug調試下,如有錯誤時,下面窗口將有提示說明錯誤個數和具體哪一行有錯,還有對于錯誤的說明,大多數格式使用不當,此時在那一行前后仔細檢查,要考慮格式,語法等基本性錯誤。
即使調試沒錯時,程序也不是代表完全正確,需要結合硬件來確定改程序的功能是否完全實現了。
5 實訓心得體會課程實訓是培養學生綜合運用所學知識,發現、提出、分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際工作能力的具體訓練和考察過程。作為電子信息工程專業的學生來說掌握單片機的開發技術是十分重要的。
這次我選的實訓課題是設計并制作一個計算器。對于我們這些工科學生來說,這是一次考驗。怎么才能找到課堂所學與實際應用的最佳結合點?怎樣讓自己的業余更接近專業?怎樣讓自己的計劃更具有序性,而不會忙無一用?這都是我們所要考慮和努力的。這次課程設計我學到很多很多的東西,學會了怎么樣去制定計劃,怎么樣去實現這個計劃,并掌握了在執行過程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識,掌握了一種系統的研究方法,可以進行一些簡單的編程。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。
然而我們也有許多不足之處。在軟件編程時一定要考慮周到,要有耐心要仔細。還要與硬件相聯系起來,脫離了實物一切都是假的。在理論上往往是可行的,然而當把程序燒入芯片,進行調試時就會遇到這樣那樣的的問題。最糟的是當我們辛苦把實物完成,而那電路有完全沒反應,與我們的設想完全不同,而我們又不知道是軟件問題還是硬件問題時,就要靜下心來,一步一步來,從硬件的的芯片開始檢查是否短路等等,而軟件又要不斷地進行仿真調試。然而我們遇到的問題除了焊接時可能導致的短路外,還應電壓不穩定或過大而導致芯片被燒毀,總而言之,我們還是缺少對芯片和各種器件的了解,無法準確的判斷出什么樣的現象將是由原因引起的。
在做板的過程中,也發現自己確實存在不少的問題。在電路焊接好后,加入程序進行調試時發現數碼管不顯示,此時我要檢查電路時我才發現焊接時電路線的排版不是很好,線一多就無法判斷到底哪里有錯,簡直讓人眼花,結果我選擇了重新做板,于是重新買齊器件進行再次焊接,這次我吸取了上次教訓,采用排針排線的方法方便與檢查和調試,但是由于在轉印的時候,板子被卡了一下,導致板子有輕微的燒焦,之后腐蝕估計是溶液濃度不是很合理,加上布的線比較細,導致腐蝕完之后有幾根導線連接都不是很好,就用焊錫直接連上,板子看上去很不美觀。這讓我認識到,布線的時候必須要考慮得更全面。板子重新做出來之后,可結果仍不理想,數碼管全顯,好像程序根本沒運行,然而由于之前進行仿真一切正常,所以唯一認為的是電路有問題,我花了一天時間檢查是否把那里短路了,或接了不該接的,甚至重新把可能出問題的元器件都重新拆下來再焊,數碼管的顯示還是不正常,最后還是不成功,于是又認真的核對了一下封裝和原理圖,終于發現了問題所在,原來是重新布線的時候,用的是最開始的圖(后面做板的圖是又有過改動的)忘記了改動,只好又采用跳線的方式重新修改過一遍,還好最后顯示正常了。
從原理圖開始直至硬件的完成以及軟件的不斷修改和調試,這個過程雖然很繁雜,但是卻讓我學到了很多東西。首先,在動手能力上得到了很大的提高,再者把自己學到的東西能夠在實際中得到應用,更是由于自己性格上的焦躁,浪費了不少的時間和精力,在板子出現問題之后,雖然有想過去解決,但是并沒有很耐心的查找而是選擇重新做板,尤其是在做出了第三塊板之后仍然有問題存在,我又選擇了檢查最初的那塊板,在我壓抑著自己的焦躁耐著性子一點一點的檢查,終于發現這塊板子的問題居然是由于一個微小的斷點導致的,一連上就顯示正常了,這讓我明白,一個冷靜無浮躁的頭腦是多美重要。通過這次實訓,不僅讓我學到了知識,更學會了如何為人處世。
首先,感謝信息與通信學院為我們電子信息工程學生提供了一次實訓學習的平臺。在硬件方面,學院提供了很好的實訓平臺,并且為學生免費提供大量需使用的電子元件,為能夠成功完成這次實訓創造了很好的條件。還要感謝老師,老師們輪流值班,為學生提供幫助,讓同學們很感動,在電路出現問題的時候,老師們像平常一樣耐心的講解電路并指導解決,讓我們受益匪淺。同時,還需要感激在大家都忙的不可開交的時候,仍然無私的幫助我的同學,朋友們,感謝你們在這次實訓中給我的各種幫助。
參考文獻
[1] 王恩榮,MCS-51單片機應用技術實訓指導,化學工業出版社,2004
[2] 李雅軒, 單片機實訓教程, 北京航空航天大學出版社,2006
[3] 束慧?陳衛兵,單片機技術與應用基礎,人民郵電出版社,2010
[4] 李朝青,單片機學習指導,北京航空航天大學出版社,2005
[5] 唐俊濯,單機原理與運用,冶金工業出版社,2003
[6] 吳國經. 單片機應用技術,中國電力出版社,2004
[7] 張毅剛,MCS-51單片機應用設計,哈工大出版社,2004
[8] 馬忠梅,單片機C語言應用程序設計,北京航空航天大學出版社,2003
附 錄1.電路的ProtelPCB圖:2.實現程序:
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
//*********1602的引腳*************************
sbit lcden=P2^2;
sbit rw=P2^1;
sbit rs=P2^0;
//**********蜂鳴器的引腳**********************
sbit fengmingqi=P2^7;
//**********定義變量*************************
char KEY; //獲取按鍵值
char expression[16]; //存儲表達式
float a,b; //計算的兩個數
uchar dizhi; //對應1602的地址
uchar count;
//*********延時1毫秒******************
void delay_ms()
{
uchar x,y;
for(x=10;x>0;x--)
for(y=100;y>0;y--);
}
//********延時m微秒**********
void delay(uchar m)
{
uchar n;
for(n=0;n="0")&(KEY
【篇二】黨費計算器
用計算器計算
說說自己,你有什么愛好?
生:喜歡小提琴,打羽毛球,將來想做醫生。
生:喜歡看書,長大想當世界首富。
師:老師感到非常高興,也有一點點遺憾。高興的是你們一個個興趣那么廣泛,遺憾的是什么?你們猜猜?
師:想想我是什么老師?喜歡什么?(數學)
師:那今天我們一起來交流交流數學,好嗎?
師:先來看一段資料,再說一說你發現了什么?
(計算的發展:算籌、算盤、計算器、電子計算機)
生1:這里告訴我們以前人們是用算籌計算,……現在是用計算機來計算。
師:這些都是計算的工具。(出示計算器)
師:指導顯示器、鍵盤(有什么?運算符號鍵、數字鍵、開關鍵),有各種各樣的鍵。
師:老師再問第二個問題:你會不會用計算器?(會)那老師不教了,你們自己來試一試。練習紙上的1、2、3題。
練一練:
(1)太平洋的面積是17968萬平方千米,大西洋的面積是9336萬平方千米,它們的面積一共是( )萬平方千米。
(2)世界第一高峰――珠穆朗瑪峰,海拔8844米。
世界第二高峰――喬戈里峰,海拔8611米。
世界第三高峰――干城章嘉峰,海拔8586米。
世界第四高峰――洛子峰,海拔8516米。
珠穆朗瑪峰比洛子峰高( )米。
(3)流經常熟的望虞河全長61千米,長江全長大約是它的104倍,長江長全約( )千米。
學生計算,交流結果。
師:第一題:27304,你是怎樣計算出這個答案的?
第二題:328,怎樣計算的?
第三題:6344米,說說思路。
師:請檢查一下自己的答案,全部正確的對老師說一聲。
有沒有計算出錯的?做錯的同學多不多?有沒有誰敢和計算器來比一比,賽一賽?(一下都不敢)老師敢,不相信嗎?現場點一位老師(王老師)
比賽:333+667+1000-500=
師:1500,生還沒算好。
師:敢不敢和計算器比賽?(敢的起立)6位同學
比賽:3192÷57=
師:生算出來了。起立的6個同學沒有算出來。
師:剛才為什么王老師算得這么快?
生:因為上面那個題目是可以口算的?剛才的第二題也可以
師:現在給你第3次選擇,你有什么想法?(給我們看題目)
出示:(9876+13488-7764)÷520×0=
(有學生用計算器,有學生沒用)
師:送給大家一句話:人不能被機器所限制,而應該比機器更聰明!
我們來賽一賽:
9870÷21-66=( )
3500-102×32=( )
出現兩種答案:236、108736
師:怎么回事?為什么會有這兩種答案?請4人小組估計一下,這個答案大概會是多少?
生:236,是先算乘法,再算減法。108736是先算減法,再算乘法的。
師:請說說估計的方法。
生:100×30=3000,3500-3000=500。得數不會比500大。
師:計算器有聰明的和不聰明的,有的計算器會按順序計算,而有的不會。怎么辦呢?有沒有什么好方法?
生:先算102×32,記一記,再用3500去減。
師:發明計算器的叔叔阿姨,為我們設置了兩個鍵:M+,MR,我們來學一學。
先按下102×32=3264,記下M+,表示記起得數。再按3500,-,把剛才我們記下的按MR,表示把剛才的得數提取出來,按=,是236。這個M+是累計,如果另一個不用計算的話,要按MC,表示清除。
師:剛才,我們介紹了一個小竅門,學到現在,我們感覺用計算器有上竅門的。我們要正確地使用計算器。看,它能不能幫我們解決這樣的問題?
9999999×9999998
生嘗試。
生1:出現的答案可能不是不明確答案。
生2:上面的數字裝不下了。(E)
師:E,是錯誤,看到這個標記,計算器不能解決這個問題,怎么辦?同桌討論。
生:可以用電子計算機。(師:非常好)
生:筆算。(列個豎立計算)
師:這題可能嗎?只要算得細心一點,還是可以的。
在數學里,除了我們剛才的方法,還可以“化大為小找規律”, 是怎么回事呢?想不想學一學?
(1)下面哪個算式和題目比較“像”?99×98 999×998???? 9999×9998
4人小組討論。
(2)你能按順序,再寫出兩個和題目“很像”的題目。
生交流:99×98=為什么?
9999999×9999998,都是七位數,有沒有寫出跟它很像的算式?
生:99999×99998= 999999×999998=
師:先算這三個,找找乘積有沒有什么規律?
學生計算,交流。
9702、997002、99970002。
師:有沒有發現乘積的規律?(先不說,能不能寫出剛才這道題的積?)試試看。
生1:99999970000002
生2:9999999700000002
師:矛盾的焦點在6個9,還是7個9?
師:指導看板書,逐題分析:幾個9?幾個0?幾個2?
師:你能試一試寫出這三個算式的乘積?
9999×9992= 999999×99997 999999×99994
師:好多同學沒有用計算器,直接寫得數,寫出來后,用計算器算一算,對不對?
99910008 9999600003 999993000006
師:發現了什么?正確的告訴我,給自己一點掌聲。
師:你會編幾個這樣的習題嗎?可以留到課后,考考你的爸爸媽媽。
師:今天我們一起學習的是什么?你最想說的一句話是什么?
生:你給我們的生活帶來了很多方便。
生:他既有好的方面,也有不夠完善的地方。
生:發現計算器的人很聰明。
【篇三】黨費計算器
虛歲年齡是中國在習慣上常用的年齡計算方法,按出生后所經歷的日歷年頭計算,即生下來就算1歲,以后每過一次新年便增加1歲。一般按農歷新年算,也有按公歷算的。例如,12月末出生的嬰兒,出生后就算1歲,過了公歷1月1日或當地農歷新年又算1歲。這樣,嬰兒出生才幾天,已算虛歲2歲了。這種虛歲計算方法是不科學的。今天為大家精心準備了年齡計算器 年齡計算器查詢,希望對大家有所幫助!
年齡計算器 年齡計算器查詢
網址
輸入生日日期即可進行計算
年齡計算器 年齡計算器查詢
虛歲年齡
中國在習慣上常用的年齡計算方法,按出生后所經歷的日歷年頭計算,即生下來就算1歲,以后每過一次新年便增加1歲。一般按農歷新年算,也有按公歷算的。例如,12月末出生的嬰兒,出生后就算1歲,過了公歷1月1日或當地農歷新年又算1歲。這樣,嬰兒出生才幾天,已算虛歲2歲了。這種虛歲計算方法是不科學的。
周歲年齡
又稱實足年齡,指從出生到計算時為止,共經歷的周年數或生日數。例如,1990年7月1日零時進行人口普查登記,一個1989年12月15日出生的嬰兒,按虛歲計算是2歲,實際剛剛6個多月,還未過一次生日,按周歲計算應為不滿1周歲,即0歲。周歲年齡比虛歲年齡常常小1~2歲,它能正確反映人們的實際生存年歲,是人口統計中最常用的年齡計算方法。
確切年齡
指從出生之日起到計算之日止所經歷的天數。它比周歲年齡更為精確地反映人們實際生存的時間,但由于其統計匯總時較為繁瑣,故人口統計中使用甚少。在實際生活中,人們除對不滿1周歲的嬰兒,特別是不滿1個月的新生兒常常按月日計算外,一般不按日計算確切年齡。
年齡計算器 年齡計算器查詢
網址
輸入生日日期即可進行計算
【篇四】黨費計算器
房貸計算器|貸款利息計算器【商業計劃書】
貸款利息計算器。大家創業網今天為大家精心準備了貸款利息計算器,希望對大家有所幫助!
貸款利息計算器
《貸款計算器》是一款根據貸款情況計算還款情況的計算器。貸款計算器針對商業貸款、公積金貸款,提供等額本金、等額本息兩種方式計算月供,提前還款信息。
特別針對還款過程中,銀行利息發生變化的情況,提供新利息次月生效、次年生效兩種計算方式繼續新的月供等數據。此外提供以往利率查詢。
貸款計算器一般有三類:
一、商業銀行提供的貸款計算器
該類計算器特點是依托銀行網站平臺,可信度較高;缺點是計算條件設置簡單,以理論計算為主,不考慮實際。比如,日利率的計算公式一般是:日利率 =年利率/ 360 ;而銀行提供的計算器一般是按365計算的,和實際有一定差異。
二、房產網站提供的貸款計算器
該類貸款計算器一般是以銀行網站貸款計算器為基礎,稍改或不改,缺點和上條類似。
三、淘豬客貸款計算器
該類計算器是完全定制參數式的計算器,計算結果和實際完全一致,給您的貸款決策提供了更真實、更有力的數據支持!
貸款利息計算器
銀行貸款利率計算器基本是一樣的,每家專業的貸款服務平臺都有的,不過我經常用融易信息的,你可以試試
貸款利息計算器
貸款利息計算的標準公式:
當月貸款利息=上月剩余本金*貸款月利率;
當月已還本金=當月還款額-當月貸款利息;
上月剩余本金=貸款總額-累計已還本金;
那么,到底貸款利息怎么算呢?下面我們可以根據一個實際的例子加以說明:
假如,借款人A到XX銀行貸款10萬元,貸款期限是3年,按照2013年最新的貸款利率執行,每月的貸款利率是0.5125%(目前3年期的貸款年利率是6.15%)。那么,
第一個月貸款利息=100000*0.5125%=512.5;
第一個月已還本金=第一個月還款額(取決于還款方式)-521.5;
第一個月剩余本金=100000-(第一個月還款額-521.5);
第二個月貸款利息={100000-(第一個月還款額-521.5)}*0.5125%......
以后每月的貸款利息計算以此類推,直到還款完畢為止(貸款到期)。
【篇五】黨費計算器
內蒙古工業大學課程設計(論文)任務書
課程名稱: 面向對象的程序設計 學院: 理學院 班級: 信計08-1
學生姓名: 郝凡剛 學號: 200820905056 指導教師: 侯睿
一、題目
計算器的設計
二、目的與意義
面向對象程序設計課程設計可以培養學生綜合運用所學面向對象程序設計知識和技能分析與解決實際問題的能力,以及嚴肅認真的科學態度和嚴謹求實的工作作風。
三、要求(包括原始數據、技術參數、設計要求、圖紙量、工作量要求等)
● 采用面向對象程序設計語言C++進行程序開發
● 選用一種C++語言的開發環境設計界面及程序
● 在開發環境下,進行程序的運行及調試
四、工作內容、進度安排
主要內容
使用C++程序設計語言及其開發環境實現簡單的計算器,完成程序的編寫和調試。
工作進度安排
第一天:熟悉課程設計題目及具體要求,認識所要解決的問題,基本確定選擇的開發環境。
第二天到第三天:拿出解決問題的初步方案,根據所選的題目,確定其解決方式及步驟。
第四天到第十天:確定界面結構,完成軟件的整體框架,編寫程序。
第十一天到第十五天:撰寫課程設計報告。
五、主要參考文獻
[1] 嚴華峰. Visual C++課程設計案例精編. 北京:中國水利水電出版社
[2] 張宏軍,黨留群,趙天巨.Visual C++ 6.0編程案例精解.北京:電子工業出版社
[3] 鄭阿奇,丁有和.Visual C++教程.北京:機械工業出版社
[4] 楊國林,趙永紅.C++語言程序設計.內蒙古:內蒙古大學出版社,2002
審核意見
系(教研室)主任(簽字)
指導教師下達時間 2011 年 12月 19日
指導教師簽字:_______________
摘 要
本課程設計將實現一個簡單計算器。其類似于Windows附件中自帶的計算器。這個計算器能實現包括四則運算等功能,并且實現了高級的科學計算功能,而且具有簡潔大方的圖文外觀。它的設計按軟件工程的方法進行,系統具有良好的界面、必要的交互信息和較好的健壯性使用人員能快捷簡單地進行操作。即時準確地獲得需要的計算的結果,充分降低了數字計算的難度和節約了時間,對人們的生活有一定的幫助。在課程設計中,系統開發平臺為Win7,程序設計設計語言采用Visual C++,在程序設計中,采用了結構化與面向對象兩種解決問題的方法。
關鍵詞 : 程序設計;計算器;C++;
目錄
引言 1
第一章 概述 2
1.1 Visual C++簡介 2
1.2 C++介紹 3
1.3 系統目標 3
1.4 開發環境 3
第二章 需求分析 4
2.1系統的基本要求 4
2.2 系統的用法說明 4
2.3設計思路 4
第三章 C++語言程序設計 6
3.1設計流程圖 6
3.2程序源代碼: 6
3.3程序功能示例: 16
總結 19
參考文獻 20
引言在現代社會中,計算器的應用已經日趨廣泛,人們在生活和學習中經常需要使用到計算器,它的出現大大減少了人們在計算方面的工作量,可以說它在人們生活和學習中是不可缺少的。要實現計算功能,可以用VC++的知識編寫程序來解決此問題。該計算器大大的降低了數字計算的難度及提高了計算的準確度和精確度。該計算器使用非常簡單和方便,對廣大中小學生的學習有巨大幫助作用,也對在職人員的工作有點幫助作用。
要實現計算功能,可以用VC++的知識編寫程序來解決此問題。該計算器大大的降低了數字計算的難度及提高了計算的準確度和精確度。該計算器使用非常簡單和方便,對廣大中小學生的學習有巨大幫助作用,也對在職人員的工作有點幫助作用。
本課程設計主要在運算過程中,如果通過計算器來完成,就會減少計算量,該程序可以在簡單計算器鍵面下進行簡單運算。
第一章 概述 1.1 Visual C++簡介Visual C++是Microsoft C/C++ 7.0之后推出的新一代程序開發工具,它不僅繼承C++的特性,同時具備可視化程序語言(Visual Programming Language)及程序產生器的概念。既然是面向對象語言,當然會提供系統基礎類給程序員再使用(Reuse)。在Visual C++ 中,延襲Microsoft C/C++7.0的作法,將原有的SDK函數重新封裝在適當的類中,構造了“基礎類函數庫(Microsoft Foundation Class Library,簡稱MFC)”,它提供了許多現成的框架對象,可供在使用Visual C++設計應用程序是使用。此外,還提供“ClassWizard”與“AppWizard”可幫助構造基本的程序框架,從軟件再使用的技術觀點而言,已由SDK函數庫方式經過面向對象程序設計方式進展到自動產生模板相關類程序代碼方式(Framework)。
面向對象的程序設計是一種新型的程序設計方法,計算機環境本身就是一個對象的集合體,對象彼此之間通過消息相互作用,面向對象的程序設計提高了程序的模塊化和可維護性。面向對象的程序設計有幾個特點及優點。首先,由于對象包含屬性和方法,因此支持模塊化程序設計,而模塊化程序設計支持開發的便利性及代碼的可維護性。
Visual C++ 6.0是Microsoft公司推出的功能最強大、最復雜的語言產品之一,它是目前為止在Windows環境下進行大型軟件開發的首選。其具有如下特點:
(1)Visual C+ + 的語法符合ANSL C+ + 標準,并在此基礎上針對Windows操作系統增加了一些語句;
(2)集成了MFC(Microsoft Foundation Class)類庫,MFC封裝了Windows API函數和消息,使程序員可以使用MFC高效率地開發各種應用程序;
(3)提供了MFC AppWizard,可方便地生成程序框架;
(4)提供了基于MFC的ClassWizard,通過它可以輕松地完成對各種MFC類的使用與維護。
Visual C++ 6.0作為Visual Studio家族中的一員,是Microsoft公司以C++語言為基礎開發的可視化集成開發工具,與其他編程語言Visual Basic 6.0、Visual ForPro等一起,成為廣大程序員喜愛的開發平臺。
1.2 C++介紹C++語言的主要特點表現在兩個方面,一是全面兼容C語言,二是支持面向對象的程序設計方法。
(1) C++是一個更好的C,它保持了C語言的優點,大多數的C程序代碼略作修改或不作修改就可在C++的集成環境下調試和運行。這對于繼承和開發當前已在廣泛的軟件是非常重要的,可以節省大量的人力和物力。
(2) C++是一種面向對象的程序設計語言它使得程序的各個模塊的獨立性更強,程序的可讀性和可移植性更強,程序代碼的結構更加合理,程序的擴充性更強。這對于設計、編制和調試一些大型的軟件尤為重要。
(3) C++集成環境不僅支持C++程序的編譯和調試,而且也支持C程序的編譯和調試。通常,C++程序環境 約定:當源程序文件的擴展名為.c時,則為C程序;而當源程序文件的擴展名為.cpp時,則為C++程序。
(4) C++語句非常簡練,對語法限制比較寬松,因此C++語法非常靈活。其優點是給用戶編程帶來書寫上的方便。其缺點是由于編譯時對語法限制比較寬松,許多邏輯上的錯誤不容易發現,給用戶編程增加了難度。
1.3 系統目標我們在學習生活中,常會遇到一些繁雜的數值運算,這時候我們就必須用到科學計算器,所以便著手開發了這個計算器程序,以便用于自己的學習工作。要計算功能有以下幾個方面:加法,減法,乘法,除法。
1.4 開發環境Windows操作系統,VC++ 6.0
第二章 需求分析2.1系統的基本要求1.算術運算功能。能夠實現+、-、*、/、求余、累加、階乘等運算。
2.通過界面鍵盤控制字符和數字的輸入。
3.退出功能:可以在計算完成后退出程序。
2.2 系統的用法說明1.加法:輸入1按回車,然后輸入兩個數按回車,可以得出結果。
2.減法:輸入2按回車,輸入減數回車再輸入被減數回車,可以得出結果。
3.乘法: 輸入3按回車,輸入兩個數后分別按回車,可以得出結果。
4.除法: 輸入4按回車,輸入兩個數分別按回車,可以得出結果。
5.求于:輸入5按回車,輸入兩個數分別按回車,可以得出余數。
6.階乘:輸入6按回車,輸入一個數按回車,可以得出這個數的階乘。
7累加:輸入7按回車,輸入一個數按回車,可以得出這個數的累加。
8.退出: 當程序運行完成后,無需再計算時輸入8即可退出程序。
2.3設計思路如上圖是整個計算器的流程圖,打開計算器程序,輸入數據,調用輸入數據子程序。子程序開始時m_num為零。按下數字按鈕后,判斷并對其進行相關處理,然后在判斷是否有小數點,處理后輸出結果。
回到總流程圖中,輸完第一個操作數后,若按下雙目運算符,則把m_num存入計算器內部,按下輸入第二個操作數并算出結果。若按下的是單目運算符,則直接對其處理得出結果。若按下清零,則m_num等于0.在運算中還要判斷運算是否合法,以及結果是否超出顯示范圍,以做出相關提示,按下清零。算出后顯示結果。因為本計算器的功能不是太完善所以在做完每一步運算后要及時進行清零操作,以防給后續的操作帶來不遍。
第三章 C++語言程序設計3.1設計流程圖圖3.1
3.2程序源代碼:#include "stdio.h"
#include
#include
#include
/***************************KK***************************
功能:計算兩個整數的和
參數:
參數1:num1
類型:int
說明:第一個加數
參數2:num2
類型:int
說明:另一個加數
返回值:result
類型:int
說明:兩個加數的和
*******************************************************/
int add(int num1,int num2)
{
int result;
result=num1+num2;
return result;
}
/**************************KK***************************
功能:計算兩個整數的差
參數:
參數1:num1
類型:int
說明:被減數
參數2:num2
類型:int
說明:減數
返回值:result
類型:int
說明:兩個數的差
*******************************************************/
int sub(int num1,int num2)
{
int result;
result=num1-num2;
return result;
}
/******************************KK***********************
功能:計算兩個整數的積
參數:
參數1:num1
類型:int
說明:第一個乘數
參數2:num2
類型:int
說明:另一個乘數
返回值:result
類型:int
說明:兩個數的積
*******************************************************/
int multi(int num1,int num2)
{
int result;
result=num1*num2;
return result;
}
/******************************k************************
功能:計算兩個整數的商
參數:
參數1:num1
類型:int
說明:被除數
參數2:num2
類型:int
說明:除數
返回值:result
類型:int
說明:兩個數的商
*******************************************************/
int divide(int num1,int num2)
{
int result=0;
if(num2==0)
printf("錯誤, 除數不能為 0 \n");
else
result=num1/num2;
return result;
}
/******************************k************************
功能:計算兩個整數的余數
參數:
參數1:num1
類型:int
說明:第一個數
參數2:num2
類型:int
說明:另一個數
返回值:result
類型:int
說明:兩個數的余數
*******************************************************/
int arith_compliment(int num1,int num2)
{
int result;
if(num2==0)
printf("error, 除數不能為 0 \n");
else
result=num1%num2;
return result;
}
/******************************k************************
功能:計算某個整數的階乘
參數:
參數1:n
類型:int
說明:一個整數
返回值:result
類型:int
說明:n的階乘
*******************************************************/
long int factorial(int n)
{
long int result=1;
int i;
for(i=1;i




