虛擬儀器基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第1頁
虛擬儀器基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第2頁
虛擬儀器基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第3頁
虛擬儀器基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第4頁
虛擬儀器基于單片機(jī)的簡易計(jì)算器設(shè)計(jì)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

虛擬儀器課程設(shè)計(jì)報(bào)告作品名稱:基于51單片機(jī)的簡易計(jì)算器設(shè)計(jì)學(xué)校:南陽師范學(xué)院成員簡介:設(shè)計(jì)任務(wù):本次實(shí)驗(yàn)是要以51系列單片機(jī)為核心實(shí)現(xiàn)一個(gè)簡易計(jì)算器,它的結(jié)構(gòu)簡單,外部主要由4*4矩陣鍵盤和一個(gè)液晶顯示屏構(gòu)成,內(nèi)部由一塊STC90C51單片機(jī)構(gòu)成,通過軟件編程可實(shí)現(xiàn)簡單加、減、乘、除、清除結(jié)果。實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì),具體設(shè)計(jì)如下:1、采用6位顯示,最大顯示值為“999999”,設(shè)計(jì)16個(gè)按鍵的矩陣鍵盤,按鍵包括‘0~9’、‘+’、‘-’、‘*’、‘/’、‘=’、‘C’。2、加減法做四字節(jié)運(yùn)算;乘法做雙字節(jié)運(yùn)算;除法被除數(shù)為四字節(jié),除數(shù)為兩字節(jié)。3、當(dāng)運(yùn)算結(jié)果超出顯示范圍時(shí),顯示ERROR!。4、上述運(yùn)算輸入值均為整數(shù),當(dāng)結(jié)果帶有小數(shù)時(shí),可以采用四舍五入方式處理,也可以帶小數(shù)顯示。方案論證:經(jīng)分析,計(jì)算器電路包括三個(gè)部分:顯示電路、、4*4鍵掃描電路、單片機(jī)微控制電路。具體如下:1)LCD顯示電路LCD1602作為一個(gè)成熟的產(chǎn)品,使用簡單,模式固定,便于移植到各種類型的程序,但是初學(xué)者往往要注意結(jié)合LCD本身的時(shí)序圖來完善初始化程序。又以其微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的諸多優(yōu)點(diǎn),故采用LCD.2)4*4鍵盤掃描電路(中斷式,掃描式,反轉(zhuǎn)式)用戶設(shè)計(jì)行列鍵盤接口,一般常采用3種方法讀取鍵值。一種是中斷式,外兩種是掃描法和反轉(zhuǎn)法。

掃描法:

對(duì)鍵盤上的某一行送低電平,其他行及列全為高電平,然后讀取列值,檢查各列線點(diǎn)評(píng)的變化,如果某列線電平為低電平,就列交叉點(diǎn)處的按鍵被按下,采用延時(shí)去抖動(dòng)。

⒊)

單片機(jī)微控制電路

