|
摘要:本文介紹了一款以單片機(jī)AT89S51為控制器的LED點(diǎn)陣顯示屏系統(tǒng)的設(shè)計(jì)。該系統(tǒng)可實(shí)現(xiàn)中英文字符的顯示和動(dòng)態(tài)特效顯示。并且可以通過(guò)級(jí)連的方式來(lái)擴(kuò)大顯示屏幕的尺寸以達(dá)到增加顯示內(nèi)容的目的。系統(tǒng)采用PC機(jī)作為上位機(jī),上位機(jī)向單片機(jī)發(fā)送控制命令和上位機(jī)所存儲(chǔ)的顯示代碼,AT89S51單片機(jī)接收并處理PC機(jī)的控制命令以及顯示代碼,由顯示驅(qū)動(dòng)模塊驅(qū)動(dòng)一個(gè)16×16分辨率的LED點(diǎn)陣顯示屏的掃描顯示。PC機(jī)與單片機(jī)之間的通信采用RS—232C通信標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)。所選用的AT89S51單片機(jī)具有價(jià)格低廉程序?qū)懭敕奖愕奶攸c(diǎn)使得整個(gè)系統(tǒng)方便維護(hù)和檢修。除此之外,該系統(tǒng)只占用了單片機(jī)少量的I /O口和內(nèi)存,為系統(tǒng)留下了功能擴(kuò)展的空間。
對(duì)設(shè)計(jì)題目的特點(diǎn),作者對(duì)論文的內(nèi)容和結(jié)構(gòu)將做如下安排: (1)初步方案的論證和選擇 搜集題目的有關(guān)資料,并參照目前通用的設(shè)計(jì)思想和設(shè)計(jì)方法擬定幾套設(shè)計(jì)方案進(jìn)行分析比較。最終選定了以PC機(jī)為上位機(jī),單片機(jī)為核心控制器件,外加譯碼電路和驅(qū)動(dòng)電路的設(shè)計(jì)方案。 (2)方案實(shí)現(xiàn) 以設(shè)計(jì)方案為指導(dǎo)思想選擇合適的器件來(lái)實(shí)現(xiàn)這一思想,選擇器件時(shí)要從功能和電氣特性兩方面來(lái)選擇和論證。經(jīng)過(guò)對(duì)比選擇選定AT89S51單片機(jī)為核心控制器件,由串并轉(zhuǎn)換器74LS164和鎖存器74LS373為譯碼電路器件,三極管8550和ULN2803為驅(qū)動(dòng)電路器件。論文列出了詳細(xì)的器件參數(shù)和在系統(tǒng)中的連接使用方法。 (3)軟件編寫 根據(jù)硬件特點(diǎn)和設(shè)計(jì)要求,軟件選用C語(yǔ)言編寫。程序按功能分為靜態(tài)顯示、動(dòng)態(tài)顯示、通信等幾個(gè)功能上相對(duì)獨(dú)立的模塊。然后按照所劃分的模塊逐個(gè)編寫和調(diào)試,最后將獨(dú)立的模塊整合起來(lái)。 (4)驗(yàn)證與測(cè)試 調(diào)試分為硬件調(diào)試、軟件調(diào)試和系統(tǒng)聯(lián)合調(diào)試幾步來(lái)進(jìn)行。在硬件調(diào)試中發(fā)現(xiàn)有單片機(jī)端口驅(qū)動(dòng)能力不足、驅(qū)動(dòng)電路工作不穩(wěn)定等問(wèn)題。在軟件調(diào)試中出現(xiàn)程序整合工作不協(xié)調(diào)等問(wèn)題。通過(guò)分析,查找找出了問(wèn)題原因并設(shè)法將其解決。 (5)結(jié)論 設(shè)計(jì)完成后對(duì)設(shè)計(jì)中所遇到的問(wèn)題、經(jīng)驗(yàn)教訓(xùn)、以及自己的想法進(jìn)行總結(jié)。 第2章 方案論證與選擇2.1 系統(tǒng)硬件方案大多數(shù)的LED顯示屏都在戶外,所以對(duì)硬件的質(zhì)量要求非常的高。為方便檢修和維護(hù)硬件電路設(shè)計(jì)時(shí)常常采用模塊化的設(shè)計(jì)方法。硬件的設(shè)計(jì)采用模塊化設(shè)計(jì),既要滿足模塊本身功能又要能夠和整個(gè)系統(tǒng)兼容。如圖2-1所示,根據(jù)顯示系統(tǒng)的功能特點(diǎn)確定系統(tǒng)硬件由顯示屏部分,控制部分,通信系統(tǒng)及上位機(jī)四部分組成。上位機(jī)通過(guò)通信部分向控制部分發(fā)送控制指令和顯示內(nèi)容代碼,控制部分執(zhí)行顯示指令并將顯示代碼處理后控制顯示部分的顯示內(nèi)容和顯示方式[3]。 圖2-1 系統(tǒng)硬件組成框圖 2.1.1 顯示屏主控制器控制部分是整個(gè)系統(tǒng)的核心部分,其功能為與上位機(jī)通信接收上位機(jī)發(fā)送的數(shù)據(jù)和控制指令處理過(guò)后控制顯示部分顯示內(nèi)容。其常用的電子設(shè)計(jì)方法有單片機(jī)、DSP、及EDA技術(shù)。幾種設(shè)計(jì)方法比較各有其特點(diǎn): (1)單片機(jī) 單片機(jī)是集成了CPU,ROM,RAM和I/ O口的微型計(jì)算機(jī)。它有很強(qiáng)的接口性能,非常適合于工業(yè)控制,因此又叫微控制器(MCU)。單片機(jī)品種齊全,型號(hào)多樣 CPU 從8,16,32到64位,多采用RISC 技術(shù),片上I/O非常豐富,有的單片機(jī)集成有A/ D,“ 看門狗”,PWM,顯示驅(qū)動(dòng),函數(shù)發(fā)生器,鍵盤控制等。它們的價(jià)格也高低不等,這樣極大地滿足了開(kāi)發(fā)者的選擇自由。除此之外單片機(jī)還具有低電壓和低功耗的特點(diǎn)。隨著超大規(guī)模集成電路的發(fā)展,NMOS工藝單片機(jī)被CMOS代替,并開(kāi)始向HMOS 過(guò)渡。供電電壓由5V 降到3V,2V甚至到1V,工作電流由mA降至μA ,這在便攜式產(chǎn)品中大有用武之地[4]。 (2)DSP 芯片 DSP 又叫數(shù)字信號(hào)處理器。顧名思義,DSP主要用于數(shù)字信號(hào)處理領(lǐng)域,非常適合高密度,重復(fù)運(yùn)算及大數(shù)據(jù)容量的信號(hào)處理。現(xiàn)在已經(jīng)廣泛應(yīng)用于通信、便攜式計(jì)算機(jī)和便攜式儀表、雷達(dá)、圖像、航空、家用電器、醫(yī)療設(shè)備等領(lǐng)域,DSP具有修正的哈佛結(jié)構(gòu),多總線技術(shù)以及流水線結(jié)構(gòu)。將程序與數(shù)據(jù)存儲(chǔ)器分開(kāi),使用多總線,取指令和取數(shù)據(jù)同時(shí)進(jìn)行,以及流水線技術(shù),這使得速度有了較大的提高。DSP區(qū)別于一般微處理器的另一重要標(biāo)志是硬件乘法器以及特殊指令,一般微處理器用軟件實(shí)現(xiàn)乘法,逐條執(zhí)行指令,速度慢。而DSP 依靠硬件乘法器單周期完成乘法運(yùn)算,而且還具有專門的信號(hào)處理指令,如TM320 系列的FIRS ,LMS,MACD指令等[5]。 (3)EDA EDA(即Electronic Design Automation) 即電子設(shè)計(jì)自動(dòng)化,它是以計(jì)算機(jī)為工具,在EDA 軟件平臺(tái)上,對(duì)用硬件描述語(yǔ)言HDL 完成的設(shè)計(jì)文件自動(dòng)地邏輯編譯、邏輯化簡(jiǎn)、邏輯分割、邏輯綜合及優(yōu)化、邏輯布局布線、邏輯仿真,直至對(duì)于特定目標(biāo)芯片進(jìn)行適配編譯、邏輯影射和編程下載等。設(shè)計(jì)者只需用HDL 語(yǔ)言完成系統(tǒng)功能的描述,借助EDA工具就可得到設(shè)計(jì)結(jié)果,將編譯后的代碼下載到目標(biāo)芯片就可在硬件上實(shí)現(xiàn)。由于FPGA/CPLD可以通過(guò)軟件編程對(duì)該硬件的結(jié)構(gòu)和工作方式進(jìn)行重構(gòu),修改軟件程序就相當(dāng)于改變了硬件,軟件編寫可以采用自頂向下的設(shè)計(jì)方案,而且可以多個(gè)人分工并行工作這樣便縮短了開(kāi)發(fā)周期和上市時(shí)間,有利于在激烈的市場(chǎng)競(jìng)爭(zhēng)中搶占先機(jī)。而且MCU和DSP都是通過(guò)串行執(zhí)行指令來(lái)實(shí)現(xiàn)特定功能,不可避免低速,而FPGA/CPLD則可實(shí)現(xiàn)硬件上的并行工作,在實(shí)時(shí)測(cè)控和高速應(yīng)用領(lǐng)域前景廣闊;另一方面,F(xiàn)PGA/CPLP器件在功能開(kāi)發(fā)上是軟件實(shí)現(xiàn)的,但物理機(jī)制卻和純硬件電路一樣,十分可靠。 三種設(shè)計(jì)方式相比較各有優(yōu)點(diǎn)且都能夠?qū)崿F(xiàn)控制功能,但單片機(jī)的技術(shù)門檻較低開(kāi)發(fā)成本也較低非常適合初學(xué)者進(jìn)行學(xué)習(xí)和鍛煉使用。現(xiàn)在市場(chǎng)上常用的單片機(jī)主要有MCS-51、AVR、ARM、PIC等。其中應(yīng)用最廣泛的單片機(jī)首推Intel的51系列,由于產(chǎn)品硬件結(jié)構(gòu)合理,指令系統(tǒng)規(guī)范,加之生產(chǎn)歷史“悠久”,有先入為主的優(yōu)勢(shì)常作為單片機(jī)學(xué)習(xí)的教材。且51系列的I/O腳的設(shè)置和使用非常簡(jiǎn)單,當(dāng)該腳作輸入腳使用時(shí),只須將該腳設(shè)置為高電平(復(fù)位時(shí),各I/O口均置高電平)。當(dāng)該腳作輸出腳使用時(shí),則為高電平或低電平均可。所以在控制部分方案的選擇中選定51系列單片機(jī)作為控制部分的核心器件。 2.1.2 通信系統(tǒng)通信部分要滿足的設(shè)計(jì)要求就是穩(wěn)定、快速、簡(jiǎn)單易實(shí)現(xiàn)。因?yàn)橥ǔG闆r下顯示屏和上位機(jī)的距離不會(huì)很遠(yuǎn),所以通信距離的要求不是很高。計(jì)算機(jī)數(shù)據(jù)通信主要采用并行通信和串行通信兩種方式。 (1)并行通信 并行通信時(shí)數(shù)據(jù)的各個(gè)位同時(shí)傳送,可以字或字節(jié)為單位并行進(jìn)行。并行通信速度快,但用的通信線多、成本高,故不宜進(jìn)行遠(yuǎn)距離通信。 (2)串行通信 串行通信數(shù)據(jù)是一位一位順序傳送,只用很少幾根通信線,串行傳送的速度低,但傳送的距離長(zhǎng),因此串行適用于長(zhǎng)距離而速度要求不高的場(chǎng)合。在串行發(fā)送時(shí),數(shù)據(jù)是一位一位按順序進(jìn)行的,而計(jì)算機(jī)內(nèi)部的數(shù)據(jù)是并行的。因此,當(dāng)計(jì)算機(jī)向外發(fā)送數(shù)據(jù)時(shí),必須將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)再發(fā)送。反之,又必須將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)輸入計(jì)算機(jī)中。這種轉(zhuǎn)換即可以用硬件實(shí)現(xiàn)也可以用軟件實(shí)現(xiàn)。單由軟件實(shí)現(xiàn)會(huì)增加CPU負(fù)擔(dān),降低其利用率,故目前常采用硬件實(shí)現(xiàn)。通用的通用異步接收/發(fā)送器,簡(jiǎn)稱UART(Universal AsynchromousReceeiver/Trabsnitter)是完成這一功能的硬件電路。在單片機(jī)芯片中,UART已經(jīng)集成在其中,作為其組成部分,構(gòu)成一個(gè)串行口[6]。 綜上所述,題目設(shè)計(jì)已經(jīng)選定了單片機(jī)為開(kāi)發(fā)方式而單片機(jī)的UART已經(jīng)集成在單片機(jī)內(nèi),所以通信系統(tǒng)選擇串行通信為通信方式。 2.1.3 LED點(diǎn)陣顯示屏顯示部分包括了一塊至少可以顯示一個(gè)漢字的顯示屏,以及驅(qū)動(dòng)該顯示屏的驅(qū)動(dòng)電路。由于單片機(jī)的I/O口有限要不能直接用I/O口來(lái)驅(qū)動(dòng)LED顯示屏,所以需要對(duì)單片機(jī)IO口進(jìn)行擴(kuò)展增加單片機(jī)并行輸出的能力。 LED顯示屏是由一個(gè)一個(gè)的發(fā)光二極管點(diǎn)陣構(gòu)成的,要構(gòu)成大屏幕的LED顯示屏就需要多個(gè)發(fā)光二極管。構(gòu)成LED屏幕的方法有兩種,一是由單個(gè)的發(fā)光二極管逐點(diǎn)連接起來(lái),如圖2-2所示;二是選用一些由單個(gè)發(fā)光二極管構(gòu)成的LED點(diǎn)陣子模塊構(gòu)成大的LED點(diǎn)陣模塊。目前市場(chǎng)上普遍采用的點(diǎn)陣模塊有8×8、16×16幾種;這兩種屏幕構(gòu)成方法各有有缺點(diǎn),單個(gè)發(fā)光二極管構(gòu)成顯示屏優(yōu)點(diǎn)在于當(dāng)單個(gè)的發(fā)光二極管出現(xiàn)問(wèn)題時(shí)只需更換一個(gè)二極管即可,檢修的成本較低,缺點(diǎn)在于連接線路復(fù)雜;而點(diǎn)陣模塊構(gòu)成的方法卻正好與之相反,模塊構(gòu)成省約了大量的連線,不過(guò)當(dāng)一個(gè)LED出現(xiàn)問(wèn)題時(shí)同在一個(gè)模塊的所有LED都必須被更換。這就加大了維修的成本。 兩種方法相比較,決定采取模塊構(gòu)成的方法來(lái)制作一個(gè)LED點(diǎn)陣顯示屏。為了避免模塊的缺點(diǎn),選擇點(diǎn)陣數(shù)較小的模塊來(lái)減小出現(xiàn)這一問(wèn)題的風(fēng)險(xiǎn)。所以構(gòu)建一個(gè)16×16的LED點(diǎn)陣屏選用四塊8×8點(diǎn)陣模塊。 圖 2-2LED點(diǎn)陣圖 一個(gè)16×16的LED顯示屏行和列各有16支引腳,不能單靠51單片機(jī)的端口驅(qū)動(dòng)所以必須要對(duì)單片機(jī)的端口個(gè)數(shù)進(jìn)行擴(kuò)展。經(jīng)常采用的端口擴(kuò)展方法是用串并轉(zhuǎn)換芯片進(jìn)行譯碼。常用的串并轉(zhuǎn)換芯片有74LS154(4線-16線譯碼器)、74LS164(8位串并轉(zhuǎn)換器)、74HC595等。51系列單片機(jī)端口低電平時(shí),吸入電流可達(dá)20mA,具有一定的驅(qū)動(dòng)能力;而為高電平時(shí),輸出電流僅數(shù)十μA甚至更小(電流實(shí)際上是由腳的上拉電流形成的),基本上沒(méi)有驅(qū)動(dòng)能力,所以單片機(jī)不能直接驅(qū)動(dòng)LED顯示屏顯示。在單片機(jī)和顯示屏之間還需要增加以功能放大位目的的驅(qū)動(dòng)電路[7]。 2.1.4 硬件設(shè)計(jì)方案最終方案如圖2-3所示,以PC機(jī)作為上位機(jī)存儲(chǔ)和處理顯示內(nèi)容用串行通信的方式將顯示內(nèi)容和控制指令傳輸?shù)絾纹瑱C(jī)系統(tǒng),單片機(jī)根據(jù)上位機(jī)傳輸來(lái)的內(nèi)容和指令通過(guò)端口譯碼擴(kuò)展后驅(qū)動(dòng)4塊8×8LED點(diǎn)陣模塊構(gòu)成的16×16的LED點(diǎn)陣顯示屏。題目將以此方案為指導(dǎo)思想展開(kāi)具體的硬件電路設(shè)計(jì)。 圖2-3 硬件設(shè)計(jì)方案 2.2 系統(tǒng)軟件方案軟件的設(shè)計(jì)除了滿足設(shè)計(jì)功能外還必須要滿足易讀寫,方便下載和編譯。設(shè)計(jì)目標(biāo)和硬件總體結(jié)構(gòu)確定的情況下,軟件可以分為主程序,顯示子程序,各種特效顯示子程序,通信程序三個(gè)主要部分組成。具體結(jié)構(gòu)如圖2-4所示。 圖2-4 軟件功能結(jié)構(gòu)框圖 軟件的編寫需要借助軟件編輯器和編譯軟件,編譯完成后還需要下載到單片機(jī)中執(zhí)行。編寫軟件之前得首先選擇一種合適的語(yǔ)言以及配套的編輯器和編譯軟件。最后還要選擇一款與所選單片機(jī)的下載器或下載軟件來(lái)把編寫的程序下載到單片機(jī)中執(zhí)行。 第3章 系統(tǒng)硬件設(shè)計(jì)3.1 硬件整體設(shè)計(jì)概述及功能分析 顯示系統(tǒng)具體設(shè)計(jì)主要由上位機(jī),通信系統(tǒng),單片機(jī)系統(tǒng),譯碼電路,顯示驅(qū)動(dòng)電路和16×16的點(diǎn)陣屏六部分組成。具體工作流程為:上位PC機(jī)通過(guò)通信系統(tǒng)向單片機(jī)發(fā)送控制指令和顯示代碼內(nèi)容,單片機(jī)接收后執(zhí)行控制指令處理顯示代碼將顯示內(nèi)容通過(guò)I/O口串行輸出并且控制譯碼電路完成串并轉(zhuǎn)換并行輸出,最后由顯示驅(qū)動(dòng)電路進(jìn)行電壓和電流的處理以達(dá)到LED顯示屏的顯示電流,電壓要求進(jìn)而使顯示屏顯示內(nèi)容[11]。 根據(jù)硬件的功能結(jié)構(gòu)圖選取合適器件,器件不但要求能實(shí)現(xiàn)所要求的功能還要能兼容至整個(gè)系統(tǒng)之中。通過(guò)查閱資料和對(duì)比最終的硬件原理圖如圖3-1所示。 圖3-1 硬件原理圖 3.2.2 控制系統(tǒng)設(shè)計(jì)控制電路設(shè)計(jì)中采用的是單片機(jī)系統(tǒng),該系統(tǒng)必須要是工作在一個(gè)最小系統(tǒng)(指單片機(jī)的可以的最小配置系統(tǒng))。AT89S51的最小系統(tǒng)包括了外界時(shí)鐘電路和復(fù)位電路,選定一定數(shù)量的IO口作為控制口控制外部的各種器件和數(shù)據(jù)的輸出。根據(jù)功能選擇一定的單片機(jī)端口添加外圍的器件,具體電路如圖3-2所示。 在該系統(tǒng)中,P1各口主要用作LED顯示數(shù)據(jù)的控制輸出。由于端口的驅(qū)動(dòng)能力有限所以該端口外接了5K的上拉電阻來(lái)提高驅(qū)動(dòng)能力。其中P1.5P1.6P1.7還復(fù)用為ISP下載功能口。具體接法為:P1.0,P1.1,P1.4,P1.5分別接四塊74LS164的A端,向74LS164送入串行數(shù)據(jù)經(jīng)過(guò)其轉(zhuǎn)換后并行輸出;P1.2和P1.6分別接列和行的74LS164的CLOCK端,產(chǎn)生移位脈沖是串行數(shù)據(jù)并行輸出;P1.3和P1.7接列和行的CLEAR端,在一組數(shù)據(jù)完成串并轉(zhuǎn)換后清除164芯片中的內(nèi)容轉(zhuǎn)換新的數(shù)據(jù);其中P1.5P1.6P1.7還復(fù)用為ISP下載功能口。P2.0接164芯片的使能控制端,當(dāng)為高電平使允許輸出;P2.2和P2.3接鎖存器74LS373的OE和LE端控制鎖存器的工作狀態(tài)。 端口30,EA/VPP:外部訪問(wèn)允許。欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。因?yàn)闆](méi)有擴(kuò)展外部程序存儲(chǔ)器所以將EA置為高電平。 圖3-2 控制部分電路圖 由于P3口是特殊功能口,在該系統(tǒng)中基本是采用其第二功能。其第二功能和實(shí)際運(yùn)用如表3-1所示: 表3-1 AT89S51P3口第二功能的應(yīng)用 | | | | | 與上位機(jī)通信的數(shù)據(jù)輸入口 | | | 與上位機(jī)通信的數(shù)據(jù)輸出口 | | | | | | |
AT89S51單片機(jī)的P1在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,P2口在訪問(wèn)外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口送出高8位地址數(shù)據(jù)。所以P1和P2口留為外部數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器的擴(kuò)展用,以備內(nèi)部存儲(chǔ)器和程序存儲(chǔ)器不夠用的情況時(shí)使用[12]。 3.3 譯碼電路設(shè)計(jì)
譯碼電路的功能是為了解決單片機(jī)I/O端口不足。行譯碼所用器件為串并轉(zhuǎn)換器74LS164和鎖存器74LS373。具體電路如圖3-3所示 圖3-3 行譯碼電路圖 3.3.1 串并轉(zhuǎn)換器74LS164列譯碼采用的是芯片74LS164。如果不采用譯碼電路完全依靠單片機(jī)的端口輸出來(lái)控制16×16的LED點(diǎn)陣屏顯示,需要32個(gè)端口。而采用了譯碼電路后僅僅需要7~9個(gè)端口便可實(shí)現(xiàn)控制顯示。大大減少了I/O口的占用數(shù)目,為單片機(jī)擴(kuò)展其他功能預(yù)留下來(lái)了空間。 74LS164為一個(gè)8位數(shù)據(jù)的串并轉(zhuǎn)換器。當(dāng)清除端(CLEAR)為低電平時(shí),輸出端(QA-QH)均為低電平。串行數(shù)據(jù)輸入端(A,B)可控制數(shù)據(jù)。當(dāng)A、B任意一個(gè)為低電平,則禁止新數(shù)據(jù)輸入,在時(shí)鐘端(CLOCK)脈沖上升沿作用下Q0為低電平。當(dāng)A、B有一個(gè)為高電平,則另一個(gè)就允許輸入數(shù)據(jù),并在CLOCK上升沿作用下決定Q0的狀態(tài)。 表3-1 74LS164工作參數(shù) 這就要求單片機(jī)的引腳輸出的高低電平要在芯片的識(shí)別范圍內(nèi),由于采用了列選通行傳送顯示代碼的方法所以行譯碼電路上也加上了74L373鎖存芯片。這就要求74LS164芯片的輸出要滿足鎖存芯片的高低電平區(qū)分范圍和頻率要求。 3.3.2 鎖存器74L373由于74LS164芯片不具有鎖存功能,所以在74LS164進(jìn)行八位數(shù)據(jù)的串并轉(zhuǎn)換時(shí),串行數(shù)據(jù)的第一位會(huì)從QA依次移位到QH,第二位數(shù)據(jù)會(huì)從QA依次移位到QG,依次類推在八位數(shù)據(jù)轉(zhuǎn)換完成之前74LS164芯片的輸出會(huì)出現(xiàn)一段時(shí)間的亂序輸出,這一結(jié)果會(huì)通過(guò)驅(qū)動(dòng)電路表現(xiàn)在顯示屏上。結(jié)果就是顯示屏無(wú)序?qū)ㄩW爍,不能顯示所需內(nèi)容。因此在串并轉(zhuǎn)換完成前就需要74LS164的輸出口不與驅(qū)動(dòng)電路導(dǎo)通。所以選擇鎖存器74LS373來(lái)完成這一功能。 74LS373為八D鎖存器(3S,鎖存允許輸入有回環(huán)特性)。373為三態(tài)輸出的八D透明鎖存器,共有54/74S373和54/74LS373兩種線路結(jié)構(gòu)形式當(dāng)三態(tài)允許控制端OE為低電平時(shí),O0~O7為正常邏輯狀態(tài),可用來(lái)驅(qū)動(dòng)負(fù)載或總線。當(dāng)OE為高電平時(shí),O0~O7呈高阻態(tài),即不驅(qū)動(dòng)總線,也不為總線的負(fù)載,但鎖存器內(nèi)部的邏輯操作不受影響。當(dāng)鎖存允許端LE為高電平時(shí),O隨數(shù)據(jù)D而變。當(dāng)LE為低電平時(shí),O被鎖存在已建立的數(shù)據(jù)電平。 表3-2 74LS373工作參數(shù)表 由表與表比較可以看出,74LS164的輸出條件與74LS373的輸入條件相匹配,理論上可以實(shí)現(xiàn)鎖存器對(duì)譯碼器的數(shù)據(jù)鎖存。 3.4 驅(qū)動(dòng)電路設(shè)計(jì)3.4.1 行驅(qū)動(dòng)電路設(shè)計(jì)發(fā)光二極管,LED(Light Emitting Diodes),即是在在某些半導(dǎo)體材料的PN結(jié)中,注入的少數(shù)載流子與多數(shù)載流子復(fù)合時(shí)會(huì)把多余的能量以光的形式釋放出來(lái),從而把電能直接轉(zhuǎn)換為光能。PN結(jié)加反向電壓,少數(shù)載流子難以注入,故不發(fā)光。這種利用注入式電致發(fā)光原理制作的二極管叫發(fā)光二極管,通稱LED。 行驅(qū)動(dòng)采用PNP三極管8550接法如圖3-4示: 圖3-4 行驅(qū)動(dòng)器件8550的接法 8550為PNP型三極管,內(nèi)部結(jié)構(gòu)如圖3-5示。發(fā)射極e接5V電源,基極接譯碼信號(hào)輸出端,集電極接輸出驅(qū)動(dòng)LED點(diǎn)陣屏。當(dāng)譯碼器端口輸出為低電平時(shí),發(fā)射極與基極電勢(shì)差為5V- 基極中帶負(fù)電的電子越過(guò)PN結(jié)擴(kuò)散到發(fā)射區(qū)。發(fā)射極產(chǎn)生和電子擴(kuò)散方向相反的電流,由于基極電子大量擴(kuò)散到發(fā)射極集電極電子擴(kuò)散到基極中形成了電流 。當(dāng)譯碼器端口輸出高電平時(shí)發(fā)射極與基極之間的電勢(shì)差為5V- - ,由于發(fā)射極與基極之間電勢(shì)差的減少基極電子向發(fā)射極擴(kuò)散的電子數(shù)量減少故集電極電流也隨之減少。故8550在驅(qū)動(dòng)電路中起到提供驅(qū)動(dòng)電流和選通開(kāi)關(guān)的作用。 圖3-5 8550內(nèi)部結(jié)構(gòu)圖 3.4.2 列驅(qū)動(dòng)電路設(shè)計(jì)列驅(qū)動(dòng)采用ULN2803。ULN2803是一種高電壓大電流達(dá)林頓管陣列內(nèi)部結(jié)構(gòu)如圖,該陣列中的八個(gè)NPN達(dá)林頓連接晶體管是低邏輯電平數(shù)字電路(如TTL,CMOS或PMOS)和大電流高電壓的燈,繼電器,打印機(jī)錘和其他類似負(fù)載間的接口的理想器件。廣泛用于計(jì)算機(jī),工業(yè)和消費(fèi)類產(chǎn)品中。所有器件有集電極開(kāi)路輸出和用于瞬變抑制的續(xù)流箝位二極管。集電極輸出功率可達(dá)50V×600mA[13]。 ULN2803作為列驅(qū)動(dòng)執(zhí)行的是列選的工作,當(dāng)選通的列輸入高電平時(shí)其對(duì)應(yīng)的輸輸出低電平。相對(duì)應(yīng)的輸出取反,并能提供較大的灌電流來(lái)吸收行驅(qū)動(dòng)流出進(jìn)過(guò)顯示屏后的電流。具體電路如圖3-7所示。 圖3-7 列驅(qū)動(dòng)原理圖 3.5 通信系統(tǒng)硬件設(shè)計(jì)AT89S51單片機(jī)具有全雙工串行UART通道,支持單片機(jī)進(jìn)行數(shù)據(jù)的串行傳輸。除了單片機(jī)要與PC機(jī)制定通信協(xié)議,確定發(fā)送速率外還需要解決的問(wèn)題就是信號(hào)電平問(wèn)題。RS-232C標(biāo)準(zhǔn)規(guī)定了PC機(jī)發(fā)送數(shù)據(jù)總線TXD和接收數(shù)據(jù)總線RXD采用EIA電平,即傳送數(shù)字“1”時(shí)傳輸線上的電平在-3~-15V之間;傳送數(shù)字“0”時(shí),傳輸線上的電平在+3~+15之間。但單片機(jī)串行口采用正邏輯TTL電平,即數(shù)字“1”時(shí)為+5V數(shù)字“0”時(shí)為-5V,所以單片機(jī)與計(jì)算機(jī)不能直接相連進(jìn)行通信必須將RS-232C與TTL電平進(jìn)行轉(zhuǎn)換[14]。 在通用的電平轉(zhuǎn)換芯片中MAX232系列的芯片以集成度高,單+5V電源工作,只需外接5個(gè)小電容即可完成RS-232C與TTL電平之間的轉(zhuǎn)換而成為單片機(jī)系統(tǒng)中的常用芯片。在該顯示系統(tǒng)中,MAX232為通信系統(tǒng)中最重要的硬件組成部分[15]。電路如圖3-8所示: 圖3-8 串口通信系統(tǒng)電路圖 3.6 電源設(shè)計(jì)在系統(tǒng)中MAX232、74LS164、74LS373、AT89S51都需要5V的供電電壓,在系統(tǒng)開(kāi)發(fā)過(guò)程中可以使用電腦USB供電。在實(shí)際的大屏幕LED顯示屏設(shè)計(jì)中,用電腦USB供電明顯不切實(shí)際。此時(shí)需要對(duì)民用的220V進(jìn)行降壓整流為5V直流電壓為顯示系統(tǒng)供電。電路圖如圖3-9所示。 圖3-9 電源原理圖 如圖所示,用220V轉(zhuǎn)12V的變壓器進(jìn)行降壓后再通過(guò)一個(gè)橋式整流電路將交流電整流為直流電。最后通過(guò)5V三端穩(wěn)壓模塊LM7805得出穩(wěn)定的5V輸出。 3.7 級(jí)連大屏幕LED顯示屏 要實(shí)現(xiàn)LED的大屏幕顯示主要采用內(nèi)部譯碼器級(jí)連和多個(gè)單片機(jī)系統(tǒng)級(jí)連的方法。譯碼器級(jí)連如圖3-10所示 將第1個(gè)74LS164的Q7端接第2個(gè)74LS164的A端,將第2個(gè)74LS164的Q7端接第3個(gè)74LS164的A端,如此炮制當(dāng)N塊74LS164相級(jí)連時(shí)就變?yōu)橐粋(gè)串行輸入7×N口輸出的串并轉(zhuǎn)換器。這種級(jí)連的優(yōu)點(diǎn)在于一塊單片機(jī)可以同時(shí)控制更多的LED點(diǎn)陣顯示屏,且74LS164的價(jià)格低廉整體成本得到了降低。但是這種級(jí)連方法也存在一定的缺點(diǎn),51系列的單片機(jī)的晶振頻率不高74LS164級(jí)連過(guò)多會(huì)增加一次掃描的時(shí)間從而導(dǎo)致顯示出現(xiàn)閃爍。從端口輸出的顯示數(shù)據(jù)的顯示也要作出相應(yīng)的改變。 圖3-10 74LSL64級(jí)連 構(gòu)建大屏幕LED顯示屏的另一種方法是將以較小的LED顯示系統(tǒng)做為模塊進(jìn)行級(jí)連。如圖3-11所示,由獨(dú)立的LED顯示系統(tǒng)組成一個(gè)大的LED顯示系統(tǒng)。其中各子顯示系統(tǒng)之間在功能和控制上都是相互獨(dú)立的,將一幅大屏幕畫面拆分為幾塊小畫面再分別送入到各子系統(tǒng)中,各子系統(tǒng)同步顯示便可以得到一幅大的畫面。使用這種級(jí)連的辦法可以避免51單片機(jī)晶振頻率低的弱點(diǎn),更容易實(shí)現(xiàn)大屏幕的顯示。但這種方法仍然存在難點(diǎn),一是各獨(dú)立的子系統(tǒng)的通信和協(xié)調(diào)性要求更高了,如果要實(shí)現(xiàn)顯示內(nèi)容的實(shí)時(shí)性必須需要上位機(jī)不斷更新顯示內(nèi)容則增加了上位機(jī)的通信數(shù)據(jù)量,逐個(gè)的單片機(jī)傳送數(shù)據(jù)也會(huì)影響整個(gè)畫面的更新速度;二是成本提高了。 圖3-11 由子系統(tǒng)構(gòu)建大屏幕LED顯示屏 在實(shí)際應(yīng)用中通常采用內(nèi)部擴(kuò)展和外部級(jí)連聯(lián)合使用的方法來(lái)構(gòu)建大屏幕LED顯示屏幕。即增加單個(gè)顯示系統(tǒng)顯示屏幕大小的同時(shí)又將單個(gè)的顯示系統(tǒng)級(jí)連。詳細(xì)硬件原理圖見(jiàn)附錄1。
第4章 系統(tǒng)軟件設(shè)計(jì)4.1 程序設(shè)計(jì)系統(tǒng)軟件采用C語(yǔ)言編寫,按照模塊化的設(shè)計(jì)思路設(shè)計(jì)。首先分析程序所要實(shí)現(xiàn)的功能,程序要實(shí)現(xiàn)串口通信,靜態(tài)顯示,動(dòng)態(tài)顯示三大功能。其功能結(jié)構(gòu)如圖2-4所示。通信程序接收上位機(jī)數(shù)據(jù),交給主程序處理再通過(guò)控制程序選擇不同的顯示程序進(jìn)行顯示。 主程序的工作流程如圖4-1所示: 圖4-1主程序流程圖 程序開(kāi)始時(shí)首先必須對(duì)單片機(jī)進(jìn)行初始化,其中初始化的內(nèi)容包括:中斷優(yōu)先級(jí)的設(shè)定,中斷初始化,串行通信時(shí)通信方式的選擇和波特率的設(shè)定,各IO口功能的設(shè)定等。初始化完成后程序進(jìn)入待機(jī)狀態(tài)等待中斷的發(fā)生,該程序中主要用到了兩個(gè)外部中斷源和串行中斷。外部中斷源由按鍵的電平變化觸發(fā),外部中斷主要功能是選擇LED點(diǎn)陣顯示屏的控制方式是由按鍵控制還是上位機(jī)控制和顯示狀態(tài)是靜態(tài)顯示還是動(dòng)態(tài)顯示。串行中斷包括發(fā)送中斷和接收中斷都是由軟件觸發(fā)。中斷產(chǎn)生后由預(yù)先初始化時(shí)設(shè)定跳轉(zhuǎn)執(zhí)行中斷子程序。中斷程序設(shè)定了LED點(diǎn)陣顯示屏所要顯示的內(nèi)容和顯示的方式,最后執(zhí)行的是各種顯示程序。按照設(shè)定的方式和內(nèi)容顯示出所需要的內(nèi)容。 4.2 顯示程序的設(shè)計(jì)4.2.1 LED顯示屏的顯示方式LED點(diǎn)陣屏顯示方式主要由靜態(tài)顯示和動(dòng)態(tài)掃描顯示兩種。 對(duì)靜態(tài)顯示來(lái)說(shuō),每一個(gè)發(fā)光二極管都需要一套驅(qū)動(dòng)電路,一幀畫面輸入以后便可一勞永逸地顯示,除非我們改變了顯示內(nèi)容,需要重新輸出新的點(diǎn)陣數(shù)據(jù).這種方式系統(tǒng)原理相對(duì)簡(jiǎn)單一些,但所需的譯碼驅(qū)動(dòng)裝量很多,引線多而繁雜,不便于大屏幕的制造,成本高,其可靠性也較低. 另一種動(dòng)態(tài)掃描顯示是把整個(gè)LED屏幕分成若干部分,每一幅畫面的顯示是顯示完一部分后,又顯示第二部分……直到顯示完最后一部分又重新開(kāi)始顯示第一部分,重復(fù)循環(huán)進(jìn)行.在重復(fù)掃描速度足夠快的情況下,我們看到的就是一幅穩(wěn)定的畫面.也就是說(shuō)采用動(dòng)態(tài)掃描顯示需要不斷進(jìn)行畫面的刷新.在這種方式下其顯示驅(qū)動(dòng)電路可重復(fù)利用,引線也大大減少,從而使硬件成本降低,且屏幕上的發(fā)光二極管輪流發(fā)光,使用時(shí)的耗電量大大降低.大屏幕的制造、維護(hù)要容易許多,可靠性也增加了. 兩種顯示方式的比較再結(jié)合51單片機(jī)IO口數(shù)量有限的原因決定采用動(dòng)態(tài)掃描的方式進(jìn)行顯示。 動(dòng)態(tài)掃描分為行掃描和列掃描兩種方式區(qū)別在于選通端和數(shù)據(jù)輸入端分別是行還是列。在該顯示系統(tǒng)中掃描顯示的工作原理如圖4-2所示,先選通列然后再?gòu)男兴腿雽?duì)應(yīng)列的數(shù)據(jù),這樣從第1列到第16列循環(huán)往復(fù),只要切換的速度足夠的快利用人眼的延時(shí)特性就可以看見(jiàn)一幅穩(wěn)定的畫面。 圖4-2掃描顯示程序原理圖 4.2.2 點(diǎn)陣數(shù)據(jù)表達(dá)方式該顯示系統(tǒng)的顯示數(shù)據(jù)采取縱向取模方向正向的數(shù)據(jù)存儲(chǔ)方式如圖4-3, 圖4-3 點(diǎn)陣數(shù)據(jù)原理圖 即數(shù)據(jù)是縱向的,一個(gè)像素對(duì)應(yīng)一個(gè)位。8個(gè)像素對(duì)應(yīng)一個(gè)字節(jié),字節(jié)的位順序是上高下低,比如從上到下8個(gè)點(diǎn)的狀態(tài)是“*-----*-”(*為黑點(diǎn),-為白點(diǎn)),則轉(zhuǎn)換的字模數(shù)據(jù)是0x82(B1000_0010)。如圖(4-3)所示,一幅16×16的點(diǎn)陣畫面點(diǎn)陣數(shù)據(jù)按照B1B2B3……B31B32存儲(chǔ)。所以一幅畫面的數(shù)據(jù)量為32字節(jié)。畫面顯示時(shí)選通的第i列對(duì)應(yīng)的數(shù)組元素為第i和i+16個(gè)元素[16]。 4.2.3 顯示程序的設(shè)計(jì)顯示程序分為靜態(tài)顯示程序、左移顯示、右移顯示、上移顯示、下移顯示五種種顯示方式。其中上下左右移動(dòng)程序都調(diào)用了靜態(tài)顯示程序?yàn)樽映绦颉lo態(tài)顯示程序流程圖如圖4-4所示:
圖4-4 靜態(tài)顯示程序流程圖 顯示采用的是列掃描的顯示方式,選通一列后按照列與數(shù)據(jù)元素的對(duì)應(yīng)關(guān)系第i列對(duì)應(yīng)的行數(shù)據(jù)為數(shù)組中的第i和第i+16個(gè)元素。將對(duì)應(yīng)元素的由低至高位依次從端口輸出具體做法為將元素向右邏輯移位后再與0X01相與,所得結(jié)果通過(guò)單片機(jī)端口輸出到串并轉(zhuǎn)換器的A端,鎖存在鎖存器里完成一列數(shù)據(jù)移位后再將其輸出。如此依次循環(huán)選通各列來(lái)顯示所需畫面[17]。 圖4-5 左右移/上下移程序流程圖 動(dòng)態(tài)顯示程序流程如圖4-5所示,根據(jù)顯示數(shù)據(jù)的存儲(chǔ)原理通過(guò)改變實(shí)際LED列與數(shù)據(jù)邏輯列的方法來(lái)實(shí)現(xiàn)程序的左右移動(dòng)。顯示數(shù)據(jù)與列的對(duì)應(yīng)關(guān)系為:第i列對(duì)應(yīng)的數(shù)據(jù)為數(shù)組中i和第2×i個(gè)數(shù)據(jù)。所以當(dāng)ULN2803選通時(shí),而送入后一列的數(shù)據(jù)則相當(dāng)于畫面左移移位,同理送入前一列數(shù)據(jù)相當(dāng)于右移一位。如此循環(huán)則產(chǎn)生一幅穩(wěn)定運(yùn)動(dòng)的畫面。 顯示數(shù)組中,第1至16個(gè)元素的第8至第1位LED顯示屏中的第1至第8行。同理第17至32個(gè)元素的第8至第1位LED顯示屏中的第9至第16行。所以將元素?cái)?shù)據(jù)進(jìn)行邏輯位移便能產(chǎn)生上下移動(dòng)的效果[18]。 4.3 通信程序的設(shè)計(jì)系統(tǒng)采用串行中斷的方式進(jìn)行通信。MCS-51單片機(jī)的五個(gè)中斷源兩種類型:一類是外部中斷源;另一類是內(nèi)部中斷源,包括兩個(gè)定時(shí)器/計(jì)數(shù)器(T0和T1)的溢出中斷和串行口的接收和發(fā)送中斷。MCS-51單片機(jī)設(shè)置了4個(gè)專用寄存器用于中斷控制,分別為定時(shí)器控制寄存器(TCON),串行口中斷控制器(SCON),中斷允許控制寄存器(IE),中斷優(yōu)先級(jí)控制寄存器(IP)。編程時(shí)通過(guò)設(shè)置其狀態(tài)來(lái)管理中斷系統(tǒng)。 在編輯中斷程序時(shí)首先是將中斷控制寄存器(IE)初始化。其控制位分布如表。EA為中斷允許總控制位,EA=1時(shí)CPU開(kāi)發(fā)中斷;EA=1時(shí)。CPU屏蔽所有中斷。ES、ET、EX1、ET0、EX0為對(duì)應(yīng)的串行口中斷、定時(shí)器/計(jì)數(shù)器1中斷、外部中斷1中斷、定時(shí)器/計(jì)數(shù)器0中斷、外部中斷0中斷的中斷允許位。對(duì)應(yīng)位為1時(shí)允許其中斷,對(duì)應(yīng)位為0時(shí),禁止其中斷。 表4-1 中斷允許寄存器格式
所以初始化時(shí)設(shè)定中斷允許寄存器初值為0XFF,指令為 IE=0XFF。程序設(shè)計(jì)時(shí)還要考慮到中斷優(yōu)先級(jí)的問(wèn)題。因?yàn)椴煌闹袛嗤瑫r(shí)產(chǎn)生而CPU響應(yīng)的順序取決于內(nèi)部查詢順序。 設(shè)置串口工作方式1,波特率9600,計(jì)算可得計(jì)數(shù)器初值的十六進(jìn)制表示為0XFD。通信協(xié)議如表4-2所示: 表4-2 串口通信數(shù)據(jù)結(jié)構(gòu) 具體串口中斷程序流程圖如圖4-6所示,在主程序中先進(jìn)行了串行中斷的初始化,初始化內(nèi)容包括了串行工作方式選擇,波特率的設(shè)定,計(jì)數(shù)初值的設(shè)定。程序開(kāi)始進(jìn)入中斷等待,當(dāng)PC機(jī)向單片機(jī)發(fā)送數(shù)據(jù)時(shí)產(chǎn)生中斷接收允許位RI置1,將SBUF(緩沖寄存器)中的值輸入到暫存器中進(jìn)行數(shù)據(jù)處理。首先判斷數(shù)據(jù)是否設(shè)定的起始標(biāo)志位‘S’如果是則開(kāi)始接收起始位后的33個(gè)字節(jié),不是則中斷返回繼續(xù)等待。接收到第34個(gè)字節(jié)后便將收到的數(shù)據(jù)發(fā)送回PC機(jī)進(jìn)行驗(yàn)證比較。 圖4-6 通信程序流程圖 所有軟件編寫完成后都必須經(jīng)過(guò)編譯才能被單片機(jī)識(shí)別使用。為了減小軟件的修改和優(yōu)化難度,先把各子程序?qū)憺橐粋(gè)可單獨(dú)執(zhí)行的完整程序。各子程序編譯沒(méi)有錯(cuò)誤后再輸入單片機(jī)進(jìn)行驗(yàn)證,這兩項(xiàng)都通過(guò)后再將所有的程序整合到一起形成一個(gè)完整的程序再進(jìn)行編譯和驗(yàn)證。詳細(xì)程序見(jiàn)附錄2。
第5章 系統(tǒng)調(diào)試
硬件制作和軟件編寫過(guò)后,得出實(shí)物如圖5-1所示。實(shí)物完成后必須對(duì)其進(jìn)行調(diào)試,檢查設(shè)計(jì)功能是否實(shí)現(xiàn)了。軟件硬件完成后開(kāi)始進(jìn)行調(diào)試。調(diào)試可分為硬件調(diào)試,軟件調(diào)試和系統(tǒng)聯(lián)合調(diào)試。圖5-1 實(shí)物圖 5.1 系統(tǒng)硬件部分調(diào)試方法硬件調(diào)試主要是調(diào)試各部分的焊接是否合格和各芯片的輸出輸入電壓是否符合設(shè)計(jì)要求,最后測(cè)試各硬件部分能否完成設(shè)計(jì)功能。因此把硬件調(diào)試按照以下四部分分步來(lái)進(jìn)行: (1)測(cè)試所有焊點(diǎn)是否有短路和虛焊的現(xiàn)象存在; (2)通電測(cè)試所有硬件芯片的輸入輸出電壓是否在設(shè)計(jì)要求的范圍內(nèi); (3)測(cè)試ISP下栽線的功能是否能夠?qū)崿F(xiàn); (4)測(cè)試串口系統(tǒng)的通信功能是否能夠?qū)崿F(xiàn)。 由于最重要的顯示系統(tǒng)功能的測(cè)試需要軟件配合所以在硬件調(diào)試部分只測(cè)試單片機(jī)復(fù)位電平,功能部分測(cè)試放在系統(tǒng)聯(lián)合調(diào)試部分來(lái)完成。 5.1.1 短路與虛焊檢測(cè) 檢測(cè)工具為萬(wàn)用表,使用萬(wàn)用表的短路報(bào)警功能,逐個(gè)測(cè)試相臨的兩個(gè)焊點(diǎn)檢測(cè)是否短路。按照電路圖檢測(cè)需要連接的兩點(diǎn)是否短路來(lái)檢測(cè)是否已經(jīng)連接上,以此來(lái)檢測(cè)虛焊的情況。檢測(cè)和修改完成后為下一步通電檢測(cè)排除了短路的危險(xiǎn)和由于虛焊引起檢測(cè)結(jié)果不真實(shí)的麻煩。 5.1.2 上電測(cè)試由于系統(tǒng)測(cè)試時(shí)是采用USB電源為系統(tǒng)電源,所以電源輸入都為5V。顯示系統(tǒng)中單片機(jī)、譯碼器,鎖存器,驅(qū)動(dòng)電路的電源電壓均要求為5V所以可同時(shí)直接接入。 上電后首先觀察電路是否有過(guò)熱,異味,冒煙的現(xiàn)象出現(xiàn)。經(jīng)過(guò)觀察,沒(méi)有這些現(xiàn)象出現(xiàn)。然后測(cè)試各器件的電源,接地及一些電平應(yīng)該固定的端口的電壓。測(cè)試的結(jié)果為:各器件電源端在4.3V~4.8V之間滿足器件的電源電壓要求,單片機(jī)端口在未接負(fù)載時(shí)端口電壓為4.5V。 5.1.3 串口調(diào)試串口部分的作用為單片機(jī)與PC機(jī)之間通信,要檢查硬件是否正常工作可以采用將MAX232芯片的單片機(jī)端輸出口與輸入口直接相連的辦法來(lái)測(cè)試。具體電路圖如圖5-2所示,將MAX232的第10端和第9端直接短接。功能上表示將單片機(jī)的輸出口與輸入口直接相連,單片機(jī)收到數(shù)據(jù)的同時(shí)就將數(shù)據(jù)發(fā)送回PC機(jī)。如果發(fā)送的數(shù)據(jù)能夠被接收則證明串口通信部分的硬件是正常的。【19】將串口與電腦COM1相接,通過(guò)串口調(diào)試助手發(fā)送不同位數(shù)的數(shù)據(jù)再在把發(fā)送的數(shù)據(jù)與接收數(shù)據(jù)相比較。 圖5-2 串口硬件調(diào)試 5.2 系統(tǒng)軟件調(diào)試方法由于已經(jīng)進(jìn)行了硬件調(diào)試,所以軟件調(diào)試主要是軟件編譯和將各功能塊程序分別寫入以驗(yàn)證其功能的可實(shí)現(xiàn)性。在進(jìn)行功能調(diào)試前必須用KEIL C對(duì)所有程序進(jìn)行編譯,編譯成功生產(chǎn)可執(zhí)行的.hex后方可進(jìn)行功能測(cè)試。 其中測(cè)試串口程序的功能是否完善不但要連接單片機(jī)系統(tǒng)還要借助串口調(diào)試工具。串口調(diào)試工具選用的是串口調(diào)試助手,其功能是按照設(shè)定的串口、波特率向單片機(jī)發(fā)送數(shù)據(jù)和接收單片機(jī)向PC機(jī)發(fā)送的數(shù)據(jù)。并且能把發(fā)送和接收的數(shù)據(jù)內(nèi)容顯示在狀態(tài)欄內(nèi)。因此只要設(shè)定PC機(jī)向單片機(jī)發(fā)送的內(nèi)容和單片機(jī)向PC機(jī)發(fā)送的內(nèi)容就可以通過(guò)串口調(diào)試助手驗(yàn)證串口通信是否準(zhǔn)確,是否滿足功能要求。 串口程序的設(shè)計(jì)為:設(shè)定波特率位9600,以0XAA為起始標(biāo)志位,單片機(jī)接收自起始標(biāo)志位后的32位十六進(jìn)制數(shù)再發(fā)送會(huì)PC機(jī)。測(cè)試程序時(shí)設(shè)定波特率為9600,選擇串口1,無(wú)校驗(yàn),8位數(shù)據(jù)。PC機(jī)向單片機(jī)發(fā)送的內(nèi)容為aa 11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff。PC機(jī)收到的數(shù)據(jù)為 11 22 33 44 55 66 77 88 99 00 AA BB CC DD EE FF 11 22 33 44 55 66 77 88 99 00 AA BB CC DD EE FF。測(cè)試表明串口程序和串口電路實(shí)現(xiàn)了設(shè)計(jì)目的。再進(jìn)行數(shù)次不同數(shù)據(jù)的發(fā)送,接收到的數(shù)據(jù)也驗(yàn)證了設(shè)計(jì)要求的實(shí)現(xiàn)。 圖5-3 串口調(diào)試圖 串口程序測(cè)試成功后為顯示程序提供了準(zhǔn)確的顯示內(nèi)容。余下得各種顯示程序和中斷程序都編譯成功后只有聯(lián)合硬件才能驗(yàn)證其功能的可行性。 5.3 系統(tǒng)聯(lián)合調(diào)試及結(jié)果經(jīng)過(guò)硬件調(diào)試和軟件調(diào)試,排除了硬件的連接問(wèn)題和驗(yàn)證了串口功能的可實(shí)現(xiàn)性。其余功能的軟件便可以在此基礎(chǔ)上調(diào)試驗(yàn)證其功能的正確性。聯(lián)合調(diào)試的具體方法如下: (1)編寫一個(gè)逐點(diǎn)掃描的顯示程序,再結(jié)合硬件電路運(yùn)行。這樣做的目的在于檢測(cè)各器件是否能夠正常運(yùn)行和顯示屏的各個(gè)LED燈是否有損壞。結(jié)果顯示顯示屏中只有邊角出有一個(gè)LED燈被燒壞,其他器件邏輯功能運(yùn)行正常。 (2)將靜態(tài)顯示子程序與各種動(dòng)態(tài)顯示程序結(jié)合硬件電路進(jìn)行調(diào)試。系統(tǒng)運(yùn)行時(shí)顯示如圖5-1所示,顯示圖像比較清晰,各動(dòng)態(tài)顯示效果也能夠?qū)崿F(xiàn)。但顯示存在兩個(gè)問(wèn)題。一是發(fā)光點(diǎn)的下方會(huì)出現(xiàn)一個(gè)很微弱的亮點(diǎn),影響了整體的顯示效果。二是同一列的LED燈被點(diǎn)亮的數(shù)量與其亮度出反比,即如果同一列的燈都被點(diǎn)亮則亮度比只點(diǎn)亮幾個(gè)時(shí)要暗一點(diǎn)。 (3)將串口通信,顯示,硬件聯(lián)合調(diào)試。按照設(shè)定的通信協(xié)議,先由PC機(jī)向單片機(jī)發(fā)送起始控制字s,接著再發(fā)送32比特的顯示數(shù)據(jù),最后發(fā)送控制顯示方式的顯示控制字。再發(fā)送不同的顯示數(shù)據(jù)和顯示控制字,觀察各種顯示方式的運(yùn)行情況和各種顯示方式之間的切換情況。結(jié)果是顯示屏執(zhí)行顯示控制指令,顯示所發(fā)送的內(nèi)容。 5.4 調(diào)試結(jié)果分析對(duì)調(diào)試中出現(xiàn)的問(wèn)題進(jìn)行了分析,得出以下原因和修改辦法。 (1)硬件的工作表現(xiàn)出不穩(wěn)定,主要是表現(xiàn)在LED顯示屏的驅(qū)動(dòng)電路部分和單片機(jī)系統(tǒng)部分。具體表現(xiàn)為單片機(jī)接負(fù)載后電壓被拉低值1.7V左右,無(wú)法滿足譯碼電路的輸入要求。顯示時(shí)會(huì)有一些行驅(qū)動(dòng)的輸出不夠設(shè)計(jì)指標(biāo) ,導(dǎo)致所驅(qū)動(dòng)的那一行在顯示屏上表現(xiàn)為選定的點(diǎn)不能夠很好區(qū)分,圖像出現(xiàn)模糊。分析造成這一現(xiàn)象的原因?yàn)椋附訒r(shí)三極管8550遭到了高溫?fù)p壞以致工作不穩(wěn)定和焊接的電路不夠牢靠,還有就是8550的e端所接電壓過(guò)高。修改辦法為將單片機(jī)輸出端口外接5K的上拉電阻,替換損壞三極管。 (2)虛點(diǎn)的產(chǎn)生與軟件和三極管電壓有關(guān)。修改辦法是將軟件中的延時(shí)時(shí)間調(diào)至恰當(dāng)值,將8550的e端電壓降至3V左右。 經(jīng)過(guò)調(diào)試和修改,系統(tǒng)實(shí)現(xiàn)了題目所要求的中英文顯示,動(dòng)態(tài)顯示及上位機(jī)通信與控制的要求。
結(jié) 論 經(jīng)過(guò)一段時(shí)間的工作,終于完成了基于51單片機(jī)的LED顯示系統(tǒng)的設(shè)計(jì),項(xiàng)目所要求的功能全部達(dá)到。通過(guò)這次設(shè)計(jì)收獲頗多,不僅是所作題目涉及到的軟硬件知識(shí)還有更為重要的實(shí)際經(jīng)驗(yàn)和過(guò)程中所發(fā)現(xiàn)的問(wèn)題。 接手題目之后從互聯(lián)網(wǎng)上對(duì)LED進(jìn)行了詳細(xì)的資料收集,從技術(shù)和產(chǎn)業(yè)的兩方面對(duì)LED進(jìn)行了了解。通過(guò)了解我認(rèn)識(shí)到LED是一門當(dāng)今應(yīng)用非常廣泛的技術(shù),整個(gè)產(chǎn)業(yè)每年都會(huì)有巨大的產(chǎn)值而且技術(shù)還在不斷發(fā)展和創(chuàng)新[20]。 從設(shè)計(jì)之初就確定了參照大屏幕顯示屏的實(shí)現(xiàn)方法和實(shí)際情況設(shè)計(jì)一款小屏幕的LED點(diǎn)陣顯示屏。在查閱了大量的大屏幕顯示屏資料后確定了題目的設(shè)計(jì)方案。整個(gè)設(shè)計(jì)采用AT89S51做核心控制器,74LS164和74LS373組成譯碼電路,三極管8550和ULN2803做行和列驅(qū)動(dòng)。在實(shí)現(xiàn)這一設(shè)計(jì)的過(guò)程中所遇到的問(wèn)題和困難給我留下了寶貴的經(jīng)驗(yàn)和深刻教訓(xùn)。這些經(jīng)驗(yàn)和教訓(xùn)是: (1)設(shè)計(jì)之前應(yīng)該進(jìn)行大量的資料收集和分析,確定一個(gè)清晰的設(shè)計(jì)思路; (2)器件選擇時(shí)要詳細(xì)閱讀器件使用手冊(cè),不但要考慮器件的功能實(shí)現(xiàn)還要考慮器件在整個(gè)系統(tǒng)中的兼容性; (3)硬件的系統(tǒng)的建立必須合理和穩(wěn)定,實(shí)物建立之前最好進(jìn)行仿真這樣才能為軟件提供一個(gè)可靠的試驗(yàn)平臺(tái); (4)軟件的編寫不但要實(shí)現(xiàn)功能還要不斷的優(yōu)化、簡(jiǎn)練、易讀。 隨著課題的進(jìn)行,對(duì)LED的了解也越來(lái)越深入。認(rèn)為L(zhǎng)ED技術(shù)也會(huì)進(jìn)一步發(fā)展,LED應(yīng)用將會(huì)更加廣泛。可以設(shè)想利用LED的高穩(wěn)定性和低能耗,再與無(wú)線通信技術(shù)相結(jié)合在沙漠深處或者人跡罕至的雪山之顛樹(shù)立一塊依靠太陽(yáng)能充電,通過(guò)無(wú)線傳輸方式更改顯示內(nèi)容的信息板為登山者提供指示和天氣信息,為沙漠迷路的人指引方向。 設(shè)計(jì)結(jié)束了,但學(xué)習(xí)還在繼續(xù)。我相信通過(guò)此次設(shè)計(jì)所得到的知識(shí)、心得、經(jīng)驗(yàn)?zāi)酥粮惺芏紩?huì)讓我在以后的日子里受益匪淺。
致謝 這次能夠圓滿完成畢業(yè)設(shè)計(jì)我首先要感謝我的指導(dǎo)老師***老師、***老師、***老師,感謝他們?cè)诋厴I(yè)設(shè)計(jì)期間對(duì)我的指導(dǎo)、勉勵(lì)、和督導(dǎo)。同時(shí)我要感謝大學(xué)四年里教過(guò)我課程的老師們,感謝他們對(duì)我知識(shí)增長(zhǎng)所付出的辛勤勞動(dòng)。 我還要感謝全班同學(xué),感謝他們大學(xué)四年所做的所有令人感動(dòng)的、幽默的、滑稽的、荒誕的事情。我所在的實(shí)驗(yàn)室的同學(xué),我也要感謝你們。雖然大家來(lái)自不同專業(yè)相處時(shí)間也不長(zhǎng),但大家共同的愛(ài)好相同的目標(biāo)使得大家互相扶持共同努力。 最后我要感謝我所住宿舍的管理員阿姨們,感謝她們不論多晚回去都給我們開(kāi)門讓我們不至于露宿街頭。還有學(xué)校的保安和廚師,你們是我安全完成畢業(yè)設(shè)計(jì)的保障。
附錄 1: 硬件原理圖  

