版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 一、設(shè)計(jì)要求</b></p><p> 1.設(shè)計(jì)4*4的鍵盤,其中10個(gè)數(shù)字鍵0~9,其余6個(gè)為“+” “-” “*”“/” “=”和“C”</p><p> 2.設(shè)計(jì)2位LED接口電路</p><p> 3.實(shí)現(xiàn)1位數(shù)的簡(jiǎn)單運(yùn)算</p><p><b> 二、硬件系統(tǒng)設(shè)計(jì)
2、</b></p><p><b> 1、LED接口電路</b></p><p> 簡(jiǎn)易計(jì)算器需要2位8段碼LED顯示電路。用8031單片機(jī)經(jīng)8255A擴(kuò)展2位8段碼LED顯示器,用8255A的A口作為段碼(字形代碼)數(shù)據(jù)口,PB0和PB1作為位控制端口。在位控制口加集電極開路的反相高壓驅(qū)動(dòng)器74LS06以提供驅(qū)動(dòng)LED顯示器所需的足夠大的電流,然后接至
3、各數(shù)碼顯示器的共陰極端。同理,在段碼數(shù)據(jù)口集電極開路的正相高壓驅(qū)動(dòng)器74LS07提供足夠大的電流,然后接到數(shù)碼顯示器的各段。邏輯電路結(jié)構(gòu)如下:</p><p><b> 2、鍵盤接口電路</b></p><p> 簡(jiǎn)易計(jì)算器需要4*4的行列式鍵盤。用8031單片機(jī)經(jīng)8255A擴(kuò)展4*4行列式鍵盤,8255A的B口和C口用于擴(kuò)展鍵盤接口,B口高4位作為輸出口,C口低
4、4位作為輸入口。邏輯電路結(jié)構(gòu)如下:</p><p> 3、計(jì)算器邏輯電路圖</p><p> 將LED接口電路和鍵盤接口電路結(jié)合到一起就是簡(jiǎn)易計(jì)算器的邏輯電路圖,如下:</p><p><b> 三、軟件設(shè)計(jì)</b></p><p> 1、LED顯示程序設(shè)計(jì)</p><p> LED顯示
5、器由七段發(fā)光二極管組成,排列成8字形狀,因此也成為七段LED顯示器,器排列形狀如下圖所示:</p><p> 為了顯示數(shù)字或符號(hào),要為L(zhǎng)ED顯示器提供代碼,即字形代碼。七段發(fā)光二極管,再加上一個(gè)小數(shù)點(diǎn)位,共計(jì)8段,因此提供的字形代碼的長(zhǎng)度正好是一個(gè)字節(jié)。簡(jiǎn)易計(jì)算器用到的數(shù)字0~9的共陰極字形代碼如下表:</p><p> 0~9七段數(shù)碼管共陰級(jí)字形代碼</p><p
6、> 2位LED顯示的程序框圖如下:</p><p> 2、讀鍵輸入程序設(shè)計(jì)</p><p> 為了實(shí)現(xiàn)鍵盤的數(shù)據(jù)輸入功能和命令處理功能,每個(gè)鍵都有其處理子程序,為此每個(gè)鍵都對(duì)應(yīng)一個(gè)碼——鍵碼。為了得到被按鍵的鍵碼,現(xiàn)使用行掃描法識(shí)別按鍵。其程序框圖如下:</p><p><b> 3、主程序設(shè)計(jì)</b></p>&l
7、t;p> (1)數(shù)值送顯示緩沖程序設(shè)計(jì)</p><p> 簡(jiǎn)易計(jì)算器所顯示的數(shù)值最大位兩位。要顯示數(shù)值,先判斷數(shù)值正負(fù),如果是負(fù)值,則符號(hào)位顯示“-”,然后將數(shù)值除以10,余數(shù)送顯最最低位,判斷商是否為0,若為0則返回,若不為0,則將商除以10,將余數(shù)送顯高位。程序框圖如下:</p><p> ?。?)運(yùn)算主程序設(shè)計(jì)</p><p> 首先初始化參數(shù),送
8、LED低位顯示“0”,高位不顯示。然后掃描鍵盤看是否有鍵輸入,若有,讀取鍵碼。判斷鍵碼是數(shù)字鍵、清零鍵還是功能鍵(“+”“-”“*”“/”“=” ),是數(shù)值鍵則送LED顯示并保存數(shù)值,是清零鍵則做清零處理,是功能鍵則又判斷是“=”還是運(yùn)算鍵,若是“=”則計(jì)算最后結(jié)果并送LED顯示,若是運(yùn)算鍵則保存相對(duì)運(yùn)算程序的首地址。運(yùn)算主程序框圖如下所示:</p><p> 4、簡(jiǎn)易計(jì)算器源程序</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: ; 延時(shí)子程序</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個(gè)八段管</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 ; 關(guān)所有八段管</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 ; 沒(méi)有鍵按下, 返回 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、無(wú)鍵入, 繼續(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、 ;判斷是否已有運(yùn)算符輸入,沒(méi)有就將數(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,說(shuō)明已有運(yùn)算符輸入</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 ;轉(zhuǎn)到本次輸入的算法程序</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 ;顯示個(gè)位數(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 ;運(yùn)算完后繼續(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)調(diào)試與存在的問(wèn)題</p&
53、gt;<p> 1.在打開一個(gè)程序要進(jìn)行編譯運(yùn)行時(shí),要在項(xiàng)目中打開它,而不是單單以一個(gè)文件的形式打開。</p><p> 2.打開WAVE6000后,需要對(duì)仿真器進(jìn)行設(shè)置,然后才能用其對(duì)所編程序進(jìn)行編譯并執(zhí)行。</p><p> 3.試驗(yàn)箱上提供的6位的LED顯示器和4*6的鍵盤,而簡(jiǎn)易計(jì)算器只用兩位LED顯示器和4*4鍵盤,所以必須用軟件方法把前4位LED和鍵盤后2列
54、屏蔽掉。</p><p> 4. 十位上的LED顯示管有數(shù)字時(shí)才顯示,沒(méi)有數(shù)字時(shí)不顯示,而不是顯示“0”,做清零操作后LED顯示器個(gè)位顯示“0”,而全部關(guān)閉不顯示。</p><p><b> 五、心得體會(huì)</b></p><p> 課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn)、提出、分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作
55、能力的具體訓(xùn)練和考察過(guò)程。隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說(shuō)得是無(wú)處不在。因此作為電子信息工程專業(yè)的學(xué)生來(lái)說(shuō)掌握單片機(jī)的開發(fā)技術(shù)是十分重要的。 我的題目是簡(jiǎn)易計(jì)算器,對(duì)于我們這些實(shí)踐中的新手來(lái)說(shuō),這是一次考驗(yàn)。怎么才能找到課堂所學(xué)與實(shí)際應(yīng)用的最佳結(jié)合點(diǎn)?怎樣讓自己的業(yè)余更接近專業(yè)?怎樣讓自己的計(jì)劃更具有序性,而不會(huì)忙無(wú)一用?這都是我們所要考慮和努力的。這次課程設(shè)計(jì)我學(xué)到很多
56、很多的東西,學(xué)會(huì)了怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過(guò)程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書本上所沒(méi)有學(xué)到過(guò)的知識(shí),掌握了一種系統(tǒng)的研究方法,可以進(jìn)行一些簡(jiǎn)單的編程。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。同時(shí)在設(shè)計(jì)的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易計(jì)算器
- 課程設(shè)計(jì)---單片機(jī)簡(jiǎn)易計(jì)算器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)報(bào)告-簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易數(shù)字計(jì)算器
- 簡(jiǎn)易計(jì)算器單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)---簡(jiǎn)易計(jì)算器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告-- 簡(jiǎn)易計(jì)算器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易計(jì)算器的設(shè)計(jì)
- 基于51單片機(jī)簡(jiǎn)易計(jì)算器課程設(shè)計(jì)
- 簡(jiǎn)易計(jì)算器設(shè)計(jì)-單片機(jī)原理及應(yīng)用課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--簡(jiǎn)易計(jì)算器的設(shè)計(jì)、制作
- 課程設(shè)計(jì)-單片機(jī)計(jì)算器
- 單片機(jī)計(jì)算器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--計(jì)算器
- 單片機(jī)課程設(shè)計(jì)-計(jì)算器
- 單片機(jī)課程設(shè)計(jì)——計(jì)算器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論