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