附錄 2: 設(shè)計(jì)程序
- //主程序主要為各功能子程序提供運(yùn)行平臺(tái),子程序分為顯示程序,特效顯示程序,//按鍵輸入中斷子程序
-
- //#include<reg51.h>
- //#include <absacc.h>
- //#include <intrins.h>
- #include<AT89x52.h>
- //#include<regx52.h>
-
- #define COUNT 34
- #define W 0X01
-
- unsigned char buffer[COUNT];
- unsigned char point;
-
- sbit A1=P1^0; //定義第一列對(duì)應(yīng)端口
- sbit A2=P1^1; // 第二列
- sbit A3=P1^4; // 第一行
- sbit A4=P1^5; // 第二行
- sbit CLK_L=P1^2; //列移位時(shí)鐘 上升沿觸發(fā)
- sbit CLEAR_L=P1^3; //列清除控制位 低電平有效
- sbit CLK_H=P1^6; //行移位時(shí)鐘
- sbit CLEAR_H=P1^7; // 行清除控制位 低電平有效
- sbit EN=P2^0;
-
- sbit P21=P2^1;
- sbit OE=P2^2; //三態(tài)允許控制端 低電平有效
- sbit LE=P2^3; //鎖存允許端
-
-
-
- unsigned char code H1[16]={1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},H2[16]={0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0}; //分別暫存行(H)列(L)所要顯示的數(shù)據(jù)
- unsigned char L1,L2,i,command,k,j;
- char z,l,m,n,x;
- unsigned char data ziku[32];
- unsigned char idata sort[32];
- unsigned int data temp;
- unsigned char code Bmp019[]= //靜態(tài)顯示內(nèi)容
- {
- /*----------------------------------------------------------
- 源文件 / 文字 : 壽
- 寬×高(像素): 16×16
- 字模格式/大小 : 單色點(diǎn)陣液晶字模,縱向取模,字節(jié)正序/32字節(jié)
- 數(shù)據(jù)轉(zhuǎn)換日期 : 2007-5-31 16:26:59
- ----------------------------------------------------------*/
- 0x00,0x22,0x22,0x2A,0x2A,0x2A,0x2F,0xFA,0x2A,0x2A,0x2A,0x2B,0x2A,0x2A,0x22,0x00,
- 0x04,0x04,0x08,0x10,0x20,0xC0,0x20,0x5C,0x48,0x42,0x41,0xFE,0x40,0x40,0x40,0x00
- };
-
- //*************************************************************
- //串口中斷程序
- //功能:從PC機(jī)接收數(shù)據(jù),當(dāng)接收滿34位后將接收到的數(shù)據(jù)發(fā)送回PC機(jī)
- //*************************************************************
- com_interrupt(void)interrupt 4 using 3
- {
- unsigned char RECEIVR_buffer;
- if(RI==1)
- {
- RECEIVR_buffer=SBUF;
- RI=0;
- TI=0;
- if(point==0)
- { if(RECEIVR_buffer=='s')
- point++;
- else
- point=0;
- }
- if(point>0&&point<35)
- buffer[point++]=RECEIVR_buffer;
- else point=0;
- }
-
- //TI=0;
- if(point==35&&RI==0)
- {
- command=buffer[34];
- point=0;
- x=0;
- for(k=2;k<34;k++)
- {
- SBUF=buffer[k];
- sort[k-2]=buffer[k];
- while(TI==0);
- TI=0;
- }
- }
-
-
- }
-
- void delay(int k) //延時(shí)程序
- {
- while(k--);
- }
-
- //**********************************************************************
- //靜態(tài)顯示程序
- //功能:將顯示數(shù)據(jù)處理后,控制串并轉(zhuǎn)換器并行輸出控制LED顯示
- //**********************************************************************
- void display() //顯示子程序
- {
- EN=1;
- P21=1;
- CLEAR_L=0;
- delay(5);
- CLEAR_L=1;
-
-
- for(i=0;i<16;i++)
- {
- CLK_L=0;
- A1=H1[i];
- A2=H2[i];
- CLK_L=1;
-
- L1=ziku[i+z];
- L2=ziku[i+16+z];
- if(i+z<0||i+z>15)
- continue;
-
- OE=1;
- LE=1;
- if(L1==0x00 && L2==0x00)
- continue;
-
-
- for(j=0;j<8;j++)
- { CLK_H=0;
- if(L1&W==1)
- A3=0;
- else
- A3=1;
- if(L2&W==1)
- A4=0;
- else
- A4=1;
-
- CLK_H=1;
-
- L1>>=1;
- L2>>=1;
- }
- OE=0;
- LE=0;
- delay(110);
-
- CLEAR_H=0;
- delay(1);
- CLEAR_H=1;
- }
-
- }
-
- //右移顯示
- //功能:使得LED產(chǎn)生畫面右移得效果
-
-
- void sdisplay_left()
- { if(m==0)
- {
- z++;
- m=30;
- }
- if(z==15)
- {
- l=0;
- z=0;
- }
- display();
- m--;
- }
- //**********************************************************************
- //右移顯示
- //功能:使得LED產(chǎn)生畫面右移得效果
- //**********************************************************************
- void sdisplay_right( )
- {
-
- if(m==1)
- {
- z--;
- m=30;
- }
- if(z==-15)
- {
- l=0;
- z=0;
- }
- display();
- m--;
-
- }
- //**********************************************************************
- //上移顯示
- //功能:使得LED產(chǎn)生畫面上移得效果
- //**********************************************************************
-
- void sdisplay_up()
- { z=0;
- l=1;
- m=0;
- for(k=0;k<16;k++)
- {
- for(n=0;n<16;n++)
- {
- temp=ziku[n];
- temp<<=8;
- temp=temp|ziku[n+16];
- temp<<=1;
- ziku[n+16]=temp;
- temp>>=8;
- ziku[n]=temp;
- }
- do
- {
- display();
- m++;
- if(m==50)
- {
- l=0;
- m=0;
- }
- else l=1;
- }
- while(l);
- }
- }
- //**********************************************************************
- //下移顯示
- //功能:使得LED產(chǎn)生畫面下移得效果
- //**********************************************************************
- void sdisplay_down()
- { z=0;
- l=1;
- m=0;
- for(k=0;k<16;k++)
- {
- for(n=0;n<16;n++)
- {
- temp=ziku[n];
- temp<<=8;
- <font color="rgb(0, 0, 0)">…………
- …………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………</font>
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
基于51單片機(jī)的LED點(diǎn)陣顯示屏系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).doc
(8.96 MB, 下載次數(shù): 64)
2018-4-26 14:36 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|