2282 1616點(diǎn)陣LED電子顯示屏
2282 1616點(diǎn)陣LED電子顯示屏,點(diǎn)陣,led,電子顯示屏
116*16 點(diǎn)陣畢業(yè)論文第一章 緒 論1.1 設(shè)計(jì)課題背景知識(shí)單片微型計(jì)算機(jī)(single chip microcomputer)簡(jiǎn)稱單片機(jī),它是為各類專用控制器而設(shè)計(jì)的通用或?qū)S梦⑿陀?jì)算機(jī)系統(tǒng),高密度集成了普通計(jì)算機(jī)微處理器,一定容量的 RAM 和ROM 以及輸入 /輸出接口,定時(shí)器等電路于一塊芯片上構(gòu)成的。單片機(jī)自 20 世紀(jì) 70 年代問世以來,以極其高的性價(jià)比受到人們的重視和關(guān)注,所以應(yīng)用很廣,發(fā)展很快。單片機(jī)的優(yōu)點(diǎn)是體積小、重量輕、抗干擾能力強(qiáng),對(duì)環(huán)境要求不高,價(jià)格低廉,可靠性高,靈活性好,開發(fā)較為容易。在現(xiàn)代工業(yè)控制和一些智能化儀器儀表中,越來越多的場(chǎng)所需要用點(diǎn)陣圖形顯示器顯示漢字,漢字顯示屏也廣泛應(yīng)用到汽車報(bào)站器,廣告屏等。所以研究 LED 顯示有實(shí)用的意義。LED 顯示屏分為圖文顯示屏和視頻顯示屏,均由 LED 矩陣塊組成。圖文顯示屏可與計(jì)算機(jī)同步顯示漢字、英文文本和圖形;視頻顯示屏采用微型計(jì)算機(jī)進(jìn)行控制,圖文、圖像并茂,以實(shí)時(shí)、同步、清晰的信息傳播方式播放各種信息,還可顯示二維、三維動(dòng)畫、錄像、電視、VCD 節(jié)目以及現(xiàn)場(chǎng)實(shí)況。LED 顯示屏顯示畫面色彩鮮艷,立體感強(qiáng),靜如油畫,動(dòng)如電影,廣泛應(yīng)用于交通運(yùn)輸、車站、商場(chǎng)、醫(yī)院、賓館、證券市場(chǎng)、工業(yè)企業(yè)管理等公共場(chǎng)所。 LED 顯示屏可以顯示變化的數(shù)字、文字、圖形圖像;不僅可以用于室內(nèi)環(huán)境還可以用于室外環(huán)境,具有投影儀、電視墻、液晶顯示屏無法比擬的優(yōu)點(diǎn)。 LED 之所以受到廣泛重視而得到迅速發(fā)展,是與它本身所具有的優(yōu)點(diǎn)分不開的。這些優(yōu)點(diǎn)概括起來是:亮度高、工作電壓低、功耗小、小型化、壽命長、耐沖擊和性能穩(wěn)定。LED 的發(fā)展前景極為廣闊,目前正朝著更高亮度、更高耐氣候性、更高的發(fā)光密度、更高的發(fā)光均勻性,可靠性、全色化方向發(fā)展?,F(xiàn)代 LED 的發(fā)展很快,很多研究領(lǐng)域非常已經(jīng)深刻,實(shí)際情況是:很多相關(guān)的知識(shí)已經(jīng)遠(yuǎn)遠(yuǎn)超出我們?cè)谛W(xué)生的能力范圍,所以在此只是簡(jiǎn)單的研究一下用單片機(jī)驅(qū)動(dòng)的 LED顯示移動(dòng)的漢字。目的有三:一是親手制作一個(gè)簡(jiǎn)單實(shí)用的顯示文字的 LED 點(diǎn)陣;二是通過制作 LED 點(diǎn)陣增強(qiáng)對(duì) LED 點(diǎn)陣的了解和應(yīng)用,以及復(fù)習(xí)鞏固單片機(jī)知識(shí);三是通過團(tuán)隊(duì)合作,增強(qiáng)團(tuán)隊(duì)合作的意識(shí),為以后走向社會(huì)工作打下基礎(chǔ),并且增強(qiáng)了同學(xué)之間的友誼。2漢字顯示方式是先根據(jù)所需要的漢字提取漢字點(diǎn)陣(如 16×16 點(diǎn)陣),將點(diǎn)陣文件存入 ROM,形成新的漢字編碼;而在使用時(shí)則需要先根據(jù)新的漢字編碼組成語句,再由 MCU根據(jù)新編碼提取相應(yīng)的點(diǎn)陣進(jìn)行漢字顯示。不論顯示圖形還是文字,都是控制與組成這些圖形或文字的各個(gè)點(diǎn)所在位置相對(duì)應(yīng)的 LED 器件發(fā)光。通常事先把需要顯示的圖形文字轉(zhuǎn)換成點(diǎn)陣圖形,在按照顯示控制的要求以一定的格式形成顯示數(shù)據(jù)。對(duì)于只控制通斷的圖文顯示屏來說,每個(gè) LED 發(fā)光器件占據(jù)數(shù)據(jù)中的 1 位( 1bit),在需要該 LE D 器件發(fā)光的數(shù)據(jù)中相應(yīng)的位填 1,否則填 0。當(dāng)然,根據(jù)控制電路的安排,相反的定義同樣時(shí)可行的。這樣依照所需顯示的圖形文字,按顯示屏的各行各列逐點(diǎn)填寫顯示數(shù)據(jù),就可以構(gòu)成一個(gè)顯示數(shù)據(jù)文件。顯示圖形的數(shù)據(jù)文件,其格式相對(duì)自由,只要能夠滿足顯示控制的要求即可。文字的點(diǎn)陣格式比較規(guī)范,可以采用現(xiàn)行計(jì)算機(jī)通用的字庫字模。組成一個(gè)字的點(diǎn)陣,其大小也可以有 16×16、24×24 、32×32、48×48 等不同規(guī)格。用點(diǎn)陣方式構(gòu)成圖形或文字,是非常靈活的,可以根據(jù)需要任意組合和變化,只要設(shè)計(jì)好合適的數(shù)據(jù)文件,就可以得到滿意的顯示效果。因而采用點(diǎn)陣式圖文顯示屏顯示經(jīng)常需要變化的信息,是非常有效的。圖文顯示屏的顏色,有單色、雙色、和多色幾種。最常用的是單色圖文屏。單色屏多使用紅色或橘紅色或橙色 LED 點(diǎn)陣單元。雙色圖文屏和多色圖文屏,在 LED 點(diǎn)陣的每一個(gè)“點(diǎn)”上布置有兩個(gè)或多個(gè)不同顏色的 LED 發(fā)光器件。換句話說,對(duì)應(yīng)于每種顏色都有自己的顯示矩陣。顯示的時(shí)候,各顏色的顯示點(diǎn)陣是分開控制的。事先設(shè)計(jì)好各種顏色的顯示數(shù)據(jù),顯示時(shí)分別送到各自的顯示點(diǎn)陣,即可實(shí)現(xiàn)預(yù)期效果。每一種顏色的控制方法和單色的完全相同,因此掌握了單色圖文顯示屏的原理,雙色屏和多色屏就不難理解了。為了吸引觀眾增強(qiáng)顯示效果,可以有多種顯示模式。最簡(jiǎn)單的顯示模式是靜態(tài)顯示。與靜態(tài)顯示模式相對(duì)應(yīng),就有各種動(dòng)態(tài)顯示模式,它們所顯示的圖文都是能夠動(dòng)的。按照?qǐng)D文運(yùn)動(dòng)的特點(diǎn)又可以分為閃爍、平移、旋轉(zhuǎn)、縮放等多種顯示模式。產(chǎn)生不同顯示模式的方法,并不意味著一定要重新編寫顯示數(shù)據(jù),可以通過一定的算法從原來的顯示數(shù)據(jù)直接生成。例如,按順序調(diào)整行號(hào),可以使顯示圖文產(chǎn)生上下平移;而順序調(diào)整列顯示數(shù)據(jù)的位置,就可以達(dá)到左右平移的目的;刷新的時(shí)間控制,要考慮運(yùn)動(dòng)圖形文字的顯示效果。刷新太慢,動(dòng)感不顯著;刷新太快了,中間過程看不清。一般刷新周期可控制在幾十毫秒范圍之內(nèi)。本次畢業(yè)設(shè)計(jì)中,由本人和鐘桂,張維平組成一組,我負(fù)責(zé)硬件部分電路圖的設(shè)計(jì)和軟件部分程序的設(shè)計(jì)和調(diào)試,目的是應(yīng)用簡(jiǎn)單方便的電路連接和程序完成漢字的換色與移動(dòng)。鐘桂負(fù)責(zé)用設(shè)計(jì)好的點(diǎn)陣電路制作 PCB 電路板,包括完成 PCB 板的制作,張維平負(fù)責(zé)制作另外一塊在面包板上連的點(diǎn)陣線連板子的焊接與調(diào)試,各人的分工不同只是工作側(cè)重點(diǎn)的不同,大家是在一起互相學(xué)習(xí)互相幫助,共同完成設(shè)計(jì)任務(wù)。3第二章 硬件設(shè)計(jì)2.1 設(shè)計(jì)框圖及介紹LED 點(diǎn)陣總體框圖如圖 1.1 所示,點(diǎn)陣電路大體上可以分成微機(jī)本身的硬件、顯示驅(qū)動(dòng)電路、控制信號(hào)電路三部分??刂齐娐凡糠职ㄒ粋€(gè) 51CUP 和一些外圍電路。在整個(gè)電路當(dāng)中此控制電路部分相當(dāng)于一個(gè)上位機(jī),它負(fù)責(zé)控制整個(gè)電路以及相應(yīng)的程序的運(yùn)行、與PC 機(jī)的串行通訊、以及給屏體電路部分發(fā)送命令。點(diǎn)陣顯示屏體、以及它的行和列的各個(gè)驅(qū)動(dòng)電路。由于兩部分的電路在制板時(shí)可以放到一起,所以可以將其字庫放到控制電路部分使用串行通訊方式來與屏體電路部分進(jìn)行數(shù)據(jù)和命令的傳送。此顯示電路采用掃描方式進(jìn)行顯示時(shí),每行有一個(gè)行驅(qū)動(dòng)器,各行的同名列共用一個(gè)列驅(qū)動(dòng)器。由行譯碼器給出的行選通信號(hào),從第一行開始,按順序依次對(duì)各行進(jìn)行掃描(把該行與電源的一端接通)。另一方而,根據(jù)各列鎖存的數(shù)據(jù),確定相應(yīng)的列驅(qū)動(dòng)器是否將該列與電源的另一端接通。接通的列,就在該行該列點(diǎn)燃相應(yīng)的 LED;未接通的列所對(duì)應(yīng)的LED 熄滅??赏ㄟ^掃描輸出口的控制實(shí)現(xiàn)顏色的轉(zhuǎn)換。圖 2.1 點(diǎn)陣顯示的總體框圖2.2 51 系列單片機(jī)簡(jiǎn)介單片機(jī)(Microcontroller,又稱微處理器)是在一塊硅片上集成了各種部件的微型機(jī),這些部件包括中央處理器 CPU、數(shù)據(jù)存儲(chǔ)器 RAM、程序存儲(chǔ)器 ROM、定時(shí)器/計(jì)數(shù)器和多種 I/O 接口電路。48051 單片機(jī)的基本結(jié)構(gòu)見圖 2.2。圖 2.2 8051 單片機(jī)的基本結(jié)構(gòu)8051 是 MCS-51 系列單片機(jī)的一個(gè)產(chǎn)品。MCS-51 系列單片機(jī)是 Intel 公司推出的通用型單片機(jī),8051 單片機(jī)系列指的是 MCS-51 系列和其他公司的 8051 衍生產(chǎn)品。這些衍生品是在基本型基礎(chǔ)上增強(qiáng)了各種功能的產(chǎn)品。這些產(chǎn)品給 8 位單片機(jī)注入了新的活力,給它的開發(fā)應(yīng)用開拓了更廣泛的前景。8051 系列的內(nèi)部結(jié)構(gòu)可以劃分為 CPU、存儲(chǔ)器、并行口、串行口、定時(shí)器/計(jì)數(shù)器、中斷邏輯幾部分。(1)中央處理器8051 的中央處理器由運(yùn)算器和控制邏輯構(gòu)成,其中包括若干特殊功能寄存器(SFR) 。算術(shù)邏輯單元 ALU 能對(duì)數(shù)據(jù)進(jìn)行加、減、乘、除等算術(shù)運(yùn)算;“與” 、 “或” 、 “異或”等邏輯運(yùn)算以及位操作運(yùn)算。ALU 只能進(jìn)行運(yùn)算,運(yùn)算的操作數(shù)可以事先存放到累加器 ACC 或寄存器 TMP 中,運(yùn)算結(jié)果可以送回 ACC 或通用寄存器或存儲(chǔ)單元中,累加器 ACC 也可以寫為 A。B 寄存器在乘法指令中用來存放一個(gè)乘數(shù),在除法指令中用來存放除數(shù),運(yùn)算后 B 中為部分運(yùn)算結(jié)果。程序狀態(tài)字 PSW 是個(gè) 8 位寄存器,用來寄存本次運(yùn)算的特征信息,用到其中七位。PSW 的格式如下所示,其各位的含義是:CY:進(jìn)位標(biāo)志。有進(jìn)位/錯(cuò)位時(shí) CY=1,否則 CY=0。 AC:半進(jìn)位標(biāo)志。當(dāng) D3 位向 D4 位產(chǎn)生進(jìn)位/錯(cuò)位時(shí),AC=1,否則 AC=0,常用于十進(jìn)制調(diào)整運(yùn)算中。F0:用戶可設(shè)定的標(biāo)志位,可置位/復(fù)位,也可供測(cè)試。5RS1、RS0 :四個(gè)通用寄存器組選擇位,該兩位的四種組合狀態(tài)用來選擇 0~3 寄存器組。。OV:溢出標(biāo)志。當(dāng)帶符號(hào)數(shù)運(yùn)算結(jié)果超出-128~+127 范圍時(shí) OV=1,否則 OV=0。當(dāng)無符號(hào)數(shù)乘法結(jié)果超過 255 時(shí),或當(dāng)無符號(hào)數(shù)除法的除數(shù)為 0 時(shí) OV=1,否則 OV=0。P:奇偶校驗(yàn)標(biāo)志。每條指令執(zhí)行完,若 A 中 1 的個(gè)數(shù)為奇數(shù)時(shí) P=1,否則 P=0,即偶校驗(yàn)方式??刂七壿嬛饕ǘ〞r(shí)和控制邏輯、指令寄存器 、譯碼器以及地址指針 DPTR 和程序寄存器 PC 等。單片機(jī)是程序控制式計(jì)算機(jī),即它的運(yùn)行過程是在程序控制下逐條執(zhí)行程序指令的過程:從程序存儲(chǔ)器中取出指令送指令存儲(chǔ)器 IR,然后指令譯碼器 ID 進(jìn)行譯碼,譯碼產(chǎn)生一系列符合定時(shí)要求的微操作信號(hào),用以控制單片機(jī)的各部分動(dòng)作。8051 的控制器在單片機(jī)內(nèi)部協(xié)調(diào)各功能部件之間的數(shù)據(jù)傳送、數(shù)據(jù)運(yùn)算等操作,并對(duì)單片機(jī)發(fā)出若干控制信息。這些控制信息的使用專門的控制線,諸如 PSEN、ALE、 EA 以及 RST,也有一些是和 P3 口的某些端子合用,如 WR 和 RD 就是 P3.6 和 P3.7,他們的具體功能在介紹 8051 引腳是一起敘述。(2)存儲(chǔ)器組織8051 單片機(jī)的存儲(chǔ)器結(jié)構(gòu)特點(diǎn)之一是將程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開,并有各自的尋址機(jī)構(gòu)和尋址方式,這種結(jié)構(gòu)稱為哈佛結(jié)構(gòu)單片機(jī)。這種結(jié)構(gòu)與通用微機(jī)的存儲(chǔ)器結(jié)構(gòu)不同,一般微機(jī)只有一個(gè)存儲(chǔ)器邏輯空間,可隨意安排 ROM 或 RAM,訪存時(shí)用同一種指令,這種結(jié)構(gòu)稱為普林斯頓型。8051 單片機(jī)在物理上有四個(gè)存儲(chǔ)空間:片內(nèi)程序存儲(chǔ)器和片外程序存儲(chǔ)器、片內(nèi)數(shù)據(jù)存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器。8051 片內(nèi)有 256K 數(shù)據(jù)存儲(chǔ)器 RAM 和 4KB 的程序存儲(chǔ)器 ROM。除此之外,還可以在片外擴(kuò)展 RAM 和 ROM,并且各有 64KB 的尋址范圍。也就是最多可以在外部擴(kuò)展 2*64KB存儲(chǔ)器。8051 的存儲(chǔ)器組織結(jié)構(gòu)如圖 2.3 所示。圖 2-3 8051 存儲(chǔ)器組織結(jié)構(gòu)664K 字節(jié)的程序存儲(chǔ)器(ROM)空間中,有 4K 字節(jié)地址區(qū)對(duì)于片內(nèi) ROM 和片外ROM 是公用的,這 4K 字節(jié)地址是 0000H~FFFH。而 1000H~FFFFH 地址區(qū)為外部 ROM 專用。CPU 的控制器專門提供一個(gè)控制信號(hào) EA 用來區(qū)分內(nèi)部 ROM 和外部 ROM 的公用地址區(qū):當(dāng) EA 接高電平時(shí),單片機(jī)從片內(nèi) ROM 的 4K 字節(jié)存儲(chǔ)器區(qū)取指令,而當(dāng)指令地址超過 0FFFH 后,就自動(dòng)的轉(zhuǎn)向片外 ROM 取指令。當(dāng) EA 接低電平時(shí),CPU 只從片外 ROM 取指令。程序存儲(chǔ)器的某些單元是保留給系統(tǒng)使用的:0000H~0002H 單元是所有執(zhí)行程序的入口地址,復(fù)位以后,CPU 總是叢 0000H 單元開始執(zhí)行程序。0003H~002AH 單元均勻地分為五段,用做五個(gè)中斷服務(wù)程序的入口。用戶程序不應(yīng)進(jìn)入上述區(qū)域。8051 的 RAM 雖然字節(jié)數(shù)不很多,但卻起著十分重要的作用。256 個(gè)字節(jié)被分為兩個(gè)區(qū)域:00H~7FH 時(shí)真正的 RAM 區(qū),可以讀寫各種數(shù)據(jù)。而 80H~FFH 是專門用于特殊功能寄存器(SFR )的區(qū)域。對(duì)于 8051 安排了 21 個(gè)特殊功能寄存器,每個(gè)寄存器為 8 位,所以實(shí)際上 128 個(gè)字節(jié)并沒有全部利用。內(nèi)部 RAM 的各個(gè)單元,都可以通過直接地址來尋找,對(duì)于工作寄存器,則一般都直接用 R0~R7,對(duì)特殊功能寄存器,也是直接使用其名字較為方便。8051 內(nèi)部特殊功能寄存器都是可以位尋址的,并可用“寄存器名.位”來表示,如 ACC.0,B.7 等。2.3 單片機(jī)最小應(yīng)用系統(tǒng)電路設(shè)計(jì)C130PC230PY112MR1R310KC3 10uS1VCCP1.0P1.1P1.2P1.3S2S3S4P101 P112P123 P134P145 P156P167 P178RESET9P30/RXD10 P31/TXD11P3212 P3313P3414 P3515P3616 P3717X218 X119Vss20 P20 21P2122P22 23P23 24P2425P25 26P26 27P2728PSEN 29ALE/P 30EA 31P07 32P0633P05 34P04 35P0336P02 37P01 38P0039VCC 40U1AT89C51VCCP2.7P2.6P2.5P2.4P0.1P0.2P0.3P0.4P1.4P1.5P1.6P1.7P2.0P2.1P2.2VCC4.7K*4圖 2.4 單片機(jī)最小應(yīng)用系統(tǒng)原理圖注: 該最小系統(tǒng)由按鍵復(fù)位 RESET 電路、晶體振蕩電路以及 I/O 接口電路組成。復(fù)位的實(shí)現(xiàn)通常用 2 種方式: 開機(jī)上電復(fù)位和外部手動(dòng)復(fù)位,本設(shè)計(jì)用的是外部手動(dòng)7復(fù)位。電路圖 2.5 如下:圖 2.5 單片機(jī)復(fù)位圖AT89C51 工作電壓 VCC=5V,其 EA 引腳需接高電平,5V 電源電路如圖 2.6 所示。T1AC1V+ 2AC3V-4D6C4100u/16VC6100u/16vVCCVin1GND3+5V 2U27805C5104 C7104圖 2.6 單片機(jī)電源原理圖注: 該電源電路主要模塊為 IC7805,它能輸出穩(wěn)定的 5V 電源,圖中整流橋是將市電轉(zhuǎn)變?yōu)橹绷麟?電容起到慮波作用由 7805 的 OUT 引腳輸出 5V 電壓。2.4 LED 點(diǎn)陣介紹8×8 單色點(diǎn)陣共需要 64 個(gè)發(fā)光二極管組成,且每個(gè)二極管是放置在行線與列線的叉點(diǎn)上。本設(shè)計(jì)是一種實(shí)用的漢字顯示屏的制作,制作的是雙色點(diǎn)陣??紤]到元器件的易購性,沒有使用 8×8 的點(diǎn)陣發(fā)光二極管模塊,而是直接使用了 256 個(gè)高亮度發(fā)光管,組成了 16行 16 列的發(fā)光點(diǎn)陣。實(shí)際使用時(shí)可以根據(jù)這個(gè)原理自行擴(kuò)充顯示的字?jǐn)?shù)。對(duì)比下面的 8×8 單色點(diǎn)陣和 8×8 雙色點(diǎn)陣可以看出,其實(shí) 8×8 雙色點(diǎn)陣就是兩塊8×8 單色點(diǎn)陣組合在一起的。要實(shí)現(xiàn)用兩種顏色顯示,只要在電路的設(shè)計(jì)中適當(dāng)?shù)倪B線就可以了。 8×8 單色和雙色點(diǎn)陣 LED 結(jié)構(gòu)分別如下圖 2.8 和 2.9 所示。8圖 2.7 8×8 點(diǎn)陣外觀及引腳圖 圖 2.8 8×8 單色點(diǎn)陣內(nèi)部圖 圖 2.9 8×8 雙色點(diǎn)陣內(nèi)部圖2.5 LED 顯示方式漢字顯示屏用于顯示漢字、字符及圖像信息,在公共汽車、銀行、醫(yī)院及戶外廣告等地方都有廣泛的應(yīng)用。下面是簡(jiǎn)單的漢字顯示屏的制作,由單片機(jī)控制漢字的顯示內(nèi)容。為了降低成本,使用了四塊 8×8 的 LED 點(diǎn)陣發(fā)光管的模塊,組成了一個(gè) 16×16 的 LED 點(diǎn)陣顯示屏,如圖 2.10 所示。在這里僅做了四個(gè)漢字的顯示,在實(shí)際的使用中可以根據(jù)這個(gè)原理自行的擴(kuò)展顯示的漢字,下面是介紹漢字顯示的原理。 圖 2.10 四塊 8×8 的 LED 點(diǎn)陣組成 16×16 的 LED 點(diǎn)陣LED 驅(qū)動(dòng)顯示采用動(dòng)態(tài)掃描方法,動(dòng)態(tài)掃描方式是逐行輪流點(diǎn)亮,這樣掃描驅(qū)動(dòng)電路就可以實(shí)現(xiàn)多行的同名列共用一套列驅(qū)動(dòng)器。以 16×16 點(diǎn)陣為例,把所有同一行的發(fā)光管的陽極連在一起,把所有同一列的發(fā)光管的陰極連在一起(共陽的接法) ,先送出對(duì)應(yīng)第 1行發(fā)光管亮滅的數(shù)據(jù)并鎖存,然后選通第 1 行使其燃亮一定的時(shí)間,然后熄滅;再送出第 2行的數(shù)據(jù)并鎖存,然后選通第 2 行使其燃亮相同的時(shí)間,然后熄滅;….第 16 行之后,又重新燃亮第 1 行,反復(fù)輪回。當(dāng)這樣輪回的速度足夠快(每秒 24 次以上) ,由于人眼的視覺暫9留現(xiàn)象,就能看到顯示屏上穩(wěn)定的圖形。該方法能驅(qū)動(dòng)較多的 LED,控制方式較靈活,而且節(jié)省單片機(jī)的資源。顯示數(shù)據(jù)傳輸采用串行傳輸?shù)姆椒?,控制電路可以只用一根信?hào)線,將列數(shù)據(jù)一位一位傳往列驅(qū)動(dòng)器,在硬件方面無疑是十分經(jīng)濟(jì)的。但串行傳輸過程較長,數(shù)據(jù)按順序一位一位地輸出給列驅(qū)動(dòng)器,只有當(dāng)一行的各列數(shù)據(jù)都已傳輸?shù)轿恢?,這一行的各列才能并行地進(jìn)行顯示。對(duì)于串行傳輸方式來說,列數(shù)據(jù)準(zhǔn)備時(shí)間可能相當(dāng)長,在行掃描周期確定的情況下,留給行顯示的時(shí)間就太少了,以致影響到 LED 的亮度。采用串行傳輸中列數(shù)據(jù)準(zhǔn)備和列數(shù)據(jù)顯示的時(shí)間矛盾,可以采用重疊處理的方法。即在顯示本行各列數(shù)據(jù)的同時(shí),傳送下一行的列數(shù)據(jù)。為了達(dá)到重疊處理的目的,列數(shù)據(jù)的顯示就需要有鎖存功能。對(duì)于列數(shù)據(jù)準(zhǔn)備來說,它應(yīng)能實(shí)現(xiàn)串入并出的移位功能。這樣,本行已準(zhǔn)備好的數(shù)據(jù)打入并行鎖存器進(jìn)行顯示時(shí),串行移位寄存器就可以準(zhǔn)備下一行的列數(shù)據(jù),而不會(huì)影響本行的顯示。LED 點(diǎn)陣顯示模塊進(jìn)行的方法有兩種:(1)水平方向(X 方向)掃描,即逐列掃描的方式(簡(jiǎn)稱列掃描方式):此時(shí)用一個(gè)P 口輸出列碼決定哪一列能亮(相當(dāng)于位碼) ,用另一個(gè) P 口輸出行碼(列數(shù)據(jù)) ,決定該行上那哪個(gè) LED 亮(相當(dāng)于段碼) 。能亮的列從左到右掃描完 16 列(相當(dāng)于位碼循環(huán)移動(dòng) 16次)即顯示出一個(gè)完整的圖像。(2)豎直方向(Y 方向)掃描,即逐行掃描方式(簡(jiǎn)稱行掃描方式):此時(shí)用一個(gè) P口輸出決定哪一行能亮(相當(dāng)于位碼) ,另一個(gè) P 口輸出列碼(行數(shù)據(jù),行數(shù)據(jù)為將列數(shù)據(jù)的點(diǎn)陣旋轉(zhuǎn) 90 度的數(shù)據(jù))決定該行上哪些 LED 燈亮(相當(dāng)于段碼) 。能亮的行從上向下掃描完 16 行(相當(dāng)于位碼循環(huán)移位 16 次)即顯示一幀完整的圖像。本設(shè)計(jì)應(yīng)用的是第一種的掃描方法,即水平方向(X 方向)掃描。每一個(gè)字由 16 行 16 列的點(diǎn)陣形成顯示,即每個(gè)字均由 256 個(gè)點(diǎn)陣來表示,我們可以把每一個(gè)點(diǎn)理解為一個(gè)像素。一般我們使用的 16×16 的點(diǎn)陣宋體字庫,即所謂的 16×16,是每一個(gè)漢字在縱橫各 16 點(diǎn)的區(qū)域內(nèi)顯示的。漢字庫從該位置起的 32 字節(jié)信息記錄了該字的字模信息。事實(shí)上這個(gè)漢字屏不僅可以顯示漢字,也可以顯示在 256 像素范圍內(nèi)的任何圖形。我們以水平方向(x 方向)掃描顯示漢字的“江”為例來說明其掃描原理,每一個(gè)字由16 行 16 列的點(diǎn)陣組成顯示,如圖下的,如果用 8 位的 AT89S51 的單片機(jī)來控制,由于單片機(jī)的總線為 8 位,一個(gè)字需要拆分成兩個(gè)部分。一般我們把它分解成上部分和下部分,上部分由 8*16 的點(diǎn)陣組成,下部分也由 8*16 的點(diǎn)陣組成。在本例中單片機(jī)首先顯示的是左上角的第一列的部分,即第 0 列的 P00~P07 口。方向?yàn)?P00 到 P07,顯示漢字“江”的時(shí)候,P00 到 P04 都是滅的,P05 亮,即二進(jìn)制 00001000,轉(zhuǎn)換為 16 進(jìn)制為 08H,如圖 2.11 所示。上半部分第一列完成之后,繼續(xù)掃描下半部分的第一列,為了接線的方便,我們?nèi)栽O(shè)10計(jì)成由上往下的掃描方式,即從 P27 向 P20 方向掃描,從上圖可以看到,這一列所有的都不亮,所以代碼為 00000000,16 進(jìn)制為 00H,然后單片機(jī)轉(zhuǎn)向上半部的第二列,除了 P05 亮,其他的都不亮,即為 00000100,16 進(jìn)制為 04H,這一列掃描完成之后繼續(xù)進(jìn)行下半部分的掃描,除了 P21 亮,其他的為不亮,為二進(jìn)制 00100000,即 16 進(jìn)制 20H。按照這個(gè)方法,繼續(xù)進(jìn)行下面的掃描,一共掃描 32 個(gè) 8 位,可以得出漢字“江”的掃描代碼為 :08H,20H,06H,20H,80H,7EH,63H,80H0CH,04H,00H,04H,20H,04H,20H,04H20H,04H,3FH,FCH,20H,04H,20H,04H20H,04H,20H,04H,00H,04H,00H,00H圖 2.11 點(diǎn)陣顯示原理圖由這個(gè)原理可以看到,無論顯示何種字體或圖像,都可以用這種方法來分析出它的掃描代碼從而顯示在屏幕上。了解漢字的顯示原理之后,那如何得到漢字的字模信息呢?現(xiàn)在有一些現(xiàn)成的漢字字模生成軟件,可從網(wǎng)上下載漢字字庫提取程序直接提取字庫,如圖2.12 所示的為一種字模生成軟件,軟件打開后輸入漢字,點(diǎn)擊“檢取”后,十六進(jìn)制數(shù)據(jù)漢字代碼即可以自動(dòng)生成,把我們需要的豎排數(shù)據(jù)復(fù)制到我們的程序即可。11圖 2.12 漢字字模生成軟件2.6 點(diǎn)陣的移動(dòng)以下以 16×16 點(diǎn)陣為例介紹點(diǎn)陣的移動(dòng)。要顯示一個(gè)字符,該字符的點(diǎn)陣數(shù)據(jù)可以列向(縱向)16 點(diǎn)組字,又可以行向(橫向)16 點(diǎn)組字。無論哪一種組字方法,都既可以顯示字符的水平方向的移動(dòng),又可以顯示豎直方向的移動(dòng)。1.顯示字符的左右移動(dòng)(1)列掃描方式左移動(dòng):列向組字顯示字符水平方向的移動(dòng)(左滾動(dòng))在這里有兩個(gè)方法:方法 1:延長數(shù)組法。將原來字符點(diǎn)陣數(shù)組的 16 個(gè)數(shù)據(jù)重復(fù)一遍延長,點(diǎn)陣數(shù)組的數(shù)據(jù)個(gè)數(shù)為 32 個(gè)。每掃描儀幀取 8 個(gè)數(shù)據(jù)顯示,下一幀取數(shù)要在數(shù)組中后移一個(gè)數(shù)取數(shù)。循環(huán)一遍掃 16 幀??梢约傧胗袃蓧K 16×16 的點(diǎn)陣模塊(共 32 幀)水平平行排列,用一個(gè)恰好能罩住 8 列點(diǎn)陣的中空方框去罩這個(gè)點(diǎn)陣,第 1(第 1 幀)罩住最左邊數(shù)起第一列開始的16 列,就掃描顯示這 16 列;第 2 次(第 2 幀)使方框右移一列,罩住做左邊數(shù)起第 2 列開始的 16 列,就掃描顯示這 16 列;······;這樣每掃描完一幀使方框右移一列,最后第 16 次(第 16 幀)時(shí),罩住左邊數(shù)起的第 16 列開始的 16 列,就掃描顯示這 16 列。如此完成 16 幀畫面的掃描顯示,也就完成了整個(gè)一次移動(dòng)循環(huán)掃描、之后反復(fù)循環(huán),即可呈現(xiàn)顯示字符沿水平向左移動(dòng)的圖像,如圖 2.13 所示。12圖 2.13 方框圖法左右移動(dòng)示意圖因?yàn)槭橇邢蚪M字(列掃描方式,點(diǎn)陣數(shù)據(jù)為行碼,上邊為地位下面為高位) ,希望顯示移動(dòng)的一個(gè)字符,第 1 次掃描從行碼的點(diǎn)陣數(shù)組中取第 1~16 個(gè)數(shù)據(jù),送行碼輸出口,對(duì)應(yīng)于這 8 個(gè)數(shù)據(jù),同時(shí)用列碼輸出口輸出列碼,分別控制第 1~16 列。掃描完前 16 個(gè)數(shù)據(jù)之后,第 2 次掃描從點(diǎn)陣數(shù)組中取第 2~14 個(gè)數(shù)據(jù)(第 17 個(gè)數(shù)據(jù)與地 1 個(gè)數(shù)據(jù)同) ,送行碼輸出口,對(duì)應(yīng)于這 16 個(gè)數(shù)據(jù),同時(shí)用列碼輸出口輸出列碼,仍分別控制掃地 1~16 列。第 3 次掃描從點(diǎn)陣數(shù)組中取第 3~18 個(gè)數(shù)據(jù)(第 18 個(gè)數(shù)據(jù)碼與地 2 個(gè)數(shù)據(jù)碼相同)掃描······;如此實(shí)現(xiàn)字符向左移動(dòng)。以上完成一個(gè)圖形移動(dòng)的方法,也可以看成是移動(dòng) 16 個(gè)不同的字形。如圖 2.13 所示,首先掃描第一個(gè)字型,同樣是 16 行,16 次掃描,16 次顯示;完成一個(gè)字型的掃描以后,再掃描第二個(gè)字型;完成第二個(gè)字型的掃描之后,再掃描第三個(gè)字型······依此類推,即可產(chǎn)生該文字的左移的感覺。圖 2.13 字形法左右移動(dòng)示意圖假設(shè)如果原本某個(gè)漢字的字型(第一個(gè)字型) ,其編碼為:00H,10H,20H,30H,40H,50H,60H,70H,80H,90H,0A0H,0B0H,0C0H,0D0H0E0H,0F0H;13第二個(gè)字型的編碼為:10H,20H,30H,40H,50H,60H,70H,80H,90H,0A0H,0B0H,0C0H,0D0H0E0H,0F0H, 00H,也就是把第一個(gè)字型的編碼中,第 1 行顯示數(shù)據(jù),變?yōu)榈?2 行顯示數(shù)據(jù);第 2 行顯示數(shù)據(jù),變成第 3 行顯示數(shù)據(jù);第 3 行顯示數(shù)據(jù),變成第 4 行顯示數(shù)據(jù);第 4 行顯示數(shù)據(jù),變成第 5行顯示數(shù)據(jù)······以此類推。當(dāng)?shù)谝粋€(gè)字型掃描顯示完成之后,就進(jìn)行這樣的動(dòng)作調(diào)整,以產(chǎn)生第二個(gè)字型的編碼。同樣的,當(dāng)?shù)诙€(gè)字型掃描完成之后,就進(jìn)行這樣的調(diào)整動(dòng)作,以產(chǎn)生第三個(gè)字型的編碼。這個(gè)調(diào)整動(dòng)作時(shí)先將 16 個(gè)編碼根據(jù)序填入存儲(chǔ)器,例如第 1 行編碼存入 20H,第二行編碼存入 21H······要進(jìn)行左移調(diào)整時(shí),則先將 20H 地址的數(shù)據(jù)轉(zhuǎn)移到 36H 地址,再將 21 H 地址的數(shù)據(jù)轉(zhuǎn)移到 20 H 地址,將 22 H 地址的數(shù)據(jù)轉(zhuǎn)移到 21 H 地址,將 23 H 地址的數(shù)據(jù)轉(zhuǎn)移到 22 H 地址,將 24 H 地址的數(shù)據(jù)轉(zhuǎn)移到 23 H 地址,將 25 H 地址的數(shù)據(jù)轉(zhuǎn)移到 24 H地址,將 26 H 地址的數(shù)據(jù)轉(zhuǎn)移到 25 H 地址,將 27 H 地址的數(shù)據(jù)轉(zhuǎn)移到 26 H 地址,將 28 H 地址的數(shù)據(jù)轉(zhuǎn)移到 27H 地址······方法 2:數(shù)組數(shù)據(jù)“循環(huán)左移法” (適合用 C 語言編寫,在此僅作了解) 。注意,不是把二進(jìn)制數(shù)據(jù)按位循環(huán)左移,而是把數(shù)組中的數(shù)據(jù)按其在數(shù)組中的位置循環(huán)左移。具體的方法入下。原字符點(diǎn)陣數(shù)組中的 16 個(gè)數(shù)據(jù)不延長,但下一幀取的 16 個(gè)數(shù)據(jù),是把上一幀的 16 個(gè)數(shù)據(jù)的位置(先后順序) “循環(huán)左移”一次,即原來第 2 個(gè)移到第 1 個(gè),原來第 3 個(gè)移到第2 個(gè)······原來第 1 個(gè)移到第 16 個(gè)。實(shí)現(xiàn)數(shù)組數(shù)據(jù)循環(huán)左移的方法有:第一,遍一個(gè)“數(shù)組數(shù)據(jù)循環(huán)左移子程序” ,該子程序每執(zhí)行一次可把數(shù)組中的額數(shù)據(jù)循環(huán)左移一次,主程序中先調(diào)用一次該子程序,時(shí)數(shù)組中的數(shù)據(jù)循環(huán)左移這一次,然后再從數(shù)組中取數(shù)據(jù)顯示。當(dāng)數(shù)組中的額數(shù)據(jù)個(gè)數(shù)較多時(shí),片內(nèi) RAM 將不夠大,必須將數(shù)組定義在片外 RAM 中。第二,不用子程序,而是用變量判斷控制實(shí)現(xiàn)數(shù)組數(shù)據(jù)的循環(huán)左移。(2) 行掃描方式左移:行向組字顯示字符水平方向的左移。如果是行向組字(行掃描方式,點(diǎn)陣數(shù)據(jù)為列碼,左邊為敵位右邊為高位) ,希望顯示向左移動(dòng)的一個(gè)字符,第 1 次掃描從列碼的點(diǎn)陣數(shù)組中取第 1~16 個(gè)數(shù)據(jù),送到列碼輸出口,對(duì)應(yīng)的 8 個(gè)數(shù)據(jù),同時(shí)用行碼輸出口輸出行碼,分別控制掃描第 1~16 行。掃描完成這 16 個(gè)數(shù)據(jù)之后,第 2 次掃描的第16 個(gè)數(shù)據(jù),應(yīng)將原來第 1 次掃描的 16 列碼每一個(gè)都循環(huán)右移一位(如果是顯示右移則應(yīng)循環(huán)左移) ,再進(jìn)行掃描。如此,每進(jìn)行下一次掃描,把上一次掃描的 16 個(gè)列碼都循環(huán)右移一位,再進(jìn)行掃描。數(shù)據(jù)的右移與數(shù)據(jù)的左移相似,只是取碼的順序相反而已,在此就不再贅述。2.?dāng)?shù)據(jù)的上下移動(dòng)(1)列掃描方式向上移動(dòng)列向組字顯示字符豎直方向的移動(dòng)。若是列向組字,希望顯示向上移動(dòng)一個(gè)字符,第1 次掃描從行碼的點(diǎn)陣數(shù)組中取第 1~16 個(gè)數(shù)據(jù),送行碼輸出口,對(duì)應(yīng)于這 16 個(gè)數(shù)據(jù),同時(shí)14用列碼輸出口輸出列碼,分別控制掃描第 1~16 列。由于是列向組字(上高下低) ,掃描完成這 16 個(gè)數(shù)據(jù)后,第 2 次掃描的 16 個(gè)數(shù)據(jù),應(yīng)將原來的第 1 次掃描的 16 個(gè)行碼每一個(gè)都循環(huán)右移一位,使顯示的點(diǎn)都上移一行(如果是顯示向下滾動(dòng)則應(yīng)循環(huán)左移) ,再進(jìn)行掃描。如此,每進(jìn)行下一次的掃描,把上一次的 16 個(gè)行碼都循環(huán)右移一位,再進(jìn)行掃描就實(shí)現(xiàn)了數(shù)據(jù)的向上移動(dòng)。也可以用字型的方法容易理解,以下的 16×16 的 LED 顯示一個(gè)字是 8 個(gè)字型,首先掃描的而是第一個(gè)字型,同樣是 16 行,16 列掃描,16 次顯示;完成一個(gè)字型后,再掃描第二個(gè)字型;完成第二個(gè)字型后,再掃描第三個(gè)字型······以此類推,即可產(chǎn)生該文字向上移動(dòng)的感覺當(dāng)把第一個(gè)字型編碼中,每行顯示的數(shù)據(jù)都右移一位,以產(chǎn)生第二個(gè)字型編碼,即可產(chǎn)生字符向上滾動(dòng)的感覺。當(dāng)?shù)谝粋€(gè)字符掃描完成后,就進(jìn)行這樣的調(diào)整動(dòng)作,以產(chǎn)生第二個(gè)字型的編碼。同樣的,當(dāng)?shù)诙€(gè)字型完成之后,就進(jìn)行這樣的調(diào)整動(dòng)作,以產(chǎn)生第三個(gè)字型的編碼。調(diào)整的動(dòng)作是先將 8 個(gè)編碼根據(jù)序填入儲(chǔ)存器,例如第 1 行編碼存入 20 地址,第 2 行編碼存入 21 地址······要進(jìn)行上移調(diào)整時(shí),則從 20 地址數(shù)據(jù)開始,每筆數(shù)據(jù)都右移一位即可。 下圖 2.15 僅以字型移動(dòng)的方法畫圖。 圖 2.15 字形法上下移動(dòng)示意圖(2)行掃描方式上下移動(dòng)行向組字顯示字符豎直方向的移動(dòng)方法 1:延長數(shù)組法。如果是行向組字,希望顯示向上移動(dòng)的一個(gè)字符,第 1 次掃描從15列碼的點(diǎn)陣數(shù)組中取第 1~16 個(gè)數(shù)據(jù),送列碼輸出口,對(duì)應(yīng)于這 8 個(gè)數(shù)據(jù),同時(shí)用行碼輸出口輸出行碼,分別控制掃描第 1~16 行。第 2 次掃描從點(diǎn)陣數(shù)組中取第 2~17 個(gè)額數(shù)據(jù)(第17 個(gè)數(shù)據(jù)與地 1 個(gè)數(shù)據(jù)同) ,分別送列碼輸出口,對(duì)應(yīng)于這 16 個(gè)數(shù)據(jù),同時(shí)用行碼輸出口輸出行碼,仍分別控制地 1~16 行。第 3 次掃描從點(diǎn)陣數(shù)組中取第 3~18 個(gè)數(shù)據(jù)(第 18 個(gè)數(shù)據(jù)與地 2 個(gè)數(shù)據(jù)同)掃描;······如此就實(shí)現(xiàn)了字符的向上移動(dòng)。方法 2:數(shù)組數(shù)據(jù)“循環(huán)左移法” 。實(shí)現(xiàn)數(shù)組數(shù)據(jù)循環(huán)左移的方法與上類似。也有:用數(shù)組數(shù)據(jù)循環(huán)左移子程序;不用子程序,而是用變量判斷控制實(shí)現(xiàn)數(shù)組數(shù)據(jù)的循環(huán)左移。2.7 點(diǎn)陣顏色的轉(zhuǎn)換圖 2.16 雙色 8×8 點(diǎn)陣掃描接口圖為了簡(jiǎn)便起見,以下以 8×8 雙色點(diǎn)陣為例介紹雙色的轉(zhuǎn)換原理。前面已經(jīng)介紹過了,8×8 雙色點(diǎn)陣其實(shí)就相當(dāng)于 2 個(gè) 8×8 單色點(diǎn)陣組合在一起,上圖 2.16 的 2 個(gè) 8×8 單色點(diǎn)陣就相當(dāng)于一個(gè) 8×8 的單色點(diǎn)陣。在設(shè)計(jì)電路的時(shí)候可以使顯示信號(hào)從公用的引腳接入,接到 89C51 的一個(gè) PORT 口,把顯示紅色的部分和顯示黃色的部分分別接到 89C51 的另外兩個(gè) PORET 口,在編寫程序的時(shí)候,使顯示紅色的掃描信號(hào)輸出就顯示了紅色,當(dāng)顯示黃色的掃描掃描信號(hào)輸出時(shí),就顯示了黃色。2.8 LED 陣列驅(qū)動(dòng)電路正向點(diǎn)亮一顆 LED,至少也得 10 到 20 毫安,若電流不夠大,則 LED 不夠亮!而不管是 8051 的輸入還是輸出端其高態(tài)輸出電流都不是很高,不過 1~2 毫安而已。因此,很難直接高態(tài)驅(qū)動(dòng) LED。這時(shí)候就需要額外的驅(qū)動(dòng)電路,分別針對(duì)共陽極和共陰極 LED 陣列,有兩種不同的驅(qū)動(dòng)方式。針對(duì)輸出態(tài)的不同,分為:高態(tài)掃描-高態(tài)顯示,高態(tài)掃描-低態(tài)顯示,16低態(tài)掃描-高態(tài)顯示和低態(tài)掃描-低態(tài)顯示四種方式。下面針對(duì)設(shè)計(jì)中實(shí)際用到的一種驅(qū)動(dòng)方式介紹一種:共陰型低態(tài)掃描-低態(tài)顯示信號(hào)驅(qū)動(dòng)電路。圖 2.17 所示是針對(duì)共陰性 LED 陣列而設(shè)計(jì)的驅(qū)動(dòng)電路,在這種驅(qū)動(dòng)電路采用低態(tài)掃描,也就是任何時(shí)間只有一個(gè)高態(tài)信號(hào),其他則為低態(tài)。一行掃描完成之后,再把高態(tài)信號(hào)轉(zhuǎn)到臨近的其他行。掃描信號(hào)經(jīng)限流電阻接到 PNP 晶體管的基極,晶體管的集電極接地,射極則連至 LED 點(diǎn)陣的列引腳,若要同時(shí)點(diǎn)亮該列的 16 個(gè) LED,則晶體管的電流必須大于 200毫安才行。常用的 2N3904 之類就可以達(dá)到當(dāng)?shù)蛻B(tài)的列掃描信號(hào)輸入晶體管的基極后,該晶體管即為正向,而產(chǎn)生電流,即可使該列的 LED 具有點(diǎn)亮的條件所要的顯示信號(hào)連接到一個(gè) PNP 晶體管的基極,而該晶體管的射極連接到 VCC,同樣的,當(dāng)?shù)蛻B(tài)的顯示信號(hào)輸入時(shí),晶體管的集電極電流將流入行 LED 的陽極,即可點(diǎn)亮該行的 LED。如圖 2.17 所示.圖 2.17 共陰型低態(tài)掃描-低態(tài)顯示信號(hào)驅(qū)動(dòng)電路若要并接多個(gè) LED 陣列,如連接使用 4 個(gè) 8×8LED 陣列,連接成 16×16LED 陣列,則一個(gè)掃描信號(hào)同時(shí)驅(qū)動(dòng)兩個(gè) LED 陣列。如在本設(shè)計(jì)中要顯示的字比較大,用一個(gè) 8×8 的點(diǎn)陣無法顯示完整,這就需要用四塊 8×8 的點(diǎn)陣組成一塊 16×16 的點(diǎn)陣,這樣就可以顯示完整的漢字了,若要并聯(lián)多個(gè) 8×8 的 LED 組成 16×16 的點(diǎn)陣,則一個(gè)掃描信號(hào)同時(shí)要驅(qū)動(dòng)兩行的 LED。如下圖 2.18 所示。17圖 2.18 16×16 的點(diǎn)陣驅(qū)動(dòng)圖這時(shí)候就需要靠鎖存器(74LS373)將這兩組顯示信號(hào)鎖住,此處的鎖存器是以低態(tài)輸出的,其輸出的電壓可達(dá) 24 毫安,足以驅(qū)動(dòng)一個(gè) LED;若嫌不足,可以選用 74A373 其輸出的電壓可達(dá) 48 毫安,當(dāng) 74LS373 得 G 腳為高態(tài)時(shí),數(shù)據(jù)可以從輸入端傳輸?shù)芥i存器中; G 腳為低態(tài)時(shí),數(shù)據(jù)被鎖住,不會(huì)隨輸入端而變。另外 OC 腳為輸出控制引腳,當(dāng) OC 腳為高態(tài)時(shí),輸出呈現(xiàn)高阻抗;OC 為低態(tài)時(shí),數(shù)據(jù)會(huì)由鎖存器輸出。在這個(gè)電路之中驅(qū)動(dòng)的掃描信號(hào)總共有 16 條,如果直接由 8051 輸出,將占用 2 個(gè)PORT 口,浪費(fèi)了寶貴的資源,不太理想,在此使用的是一個(gè) 4 對(duì) 16 的譯碼器 (74LS154) ,這個(gè)譯碼器是將輸入的 16 進(jìn)位碼解碼輸出低態(tài)的掃描信號(hào)。輸出的低態(tài)掃描信號(hào)可直接接到 PNP 晶體管的基極,如果太大的話也可以先經(jīng)過限流電阻再接到 PNP 晶體管的基極,信號(hào)最后經(jīng)過晶體管的放大后即可推動(dòng) 16 個(gè) LED 點(diǎn)陣了。第三章 軟件設(shè)計(jì)3.1 單片機(jī)延時(shí)子程序延時(shí)程序在單片機(jī)編程中使用非常廣泛,也很重要,在本畢業(yè)設(shè)計(jì)的程序中用到了延時(shí)子程序,所以在此詳細(xì)的敘述一下。在弄清延時(shí)程序指令的用法之前,要清楚的了解延時(shí)程序的基本概念,機(jī)器周期和指令周期的區(qū)別和聯(lián)系、相關(guān)指令的用法等。 我們知道程序設(shè)計(jì)是單片機(jī)開發(fā)最重要的工作,而程序在執(zhí)行過程中常常需要完成延時(shí)18的功能。例如在本設(shè)計(jì)中,行向的掃描要控制每行的掃描時(shí)間,還有所有的字移動(dòng)有一定的時(shí)間間隔,而在所有的字移動(dòng)一遍結(jié)束的一瞬間到下一遍移動(dòng)開始的一瞬間要有延時(shí),這時(shí)的延時(shí)可以和移動(dòng)的時(shí)間相同以保持移動(dòng)的連貫性,也可以不同作為每次從頭開始的停頓,在上述就可以通過延時(shí)程序來完成。1. 機(jī)器周期和指令周期 (1)機(jī)器周期是指單片機(jī)完成一個(gè)基本操作所花費(fèi)的時(shí)間,一般使用微秒來計(jì)量單片機(jī)的運(yùn)行速度,51 單片機(jī)的一個(gè)機(jī)器周期包括 12 個(gè)時(shí)鐘振蕩周期,也就是說如果 51 單片機(jī)采用 12MHz 晶振,那么執(zhí)行一個(gè)機(jī)器周期就只需要 1μs;如果采用的是 6MHz 的晶振,那么執(zhí)行一個(gè)機(jī)器周期就需要 2 μs。 (2)指令周期是指單片機(jī)執(zhí)行一條指令所需要的時(shí)間,一般利用單片機(jī)的機(jī)器周期來計(jì)量指令周期。 在 51 單片機(jī)里有單周期指令(執(zhí)行這條指令只需一個(gè)機(jī)器周期) ,雙周期指令(執(zhí)行這條指令只需要兩個(gè) 機(jī)器周期) ,四周期指令(執(zhí)行這條指令需要四個(gè)機(jī)器周期) 。除了乘、除兩條指令是四周期指令,其余均 為單周期或雙周期指令。也就是說,如果 51 單片機(jī)采用的是 12MHz 晶振,那么它執(zhí)行一條指令一般只需 1~2 微秒的時(shí)間;如果采用的是 6MHz 晶振,執(zhí)行一條指令一般就需 2~4 微秒的時(shí)間。以 12MHZ 晶振為例,指令周期、機(jī)器周期與時(shí)鐘周期的關(guān)系是: 指令周期:CPU 執(zhí)行一條指令所需要的時(shí)間稱為指令周期,它是以機(jī)器周期為單位的,指令不同,所需的機(jī)器周期也不同。 時(shí)鐘周期:也稱為振蕩周期,一個(gè)時(shí)鐘周期=晶振的倒數(shù)。 MCS-51 單片機(jī)的一個(gè)機(jī)器周期=6 個(gè)狀態(tài)周期=12 個(gè)時(shí)鐘周期。 MCS-51 單片機(jī)的指令有單字節(jié)、雙字節(jié)和三字節(jié)的,它們的指令周期不盡相同,一個(gè)單周期指令包含一個(gè)機(jī)器周期,即 12 個(gè)時(shí)鐘周期,所以一條單周期指令被執(zhí)行所占時(shí)間為12×(1/12000000)=1μs。 了解以上概念后,那么可以依據(jù)單片機(jī)器件手冊(cè)中 89C51 的指令執(zhí)行周期和其所用晶振頻率來完成需要精確延時(shí)時(shí)間的延時(shí)程序。 2. 延時(shí)指令 在單片機(jī)編程里面并沒有真正的延時(shí)指令,從上面的概念中我們知道單片機(jī)每執(zhí)行一條指令都需要一 定的時(shí)間,所以要達(dá)到延時(shí)的效果,只須讓單片機(jī)不斷地執(zhí)行沒有具體實(shí)際意義的指令,從而達(dá)到了延時(shí) 的效果。 (1)數(shù)據(jù)傳送指令 MOV 數(shù)據(jù)傳送指令功能是將數(shù)據(jù)從一個(gè)地方復(fù)制、拷貝到另一個(gè)地方。 如:MOV R7,#80H ;將數(shù)據(jù) 80H 送到寄存器 R7,這時(shí)寄存器 R7 里面存放著80H,就單這條 指令而言并沒有任何實(shí)際意義,而執(zhí)行該指令則需要一個(gè)機(jī)器周期。 (2)空操作指令 NOP 19空操作指令功能只是讓單片機(jī)執(zhí)行沒有意義的操作,消耗一個(gè)機(jī)器周期。 (3)循環(huán)轉(zhuǎn)移指令 DJNZ 循環(huán)轉(zhuǎn)移指令功能是將第一個(gè)數(shù)進(jìn)行減 1 并判斷是否為 0,不為 0 則轉(zhuǎn)移到指定地點(diǎn);為 0 則往下執(zhí)行。 如:DJNZ R7,KK ;將寄存器 R7 的內(nèi)容減 1 并判斷寄存器 R7 里的內(nèi)容減完 1 后是否為 0,如果 不為 0 則轉(zhuǎn)移到地址標(biāo)號(hào)為 KK 的地方;如果為 0 則執(zhí)行下一條指令。這條指令需要 2 個(gè)機(jī)器周期。 循環(huán)轉(zhuǎn)移指令(DJNZ )除了可以給定地址標(biāo)號(hào)讓其跳轉(zhuǎn)外,還可以將地址標(biāo)號(hào)改成$,這樣 程序就跳回本指令執(zhí)行。例如: DJNZ R7,$ ;R7 內(nèi)容減 1 不為 0,則再次執(zhí)行本指令;為 0 則往下執(zhí)行,當(dāng) R7 的值改為 10 時(shí),則執(zhí)行完該條程序所需的時(shí)間為2*10=20 μs。利用以上三條指令的組合就可以比較精確地編寫出所需要的延時(shí)程序。下面是本設(shè)計(jì)的程序中延時(shí)程序的計(jì)算:MOV R3,#200; ① 1D1: MOV R5,#250; ② 1F1: DJNZ R5, F1; ③ 2*R5DJNZ R3,D1; ④ 2*R3+(1+2*R5)*R3RET 2上面這個(gè)子程序共有四條指令,現(xiàn)在分別就每一條指令 被執(zhí)行的次數(shù)和所耗時(shí)間進(jìn)行分析。 第一句:MOV R3,#200 在整個(gè)子程序中只被執(zhí)行一次,且為單周期指令,所以耗時(shí)1μs 第二句:MOV R5,#250 從②看到④只要 R3-1 不為 0,就會(huì)返回到這句,共執(zhí)行了R3 次,共耗時(shí) 200μs 第三句:DJNZ R5,F(xiàn)1 只要 R5-1 不為 0,就反復(fù)執(zhí)行此句(內(nèi)循環(huán) R5 次) ,又受外循環(huán)R3 控制,所以共執(zhí)行 R3*R5 次,因是雙周期指令,所以耗時(shí) 2*R3*R5μs。所以精確延時(shí)時(shí)間為:1+(1×200)+ (2×250×200)+ (2×200)+2 =( 2*250+3)*200+3 =100603μs ≈100ms =0.1s3.2 點(diǎn)陣左移顯示的流程圖及分析流程圖(圖 3.1)和程序的簡(jiǎn)要說明:在程序的開始設(shè)定初始的地址是 0H,并定義了” 選擇20符號(hào) F”的初值為 0,為下面的點(diǎn)陣掃描的出口選擇準(zhǔn)備。在主程序的開始的延時(shí)子程序,延時(shí) 0.1 秒,既是在程序通電啟動(dòng)開始的停頓,也作為一次移動(dòng)的末尾時(shí)到開始下一次重復(fù)移動(dòng)開始之間的停頓,在上面的“延時(shí)子程序”中已經(jīng)介紹了計(jì)算的方法。程序接著向下運(yùn)行,定義了取碼指針的位置,設(shè)為 00H 的初始位置,再下面的 74LS154 掃描指針的初值設(shè)為00H,是因?yàn)閽呙枰獜拈_始的零點(diǎn)開始掃。程序的循環(huán)運(yùn)行是從 M3 開始的,M3 的開始 10 行程序是點(diǎn)陣顏色的選擇,即確定列掃描出口的選擇,因?yàn)?F 的初值是 0,所以先從掃描信號(hào)先從 P1 口輸出,即首先顯示的是紅色的點(diǎn)陣。掃描信號(hào)輸出后,取碼指針先去的第一個(gè)碼送到點(diǎn)陣的上半部分,打開上部分點(diǎn)陣的 74LS373 鎖存器關(guān)閉下面部分 74LS373 鎖存器,把信號(hào)送到點(diǎn)陣的上部分。再指針加1,關(guān)閉上部分點(diǎn)陣的 74LS373 鎖存器,打開下面部分 74LS373 鎖存器,取相鄰的碼送到點(diǎn)陣的下半部分,緊挨著的延時(shí)程序是設(shè)定每列掃描的時(shí)間:MOV R3,#50;DJNZ R3,$;延時(shí)時(shí)間為:1+(2*50)=101us≈0.1ms下面的“DJNZ R6,M3;”到 M3 的循環(huán)可以計(jì)算顯示一次一個(gè)整屏的時(shí)間為0.1ms*16=1.1 ms,再下面的“DJNZ R1,M2;”到 M2 的循環(huán)可以計(jì)算出每個(gè)屏的停留時(shí)間,也是向左每移動(dòng)一下的時(shí)間間隔為 0.1ms*16*65=104ms=0.1s。當(dāng)字型向左移動(dòng)一位的時(shí)候,取碼指針應(yīng)在先加 2 再進(jìn)行下一個(gè)字型的取碼,因?yàn)楸驹O(shè)計(jì)每 1 列的碼為 2 個(gè)。最后的部分代碼:XRL A,#128;JNZ M1;CPL F0;JMP START;的意思是:在控制字型移動(dòng)完以后,返回到頭重新開始移動(dòng),因?yàn)樵诒驹O(shè)計(jì)是顯示 4 個(gè)字型,4 個(gè)字型的碼為 128 個(gè),取碼指針的初始為 0,每次加 2,到 128 時(shí)循環(huán)結(jié)束,改變 F 的狀態(tài),跳到程序的最上面開始部分,開始黃色字型的移動(dòng)顯示。說明一下:本設(shè)計(jì)是以顯示 4 個(gè)字的循環(huán)為例的,正如前面所說,字型可以任意加進(jìn)去,顯示任意多的字左移的顯示,還可以顯示一些符號(hào)和圖形。只要有字型的代碼,再稍微改一下程序就可以顯示了。顯示效果:開始停 0.1 秒,顯示向左移動(dòng)的紅色字“XXXX”,移動(dòng)的速度為每 0.1 秒移動(dòng)一下,到左后一個(gè)字,停 0.1 秒馬上就接著顯示黃色的字型“XXXX”。 在主程序的開始的延時(shí)作為一次移動(dòng)的末尾時(shí)到開始下一次重復(fù)移動(dòng)開始之間的停頓,和字符移動(dòng)的時(shí)間間隔相同,保持了移動(dòng)的平穩(wěn)連貫性。黃色的字型“XXXX”移動(dòng)的速度為每 0.1 秒移動(dòng)一下,到左后一個(gè)字,停 0.1 秒馬上就接著再顯示紅色的字型“XXXX”。依此循環(huán)。21開始清除屏幕延時(shí)取碼指針 20H 初值為 00154 掃描指針初值為 00設(shè)置每屏停留時(shí)間每屏 4 字,取碼指針存 R0掃描指針→A取碼指針載入 A到 TABLE 取上半部數(shù)據(jù)取下一個(gè)碼取碼指針載入 A到 TABLE 取下半部數(shù)據(jù)P0.0 置 1,P0.1 清 0 輸出至 P2口顯示取碼值加 1 并延時(shí)清除屏幕掃描下一行顯示 1 屏?清除 154 掃描指針為 00取碼指針載入 A每屏停留的時(shí)間到?指針加 2 并回存8 個(gè)字都左移完?F=0F=0?P0. 1 清零P0. 2 置 1 輸出至 P0.3 掃描YY NYNYNF0 取反START:M1M2M3M4P0.2 清零P0.1 置 1 輸出至 P0.1 掃描P0.0 清 0,P0.1 置 1 輸出至 P2 口顯示輸出至 P2 口顯示圖 3.1 點(diǎn)陣左移顯示的流程圖NRET223.3 PROTEUS 仿真Proteus 仿真時(shí),單片機(jī)需要加載程序,加載程序?yàn)?HEX 文件。本設(shè)計(jì)利用 Keil μVision2, 在新建 Keil 項(xiàng)目時(shí)選擇 AT89C52 單片機(jī)作為 CPU,將源程序?qū)?,在“Options For Target”對(duì)話窗口中,選中 “Output”選項(xiàng)中的“Create HEX File”,編譯鏈接后就可以生成.HEX 文件。在 Proteus ISIS 中,選中 AT89C51 并單擊鼠標(biāo)左鍵,對(duì) AT89C51 進(jìn)行設(shè)置,設(shè)置單片機(jī)時(shí)鐘頻率為 12MHz,按照正確的文件路徑加載.HEX 文件。對(duì)單片機(jī)設(shè)置完畢后就可以開始仿真了。仿真過程中如有硬件問題可在 Proteus ISIS 中直接修改,如有軟件問題可在 Keil μVision2中直接修改,通過 Keil 與 Proteus 的聯(lián)合調(diào)試就可以得到滿意的結(jié)果。利用Proteus 實(shí)現(xiàn)了對(duì)點(diǎn)陣式 LED 滾動(dòng)漢字顯示屏的仿真 ,說明程序和電路圖都沒有問題。3.4 調(diào)試 調(diào)試主要分為硬件調(diào)試和軟件調(diào)試: 硬件調(diào)試:在焊接電路板的時(shí)候,應(yīng)該從最基本的最小系統(tǒng)開始,分模塊,逐個(gè)進(jìn)行焊接測(cè)試。在對(duì)各個(gè)硬件模塊進(jìn)行測(cè)試時(shí),要保證軟件正確的情況下去測(cè)試硬件,要不然發(fā)生錯(cuò)誤時(shí),不知道到底是哪一方出錯(cuò)了。當(dāng)然,在設(shè)計(jì)的過程中也存在
收藏