




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、長沙民政職業(yè)技術(shù)學(xué)院課 程 設(shè) 計 報 告課 題 名 稱: 51單片機的計算器設(shè)計 課 程: 單片機技術(shù)及應(yīng)用 專 業(yè): 應(yīng)用電子技術(shù) 學(xué)生姓名周揚孔計張嬌陳實學(xué) 號17151419班 級0733073307330733指導(dǎo)老師方躍春老師應(yīng)用電子技術(shù)教研室2009年9月2日一、課題任務(wù)及要求要求:1、掌握數(shù)碼管移位動態(tài)掃描顯示的編程方法2、掌握矩陣掃描的編程方法3、掌握數(shù)據(jù)在內(nèi)部運算的編程方法任務(wù):1、實現(xiàn)最大6位正整數(shù)加、減、乘、除 2、具備清零、等于功能3、16個按鍵功能依次為:數(shù)字0、數(shù)字1、數(shù)字2、數(shù)字3、數(shù)字4、數(shù)字5、數(shù)字6、數(shù)字7、數(shù)字8、數(shù)字9、清零、等于、加、減、乘、除 二、
2、硬 件 設(shè) 計1. 原理圖2. 原理分析該設(shè)計通過89C51芯片控制6個一位數(shù)碼管顯示,并實時檢測按鍵按下情況來實現(xiàn)計算器功能,16個按鍵有10個為數(shù)字按鍵 其他6個分別為加、減、乘、除、復(fù)位、等于電路接上電源后 數(shù)碼管顯示個位顯示數(shù)字0 ,芯片對按鍵進行實時掃描,通過矩陣鍵盤進行計算,特別注意的是,當(dāng)結(jié)果為負數(shù)時,數(shù)碼管顯現(xiàn)EORR。(一)、硬件部分1、數(shù)碼管為一位共陰數(shù)碼管,共6個;故在段碼輸出口外加NPN型三極管作驅(qū)動2、51芯片P1口接鍵盤端(矩陣按鍵)、P3口接段碼、P2口的P2_0P2_5接位碼3、按鍵為四乘四矩陣,共16個鍵(二)、軟件部分1、數(shù)碼管移位顯示的實現(xiàn)是通過標志位we
3、i2的數(shù)值變化控制dispiay函數(shù)顯示位來實現(xiàn)的2、程序的重要算法是通過類型為unsigned int 的數(shù)temp和數(shù)組str實現(xiàn)整體加減乘除、各位顯示的只要弄懂這一算法,此程序就可輕易掌握3. PCB圖略。4. 元件清單及造價預(yù)算按鍵 20個 單價 0.2 元 總計 4元萬用板 2塊 單價 4 元 總計 8元一位共陰數(shù)碼管 6個 單價 2 元 總計 2元三極管 7個 單價 0.2 元 總計 1.4元1K電阻 20個 單價 0.01 元 總計 2毛排插及排線 5對 單價 1元 總計 5元 電容 3個 單價 0.2元 總計 6毛晶振 1個 單價 1元 總計 1元 8051芯片 1 個 單價
4、6元 總計 6元 費用總計 26.2元5.實物照片三、程 序 設(shè) 計頭程序 str6=str5=str4=str3=str2=str1=10; str16=str15=str14=str13=str12=str#include<reg51.h> /51單片機基本定義頭文件#include<intrins.h> /循環(huán)位移頭文件#define uchar unsigned char /宏定義#define uint unsigned int sbit P1_4=P14;/IO端口定義(矩陣掃描后4位端口)sbit P1_5=P15;sbit P1_6=P16;sbit P
5、1_7=P17;uchar i,num,s; /全局變量定義uchar wei,wei2,ss,ss1,ss2,str1=0,0,0,0,0,0,0;long temp,temp1,str=10,10,10,10,10,10,10;uchar code dutable= /段位編碼0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;uchar code wetable= 0xfe,0xfd,0xfb,0xf7,0xef,0xdf;void init(); /函數(shù)聲明void pandua
6、n();void display();void delay(uint z);void shaomiao();void main() /主函數(shù) init(); /調(diào)用變量初始化函數(shù)while(1) /大循環(huán) shaomiao(); /調(diào)用矩陣掃描加處理函數(shù) display(); /調(diào)用顯示函數(shù) void init() /變量初始化函數(shù) ss2=0; wei2=1;temp1=0; ss=0; ss1=0;temp=0;wei=0;num=0;void delay(uint z)/延時函數(shù)(單位ms) uchar i;uint j; for(j=z;j>0;j-) for(i=114;i&g
7、t;0;i-);void shaomiao() /掃描加處理函數(shù)for(i=0,s=0xfe;i<4;i+) /低四位端口依次賦值1 P1=s; /對P1口賦值 panduan(); /調(diào)用判斷處理函數(shù) s=_crol_(s,1); /s循環(huán)位左移s=s|0xf0; /進行位或運算 (使高4位復(fù)原)void panduan() uchar n; if(P1_4=0|P1_5=0|P1_6=0|P1_7=0) delay(10); P1=s|0xf0;if(P1_4=0|P1_5=0|P1_6=0|P1_7=0) if(P1_4=0) n=1;num=i*4+n-1;else if(P1_
8、5=0) n=2;num=i*4+n-1;else if(P1_6=0) n=3;num=i*4+n-1;else if(P1_7=0) n=4;num=i*4+n-1;if(num<10&&wei!=7) wei+;if(ss1=1) temp=0; str6=str5=str4=str3=str2=str1=10; str16=str15=str14=str13=str12=str11=0; ss1=0;strwei=num;if(str1!=10) temp=str1; if(str2!=10) temp=str1*10+str2; if(str3!=10) tem
9、p=str1*100+str2*10+str3; if(str4!=10) temp=str1*1000+str2*100+str3*10+str4; if(str5!=10)temp=str1*10000+str2*1000+str3*100+str4*10+str5; if(str6!=10) temp=str1*100000+str2*10000+str3*1000+str4*100+str5*10+str6; if(num>=10) wei=0; if(num=10) temp=0;11=0; wei=0; temp1=0; ss=0; wei2=1; if(ss1=0&
10、&num=11|(ss1=0&&ss2!=0&&num>11&&num<16) if(num=11) ss2=0;switch(ss) case 0: break; case 1: temp=temp+temp1;break; case 2: temp=temp1-temp;break; case 3: temp=temp*temp1;break; case 4: temp=temp1/temp;break; if(temp>999999) temp=0;ss1=1; if(num=12) temp1=temp; ss=
11、1;ss1=1;ss2=1; if(num=13) temp1=temp; ss=2;ss1=1;ss2=1; if(num=14) temp1=temp; ss=3;ss1=1;ss2=1; if(num=15) temp1=temp; ss=4;ss1=1;ss2=1; str16=temp/100000; str15=temp%100000/10000; str14=temp%10000/1000; str13=temp%1000/100; str12=temp%100/10; str11=temp%10/1; if(str11!=0) wei2=1;if(str12!=0) wei2=
12、2;if(str13!=0) wei2=3;if(str14!=0) wei2=4;if(str15!=0) wei2=5;if(str16!=0) wei2=6; while(P1_4=0|P1_5=0|P1_6=0|P1_7=0); void display() char i1; for(i1=1;i1<wei2+1;i1+) if(num=0&&ss=4|temp<0) P2=wetable0; P3=dutable14; else P2=wetablei1-1; P3=dutablestr1i1; delay(10); P3=0xff; 四、調(diào) 試 結(jié) 果1
13、、硬件調(diào)試a. 把電路板焊好后,先通過檢查電路板表面檢查是否有漏焊、錯焊、接觸不良等b. 編寫檢測程序逐個點亮數(shù)碼管,檢查數(shù)碼顯示部分是否有硬件問題 c編寫檢測程序檢測矩陣掃描是否有硬件問題2、程序調(diào)試重點就是這個部分,很多程序就是在調(diào)試過程中慢慢完善,先前所完成的程序部分只能算一個基本框架,當(dāng)然,這一切是建立在硬件沒用問題的基礎(chǔ)上程序在進行調(diào)試時,可以像硬件一樣使用分模塊調(diào)試,這樣可以最迅捷的找出問題所在,不受其他模塊的影響我們在硬件調(diào)試時,一開始時51芯片不工作,經(jīng)過反復(fù)檢查后發(fā)現(xiàn)原來51芯片的31腳(/EA/VPP)必須接入高電平才能使單片機在讀取程序時優(yōu)先訪問內(nèi)部程序存儲器,否則只訪問
14、外部程序存儲器,而我們的程序是在內(nèi)部的,故芯片不工作,我們隨即在31腳外接VCC和限流電阻,在解決了這個后,硬件OK了。軟件調(diào)試時問題就比較多了,很多都是小問題,大多是因為在編寫程序時一些地方不夠注意或筆誤引起的,在這里就不過多解釋,少部分是一些難以解決的大問題,一是在輸入數(shù)字的儲存上,開始打算只使用一個數(shù)組str解決,但在編程時發(fā)現(xiàn)在數(shù)字轉(zhuǎn)換為一個一個的編碼中發(fā)現(xiàn)直接引用會引起數(shù)據(jù)混亂,最后在添入另一數(shù)組str1后問題得到解決;二是輸入數(shù)據(jù)在內(nèi)部進行加減乘除時,加法乘法沒有錯誤,但減法除法因為一次輸出和二次輸入數(shù)據(jù)的位置關(guān)系導(dǎo)致第二次運作時出現(xiàn)錯誤,最后我們調(diào)整了儲存數(shù)據(jù)的變量,這個問題順利
15、的解決了,最后一個問題困擾我們最久,甚至導(dǎo)致調(diào)試過程一度中止,由于我們是6位數(shù)的運算,在數(shù)字顯示過程中,出現(xiàn)了跳位現(xiàn)象,比如你輸入123,當(dāng)輸如12時,數(shù)碼管正常顯示12,但將3輸入后,數(shù)碼管顯示變?yōu)榱?12,由于一直找不出原因,這個問題一直得不到解決,最后我嘗試改變display( )函數(shù)和大循環(huán)中函數(shù)的位置循序后才能正常顯示,但這從理論上說不通,最后得出可能是受到延時函數(shù)delay( )的延時影響,導(dǎo)致數(shù)碼管動態(tài)顯示位碼出錯。在將這個問題解決后,我們的程序就基本調(diào)試完成了,但這并不是最終結(jié)果,我將做好的計算器給其他同學(xué)進行操作,在他們找茬似的操作中,我們又發(fā)現(xiàn)了幾個隱藏的很深的BUG并加以
16、解決,雖然不知道還有什么BUG沒發(fā)現(xiàn),但至少在BUG發(fā)現(xiàn)之前,我們的程序是沒問題了。五 、設(shè) 計 總 結(jié)從這次課題設(shè)計任務(wù)中,我們學(xué)習(xí)到了很多,經(jīng)過我們四個的共同努力,老師的精心指導(dǎo),還有和在網(wǎng)上找到的一些資料,主要讓我們掌握了數(shù)碼管移位動態(tài)掃描顯示的編程方法,掌握了矩陣掃描的編程方法,掌握了數(shù)據(jù)在內(nèi)部運算的編程方法,這也是編程必須掌握的知識。當(dāng)然調(diào)試的時候你也是一個重點,也讓我們收獲良多,這其中就分硬件和軟件兩部分,硬件只要我們注意一些焊接問題,對板子輸入簡單的程序進行檢測。這個只要自己細心一點都可以按照原理圖做好,其中最重要,最麻煩,也是學(xué)到和掌握的東西最多的地方就是軟件調(diào)試了,這其中包括程序的編寫檢驗,這樣你必須對程序的每部分都很熟悉,掌握每句程序的再整個整體的作用。這樣
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目管理績效提升的新維度試題及答案
- 項目管理專家認證考試重要試題及答案
- 2024年福建事業(yè)單位考試全局復(fù)習(xí)策略與試題及答案
- 項目管理資格考試知識推理試題及答案
- 2025年會計政策分析試題及答案
- 精準備戰(zhàn)特許金融分析師考試試題及答案
- 武威電梯裝修施工方案
- 項目管理資格復(fù)習(xí)關(guān)鍵點試題及答案
- 信豐避雷塔安裝施工方案
- 耐高壓潔凈管道施工方案
- 校舍抗震安全鑒定服務(wù)投標方案
- 2023年河南測繪職業(yè)學(xué)院單招考試職業(yè)適應(yīng)性測試試題及答案解析
- Python自然語言處理-課件-第05章-詞向量與關(guān)鍵詞提取
- 五年級下冊綜合實踐活動教學(xué)設(shè)計-有趣的拉線偶人 全國通用
- 醫(yī)療廢物管理PPT演示課件
- 海康監(jiān)控陣列不可用數(shù)據(jù)不保留處理
- 卓越密碼:如何成為專家
- 卒中管理及中心建設(shè)
- 合肥經(jīng)濟技術(shù)開發(fā)區(qū)公開招聘村(居)社區(qū)工作者模擬備考預(yù)測(共1000題含答案解析)綜合試卷
- 外派勞務(wù)人員基本情況表(勞工表)
- 部編版 八年級下冊語文 第五單元復(fù)習(xí)課件
評論
0/150
提交評論