【正文】
過測(cè)試復(fù)位后,單片機(jī)的 1 腳電壓為 0,只是在復(fù)位的瞬間出現(xiàn) V 的高電平 , 從而使單片機(jī)復(fù)位 。因?yàn)?6 單片機(jī) P0 口內(nèi)部是由 CMOS 管構(gòu)成的,電壓偏低,不能使單片機(jī)P0 口正常工作。 D5 是一個(gè)發(fā)光的二極管可以在上電是看到電路是不是導(dǎo)通。當(dāng)然還有一些不足之處,本次設(shè)計(jì)還不能進(jìn)行小數(shù)計(jì)算。 該系統(tǒng)還設(shè)了功能鍵,開始顯示 0,按了鍵后就進(jìn)入計(jì)算狀態(tài),再按該鍵就進(jìn)入時(shí)鐘狀態(tài)。還的受其使用電路的制約, C2 是一個(gè)濾波電容可以有效的濾掉高平信號(hào)產(chǎn)生的干擾。 2 在 P0 口加上拉電阻( 10K)目的是提供單片機(jī)的內(nèi)部電壓。在從低四位送數(shù)據(jù)到數(shù)碼管 。下面簡(jiǎn)要 地 描述一些 解決問題的方法。 4. 每一顆 IC的 VCC 與 GND 之間一般接 到 的積層電容以使電源的電壓波紋及雜散信號(hào)有所旁路同時(shí)可以抵消電路的電感性,使整個(gè)電路有較好的穩(wěn)定性。 C 語(yǔ)言編程與匯編編程的比較 1. 匯編 語(yǔ)言是一種用文字助記符來表示機(jī)器指令的符號(hào)語(yǔ)言,是最接近機(jī)器碼的一種語(yǔ)言。 AT89C51 的芯片的功能。 由于時(shí)間有限和我們本身知識(shí)水平的限制,我們一致認(rèn)為本系統(tǒng)還有需要 改進(jìn)和提高的地方。 TR0=0。timebuf[3]++。 P2=first。scan_time2。 mdelay(3)。amp。 mdelay(3)。 P0=0x40。 break。 op=0。 //除 } i++。感謝大家!感謝我學(xué)習(xí)生活了四年的大學(xué),謝謝她給我學(xué)習(xí)的機(jī) 會(huì),教給了我們立足社會(huì)的知識(shí),培養(yǎng)了我們成才的能力,告誡了我們失敗的教訓(xùn)。 //減 case 12: op=3。j2。 fenli(result)。 P2=_crol_(P2,1)。 } else if(wei[3]==0) //顯示 *** {P2=first。amp。 //段碼置 0, 消影 } } else { P2=first。amp。 24 mdelay(2)。timebuf[1]+=1。delay) { for(s=0。在老師和同學(xué)的幫助下,本設(shè)計(jì)基本上實(shí)現(xiàn)了所要求的功能 ,能滿足題目的基本要求。 C 語(yǔ)言是一種結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,它支持當(dāng)前程序設(shè)計(jì)中廣泛采用的由頂向下結(jié)構(gòu)化程序設(shè)計(jì)技術(shù)。 ALE 的信號(hào)亦同,但需注意, 16 其他命令也會(huì)導(dǎo)致 ALE 的跳變,故不可認(rèn)為使用 MOVX 之后,所存器的輸出端會(huì)一直為 P0 所輸出的低地址。 6. 單片機(jī)微處理器外接電路較多時(shí),必須考慮其驅(qū)動(dòng)能力,驅(qū)動(dòng)能力不足時(shí),系統(tǒng)工作不可靠,解決辦法是:增加驅(qū)動(dòng)能力或減小 IC功耗,降低總線負(fù)載。 2 接通電源以后會(huì)出現(xiàn)穩(wěn)壓管很燙的 現(xiàn)象,出現(xiàn)的情況可能是輸入的電流功率太大,也有可能是硬件的接法存在問題,基于第一種, 11 我 們可以用人為的加一 個(gè) 煽熱片,保證穩(wěn)壓管 的正常工作。所用數(shù)碼管為共陰極 1 2 3 4ABCD4321DCBAT i t l eN um be r R e v i s i o nS i z eA4D a t e : 1 3 M a y 2 00 7 S he e t o f F i l e : C : \ D oc um e n t s a nd S e t t i ng s \ A dm i n i s t r a t o r \桌面 \龔素靈 \ M yD e s i g dbD r a w n B y :C71 04 P FV C Cp v c cp p p p p p p p p p p v ppp a l ep s e np p p p p p v pdp p p p p p p p p p p p t x a l 2t x a l 1v s sJ P 1A T 8 9C 51123456789J 3 3C O N 9p 00p 01p 02p 03p 04p 05p 06p 07p 00p 01p 02p 03p 04p 05p 06L1L2L3L4L1L2L3L4D I RA1A2A3A4A5A6A7A8G N D B8B7B6B5B4B3B2B1GV C CJ 2 27 4L S 2 45i n t 1i n t 2i n t 3i n t 4i n t 5i n t 6i n t 7G N Do ut 2o ut 3o ut 4o ut 5o ut 6o ut 7o ut 1V C CJ 4 4U L N 20 03t1t2t3t4t5t6t7h1h2h3h4L5V C CV C CV C Cp 07t8abfcgdedpabfcgdedpabfcgdedpabfcgdedp21110619bs3s2f as15483712eddpcgs4Q5g on gy i nt1t2t3t4t5t6t7h1h2h3h4t8R 11 14 70R 11 24 70R 11 34 70R 11 44 70R 11 54 70R 11 64 70R 11 74 70R 11 84 70v c c1R12R23R34R45R56R67R78R89R P 21 0kV C C 圖 數(shù)碼顯示及驅(qū)動(dòng)電路 四位 數(shù)碼管,段碼端為高電平有效,位碼端為低電平有效。第二步:確保電壓輸入,電流的安全情況下。 4. 用 7805 來做穩(wěn)壓,提供 +5V 電源(實(shí)際是 +),符合設(shè)計(jì)鍵盤輸入 驅(qū)動(dòng)芯片 數(shù)碼顯示 AT89C51 4 的要求??墒撬€在發(fā)展之中,以后必將出現(xiàn)功能更加 強(qiáng)大的計(jì)算器,基于這樣的理念,本次設(shè)計(jì)是 用 單片機(jī)來設(shè)計(jì) 的 兩位數(shù)計(jì)算 器 。 1. 設(shè)計(jì)任務(wù) 基于 AT89C51芯片的應(yīng)用及端 口的擴(kuò)展 , 來實(shí)現(xiàn)兩位數(shù)的計(jì)算即 加 ,減 ,乘 ,除等功能; 在硬件的基礎(chǔ)上做擴(kuò)展功能,如時(shí)鐘顯示。 AT89C51 是 MCS51 產(chǎn)品的兼容型,ROM、 128 字節(jié) ROM, 32 根 I/O 引線,每根都可以獨(dú)立的使用。 2 看電路有沒有短接的現(xiàn)象。在與單片機(jī)連接 處 還要加 10 一個(gè) 10k 的電阻,電 阻 接地,使復(fù)位工作穩(wěn)定。 12 5. 軟件設(shè)計(jì)部分 程序流程圖 圖 程序流程圖 初始化地址參數(shù) 輸出列掃描信號(hào) 列掃描信號(hào)移位 讀入行信號(hào) 時(shí)鐘記時(shí)間狀態(tài) 模式鍵再次按下 四列掃描完? 返回 模式鍵第一次按下? 開始 計(jì)算器狀態(tài) 讀入鍵值執(zhí)行運(yùn)算操作 等于操作 終止 13 軟件設(shè)計(jì)總寬圖 圖 軟件設(shè)計(jì)總寬圖 6. 本次設(shè)計(jì)的心得與體會(huì) 設(shè)計(jì)需考慮下列幾點(diǎn) 。 3. 編程中,間接尋址要使用 DPTR、 PC、 R0、 R1 寄存器,寫入數(shù)據(jù)時(shí)亦同,且不能寫入立即數(shù),而應(yīng)用寄存器,如 A。缺點(diǎn)是占用資源較多,執(zhí)行效率沒有匯編高。 7. 本次課程設(shè)計(jì)已完成如下功能 1. 可以 進(jìn)行兩位的數(shù)字計(jì)算加,減(可以顯示負(fù)數(shù)),乘,除功能。 //顯示器緩沖區(qū)段碼 // P10 到 P13 的鍵驅(qū)動(dòng)碼 //uchar code drive_code[4]={0x7f,0xdf,0xbf,0xef}。 EA=1。} if(timebuf[5]==3) //時(shí)十位為 3 則清 0 timebuf[5]=0。(wei[2]==0)amp。 //段碼置 0,消影 } } else if(wei[3]==0) //顯示 *** {P2=first。(wei[1]==0)amp。 mdelay(3)。 mdelay(3)。 29 temp1=shuju[1][0]+shuju[1][1]*10+shuju[1][2]*100+shuju[1][3]*1000。 //uchar 。 //保存第 i 個(gè)輸入的數(shù)據(jù) key_disp(shuju[i],0x02)。//第二操作數(shù)置 0 i=0。本文是在老師的嚴(yán)格要求和精心指導(dǎo)下完成的,它凝聚著幾個(gè)月來老師對(duì)我的悉心培養(yǎng)和教導(dǎo)所付出的大量心血。amp。 while(1) { key_disp(shuju[i],0x02)。 fenli(result)。 } else 28 { P2=first。 P0=0x00。(wei[2]==0)amp。scan_time3。(wei[3]==0)) //顯示 0 {P2=0x02。 } } void time_disp(uint time1,uint wei1[],uchar first1) //時(shí)間顯示子程序 { uint scan_time1=0。 } static void timer0_work(void) interrupt TF0_VECTOR using 1 ////定時(shí)器 0 中斷子程序 { TH0=(6553610000)/256。 // 第一操作數(shù) 第二操作數(shù) // 一秒到的標(biāo)志 運(yùn)算符標(biāo)志 負(fù)號(hào)標(biāo)志 uint