版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
虛擬儀器課程設(shè)計(jì)報(bào)告作品名稱:基于51單片機(jī)的簡(jiǎn)易計(jì)算器設(shè)計(jì)學(xué)校:南陽師范學(xué)院成員簡(jiǎn)介:設(shè)計(jì)任務(wù):本次實(shí)驗(yàn)是要以51系列單片機(jī)為核心實(shí)現(xiàn)一個(gè)簡(jiǎn)易計(jì)算器,它的結(jié)構(gòu)簡(jiǎn)單,外部主要由4*4矩陣鍵盤和一個(gè)液晶顯示屏構(gòu)成,內(nèi)部由一塊STC90C51單片機(jī)構(gòu)成,通過軟件編程可實(shí)現(xiàn)簡(jiǎ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)品,使用簡(jiǎ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ù)功能 :檢測(cè)有按鍵按下并讀取鍵值*******************************************************************************/voidKeyDown(void){chara=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)//讀取按鍵是否按下{delay(1000);//延時(shí)10ms進(jìn)行消抖if(GPIO_KEY!=0x0f)//再次檢測(cè)鍵盤是否按下{//測(cè)試列給四列按鍵接到單片機(jī)的引腳為高電平,如果哪一列檢測(cè)出來是低電平,說明該列有按鍵按下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;}//測(cè)試行給四行按鍵接到單片機(jī)的引腳為高電平,如果哪一行檢測(cè)出來是低電平,說明該行有按鍵按下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)) //檢測(cè)按鍵松手檢測(cè){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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《化學(xué)動(dòng)力學(xué)的任務(wù)》課件
- 共青科技職業(yè)學(xué)院《工業(yè)機(jī)器人應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛州職業(yè)技術(shù)學(xué)院《中國(guó)通史現(xiàn)代》2023-2024學(xué)年第一學(xué)期期末試卷
- 皮帶系統(tǒng)安全培訓(xùn)課件
- 車輛培訓(xùn)課件
- 贛南衛(wèi)生健康職業(yè)學(xué)院《圖形圖像處理》2023-2024學(xué)年第一學(xué)期期末試卷
- 小班安全用電課件圖片
- 課件培訓(xùn)標(biāo)準(zhǔn)內(nèi)容
- 三年級(jí)科學(xué)上冊(cè)第二單元我們?cè)趺粗赖诰耪n有趣的不倒翁教案青島版
- GSP檢查培訓(xùn)課件
- 2025年八省聯(lián)考新高考 語文試卷
- 建筑物拆除場(chǎng)地清理垃圾外運(yùn)施工方案
- 內(nèi)部調(diào)查與舉報(bào)制度
- 《賣火柴的小女孩》公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)(共兩課時(shí))
- 山東省東營(yíng)市(2024年-2025年小學(xué)四年級(jí)語文)統(tǒng)編版期末考試(上學(xué)期)試卷及答案
- 期末+(試題)+-2024-2025學(xué)年重大版英語五年級(jí)上冊(cè)
- DL∕ Z 860.2-2006 變電站通信網(wǎng)絡(luò)和系統(tǒng) 第2部分:術(shù)語
- 基金應(yīng)知應(yīng)會(huì)專項(xiàng)考試題庫(證券類190題)附有答案
- 斷親協(xié)議書模板
- 技能成才強(qiáng)國(guó)有我課件模板
- 水利安全生產(chǎn)風(fēng)險(xiǎn)防控“六項(xiàng)機(jī)制”右江模式經(jīng)驗(yàn)分享
評(píng)論
0/150
提交評(píng)論