版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、0基于 51 單片機(jī)的計(jì)算器設(shè)計(jì)2015 年 5 月 1 日1目錄目錄摘 要.3一、 前言.41) 主要的問(wèn)題及目標(biāo):.42) 針對(duì)上述目標(biāo),做出以下的設(shè)計(jì):.43) 系統(tǒng)設(shè)計(jì)依據(jù):.4二、 系統(tǒng)方案設(shè)計(jì).41. 方案一.52. 方案二.5三、 理論分析與計(jì)算.6四、 系統(tǒng)電路設(shè)計(jì).61. 顯示模塊.62. 輸入模塊.73. 控制模塊.84. 元器件的選擇.95. 特殊器件的簡(jiǎn)介.96. 各單元模塊的連接.9五、 系統(tǒng)軟件設(shè)計(jì).101. 設(shè)計(jì)原理.102. 程序結(jié)構(gòu)框圖.103. 程序流程框圖.11六、 系統(tǒng)測(cè)試.131 測(cè)試方法.142 計(jì)算器功能測(cè)試.143 測(cè)試結(jié)果分析.14七、 結(jié)束語(yǔ)
2、.1521. 心得感悟.152. 改進(jìn)的設(shè)想.15八、 附錄.151. 系統(tǒng)設(shè)計(jì)圖.152. 設(shè)計(jì)程序.15摘 要電子計(jì)算器是日常生活中常用的電子計(jì)算儀器,他廣泛應(yīng)用于超市、大中型商場(chǎng)、大小企業(yè)與學(xué)校中。具有精度高。體積小、應(yīng)用范圍廣泛、易于操作等優(yōu)點(diǎn)。本作品以 MCS-51 系列中的 AT89C51 單片機(jī)為核心,能夠?qū)崿F(xiàn)單步加、減、乘、除運(yùn)算。該系統(tǒng)通過(guò)檢測(cè)矩陣鍵盤(pán)掃描,判斷是否按鍵,實(shí)現(xiàn)對(duì) 4*4 鍵盤(pán)掃描進(jìn)行實(shí)時(shí)的按鍵檢測(cè),并把檢測(cè)數(shù)據(jù)存儲(chǔ)下來(lái)。經(jīng)數(shù)據(jù)轉(zhuǎn)換把數(shù)值送入lcd1602 液晶屏顯示。整個(gè)計(jì)算器系統(tǒng)的工作過(guò)程為:首先存儲(chǔ)單元初始化,顯示初始值和鍵盤(pán)掃描,判斷按鍵位置,查表得出按
3、鍵值,單片機(jī)則對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存與相應(yīng)處理轉(zhuǎn)換,之后送入 lcd1602 顯示。整個(gè)系統(tǒng)可分為三個(gè)主要功能模塊:功能模塊一,實(shí)時(shí)鍵盤(pán)掃描;功能模塊二,數(shù)據(jù)轉(zhuǎn)換為了數(shù)碼管顯示;功能模塊三,lcd1602 顯示。能實(shí)現(xiàn) 6 位或 6 位以?xún)?nèi)的精確運(yùn)算,若輸出數(shù)據(jù)超過(guò) 6 位則會(huì)以科學(xué)計(jì)數(shù)法顯示。關(guān)鍵詞:關(guān)鍵詞:AT89C51 單片機(jī);計(jì)算器;加減乘除;矩陣鍵盤(pán);液晶屏31、前言本設(shè)計(jì)是基于 51 系列單片機(jī)來(lái)進(jìn)行的數(shù)字計(jì)算器系統(tǒng)設(shè)計(jì),可以完成計(jì)算器的鍵盤(pán)輸入,進(jìn)行加、減、乘、除基本四則運(yùn)算,并在 LCD 上顯示相應(yīng)的結(jié)果;設(shè)計(jì)電路采用 STC89C51 單片機(jī)為主要控制電路,顯示采用1602LCD 顯
4、示;軟件方面使用 C 語(yǔ)言編程。最后用 PROSE99 畫(huà) PCB,焊接萬(wàn)用板,進(jìn)行硬件調(diào)試。1) 主要的問(wèn)題及目標(biāo):鍵盤(pán)輸入數(shù)值顯示能實(shí)現(xiàn)加、減、乘、除四則運(yùn)算;可計(jì)算小數(shù),負(fù)數(shù);當(dāng)計(jì)算器執(zhí)行過(guò)程中有錯(cuò)誤時(shí),會(huì)在液晶屏上做出相應(yīng)的提示。當(dāng)除數(shù)為 0 時(shí),程序運(yùn)算出錯(cuò),液晶屏?xí)@示+INF。2) 針對(duì)上述目標(biāo),做出以下的設(shè)計(jì):以 STC89C51 位主控芯片,P0 口連接 1602 液晶屏,P1 口連接 4*4 矩陣鍵盤(pán)。將所有輸入數(shù)據(jù)已浮點(diǎn)型進(jìn)行運(yùn)算,故最大輸入數(shù)據(jù)為 16 位。為了更好的顯示效果使用采用 1602 液晶屏作為顯示模塊。由于按鍵包含數(shù)字鍵“09”與“+”“-”“*”“/”“.
5、”“=”這16 個(gè)按鍵。故以 4*4 矩陣鍵盤(pán)作為輸入模塊。以 3 節(jié)串聯(lián)的 5 號(hào)電池作為電源。3) 系統(tǒng)設(shè)計(jì)依據(jù):實(shí)用性可靠性美觀性42、系統(tǒng)方案設(shè)計(jì)1. 方案一顯示模塊采用數(shù)碼管,數(shù)值只能顯示一行,且無(wú)法顯示“+”“*”“/”“=”等符號(hào)。使用效果欠佳。電源模塊采用USB,電壓為5.0V,符合單片機(jī)的要求。但使計(jì)算器不方便使用,必須通過(guò)USB通電,實(shí)用性不強(qiáng)。功能設(shè)計(jì)中添加復(fù)位鍵,可以使電路恢復(fù)到起始狀態(tài),確保微機(jī)系統(tǒng)中穩(wěn)定可靠,避免計(jì)算器出現(xiàn)“死機(jī)”“程序走飛”等現(xiàn)象。但添加復(fù)位鍵會(huì)使計(jì)算器顯得繁瑣。雙精度型(double ),占用64位的存儲(chǔ)空間。在操作值很大的數(shù)字時(shí),雙精度型是最好
6、的選擇。2. 方案二顯示模塊:數(shù)碼管電源模塊:USB功能設(shè)計(jì):有復(fù)位鍵數(shù)據(jù)類(lèi)型:雙精度浮點(diǎn)型電源模塊:USB顯示模塊:1602lcd電源模塊:電池盒功能設(shè)計(jì):上電復(fù)位數(shù)據(jù)類(lèi)型:?jiǎn)尉雀↑c(diǎn)型方案一方案二5以1602lcd作為顯示器,可顯示雙行數(shù)據(jù),還可以顯示多種運(yùn)算符號(hào)。實(shí)用性強(qiáng),便于計(jì)算器的升級(jí)。將獨(dú)立電源盒作為電源,以3節(jié)5號(hào)電池串聯(lián),電壓可達(dá)4.5V,可以使單片機(jī)正常工作。并且易于攜帶,給使用者帶來(lái)很大便利。采用上電復(fù)位,將復(fù)位電路與電源開(kāi)關(guān)結(jié)合。既可以確保微機(jī)系統(tǒng)中穩(wěn)定可靠的運(yùn)行,又使計(jì)算器更為精簡(jiǎn)。 單精度浮點(diǎn)型(float )專(zhuān)指占用32位存儲(chǔ)空間的單精度值。單精度在一些處理器上比雙
7、精度更快而且只占用雙精度一半的空間,但是當(dāng)值很大或很小的時(shí)候,它將變得不精確。當(dāng)你需要小數(shù)部分并且對(duì)精度的要求不高時(shí),單精度浮點(diǎn)型的變量是有用的。結(jié)合上述考慮論證,小組采用方案二作為計(jì)算器系統(tǒng)的設(shè)計(jì)方案。結(jié)合上述考慮論證,小組采用方案二作為計(jì)算器系統(tǒng)的設(shè)計(jì)方案。3、理論分析與計(jì)算本作品為了要實(shí)現(xiàn)鍵盤(pán)輸入,液晶顯示屏輸出,加、減、乘、除計(jì)算,上電復(fù)位等功能。小組做出以下的分析與計(jì)算:將4*4矩陣鍵盤(pán)連接到單片機(jī)的P1口上,液晶顯示屏連接到P0口上。并在軟件中用矩陣鍵盤(pán)掃描程序?qū)ζ鋵?shí)時(shí)檢測(cè),將鍵盤(pán)輸入的數(shù)據(jù)顯示到液晶屏上,并通過(guò)運(yùn)算程序計(jì)算,最終將計(jì)算結(jié)果輸出到液晶屏上。將輸入與輸出數(shù)據(jù)以單精度浮
8、點(diǎn)型定義,以%g或%f顯示輸出數(shù)據(jù),可顯示精確數(shù)字或以科學(xué)計(jì)數(shù)法表示。64、系統(tǒng)電路設(shè)計(jì)1. 顯示模塊液晶顯示器(LCD)的主要原理是一電流刺激液晶分子產(chǎn)生點(diǎn)、線、面并配合背部燈管構(gòu)成畫(huà)面。本系統(tǒng)采用的1602液晶為5V電壓驅(qū)動(dòng),帶背光,可顯示兩行,每行16個(gè)字符,能顯示漢字,內(nèi)置128個(gè)字符的ASCII字符集字庫(kù),只有并行接口,無(wú)串行接口。2. 輸入模塊4*4矩陣鍵盤(pán)將16個(gè)按鍵排成4行4列,第一行將每個(gè)按鍵的一端連在一起構(gòu)成行線,第一列將每個(gè)按鍵的另一端連接在一起構(gòu)成列線,共有4行4列8根線,將這八根線接到單片機(jī)的8個(gè)I/O口上,通過(guò)程序掃描鍵盤(pán)就可檢測(cè)16個(gè)鍵。73. 控制模塊 AT89
9、C51 是一種帶 4K 字節(jié) FLASH 存儲(chǔ)器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能 CMOS 8 位微處理器,俗稱(chēng)單片機(jī)。AT89C51 是一種帶 2K 字節(jié)閃存可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除 1000 次。該器件采用 ATMEL 高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的 MCS-51 指令集和輸出管腳相兼容。由于將多功能 8 位 CPU 和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL 的 AT89C51 是一種高效微控制器,AT89C51 是它的一種精簡(jiǎn)版本。AT
10、89C51 單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。84. 元器件的選擇1602LCD、4*4矩陣鍵盤(pán)、10千歐排阻、自鎖開(kāi)關(guān)、20pF電容、12MHZ晶振、103千歐電位器。5. 特殊器件的簡(jiǎn)介自鎖開(kāi)關(guān)是指開(kāi)關(guān)自帶機(jī)械鎖定功能,按下去,松手后按鈕是不會(huì)完全跳起來(lái)的,處于鎖定狀態(tài),需要再按一次,才解鎖完全跳起來(lái)。按下后接通,彈起來(lái)后斷開(kāi)。6. 各單元模塊的連接P0 單片機(jī)P2P1P31602LCD鍵盤(pán)晶振9如圖所示:液晶接PO口,鍵盤(pán)接P1口。液晶使能端P2.5,液晶數(shù)據(jù)命令選擇端P2.6,液晶讀寫(xiě)選擇端P2.7。電源正負(fù)極分別接到VCC和GND。5、系統(tǒng)軟件設(shè)計(jì)1. 設(shè)計(jì)原
11、理以keilV4.0設(shè)計(jì)。采用大循環(huán)嵌套的設(shè)計(jì)思想。程序主要由“液晶顯示模塊”“矩陣鍵盤(pán)掃描模塊”“運(yùn)算模塊”構(gòu)成。大循環(huán)一直進(jìn)行,是計(jì)算器一直處于工作狀態(tài)。不停地調(diào)用鍵盤(pán)掃描函數(shù),將鍵盤(pán)輸入的數(shù)據(jù)送給液晶顯示與運(yùn)算模塊,經(jīng)運(yùn)算模塊計(jì)算出結(jié)果后,只需調(diào)用液晶顯示的子函數(shù)就可將答案顯示到液晶屏上。2. 程序結(jié)構(gòu)框圖10定義變量,便于后面程序的使用。位定義:液晶使能端P2.5,液晶數(shù)據(jù)命令選擇端P2.6,液晶讀寫(xiě)選擇端P2.7。初始化:液晶開(kāi)顯示,清屏。矩陣鍵盤(pán)掃描程序:包含軟件去逗,在大循環(huán)中不斷調(diào)用鍵盤(pán)掃描程序當(dāng)檢測(cè)到有鍵按下后,如果是有效值就進(jìn)行處理,否則繼續(xù)掃描鍵盤(pán)。3. 程序流程框圖矩陣
12、鍵盤(pán)掃描程序1602 顯示程序運(yùn)算模塊主函數(shù)初始化大循環(huán)處理錯(cuò)誤調(diào)用頭文件變量定義位定義11否是否是否是開(kāi)始初始化鍵盤(pán)掃描有鍵按下?返回值為 09?計(jì)算第一次輸入的數(shù)值鍵盤(pán)掃描有按鍵按下?12是否是否返回值為09?計(jì)算第二次輸入的數(shù)值計(jì)算運(yùn)算結(jié)果有按鍵按下?LCD 顯示136、系統(tǒng)測(cè)試1測(cè)試方法將計(jì)算器斷電,把萬(wàn)用表調(diào)到蜂鳴器檔上,把萬(wàn)用表兩表筆放在待測(cè)的兩個(gè)端子上,若短路蜂鳴器就會(huì)響。經(jīng)測(cè)得開(kāi)關(guān)處電路存在短路,經(jīng)修復(fù)后電路焊接正常。2計(jì)算器功能測(cè)試加法測(cè)試:減法測(cè)試:乘法測(cè)試:除法測(cè)試:錯(cuò)誤處理:3測(cè)試結(jié)果分析經(jīng)測(cè)試,各項(xiàng)功能均已達(dá)成。對(duì)于一般的整形運(yùn)算,計(jì)算器能準(zhǔn)確無(wú)誤的計(jì)算出來(lái)。由于使用
13、浮點(diǎn)型數(shù)據(jù),計(jì)算器只能進(jìn)行67位以?xún)?nèi)的精確運(yùn)算。147、結(jié)束語(yǔ)1. 心得感悟經(jīng)過(guò)兩個(gè)星期的設(shè)計(jì)與制作,本小組完成了基于51單片機(jī)的計(jì)算器的設(shè)計(jì)。期間我們遇到許多困難和問(wèn)題都一一解決,最終完全達(dá)到了預(yù)期的目標(biāo),體會(huì)到團(tuán)體合作與成功的喜悅。我感到只有親手實(shí)踐才能更深刻,更全面的學(xué)好知識(shí),并且要在設(shè)計(jì)制作中多加入自己的想法,力求創(chuàng)新而不要模仿前人做過(guò)的作品。在設(shè)計(jì)的每一小步都要盡自己最大努力做到最好,這樣才能做出出色的作品。2. 改進(jìn)的設(shè)想1)使計(jì)算器能完成多步混合運(yùn)算的功能。2)添加一個(gè)功能鍵,當(dāng)按下功能鍵后改變矩陣鍵盤(pán)的鍵值。將第四列改為平方,開(kāi)根號(hào),求模,求余。再次按下此鍵后第四列改回加,減,
14、乘,除。并設(shè)計(jì)一個(gè)led燈來(lái)顯示鍵值是否被改變。8、附錄1. 系統(tǒng)設(shè)計(jì)圖2. 設(shè)計(jì)程序#include#include#include15#define uchar unsigned char #define uint unsigned int#define check_busysbit rs = P27;sbit rw = P26;sbit en = P25;void delay(int z)int x,y; for (x=z;x0;x-) for(y=110;y0;y-);/*判忙函數(shù)*/ bit LCD_check_busy()/當(dāng)LCD“忙”時(shí),LCD的DATA.7位輸出為高電平信號(hào),
15、當(dāng)LCD“不忙”時(shí),LCD的DATA.7位輸出為低電平信號(hào) P0= 0 xFF;/為便于檢測(cè)16 rs=0;/rs=0,rw=1,en=1 忙 rw=1;/ void busy(void) P1=0 xff; RS=0; RW=1; E=1; while(P1&0 x80)=0 x80); E=0; en=0; _nop_(); en=1; return (bit)(P0 & 0 x80); / else /*lcd1602判忙函數(shù) bit LCD_Check_Busy(void) bit result;/修改了判忙函數(shù) DataPort= 0 xFF; RS=0; RW=1;
16、 EN=1; _nop_(); 17 result=(bit)(DataPort & 0 x80); EN=0; return result;*/ return 0; /*寫(xiě)入命令函數(shù)*/ void write_com(uchar com) while(LCD_check_busy(); /忙則等待 rs=0; rw=0; en=1; P0= com; _nop_(); en=0;18 /*寫(xiě)入數(shù)據(jù)函數(shù)*/ void write_dat(uchar dat) while(LCD_check_busy(); /忙則等待 rs=1; rw=0; en=1; P0= dat; _nop_()
17、; en=0; /*寫(xiě)入字符函數(shù)*/void LCD_write_char(uchar x,uchar y,uchar dat) if (y = 0) write_com(0 x80 + x); 19 else write_com(0 xC0 + x); write_dat( dat); /*寫(xiě)入字符串函數(shù)*/? void write_string(uchar x,uchar y,uchar *s) while (*s) LCD_write_char(x,y,*s); s+; x+; 20/*初始化函數(shù)*/ void LCD_init() write_com(0 x38); /*顯示模式設(shè)置*
18、/ delay(5); write_com(0 x06);/*顯示光標(biāo)移動(dòng)設(shè)置*/ delay(5); write_com(0 x0C); /*顯示開(kāi)及光標(biāo)設(shè)置*/ write_com(0 x01); /*顯示清屏*/ /*按鍵掃描函數(shù),返回掃描鍵值*/uchar keyscan() /鍵盤(pán)掃描函數(shù),使用行列反轉(zhuǎn)掃描法 unsigned char cord_h,cord_l;/行列值中間變量 P1=0 x0f; /行線輸出全為0 cord_h=P1&0 x0f; /讀入列線值21 if(cord_h!=0 x0f) /先檢測(cè)有無(wú)按鍵按下 delay(10); /去抖 if(P1&
19、;0 x0f)!=0 x0f) cord_h=P1&0 x0f; /讀入列線值 P1=cord_h|0 xf0; /輸出當(dāng)前列線值 cord_l=P1&0 xf0; /讀入行線值 while(P1&0 xf0)!=0 xf0);/等待松開(kāi)并輸出 return(cord_h+cord_l);/鍵盤(pán)最后組合碼值 return(0 xff); /返回該值unsigned char keypro() switch(keyscan() 22 case 0 x7e:return +;break; case 0 x7d:return -;break; case 0 x7b:retur
20、n x;break; case 0 x77:return /;break; case 0 xbe:return 3;break; case 0 xbd:return 6;break; case 0 xbb:return 9;break; case 0 xb7:return =;break; case 0 xde:return 2;break; case 0 xdd:return 5;break; case 0 xdb:return 8;break; case 0 xd7:return 0;break; case 0 xee:return 1;break; case 0 xed:return 4
21、;break; case 0 xeb:return 7;break; case 0 xe7:return .;break; default:return 0 xff;break; 23/*主函數(shù)*/void main() unsigned char num,i,sign; unsigned char temp16; /最大輸入16個(gè) bit firstflag; float a=0,b=0; unsigned char s; LCD_init(); /初始化液晶屏 delay(10);/延時(shí)用于穩(wěn)定,可以去掉 write_com(0 x01); /清屏 while (1) /主循環(huán) num=keypro(); /掃描鍵盤(pán) if(num!=0 xff) /如果掃描是按鍵有效值則進(jìn)行處理 24 if(i=0) /輸入是第一個(gè)字符的時(shí)候需要把該行清空,方便觀看 write_com(0 x01); if(+=num)| (i=16) | (-=num) | (x=num)| (/=num) | (=num)/輸入數(shù)字最大值16,輸入符號(hào)表示輸入結(jié)束 i=0; /計(jì)數(shù)器復(fù)位 if(firstflag=0) /如果是輸入的第一個(gè)數(shù)據(jù),賦值
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電氣火災(zāi)》課件
- 《研究生培養(yǎng)與管理》課件
- 《服務(wù)行業(yè)的戴爾》課件
- 廣東省梅州市五華縣華城鎮(zhèn)初級(jí)中學(xué)-主題班會(huì)-防性侵【課件】
- 單位管理制度集合大合集【人事管理篇】
- 單位管理制度集粹匯編【人力資源管理篇】十篇
- 單位管理制度匯編大合集【人力資源管理】
- 單位管理制度合并匯編人事管理十篇
- 單位管理制度分享匯編【職工管理篇】
- 高中語(yǔ)文常見(jiàn)的病句類(lèi)型及其辨析
- 2023年北京海淀七年級(jí)上學(xué)期期末英語(yǔ)試卷(含答案)
- 急救、生命支持類(lèi)醫(yī)學(xué)裝備調(diào)配制度與流程
- 河南省駐馬店市重點(diǎn)中學(xué)2023-2024學(xué)年九年級(jí)上學(xué)期12月月考語(yǔ)文試題(無(wú)答案)
- 江蘇省無(wú)錫市2022-2023學(xué)年上學(xué)期初中學(xué)業(yè)水平調(diào)研測(cè)試九年級(jí)英語(yǔ)期末試題
- 超聲內(nèi)鏡穿刺護(hù)理課件
- 國(guó)家開(kāi)放大學(xué)電大考試《心理學(xué)》課程形成性考核冊(cè)試題及答案(1-4)最全
- 四川省成都市泡桐樹(shù)小學(xué)小學(xué)數(shù)學(xué)五年級(jí)下冊(cè)期末試卷(培優(yōu)篇)
- 教練技術(shù)工具之:平衡輪課件
- 全國(guó)各省市縣統(tǒng)計(jì)表-
- 國(guó)家開(kāi)放大學(xué)電大本科《管理案例分析》2023年期末試題及答案(試卷號(hào):1304)
- 醋酸加尼瑞克注射液
評(píng)論
0/150
提交評(píng)論