【正文】
//逆時(shí)針循環(huán) 30 Display_Led(lamp)。 if(Flag_INV) lamp=(lamp15)|(lamp1)。 } } if(Flag_TM amp。break。 //顯示狀態(tài)切換 break。 else state++。break。 while(1) { a=KeyScan8155()。 //8155 初始化 A 口 B 口 為輸出 C 口輸入 PortA=0xFF。 29 InitTimer()。 uchar state=0。 //允許計(jì)數(shù)器溢出中斷 EA=1。 TR1=1。 //T1 16 位定時(shí)器方式 1 TL1=count_T1_L。 //送顯示數(shù)據(jù)到 8155 A 口 PortB=Led_H8。 PortA=Led_Hamp。 temp_L=1。 if(temp_Lamp。i8。 temp_H=1。 if(temp_Hamp。i8。 temp_H=lamp0x08。 temp_L=lampamp。 uint Led_H=0x0000。 uchar temp_H=0。 break。 break。 break。 break。 break。 break。 break。 } } return(0x00)。 } else { count_N++。 if(key==0) { if(count_N10) //判斷是否有鍵放開 { Flag_K=0。 //返回按鍵值 } else { count_Y++。 count_Y=0。 if((key0)amp。 keyamp。 key=PortC。 } /******************************************************/ uchar KeyScan8155(void) //8155C 口鍵盤 掃描 { uchar i=0。 Flag_TM=1。 /******************************************************/ void t1_int(void) interrupt 3 //T1 溢出中斷 { TL1=count_T1_L。 //T1 溢出中斷標(biāo)志 bit Flag_K=0。 uint lamp=0x7FFF。//命令口地址 uchar count_Y=0。 //B 口地址 char xdata PortC _at_ 0x7F03。 附 錄 //filename: //功能:流水燈 include include include define uchar unsigned char //定義 uchar 為無(wú)符號(hào)字符型 8 位 define uint unsigned int //定義 uint 為無(wú)符號(hào)整型 16 位 define count_T1_L 0xB0 //T1 定時(shí)器初值 50MS 定時(shí) define count_T1_H 0x3C char xdata PortA _at_ 0x7F01。作工科類畢業(yè)設(shè)計(jì)最好是能做出實(shí)物,如果條件允許的話。在學(xué)習(xí)軟件時(shí)一定要邊做邊學(xué)軟件,下載一些軟件教程的視頻來(lái)看,然后邊看邊自己操作,千萬(wàn)不能拿著軟件教程書從第一頁(yè)開始看,這樣效率太低。 4. 軟件的學(xué)習(xí)。 3. 電路設(shè)計(jì)。 24 2. 與老師和同學(xué)交流討論。拿到畢設(shè)題目要盡快選定系統(tǒng)方案,不能走一步看一步,必須把整體把握好?;叵脒@段日子的經(jīng)歷和感受,我感慨萬(wàn)千,在這次畢業(yè)設(shè)計(jì)的過(guò)程中,我擁有了無(wú)數(shù)難忘的回憶和收獲。 從最初的茫然,到慢慢的進(jìn)入狀態(tài),再到對(duì)思路逐漸的清晰,整個(gè)寫作過(guò)程難以用語(yǔ)言來(lái)表達(dá)。并設(shè)置了幾個(gè)流水模式,讓設(shè)計(jì)更顯豐富。還有 8051 與 8155 的接口。 本文的重要研究工作及結(jié)論如下: 1. 介紹了很經(jīng)典的常用的 MCS51 系列單片機(jī), 介紹了 8051 的引腳功能、存儲(chǔ)器配置、并行輸入輸 出電路、定時(shí)計(jì)數(shù)器等。 在程序中,定義了 21 一個(gè) 16 位的整型變量 lamp,用來(lái)存儲(chǔ) 16 個(gè) LED 的數(shù)據(jù)。 2. 按鍵掃描 設(shè)置 8155 的 C 口為輸入 模式,在沒(méi)有按鍵按下的時(shí)候, 8155 接按鍵的幾個(gè)I/O都被相應(yīng)的上拉電阻拉為高電平,那么 MCU讀到的都是高電平;當(dāng)有按鍵按下時(shí),對(duì)應(yīng)的 I/O被接地,輸入低電平,此時(shí) MCU 從 8155C 口讀到對(duì)應(yīng)位為 0,這些都是在按鍵掃描程序里面完成的,主函數(shù)中根據(jù)按鍵值可以設(shè)定一些控制操作。 按鍵開關(guān)去抖動(dòng)問(wèn)題 鍵盤的抖動(dòng)時(shí)間一般為 5~ 10ms,抖動(dòng)現(xiàn)象會(huì)引起 CPU對(duì)一次鍵操作進(jìn)行多次處理,從而可能產(chǎn)生錯(cuò)誤。適用于按鍵數(shù)量較少的場(chǎng)合。 20 T i t l eN um be r R e vi s i o nS i z eA4D a t e : 10 J un 20 09 S h e e t o f F il e : C : \ D oc um e n t s a nd S e t ti ng s \ A dm i n i s t r a t o r \ 桌面 \論文 \ B a c k up o f C op y o f M C U _8 1 55 .D D BD r a w n B y:C 10 20. 1u FV C CA D 012P A 021A D 113P A 122A D 214P A 223A D 315P A 324A D 416P A 425A D 517P A 526A D 618P A 627A D 719P A 728P B 029CE8P B 130RD9P B 231WR10P B 332I O / M7P B 433A L E11P B 534P B 635P B 736T M R O U T6P C 037P C 138T M R I N3P C 239P C 31P C 42R E S E T4P C 55U 10 281 55D 10 1L E D 3R 10 151 0D 10 2L E D 3R 10 251 0D 10 3L E D 3D 10 4L E D 3R 10 351 0R 10 451 0R 10 551 0D 10 6L E D 3R 10 651 0D 10 7L E D 3D 10 8L E D 3R 10 751 0R 10 851 0D 10 5L E D 3D 10 9L E D 3R 10 951 0D 11 0L E D 3R 11 051 0D 11 1L E D 3D 11 2L E D 3R 11 151 0R 11 351 0R 11 451 0D 11 5L E D 3R 11 651 0D 11 6L E D 3D 11 7L E D 3R 11 751 0R 11 851 0D 11 3L E D 3S 1 04S W P BS 1 05S W P BS 1 03S W P BV C CG N DR 11 910 KR 12 010 KR 12 110 KV C C 圖 LED顯示與按鍵掃描電路 按鍵掃描 本設(shè)計(jì)采用獨(dú)立式按鍵接口設(shè)計(jì) 。 為了控制流動(dòng)速度,我 使用了一個(gè)定時(shí)器來(lái)設(shè)定兩次移位的間隔時(shí)間。 0x000F。 0x0F0F。0x7F7F。只是初值不同而已。 在實(shí)際的操作中,我設(shè)計(jì)了幾個(gè)流水模式,分別是一只燈亮,間隔兩只燈亮,連續(xù) 四只 燈亮, 間隔兩組四只燈亮,連續(xù) 八只燈亮和 連續(xù) 十二只燈亮。 8155 的 A,B 兩個(gè)口加起來(lái)剛好就是 16 個(gè) I/O,我們只需要將一個(gè) 16 位二進(jìn)制數(shù)(程序中一般習(xí)慣用十六進(jìn)制表示如 0x7FFF)送到 8155 的 A,B 口,由于我們的發(fā)光二極管( LED)是 共陽(yáng)極的接法,當(dāng) 8155 的 I/O 口輸出為低電平時(shí)對(duì)應(yīng)的 LED 就點(diǎn)亮。 發(fā)光二極管( LED)具有功耗低、體積小、可靠性高、壽命長(zhǎng)和相應(yīng)快等優(yōu)點(diǎn),早己廣泛應(yīng)用于儀器儀表、計(jì)算機(jī)、汽車、電子玩 具、通訊、自動(dòng)控制、軍事等領(lǐng)域。 第四章 單片機(jī)與 8155 的接口設(shè)計(jì)的應(yīng)用 LED 顯示 發(fā)光二極管就是 LED( Light Emitting Diode),是一種由磷化鎵( GaP)等半導(dǎo)體材料制成的、能直接將電能轉(zhuǎn)變成光能的發(fā)光顯示器件。當(dāng) 為低電平時(shí),若 =1,訪問(wèn) 8155 的 I/O 口;若 =0,則訪問(wèn) 8155 的 RAM 單元。 8051 的地址鎖存信號(hào) ALE 與8155 的 ALE 直接連接。 P2 口只作為高位地址線使用 8051 單片機(jī)與 8155 的接口 8051 和 8155 的接口非常簡(jiǎn)單,因?yàn)?8155 內(nèi)部有一個(gè) 8 位地址鎖存器,故無(wú) 需外接鎖存器 。使用分時(shí)技術(shù)被分離出的是低 8 位。 8051 并行擴(kuò)展總線 18 雖然系統(tǒng)擴(kuò)展需要地址總線和數(shù)據(jù)總線,但在單片機(jī)芯片上并沒(méi)有為此提供專用的地址引腳和數(shù)據(jù)引腳,實(shí)際擴(kuò)展時(shí)都是由 I/O口線來(lái)充當(dāng)?shù)刂肪€和數(shù)據(jù)線。 1) 定時(shí) /計(jì)數(shù)器的輸出方式 2) 定時(shí) /計(jì)數(shù)器的工作 8155 對(duì)內(nèi)部定時(shí)器的控制是由 8155 控制字的 D D6 位決定的 ,現(xiàn)總結(jié)如下 表所示。 定時(shí) /計(jì)數(shù)器使用 8155 的可編程定時(shí) /計(jì)數(shù)器是一個(gè) 14 位的減法計(jì)數(shù)器,在 TIMERIN 端輸入 17 計(jì)數(shù)脈沖,計(jì)滿時(shí)由 TIMEROUT 輸出脈沖或方波,輸出方式由定時(shí)器高 8 位寄存器中的 M M1 兩位 來(lái)決定。 本設(shè)計(jì)的 A,B,C 三個(gè) I/O 口 都是作為基本輸入輸出 I/O 用的。方式 3 時(shí), A 口為選通 I/O 方式,由C 口的低三位作聯(lián)絡(luò)線,其余位作 I/O 線; B 口為基本 I/O 方式。其中, A、 B 口可以工作于基本 I/O 方式或選通 I/O方式, C 口可工作于基本 I/O 方式,也可以作為 A、 B 選通方式時(shí)的控制聯(lián)絡(luò)線。 2) 定時(shí) 器高、低 8 位寄存器 : 關(guān)于 定時(shí) /計(jì)數(shù)器高、低 8 位寄存器的使用,我們將在后面講到定時(shí)器使用時(shí)再作介紹。 1: 滿B 口中斷允許: 0: 禁止。 1: 允許B 口中斷請(qǐng)求標(biāo)志: 0: 無(wú)。 1: 有A 口緩沖器: 0: 空。 狀態(tài)字的各位定義如下圖所示。 ? 命令寄存器只能寫入不能讀出,也就是說(shuō),控制字只能通過(guò)指令 MOVX DPTR, A 或 MOVX Ri, A 寫入命令寄存器。 1) 命 令 /狀態(tài)寄存器 ? 和接口芯片 8255 一樣,芯片 8155 I/O 口的工作方式的確定也是通過(guò)對(duì)8155 的命令寄存器寫入控制字來(lái)實(shí)現(xiàn)的。 作擴(kuò)展 I/O 口使用 當(dāng)