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