版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 畢 業(yè) 設 計(論 文)</p><p> 題目: 單片機計算器程序設計</p><p> 姓 名: </p><p> 系 (部): 機電工程系</p><p> 專 業(yè): 機電一體化</p><p> 指導教師: </p><
2、p> 2011年01月10 日</p><p><b> 目 錄</b></p><p> 設計要求……………………………………………………………1</p><p> 硬件系統(tǒng)設計……………………………………………………..1</p><p> LED接口電路……………………………………………….
3、1</p><p> 2、鍵盤接口電路………………………………………………….2</p><p> 3、計算器邏輯電路圖…………………………………………….2</p><p> 軟件設計……………………………………………………………3</p><p> LED顯示程序設計……………………………………3</p><
4、;p> 2、讀鍵輸入程序設計……………………………………..5</p><p> 3、主程序設計……………………………………………..6</p><p> 系統(tǒng)調(diào)試與存在的問題………………………………………….14</p><p> 心得體會………………………………………………………….15</p><p> 參考文獻………
5、………………………………………………….16</p><p><b> 一、設計要求</b></p><p> 1.設計4*4的鍵盤,其中10個數(shù)字鍵0~9,其余6個為“+” “-” “*”“/” “=”和“C”</p><p> 2.設計2位LED接口電路</p><p> 3.實現(xiàn)1位數(shù)的簡單運算</p
6、><p><b> 二、硬件系統(tǒng)設計</b></p><p><b> 1、LED接口電路</b></p><p> 簡易計算器需要2位8段碼LED顯示電路。用8031單片機經(jīng)8255A擴展2位8段碼LED顯示器,用8255A的A口作為段碼(字形代碼)數(shù)據(jù)口,PB0和PB1作為位控制端口。在位控制口加集電極開路的反相高壓
7、驅(qū)動器74LS06以提供驅(qū)動LED顯示器所需的足夠大的電流,然后接至各數(shù)碼顯示器的共陰極端。同理,在段碼數(shù)據(jù)口集電極開路的正相高壓驅(qū)動器74LS07提供足夠大的電流,然后接到數(shù)碼顯示器的各段。邏輯電路結構如下:</p><p><b> 2、鍵盤接口電路</b></p><p> 簡易計算器需要4*4的行列式鍵盤。用8031單片機經(jīng)8255A擴展4*4行列式鍵盤,
8、8255A的B口和C口用于擴展鍵盤接口,B口高4位作為輸出口,C口低4位作為輸入口。邏輯電路結構如下:</p><p> 3、計算器邏輯電路圖</p><p> 將LED接口電路和鍵盤接口電路結合到一起就是簡易計算器的邏輯電路圖,如下:</p><p><b> 三、軟件設計</b></p><p> 1、LED
9、顯示程序設計</p><p> LED顯示器由七段發(fā)光二極管組成,排列成8字形狀,因此也成為七段LED顯示器,器排列形狀如下圖所示:</p><p> 為了顯示數(shù)字或符號,要為LED顯示器提供代碼,即字形代碼。七段發(fā)光二極管,再加上一個小數(shù)點位,共計8段,因此提供的字形代碼的長度正好是一個字節(jié)。簡易計算器用到的數(shù)字0~9的共陰極字形代碼如下表:</p><p>
10、 0~9七段數(shù)碼管共陰級字形代碼</p><p> 2位LED顯示的程序框圖如下:</p><p> 2、讀鍵輸入程序設計</p><p> 為了實現(xiàn)鍵盤的數(shù)據(jù)輸入功能和命令處理功能,每個鍵都有其處理子程序,為此每個鍵都對應一個碼——鍵碼。為了得到被按鍵的鍵碼,現(xiàn)使用行掃描法識別按鍵。其程序框圖如下:</p><p><b>
11、; 3、主程序設計</b></p><p> (1)數(shù)值送顯示緩沖程序設計</p><p> 簡易計算器所顯示的數(shù)值最大位兩位。要顯示數(shù)值,先判斷數(shù)值正負,如果是負值,則符號位顯示“-”,然后將數(shù)值除以10,余數(shù)送顯最最低位,判斷商是否為0,若為0則返回,若不為0,則將商除以10,將余數(shù)送顯高位。程序框圖如下:</p><p> ?。?)運算主程序
12、設計</p><p> 首先初始化參數(shù),送LED低位顯示“0”,高位不顯示。然后掃描鍵盤看是否有鍵輸入,若有,讀取鍵碼。判斷鍵碼是數(shù)字鍵、清零鍵還是功能鍵(“+”“-”“*”“/”“=” ),是數(shù)值鍵則送LED顯示并保存數(shù)值,是清零鍵則做清零處理,是功能鍵則又判斷是“=”還是運算鍵,若是“=”則計算最后結果并送LED顯示,若是運算鍵則保存相對運算程序的首地址。運算主程序框圖如下所示:</p>&l
13、t;p> 4、簡易計算器源程序</p><p> OUTBIT equ 07FFDh ; 位控制口</p><p> OUTSEG equ 07FFCh ; 段控制口</p><p> IN equ 07FFEh ; 鍵盤讀入口</p><p> data1 equ 70h</p>
14、<p> data2 equ 71h</p><p> dizhi1 equ 72h</p><p> dizhi2 equ 73h</p><p> LEDBuf equ 60h ; 顯示緩沖</p><p> ljmp Start</p><p> LEDMAP:
15、 ; 八段管顯示碼</p><p> db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h</p><p> db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h</p><p> Delay: ; 延時子程序</p>&
16、lt;p> mov r7, #0</p><p> DelayLoop:</p><p> djnz r7, DelayLoop</p><p> djnz r6, DelayLoop</p><p><b> ret</b></p><p> DisplayLED:&l
17、t;/p><p> mov r0, #LEDBuf</p><p> mov r1, #2 ; 共2個八段管</p><p> mov r2, #00000010b ; 從左邊開始顯示</p><p><b> Loop:</b></p><p> mov
18、 dptr, #OUTBIT</p><p> mov a, #0</p><p> movx @dptr, a ; 關所有八段管</p><p> mov a, @r0</p><p> mov dptr, #OUTSEG</p><p> movx @dptr, a</
19、p><p> mov dptr, #OUTBIT</p><p> mov a, r2</p><p> movx @dptr, a ; 顯示一位八段管</p><p> mov r6, #1</p><p> call Delay</p><p> mov
20、 a, r2 ; 顯示下一位</p><p><b> rr a</b></p><p> mov r2, a</p><p><b> inc r0</b></p><p> djnz r1, Loop</p><p><
21、;b> ret</b></p><p><b> TestKey:</b></p><p> mov dptr, #OUTBIT</p><p> mov a, #0</p><p> movx @dptr, a ; 輸出線置為0</p><p>
22、; mov dptr, #IN</p><p> movx a, @dptr ; 讀入鍵狀態(tài)</p><p><b> cpl a</b></p><p> anl a, #0fh ; 高四位不用</p><p><b> ret</b><
23、/p><p> KeyTable: ; 鍵碼定義</p><p> db 0dh, 0ch, 0bh, 0ah</p><p> db 0eh, 03h, 06h, 09h</p><p> db 0fh, 02h, 05h, 08h</p><p> db
24、 00h, 01h, 04h, 07h</p><p><b> GetKey:</b></p><p> mov dptr, #OUTBIT</p><p> mov P2, dph</p><p> mov r0, #Low(IN)</p><p> mov r
25、1, #00100000b</p><p> mov r2, #4</p><p><b> KLoop:</b></p><p> mov a, r1 ; 找出鍵所在列</p><p><b> cpl a</b></p><p>
26、 movx @dptr, a</p><p><b> cpl a</b></p><p><b> rr a</b></p><p> mov r1, a ; 下一列</p><p> movx a, @r0</p><p>&
27、lt;b> cpl a</b></p><p> anl a, #0fh</p><p> jnz Goon1 ; 該列有鍵入</p><p> djnz r2, KLoop</p><p> mov r2, #0ffh ; 沒有鍵按下, 返回 0ffh</p
28、><p> sjmp Exit</p><p><b> Goon1:</b></p><p> mov r1, a ; 鍵值 = 列 X 4 + 行</p><p> mov a, r2</p><p><b> dec a</b>&
29、lt;/p><p><b> rl a</b></p><p><b> rl a</b></p><p> mov r2, a ; r2 = (r2-1)*4</p><p> mov a, r1 ; r1中為讀入的行值</p&
30、gt;<p> mov r1, #4</p><p><b> LoopC:</b></p><p> rrc a ; 移位找出所在行</p><p> jc Exit</p><p> inc r2 ; r2 = r2+ 行
31、值</p><p> djnz r1, LoopC</p><p><b> Exit:</b></p><p> mov a, r2 ; 取出鍵碼</p><p> mov dptr, #KeyTable</p><p> movc a, @a+dptr
32、</p><p> mov r2, a</p><p> WaitRelease:</p><p> mov dptr, #OUTBIT ; 等鍵釋放</p><p><b> clr a</b></p><p> movx @dptr, a</p><
33、;p> mov r6, #10</p><p> call Delay</p><p> call TestKey</p><p> jnz WaitRelease</p><p> mov a, r2</p><p><b> ret</b></p>
34、<p><b> Start:</b></p><p> mov sp, #40h</p><p> mov LEDBuf+0, #0</p><p> mov LEDBuf+1, #03fh</p><p> mov dptr, #7FFFh</p><p&g
35、t; mov a, #89h</p><p> movx @dptr, a</p><p><b> MLoop:</b></p><p> call DisplayLED ; 顯示</p><p> call TestKey ; 有鍵入?</p>&l
36、t;p> jz MLoop ; 無鍵入, 繼續(xù)顯示</p><p> call GetKey ; 讀入鍵碼</p><p><b> Jisuan:</b></p><p> mov r3, a</p><p> cjne r3, #0fh, Qit
37、a ;判斷是否為清零鍵?</p><p> mov r3, #00h ;清零</p><p> mov r4, #00h</p><p> mov r5, #00h</p><p> mov data1, #00h</p><p> mov data2, #00h&
38、lt;/p><p> mov dizhi1, #00h</p><p> mov dizhi2, #00h</p><p> mov LEDBuf+0, #0</p><p> mov LEDBuf+1, #03fh</p><p> ljmp MLoop</p><p>
39、; Qita: clr c</p><p> cjne r3, #0ah ,follow ;判斷是數(shù)字鍵還是功能鍵?</p><p><b> follow:</b></p><p> jc Shuzi</p><p><b> ljmp Gn</b></p>
40、;<p> Shuzi: mov a, r4 ;判斷是否已有運算符輸入,沒有就將數(shù)值存在</p><p> jnz Shuzi2 data1,有就將數(shù)值存在data2</p><p> mov a, r3</p><p> mov data1, a</p><p>
41、; ljmp Xs ;顯示第一次輸入的數(shù)值</p><p><b> Shuzi2:</b></p><p> mov a, r3</p><p> mov data2, a</p><p> ljmp Xs ;顯示第二次輸入的數(shù)值</p&
42、gt;<p> Gn: mov r4, #01h ;將01h給r4,說明已有運算符輸入</p><p> cjne r3, #0eh, Ja ;判斷鍵值是否為“=”?</p><p> mov r4, #00h ;將r4清零</p><p> mov a, dizhi1 ;執(zhí)行“
43、=”</p><p> mov dph, a</p><p> mov a, dizhi2</p><p> mov dpl, a</p><p> mov a, #00h</p><p> jmp @a+dptr ;轉到本次輸入的算法程序</p>&l
44、t;p> Ja: cjne r3, #0ah, Jn ;若鍵值為“+”則將“+”的程序首地址存在</p><p> mov dptr, #Jia dizhi1和dizhi2中</p><p> mov a, dph</p><p> mov dizhi1, a</p><p> mov
45、 a, dpl</p><p> mov dizhi2, a</p><p> ljmp MLoop </p><p> Jn: cjne r3, #0bh, Ce ;若鍵值為“-”則將“-”的程序首地址存</p><p> mov dptr, #Jian dizhi1和di
46、zhi2中</p><p> mov a, dph</p><p> mov dizhi1, a</p><p> mov a, dpl</p><p> mov dizhi2, a</p><p> ljmp MLoop </p><p>
47、 Ce: cjne r3, #0ch, Cu ;若鍵值為“*”則將“*”的程序首地址存在</p><p> mov dptr, #Cheng dizhi1和dizhi2中</p><p> mov a, dph</p><p> mov dizhi1, a</p><p> mov a, d
48、pl</p><p> mov dizhi2, a</p><p> ljmp MLoop </p><p> Cu: cjne r3, #0dh, Zhuan ;若鍵值為“/”則將“/”的程序首地址存在</p><p> mov dptr, #chu dizhi1和dizhi2中&
49、lt;/p><p> mov a, dph</p><p> mov dizhi1, a</p><p> mov a, dpl</p><p> mov dizhi2, a</p><p> Zhuan: ljmp MLoop </p><p>
50、 Jia: mov a, data1 ;加法程序</p><p> add a, data2</p><p><b> ljmp Xs</b></p><p> Jian: mov a, data1 ;減法程序</p><p> subb a, data2&
51、lt;/p><p><b> ljmp Xs</b></p><p> Cheng: mov a, data1 ;乘法程序</p><p> mov b, data2</p><p><b> mul ab</b></p><p><b
52、> ljmp Xs</b></p><p> Chu: mov a, data1 ;除法程序</p><p> mov b, data2</p><p><b> div ab</b></p><p> Xs: mov b, #10
53、 ;顯示個位數(shù)字</p><p><b> div ab</b></p><p> mov r5, a</p><p> mov a, b</p><p> mov dptr,#LEDMap</p><p> movc a, @a+dptr</p>&l
54、t;p> mov LEDBuf+1,a</p><p> mov a, r5</p><p><b> First:</b></p><p> cjne a,#0,Next</p><p> ljmp MLoop ;運算完后繼續(xù)掃描鍵盤</p><p&g
55、t;<b> Next:</b></p><p> mov b,#10 ;顯示十位數(shù)字</p><p><b> div ab</b></p><p> mov r5, a</p><p> mov a, b</p><p>
56、mov dptr, #LEDMap</p><p> movc a, @a+dptr</p><p> mov LEDBuf+0, a</p><p> mov a, r5</p><p> ljmp First</p><p><b> end</b></p&g
57、t;<p> 四、系統(tǒng)調(diào)試與存在的問題</p><p> 1.在打開一個程序要進行編譯運行時,要在項目中打開它,而不是單單以一個文件的形式打開。</p><p> 2.打開WAVE6000后,需要對仿真器進行設置,然后才能用其對所編程序進行編譯并執(zhí)行。</p><p> 3.試驗箱上提供的6位的LED顯示器和4*6的鍵盤,而簡易計算器只用兩位L
58、ED顯示器和4*4鍵盤,所以必須用軟件方法把前4位LED和鍵盤后2列屏蔽掉。</p><p> 4. 十位上的LED顯示管有數(shù)字時才顯示,沒有數(shù)字時不顯示,而不是顯示“0”,做清零操作后LED顯示器個位顯示“0”,而全部關閉不顯示。</p><p><b> 五、心得體會</b></p><p> 課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn)
59、、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程。隨著科學技術發(fā)展的日新日異,單片機已經(jīng)成為當今計算機應用中空前活躍的領域, 在生活中可以說得是無處不在。因此作為電子信息工程專業(yè)的學生來說掌握單片機的開發(fā)技術是十分重要的。 我的題目是簡易計算器,對于我們這些實踐中的新手來說,這是一次考驗。怎么才能找到課堂所學與實際應用的最佳結合點?怎樣讓自己的業(yè)余更接近專業(yè)?怎樣讓自己的計劃更具有序性
60、,而不會忙無一用?這都是我們所要考慮和努力的。這次課程設計我學到很多很多的東西,學會了怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識,掌握了一種系統(tǒng)的研究方法,可以進行一些簡單的編程。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設計--基于單片機的計算器設計
- 基于51單片機計算器的設計畢業(yè)設計
- 基于單片機的簡易計算器論文畢業(yè)設計
- 計算器畢業(yè)論文_——基于單片機的計算器設計
- 單片機簡易計算器設計
- 基于單片機課程設計簡易計算器設計畢業(yè)設計
- 畢業(yè)設計---基于單片機的多功能計算器的設計
- 計算器畢業(yè)論文-- 基于單片機的電子計算器設計
- 課程設計-單片機計算器
- 單片機計算器課程設計
- 單片機課程設計--計算器
- 單片機課程設計-計算器
- 基于單片機的計算器設計-單片機課程設計
- 單片機的簡易計算器設計-畢業(yè)論文
- 單片機課程設計——計算器設計
- 基于單片機設計的計算器畢業(yè)設計論文
- 簡易計算器(單片機原理)
- 基于單片機設計的計算器畢業(yè)設計論文
- 單片機課程設計--簡易計算器
- 單片機課程設計簡易計算器
評論
0/150
提交評論