微控制電路就是以AT89C51為核心的控制核心,主要注意晶振電路的接法和復(fù)位電路的接法。程序流程圖:程序代碼:#include"reg51.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器typedefunsignedintu16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義typedefunsignedcharu8;//矩陣鍵盤定義#defineGPIO_KEYP1u8KeyValue; //用來存放讀取到的鍵值//LED燈定義sbitLED=P3^6;//74LS138定義sbitCS2=P2^6;sbitCS1=P2^7;intNumber1=0;//計(jì)算的第一個(gè)數(shù)字intNumber2=0;//計(jì)算的第二個(gè)數(shù)字intResult=0;//結(jié)果u8calculationflag=0;//計(jì)算標(biāo)志位0表示未按加減1表示加2表示減u8resultflag=0;//結(jié)算標(biāo)志位0表示未按確認(rèn)1表示按了確認(rèn)unsignedcharcodetable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管段顯示口數(shù)據(jù)/********************************************************************************函數(shù)名:Timer0Init*函數(shù)功能 :定時(shí)器0初始化*輸入:無*輸出:無*******************************************************************************/voidTimer0Init(){ TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動(dòng)。 TH0=(65535-1000)/256; //給定時(shí)器賦初值,定時(shí)1ms TL0=(65535-1000)%256; ET0=1;//打開定時(shí)器0中斷允許 EA=1;//打開總中斷 TR0=0;//關(guān)閉定時(shí)器}/********************************************************************************函數(shù)名:delay*函數(shù)功能 :延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us*******************************************************************************/voiddelay(u16i){ while(i--);}/********************************************************************************函數(shù)名:KeyDown*函數(shù)功能 :檢測有按鍵按下并讀取鍵值*******************************************************************************/voidKeyDown(void){chara=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)//讀取按鍵是否按下{delay(1000);//延時(shí)10ms進(jìn)行消抖if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下{//測試列給四列按鍵接到單片機(jī)的引腳為高電平,如果哪一列檢測出來是低電平,說明該列有按鍵按下GPIO_KEY=0X0F;switch(GPIO_KEY){ case(0X07): KeyValue=1;break; case(0X0b): KeyValue=2;break; case(0X0d):KeyValue=3;break; case(0X0e): KeyValue=4;break;}//測試行給四行按鍵接到單片機(jī)的引腳為高電平,如果哪一行檢測出來是低電平,說明該行有按鍵按下GPIO_KEY=0XF0;switch(GPIO_KEY){ case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0):KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; }while((a<50)&&(GPIO_KEY!=0xf0)) //檢測按鍵松手檢測{delay(1000);a++;}}}}/********************************************************************************函數(shù)名:SegDisplay()*函數(shù)功能 :數(shù)碼管顯示*輸入:無*輸出:無*******************************************************************************/voidSegDisplay(){//顯示計(jì)算的數(shù)if(resultflag==0){//顯示第一個(gè)數(shù)if(calculationflag==0) {CS2=0;CS1=0; P0=table[Number1/1000]; delay(10); P0=0x00;CS2=0;CS1=1; P0=table[Number1%1000/100]; delay(10); P0=0x00;CS2=1;CS1=0; P0=table[Number1%100/10]; delay(10); P0=0x00;CS2=1;CS1=1; P0=table[Number1%10]; delay(10); P0=0x00; }//顯示第二個(gè)數(shù) elseif(calculationflag>=1) {CS2=0;CS1=0; P0=table[Number2/1000]; delay(10); P0=0x00;CS2=0;CS1=1; P0=table[Number2%1000/100]; delay(10); P0=0x00;CS2=1;CS1=0; P0=table[Number2%100/10]; delay(10); P0=0x00;CS2=1;CS1=1; P0=table[Number2%10]; delay(10); P0=0x00; }}//顯示計(jì)算結(jié)果elseif(resultflag==1){if(Result>=0) {CS2=0;CS1=0; P0=table[Result/1000]; delay(10); P0=0x00;CS2=0;CS1=1; P0=table[Result%1000/100]; delay(10); P0=0x00;CS2=1;CS1=0; P0=table[Result%100/10]; delay(10); P0=0x00;CS2=1;CS1=1; P0=table[Result%10]; delay(10); P0=0x00; } elseif(Result<0) {CS2=0;CS1=0; P0=0x40;//顯示'-'號(hào) delay(10); P0=0x00;CS2=0;CS1=1; P0=table[(-Result)%1000/100]; delay(10); P0=0x00;CS2=1;CS1=0; P0=table[(-Result)%100/10]; delay(10); P0=0x00;CS2=1;CS1=1; P0=table[(-Result)%10]; delay(10); P0=0x00; }}}/********************************************************************************函數(shù)名:main*函數(shù)功能 :主函數(shù)*輸入:無*輸出 :無*******************************************************************************/voidmain(){Timer0Init();LED=1;P2=0Xff;while(1){KeyDown(); //清空if(KeyValue==15){LED=1;TR0=0;Number1=0;Number2=0;calculationflag=0;Result=0;resultflag=0;//按鍵值是1~16這里讓按鍵值=17是為了防止明明沒按按鍵卻一直進(jìn)入這個(gè)判斷KeyValue=17;} //輸入數(shù)字if(KeyValue>=1&&KeyValue<=10){resultflag=0;if(calculationflag==0){Number1=Number1*10+(KeyValue-1);}elseif(calculationflag>=1){Number2=Number2*10+(KeyValue-1);}//按鍵值是1~16這里讓按鍵值=17是為了防止明明沒按按鍵卻一直進(jìn)入這個(gè)判斷KeyValue=17;} //加號(hào)if(KeyValue==13){ //計(jì)算一次結(jié)果后直接再按加號(hào) if(resultflag==1) Number1=Result; resultflag=0;calculationflag=1;//按鍵值是1~16這里讓按鍵值=17是為了防止明明沒按按鍵卻一直進(jìn)入這個(gè)判斷KeyValue=17;} //減號(hào)if(KeyValue==14){ //計(jì)算一次結(jié)果后直接再按減號(hào) if(resultflag==1) Number1=Result; resultflag=0;calculationflag=2;//按鍵值是1~16這里讓按鍵值=17是為了防止明明沒按按鍵卻一直進(jìn)入這個(gè)判斷KeyValue=17;} //結(jié)算if(KeyValue==16){resultflag=1; if(calculationflag==1)Result=Number1+Number2; elseif(calculationflag==2) Result=Number1-Number2; if(Result>=9999) { TR0=1; Result=Result%10000; } elseif(Result<=-999) { TR0=1; Result

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論