畢業(yè)論文-基于AT89C51單片機(jī)的16*16點(diǎn)陣設(shè)計(jì).doc

上傳人:good****022 文檔編號:116545966 上傳時(shí)間:2022-07-05 格式:DOC 頁數(shù):33 大小:1.15MB
收藏 版權(quán)申訴 舉報(bào) 下載
畢業(yè)論文-基于AT89C51單片機(jī)的16*16點(diǎn)陣設(shè)計(jì).doc_第1頁
第1頁 / 共33頁
畢業(yè)論文-基于AT89C51單片機(jī)的16*16點(diǎn)陣設(shè)計(jì).doc_第2頁
第2頁 / 共33頁
畢業(yè)論文-基于AT89C51單片機(jī)的16*16點(diǎn)陣設(shè)計(jì).doc_第3頁
第3頁 / 共33頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《畢業(yè)論文-基于AT89C51單片機(jī)的16*16點(diǎn)陣設(shè)計(jì).doc》由會員分享,可在線閱讀,更多相關(guān)《畢業(yè)論文-基于AT89C51單片機(jī)的16*16點(diǎn)陣設(shè)計(jì).doc(33頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、江海學(xué)院畢業(yè)設(shè)計(jì)基于AT89C51單片機(jī)的1616點(diǎn)陣設(shè)計(jì)第一章 緒 論1.1 設(shè)計(jì)課題背景知識單片微型計(jì)算機(jī)(single chip microcomputer)簡稱單片機(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),對環(huán)境要求不高,價(jià)格低廉,可靠性高,靈活性好,開發(fā)較為容易。在現(xiàn)代工業(yè)控制和一些智能化儀器儀表中,越來越多的場所需要用點(diǎn)陣

2、圖形顯示器顯示漢字,漢字顯示屏也廣泛應(yīng)用到汽車報(bào)站器,廣告屏等。所以研究LED顯示有實(shí)用的意義。LED顯示屏分為圖文顯示屏和視頻顯示屏,均由LED矩陣塊組成。圖文顯示屏可與計(jì)算機(jī)同步顯示漢字、英文文本和圖形;視頻顯示屏采用微型計(jì)算機(jī)進(jìn)行控制,圖文、圖像并茂,以實(shí)時(shí)、同步、清晰的信息傳播方式播放各種信息,還可顯示二維、三維動(dòng)畫、錄像、電視、VCD節(jié)目以及現(xiàn)場實(shí)況。LED顯示屏顯示畫面色彩鮮艷,立體感強(qiáng),靜如油畫,動(dòng)如電影,廣泛應(yīng)用于交通運(yùn)輸、車站、商場、醫(yī)院、賓館、證券市場、工業(yè)企業(yè)管理等公共場所。 LED顯示屏可以顯示變化的數(shù)字、文字、圖形圖像;不僅可以用于室內(nèi)環(huán)境還可以用于室外環(huán)境,具有投影

3、儀、電視墻、液晶顯示屏無法比擬的優(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)的知識已經(jīng)遠(yuǎn)遠(yuǎn)超出我們在校學(xué)生的能力范圍,所以在此只是簡單的研究一下用單片機(jī)驅(qū)動(dòng)的LED顯示移動(dòng)的漢字。目的有三:一是親手制作一個(gè)簡單實(shí)用的顯示文字的LED點(diǎn)陣;二是通過制作LED點(diǎn)陣增強(qiáng)對LED點(diǎn)陣的了解和應(yīng)用,以及復(fù)

4、習(xí)鞏固單片機(jī)知識;三是通過團(tuán)隊(duì)合作,增強(qiáng)團(tuán)隊(duì)合作的意識,為以后走向社會工作打下基礎(chǔ),并且增強(qiáng)了同學(xué)之間的友誼。漢字顯示方式是先根據(jù)所需要的漢字提取漢字點(diǎn)陣(如1616 點(diǎn)陣),將點(diǎn)陣文件存入ROM,形成新的漢字編碼;而在使用時(shí)則需要先根據(jù)新的漢字編碼組成語句,再由MCU根據(jù)新編碼提取相應(yīng)的點(diǎn)陣進(jìn)行漢字顯示。不論顯示圖形還是文字,都是控制與組成這些圖形或文字的各個(gè)點(diǎn)所在位置相對應(yīng)的LED器件發(fā)光。通常事先把需要顯示的圖形文字轉(zhuǎn)換成點(diǎn)陣圖形,在按照顯示控制的要求以一定的格式形成顯示數(shù)據(jù)。對于只控制通斷的圖文顯示屏來說,每個(gè)LED發(fā)光器件占據(jù)數(shù)據(jù)中的1位(1bit),在需要該LE D器件發(fā)光的數(shù)據(jù)中

5、相應(yīng)的位填1,否則填0。當(dāng)然,根據(jù)控制電路的安排,相反的定義同樣時(shí)可行的。這樣依照所需顯示的圖形文字,按顯示屏的各行各列逐點(diǎn)填寫顯示數(shù)據(jù),就可以構(gòu)成一個(gè)顯示數(shù)據(jù)文件。顯示圖形的數(shù)據(jù)文件,其格式相對自由,只要能夠滿足顯示控制的要求即可。文字的點(diǎn)陣格式比較規(guī)范,可以采用現(xiàn)行計(jì)算機(jī)通用的字庫字模。組成一個(gè)字的點(diǎn)陣,其大小也可以有1616、2424、3232、4848等不同規(guī)格。用點(diǎn)陣方式構(gòu)成圖形或文字,是非常靈活的,可以根據(jù)需要任意組合和變化,只要設(shè)計(jì)好合適的數(shù)據(jù)文件,就可以得到滿意的顯示效果。因而采用點(diǎn)陣式圖文顯示屏顯示經(jīng)常需要變化的信息,是非常有效的。圖文顯示屏的顏色,有單色、雙色、和多色幾種。

6、最常用的是單色圖文屏。單色屏多使用紅色或橘紅色或橙色LED點(diǎn)陣單元。雙色圖文屏和多色圖文屏,在LED點(diǎn)陣的每一個(gè)“點(diǎn)”上布置有兩個(gè)或多個(gè)不同顏色的LED發(fā)光器件。換句話說,對應(yīng)于每種顏色都有自己的顯示矩陣。顯示的時(shí)候,各顏色的顯示點(diǎn)陣是分開控制的。事先設(shè)計(jì)好各種顏色的顯示數(shù)據(jù),顯示時(shí)分別送到各自的顯示點(diǎn)陣,即可實(shí)現(xiàn)預(yù)期效果。每一種顏色的控制方法和單色的完全相同,因此掌握了單色圖文顯示屏的原理,雙色屏和多色屏就不難理解了。為了吸引觀眾增強(qiáng)顯示效果,可以有多種顯示模式。最簡單的顯示模式是靜態(tài)顯示。與靜態(tài)顯示模式相對應(yīng),就有各種動(dòng)態(tài)顯示模式,它們所顯示的圖文都是能夠動(dòng)的。按照圖文運(yùn)動(dòng)的特點(diǎn)又可以分為

7、閃爍、平移、旋轉(zhuǎn)、縮放等多種顯示模式。產(chǎn)生不同顯示模式的方法,并不意味著一定要重新編寫顯示數(shù)據(jù),可以通過一定的算法從原來的顯示數(shù)據(jù)直接生成。例如,按順序調(dià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)用簡單方便的電路連接和程序完成漢字的換色與移動(dòng)。鐘桂負(fù)責(zé)用設(shè)計(jì)好的點(diǎn)陣電路制作PCB電路板,包括完成PCB板的制作

8、,張維平負(fù)責(zé)制作另外一塊在面包板上連的點(diǎn)陣線連板子的焊接與調(diào)試,各人的分工不同只是工作側(cè)重點(diǎn)的不同,大家是在一起互相學(xué)習(xí)互相幫助,共同完成設(shè)計(jì)任務(wù)。第二章 硬件設(shè)計(jì)2.1設(shè)計(jì)框圖及介紹 LED點(diǎn)陣總體框圖如圖1.1所示,點(diǎn)陣電路大體上可以分成微機(jī)本身的硬件、顯示驅(qū)動(dòng)電路、控制信號電路三部分。控制電路部分包括一個(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í)可以放到一起,所以可以將其字庫放到控制電路部分使用串行通訊方

9、式來與屏體電路部分進(jìn)行數(shù)據(jù)和命令的傳送。此顯示電路采用掃描方式進(jìn)行顯示時(shí),每行有一個(gè)行驅(qū)動(dòng)器,各行的同名列共用一個(gè)列驅(qū)動(dòng)器。由行譯碼器給出的行選通信號,從第一行開始,按順序依次對各行進(jìn)行掃描(把該行與電源的一端接通)。另一方而,根據(jù)各列鎖存的數(shù)據(jù),確定相應(yīng)的列驅(qū)動(dòng)器是否將該列與電源的另一端接通。接通的列,就在該行該列點(diǎn)燃相應(yīng)的LED;未接通的列所對應(yīng)的LED熄滅??赏ㄟ^掃描輸出口的控制實(shí)現(xiàn)顏色的轉(zhuǎn)換。圖2.1 點(diǎn)陣顯示的總體框圖2.2 51系列單片機(jī)簡介單片機(jī)(Microcontroller,又稱微處理器)是在一塊硅片上集成了各種部件的微型機(jī),這些部件包括中央處理器CPU、數(shù)據(jù)存儲器RAM、程

10、序存儲器ROM、定時(shí)器/計(jì)數(shù)器和多種I/O接口電路。8051單片機(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、存儲器、并行口、串行口、定時(shí)器/計(jì)數(shù)器、中斷邏輯幾部分。(1)中央處理器8051的中央處理器由運(yùn)算器和控制邏輯構(gòu)成,其中包括若干特殊功能寄存器(SF

11、R)。算術(shù)邏輯單元ALU能對數(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或通用寄存器或存儲單元中,累加器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,常用

12、于十進(jìn)制調(diào)整運(yùn)算中。F0:用戶可設(shè)定的標(biāo)志位,可置位/復(fù)位,也可供測試。RS1、RS0:四個(gè)通用寄存器組選擇位,該兩位的四種組合狀態(tài)用來選擇03寄存器組。OV:溢出標(biāo)志。當(dāng)帶符號數(shù)運(yùn)算結(jié)果超出-128+127范圍時(shí)OV=1,否則OV=0。當(dāng)無符號數(shù)乘法結(jié)果超過255時(shí),或當(dāng)無符號數(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í)行程序指令的過程:從程序存儲器中取出

13、指令送指令存儲器IR,然后指令譯碼器ID進(jìn)行譯碼,譯碼產(chǎn)生一系列符合定時(shí)要求的微操作信號,用以控制單片機(jī)的各部分動(dòng)作。8051的控制器在單片機(jī)內(nèi)部協(xié)調(diào)各功能部件之間的數(shù)據(jù)傳送、數(shù)據(jù)運(yùn)算等操作,并對單片機(jī)發(fā)出若干控制信息。這些控制信息的使用專門的控制線,諸如PSEN、ALE、EA以及RST,也有一些是和P3口的某些端子合用,如WR和RD就是P3.6和P3.7,他們的具體功能在介紹8051引腳是一起敘述。(2)存儲器組織8051單片機(jī)的存儲器結(jié)構(gòu)特點(diǎn)之一是將程序存儲器和數(shù)據(jù)存儲器分開,并有各自的尋址機(jī)構(gòu)和尋址方式,這種結(jié)構(gòu)稱為哈佛結(jié)構(gòu)單片機(jī)。這種結(jié)構(gòu)與通用微機(jī)的存儲器結(jié)構(gòu)不同,一般微機(jī)只有一個(gè)存儲

14、器邏輯空間,可隨意安排ROM或RAM,訪存時(shí)用同一種指令,這種結(jié)構(gòu)稱為普林斯頓型。8051單片機(jī)在物理上有四個(gè)存儲空間:片內(nèi)程序存儲器和片外程序存儲器、片內(nèi)數(shù)據(jù)存儲器和片外數(shù)據(jù)存儲器。8051片內(nèi)有256K數(shù)據(jù)存儲器RAM和4KB的程序存儲器ROM。除此之外,還可以在片外擴(kuò)展RAM和ROM,并且各有64KB的尋址范圍。也就是最多可以在外部擴(kuò)展2*64KB存儲器。8051的存儲器組織結(jié)構(gòu)如圖2.3所示。圖 2-3 8051存儲器組織結(jié)構(gòu)64K字節(jié)的程序存儲器(ROM)空間中,有4K字節(jié)地址區(qū)對于片內(nèi)ROM和片外ROM是公用的,這4K字節(jié)地址是0000HFFFH。而1000HFFFFH地址區(qū)為外部

15、ROM專用。CPU的控制器專門提供一個(gè)控制信號EA用來區(qū)分內(nèi)部ROM和外部ROM的公用地址區(qū):當(dāng)EA接高電平時(shí),單片機(jī)從片內(nèi)ROM的4K字節(jié)存儲器區(qū)取指令,而當(dāng)指令地址超過0FFFH后,就自動(dòng)的轉(zhuǎn)向片外ROM取指令。當(dāng)EA接低電平時(shí),CPU只從片外ROM取指令。程序存儲器的某些單元是保留給系統(tǒng)使用的:0000H0002H單元是所有執(zhí)行程序的入口地址,復(fù)位以后,CPU總是叢0000H單元開始執(zhí)行程序。0003H002AH單元均勻地分為五段,用做五個(gè)中斷服務(wù)程序的入口。用戶程序不應(yīng)進(jìn)入上述區(qū)域。8051的RAM雖然字節(jié)數(shù)不很多,但卻起著十分重要的作用。256個(gè)字節(jié)被分為兩個(gè)區(qū)域:00H7FH時(shí)真正

16、的RAM區(qū),可以讀寫各種數(shù)據(jù)。而80HFFH是專門用于特殊功能寄存器(SFR)的區(qū)域。對于8051安排了21個(gè)特殊功能寄存器,每個(gè)寄存器為8位,所以實(shí)際上128個(gè)字節(jié)并沒有全部利用。內(nèi)部RAM的各個(gè)單元,都可以通過直接地址來尋找,對于工作寄存器,則一般都直接用R0R7,對特殊功能寄存器,也是直接使用其名字較為方便。8051內(nèi)部特殊功能寄存器都是可以位尋址的,并可用“寄存器名.位”來表示,如ACC.0,B.7等。2.3 單片機(jī)最小應(yīng)用系統(tǒng)電路設(shè)計(jì)圖2.4 單片機(jī)最小應(yīng)用系統(tǒng)原理圖 注: 該最小系統(tǒng)由按鍵復(fù)位RESET電路、晶體振蕩電路以及I/O接口電路組成。復(fù)位的實(shí)現(xiàn)通常用2種方式: 開機(jī)上電復(fù)

17、位和外部手動(dòng)復(fù)位,本設(shè)計(jì)用的是外部手動(dòng)復(fù)位。電路圖2.5如下:圖2.5 單片機(jī)復(fù)位圖AT89C51工作電壓VCC=5V,其EA引腳需接高電平,5V電源電路如圖2.6所示。圖2.6 單片機(jī)電源原理圖注: 該電源電路主要模塊為IC7805,它能輸出穩(wěn)定的 5V電源,圖中整流橋是將市電轉(zhuǎn)變?yōu)橹绷麟?電容起到慮波作用由7805的OUT引腳輸出5V電壓。2.4 LED點(diǎn)陣介紹88單色點(diǎn)陣共需要64個(gè)發(fā)光二極管組成,且每個(gè)二極管是放置在行線與列線的叉點(diǎn)上。本設(shè)計(jì)是一種實(shí)用的漢字顯示屏的制作,制作的是雙色點(diǎn)陣??紤]到元器件的易購性,沒有使用88的點(diǎn)陣發(fā)光二極管模塊,而是直接使用了256個(gè)高亮度發(fā)光管,組成了

18、16行16列的發(fā)光點(diǎn)陣。實(shí)際使用時(shí)可以根據(jù)這個(gè)原理自行擴(kuò)充顯示的字?jǐn)?shù)。對比下面的88單色點(diǎn)陣和88雙色點(diǎn)陣可以看出,其實(shí)88雙色點(diǎn)陣就是兩塊88單色點(diǎn)陣組合在一起的。要實(shí)現(xiàn)用兩種顏色顯示,只要在電路的設(shè)計(jì)中適當(dāng)?shù)倪B線就可以了。 88單色和雙色點(diǎn)陣LED結(jié)構(gòu)分別如下圖2.8和2.9所示。 圖2.7 88點(diǎn)陣外觀及引腳圖 圖2.8 88單色點(diǎn)陣內(nèi)部圖 圖2.9 88雙色點(diǎn)陣內(nèi)部圖2.5 LED顯示方式漢字顯示屏用于顯示漢字、字符及圖像信息,在公共汽車、銀行、醫(yī)院及戶外廣告等地方都有廣泛的應(yīng)用。下面是簡單的漢字顯示屏的制作,由單片機(jī)控制漢字的顯示內(nèi)容。為了降低成本,使用了四塊88的LED點(diǎn)陣發(fā)光管的

19、模塊,組成了一個(gè)1616的LED點(diǎn)陣顯示屏,如圖2.10所示。在這里僅做了四個(gè)漢字的顯示,在實(shí)際的使用中可以根據(jù)這個(gè)原理自行的擴(kuò)展顯示的漢字,下面是介紹漢字顯示的原理。 圖2.10 四塊88的LED點(diǎn)陣組成1616的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)器。以1616點(diǎn)陣為例,把所有同一行的發(fā)光管的陽極連在一起,把所有同一列的發(fā)光管的陰極連在一起(共陽的接法),先送出對應(yīng)第1行發(fā)光管亮滅的數(shù)據(jù)并鎖存,然后選通第1行使其燃亮一定的時(shí)間,然后熄滅;再送出第2行的數(shù)據(jù)并鎖存,然后選通第2行使其燃亮相同的時(shí)間,然后熄滅

20、;.第16行之后,又重新燃亮第1行,反復(fù)輪回。當(dāng)這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現(xiàn)象,就能看到顯示屏上穩(wěn)定的圖形。該方法能驅(qū)動(dòng)較多的LED,控制方式較靈活,而且節(jié)省單片機(jī)的資源。顯示數(shù)據(jù)傳輸采用串行傳輸?shù)姆椒?,控制電路可以只用一根信號線,將列數(shù)據(jù)一位一位傳往列驅(qū)動(dòng)器,在硬件方面無疑是十分經(jīng)濟(jì)的。但串行傳輸過程較長,數(shù)據(jù)按順序一位一位地輸出給列驅(qū)動(dòng)器,只有當(dāng)一行的各列數(shù)據(jù)都已傳輸?shù)轿恢螅@一行的各列才能并行地進(jìn)行顯示。對于串行傳輸方式來說,列數(shù)據(jù)準(zhǔn)備時(shí)間可能相當(dāng)長,在行掃描周期確定的情況下,留給行顯示的時(shí)間就太少了,以致影響到LED的亮度。采用串行傳輸中列數(shù)據(jù)準(zhǔn)備和列

21、數(shù)據(jù)顯示的時(shí)間矛盾,可以采用重疊處理的方法。即在顯示本行各列數(shù)據(jù)的同時(shí),傳送下一行的列數(shù)據(jù)。為了達(dá)到重疊處理的目的,列數(shù)據(jù)的顯示就需要有鎖存功能。對于列數(shù)據(jù)準(zhǔn)備來說,它應(yīng)能實(shí)現(xiàn)串入并出的移位功能。這樣,本行已準(zhǔn)備好的數(shù)據(jù)打入并行鎖存器進(jìn)行顯示時(shí),串行移位寄存器就可以準(zhǔn)備下一行的列數(shù)據(jù),而不會影響本行的顯示。LED點(diǎn)陣顯示模塊進(jìn)行的方法有兩種:(1)水平方向(X方向)掃描,即逐列掃描的方式(簡稱列掃描方式):此時(shí)用一個(gè)P口輸出列碼決定哪一列能亮(相當(dāng)于位碼),用另一個(gè)P口輸出行碼(列數(shù)據(jù)),決定該行上那哪個(gè)LED亮(相當(dāng)于段碼)。能亮的列從左到右掃描完16列(相當(dāng)于位碼循環(huán)移動(dòng)16次)即顯示出一

22、個(gè)完整的圖像。(2)豎直方向(Y方向)掃描,即逐行掃描方式(簡稱行掃描方式):此時(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è)像素。一般我們使用的1616的點(diǎn)陣宋體字庫,即所謂的1616,是每一個(gè)漢字在縱橫各16點(diǎn)的區(qū)域內(nèi)顯示的。漢字庫從該位置起的32字節(jié)信

23、息記錄了該字的字模信息。事實(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列的P00P07口。方向?yàn)镻00到P07,顯示漢字“江”的時(shí)候,P00到P04都是滅的,P05亮,即二進(jìn)制00001000,轉(zhuǎn)換為16進(jìn)制為08H,如

24、圖2.11所示。上半部分第一列完成之后,繼續(xù)掃描下半部分的第一列,為了接線的方便,我們?nèi)栽O(shè)計(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

25、,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ù)制到我們的程序即可。圖2.12 漢字字模生

26、成軟件2.6 點(diǎn)陣的移動(dòng)以下以1616點(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幀??梢约傧胗袃蓧K1616的點(diǎn)陣模塊(共32幀)水平平行排列,用一個(gè)恰好能罩住8列點(diǎn)陣的中空方

27、框去罩這個(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所示。 圖2.13 方框圖法左右移動(dòng)示意圖因?yàn)槭橇邢蚪M字(列掃描方式,點(diǎn)陣數(shù)據(jù)為行碼,上邊為地位下面為高位),希望顯示移動(dòng)的一個(gè)字符,第1次掃描從行碼的點(diǎn)陣數(shù)組中取第116個(gè)數(shù)據(jù),送行碼輸

28、出口,對應(yīng)于這8個(gè)數(shù)據(jù),同時(shí)用列碼輸出口輸出列碼,分別控制第116列。掃描完前16個(gè)數(shù)據(jù)之后,第2次掃描從點(diǎn)陣數(shù)組中取第214個(gè)數(shù)據(jù)(第17個(gè)數(shù)據(jù)與地1個(gè)數(shù)據(jù)同),送行碼輸出口,對應(yīng)于這16個(gè)數(shù)據(jù),同時(shí)用列碼輸出口輸出列碼,仍分別控制掃地116列。第3次掃描從點(diǎn)陣數(shù)組中取第318個(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)生該文字的左

29、移的感覺。 圖2.13字形法左右移動(dòng)示意圖假設(shè)如果原本某個(gè)漢字的字型(第一個(gè)字型),其編碼為:00H,10H,20H,30H,40H,50H,60H,70H,80H,90H,0A0H,0B0H,0C0H,0D0H0E0H,0F0H;第二個(gè)字型的編碼為:10H,20H,30H,40H,50H,60H,70H,80H,90H,0A0H,0B0H,0C0H,0D0H0E0H,0F0H, 00H,也就是把第一個(gè)字型的編碼中,第1行顯示數(shù)據(jù),變?yōu)榈?行顯示數(shù)據(jù);第2行顯示數(shù)據(jù),變成第3行顯示數(shù)據(jù);第3行顯示數(shù)據(jù),變成第4行顯示數(shù)據(jù);第4行顯示數(shù)據(jù),變成第5行顯示數(shù)據(jù)以此類推。當(dāng)?shù)谝粋€(gè)字型掃描顯示完成之后

30、,就進(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ù)序填入存儲器,例如第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地址方法

31、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將不夠大,

32、必須將數(shù)組定義在片外RAM中。第二,不用子程序,而是用變量判斷控制實(shí)現(xiàn)數(shù)組數(shù)據(jù)的循環(huán)左移。(2) 行掃描方式左移:行向組字顯示字符水平方向的左移。如果是行向組字(行掃描方式,點(diǎn)陣數(shù)據(jù)為列碼,左邊為敵位右邊為高位),希望顯示向左移動(dòng)的一個(gè)字符,第1次掃描從列碼的點(diǎn)陣數(shù)組中取第116個(gè)數(shù)據(jù),送到列碼輸出口,對應(yīng)的8個(gè)數(shù)據(jù),同時(shí)用行碼輸出口輸出行碼,分別控制掃描第116行。掃描完成這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ù)的右移

33、與數(shù)據(jù)的左移相似,只是取碼的順序相反而已,在此就不再贅述。2數(shù)據(jù)的上下移動(dòng)(1)列掃描方式向上移動(dòng)列向組字顯示字符豎直方向的移動(dòng)。若是列向組字,希望顯示向上移動(dòng)一個(gè)字符,第1次掃描從行碼的點(diǎn)陣數(shù)組中取第116個(gè)數(shù)據(jù),送行碼輸出口,對應(yīng)于這16個(gè)數(shù)據(jù),同時(shí)用列碼輸出口輸出列碼,分別控制掃描第116列。由于是列向組字(上高下低),掃描完成這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)。也可以

34、用字型的方法容易理解,以下的1616的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ù)序填入儲存器,例如第1行編碼存入20地址,第2行編碼存入21地址要進(jìn)行上移調(diào)整時(shí),則從20地

35、址數(shù)據(jù)開始,每筆數(shù)據(jù)都右移一位即可。 下圖2.15僅以字型移動(dòng)的方法畫圖。 圖2.15 字形法上下移動(dòng)示意圖(2)行掃描方式上下移動(dòng)行向組字顯示字符豎直方向的移動(dòng)方法1:延長數(shù)組法。如果是行向組字,希望顯示向上移動(dòng)的一個(gè)字符,第1次掃描從列碼的點(diǎn)陣數(shù)組中取第116個(gè)數(shù)據(jù),送列碼輸出口,對應(yīng)于這8個(gè)數(shù)據(jù),同時(shí)用行碼輸出口輸出行碼,分別控制掃描第116行。第2次掃描從點(diǎn)陣數(shù)組中取第217個(gè)額數(shù)據(jù)(第17個(gè)數(shù)據(jù)與地1個(gè)數(shù)據(jù)同),分別送列碼輸出口,對應(yīng)于這16個(gè)數(shù)據(jù),同時(shí)用行碼輸出口輸出行碼,仍分別控制地116行。第3次掃描從點(diǎn)陣數(shù)組中取第318個(gè)數(shù)據(jù)(第18個(gè)數(shù)據(jù)與地2個(gè)數(shù)據(jù)同)掃描;如此就實(shí)現(xiàn)了字

36、符的向上移動(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 雙色88點(diǎn)陣掃描接口圖 為了簡便起見,以下以88雙色點(diǎn)陣為例介紹雙色的轉(zhuǎn)換原理。前面已經(jīng)介紹過了,88雙色點(diǎn)陣其實(shí)就相當(dāng)于2個(gè)88單色點(diǎn)陣組合在一起,上圖2.16的2個(gè)88單色點(diǎn)陣就相當(dāng)于一個(gè)88的單色點(diǎn)陣。在設(shè)計(jì)電路的時(shí)候可以使顯示信號從公用的引腳接入,接到89C51的一個(gè)PORT口,把顯示紅色的部分和顯示黃色的部分分別接到89C51的另外兩個(gè)PORET口,在編寫程序的時(shí)候,使顯示紅色的掃描信

37、號輸出就顯示了紅色,當(dāng)顯示黃色的掃描掃描信號輸出時(shí),就顯示了黃色。2.8 LED陣列驅(qū)動(dòng)電路正向點(diǎn)亮一顆LED,至少也得10到20毫安,若電流不夠大,則LED不夠亮!而不管是8051的輸入還是輸出端其高態(tài)輸出電流都不是很高,不過12毫安而已。因此,很難直接高態(tài)驅(qū)動(dòng)LED。這時(shí)候就需要額外的驅(qū)動(dòng)電路,分別針對共陽極和共陰極LED陣列,有兩種不同的驅(qū)動(dòng)方式。針對輸出態(tài)的不同,分為:高態(tài)掃描-高態(tài)顯示,高態(tài)掃描-低態(tài)顯示,低態(tài)掃描-高態(tài)顯示和低態(tài)掃描-低態(tài)顯示四種方式。下面針對設(shè)計(jì)中實(shí)際用到的一種驅(qū)動(dòng)方式介紹一種:共陰型低態(tài)掃描-低態(tài)顯示信號驅(qū)動(dòng)電路。圖2.17所示是針對共陰性LED陣列而設(shè)計(jì)的驅(qū)動(dòng)

38、電路,在這種驅(qū)動(dòng)電路采用低態(tài)掃描,也就是任何時(shí)間只有一個(gè)高態(tài)信號,其他則為低態(tài)。一行掃描完成之后,再把高態(tài)信號轉(zhuǎn)到臨近的其他行。掃描信號經(jīng)限流電阻接到PNP晶體管的基極,晶體管的集電極接地,射極則連至LED點(diǎn)陣的列引腳,若要同時(shí)點(diǎn)亮該列的16個(gè)LED,則晶體管的電流必須大于200毫安才行。常用的2N3904之類就可以達(dá)到當(dāng)?shù)蛻B(tài)的列掃描信號輸入晶體管的基極后,該晶體管即為正向,而產(chǎn)生電流,即可使該列的LED具有點(diǎn)亮的條件所要的顯示信號連接到一個(gè)PNP晶體管的基極,而該晶體管的射極連接到VCC,同樣的,當(dāng)?shù)蛻B(tài)的顯示信號輸入時(shí),晶體管的集電極電流將流入行LED的陽極,即可點(diǎn)亮該行的LED。如圖2.1

39、7所示. 圖2.17共陰型低態(tài)掃描-低態(tài)顯示信號驅(qū)動(dòng)電路若要并接多個(gè)LED陣列,如連接使用4個(gè)88LED陣列,連接成1616LED陣列,則一個(gè)掃描信號同時(shí)驅(qū)動(dòng)兩個(gè)LED陣列。如在本設(shè)計(jì)中要顯示的字比較大,用一個(gè)88的點(diǎn)陣無法顯示完整,這就需要用四塊88的點(diǎn)陣組成一塊1616的點(diǎn)陣,這樣就可以顯示完整的漢字了,若要并聯(lián)多個(gè)88的LED組成1616的點(diǎn)陣,則一個(gè)掃描信號同時(shí)要驅(qū)動(dòng)兩行的LED。如下圖2.18所示。 圖2.18 1616的點(diǎn)陣驅(qū)動(dòng)圖這時(shí)候就需要靠鎖存器(74LS373)將這兩組顯示信號鎖住,此處的鎖存器是以低態(tài)輸出的,其輸出的電壓可達(dá)24毫安,足以驅(qū)動(dòng)一個(gè)LED;若嫌不足,可以選用7

40、4A373其輸出的電壓可達(dá)48毫安,當(dāng)74LS373得G腳為高態(tài)時(shí),數(shù)據(jù)可以從輸入端傳輸?shù)芥i存器中;G腳為低態(tài)時(shí),數(shù)據(jù)被鎖住,不會隨輸入端而變。另外OC腳為輸出控制引腳,當(dāng)OC腳為高態(tài)時(shí),輸出呈現(xiàn)高阻抗;OC為低態(tài)時(shí),數(shù)據(jù)會由鎖存器輸出。在這個(gè)電路之中驅(qū)動(dòng)的掃描信號總共有16條,如果直接由8051輸出,將占用2個(gè)PORT口,浪費(fèi)了寶貴的資源,不太理想,在此使用的是一個(gè)4對16的譯碼器 (74LS154),這個(gè)譯碼器是將輸入的16進(jìn)位碼解碼輸出低態(tài)的掃描信號。輸出的低態(tài)掃描信號可直接接到PNP晶體管的基極,如果太大的話也可以先經(jīng)過限流電阻再接到PNP晶體管的基極,信號最后經(jīng)過晶體管的放大后即可推

41、動(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í)的功能。例如在本設(shè)計(jì)中,行向的掃描要控制每行的掃描時(shí)間,還有所有的字移動(dòng)有一定的時(shí)間間隔,而在所有的字移動(dòng)一遍結(jié)束的一瞬間到下一遍移動(dòng)開始的一瞬間要有延時(shí),這時(shí)的延時(shí)可以和移動(dòng)的時(shí)間相同以保持移動(dòng)的連貫性,也可以不同作為每次從頭開始的停頓,

42、在上述就可以通過延時(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ī)器周期就只需要1s;如果采用的是6MHz 的晶振,那么執(zhí)行一個(gè)機(jī)器周期就需要2 s。 (2)指令周期是指單片機(jī)執(zhí)行一條指令所需要的時(shí)間,一般利用單片機(jī)的機(jī)器周期來計(jì)量指令周期。 在51 單片機(jī)里有單周期指令(執(zhí)行這條指令只需一個(gè)機(jī)器周期),雙周期指令(執(zhí)行這條指令只需要兩個(gè) 機(jī)器周期),四周期指令(執(zhí)行這條指令需要四個(gè)機(jī)器周期)。除了乘、

43、除兩條指令是四周期指令,其余均 為單周期或雙周期指令。也就是說,如果51 單片機(jī)采用的是12MHz 晶振,那么它執(zhí)行一條指令一般只需 12 微秒的時(shí)間;如果采用的是6MHz 晶振,執(zhí)行一條指令一般就需24微秒的時(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è)單周期指令包

44、含一個(gè)機(jī)器周期,即12個(gè)時(shí)鐘周期,所以一條單周期指令被執(zhí)行所占時(shí)間為12(1/12000000)=1s。 了解以上概念后,那么可以依據(jù)單片機(jī)器件手冊中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

45、里面存放著80H,就單這條 指令而言并沒有任何實(shí)際意義,而執(zhí)行該指令則需要一個(gè)機(jī)器周期。 (2)空操作指令 NOP 空操作指令功能只是讓單片機(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)號為KK 的地方;如果為0 則執(zhí)行下一條指令。這條指令需要2個(gè)機(jī)器周期。 循環(huán)轉(zhuǎn)移指令(DJNZ )除了可以給定地址標(biāo)號讓其跳轉(zhuǎn)外,還可以將地址標(biāo)號改成$,這樣

46、 程序就跳回本指令執(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í)行一次

47、,且為單周期指令,所以耗時(shí)1s 第二句:MOV R5,#250 從看到只要R3-1不為0,就會返回到這句,共執(zhí)行了R3次,共耗時(shí)200s 第三句: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*R5s。所以精確延時(shí)時(shí)間為:1+(1200)+(2250200)+(2200)+2 =(2*250+3)*200+3 =100603s 100ms =0.1s3.2點(diǎn)陣左移顯示的流程圖及分析流程圖(圖3.1)和程序的簡要說明:在程序的開始設(shè)定初始的地址是0H,并定義了”選擇符號F”的初值為0,為下面的

48、點(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)镕的初值是0,所以先從掃描信號先從P1口輸出,即首先顯示的是紅色的點(diǎn)陣。掃描信號輸出后,取碼指針先去的第一個(gè)碼送到點(diǎn)陣的上半部分,打開上部分點(diǎn)陣的74LS373

49、鎖存器關(guān)閉下面部分74LS373鎖存器,把信號送到點(diǎn)陣的上部分。再指針加1,關(guān)閉上部分點(diǎn)陣的74LS373鎖存器,打開下面部分74LS373鎖存器,取相鄰的碼送到點(diǎn)陣的下半部分,緊挨著的延時(shí)程序是設(shè)定每列掃描的時(shí)間: MOV R3,#50; DJNZ R3,$;延時(shí)時(shí)間為:1+(2*50)=101us0.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í)候,取

50、碼指針應(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)去,顯示任意多的字左移的顯示,還可以顯示一些符號和圖形。只要有字型的代碼,再稍微改一下程序就可以顯示了。顯示效果:開始停0.1秒,顯示向左移動(dòng)的

51、紅色字“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)。RETN圖3.1點(diǎn)陣左移顯示的流程圖取下一個(gè)碼P0.0清0,P0.1置1輸出至P2口顯示輸出至P2口顯示到TABLE取上半部數(shù)據(jù)取碼指針載入AM4P0.2清零P0.1置1輸出至P0.1掃描P0. 1清零P0. 2置1輸出至P0.3

52、掃描F=0?YN掃描指針AM3每屏4字,取碼指針存R0N設(shè)置每屏停留時(shí)間F0取反YM2M1START:YNYF=0指針加2并回存每屏停留的時(shí)間到?取碼指針載入A清除154掃描指針為00顯示1屏?掃描下一行清除屏幕取碼值加1并延時(shí)P0.0置1,P0.1清0輸出至P2口顯示到TABLE取下半部數(shù)據(jù)取碼指針載入A154掃描指針初值為00取碼指針20H初值為00延時(shí)清除屏幕開始8個(gè)字都左移完?3.3 PROTEUS仿真Proteus仿真時(shí),單片機(jī)需要加載程序,加載程序?yàn)?HEX文件。本設(shè)計(jì)利用Keil Vision2, 在新建Keil項(xiàng)目時(shí)選擇AT89C52單片機(jī)作為CPU,將源程序?qū)?,在“Opti

53、ons For Target”對話窗口中,選中“Output”選項(xiàng)中的“Create HEX File”,編譯鏈接后就可以生成.HEX文件。在Proteus ISIS中,選中AT89C51并單擊鼠標(biāo)左鍵,對AT89C51進(jìn)行設(shè)置,設(shè)置單片機(jī)時(shí)鐘頻率為12MHz,按照正確的文件路徑加載.HEX文件。對單片機(jī)設(shè)置完畢后就可以開始仿真了。仿真過程中如有硬件問題可在Proteus ISIS中直接修改,如有軟件問題可在Keil Vision2中直接修改,通過Keil與Proteus的聯(lián)合調(diào)試就可以得到滿意的結(jié)果。利用Proteus實(shí)現(xiàn)了對點(diǎn)陣式LED滾動(dòng)漢字顯示屏的仿真,說明程序和電路圖都沒有問題。3.

54、4 調(diào)試 調(diào)試主要分為硬件調(diào)試和軟件調(diào)試: 硬件調(diào)試:在焊接電路板的時(shí)候,應(yīng)該從最基本的最小系統(tǒng)開始,分模塊,逐個(gè)進(jìn)行焊接測試。在對各個(gè)硬件模塊進(jìn)行測試時(shí),要保證軟件正確的情況下去測試硬件,要不然發(fā)生錯(cuò)誤時(shí),不知道到底是哪一方出錯(cuò)了。當(dāng)然,在設(shè)計(jì)的過程中也存在著失誤和不足,在調(diào)試中進(jìn)行修改了。 軟件調(diào)試:軟件部分是先參考書上的例子,然后自己根據(jù)硬件電路寫程序,由于以前所學(xué)是單片機(jī)匯編語言,所以這個(gè)系統(tǒng)在編寫程序過程中都采用匯編語言編寫。剛剛開始,編寫不會一次性通過,經(jīng)過仔細(xì)分析修改最后編譯成功。但是,在實(shí)際寫如S51中,LED顯示屏出現(xiàn)各種各樣的亂碼,通過再次認(rèn)真仔細(xì)分析多次修改程序后,程序能

55、夠正常運(yùn)行。 總 結(jié)本次畢業(yè)設(shè)計(jì)從十一月中旬到現(xiàn)在有一個(gè)多月,回顧著些天我感到學(xué)到了很多東西,在寫這個(gè)心得的時(shí)候,我想就這些天的收獲,說一說自己內(nèi)心的想法。本設(shè)計(jì)的是一個(gè)室內(nèi)用16x16的點(diǎn)陣LED圖文顯示屏,能夠在目測條件下LED顯示屏各點(diǎn)亮度均勻、充足,可顯示圖形和文字,顯示圖形和文字應(yīng)穩(wěn)定、清晰無串?dāng)_。圖形或文字顯示有靜止、移入移出等顯示方式。本系統(tǒng)具有硬件少,結(jié)構(gòu)簡單,容易實(shí)現(xiàn),性能穩(wěn)定可靠,成本低等特點(diǎn)。 總結(jié)本文的研究工作,主要做了下面幾點(diǎn)工作: 一、通過查閱大量的相關(guān)資料,詳細(xì)了解了LED的發(fā)光原理和LED顯示屏的原理,了解了LED的現(xiàn)狀,清楚地了解了LED顯示屏與其它顯示屏相比

56、較有那些優(yōu)點(diǎn),明確了研究目標(biāo)。并且通過對單片機(jī)資料的查閱和應(yīng)用,更進(jìn)一步增加了對單片機(jī)知識的理解和運(yùn)用能力。并證實(shí)了自己的思路:“查資料思考總結(jié)運(yùn)用找出差錯(cuò),再查資料和向別人詢問再次運(yùn)用”的正確性。二,本文設(shè)計(jì)的LED顯示屏能夠?qū)崿F(xiàn)在目測條件下LED顯示屏各點(diǎn)亮度均勻、充足,可顯示圖形和文字,顯示圖形和文字應(yīng)穩(wěn)定、清晰無串?dāng)_。圖形或文字顯示有靜止、移入移出等顯示方式。三,本文列出了系統(tǒng)具體的硬件設(shè)計(jì)方案,硬件結(jié)構(gòu)電路圖,軟件流程圖和具體匯編語言程序設(shè)計(jì)與調(diào)試等方面。四,在這次畢業(yè)設(shè)計(jì)的過程中學(xué)會了 Protel 的基本使用,感到Protel對應(yīng)用電子專業(yè)的同學(xué)來說是一門很有用的課程。在運(yùn)用Protel時(shí)要格外小心,例如在畫PCB電路板的時(shí)候,要注意基本的布板原則。例如,在進(jìn)行PCB布板的時(shí)候,濾波電容不夠靠近芯片的電源腳和地腳。五,通過這次畢業(yè)設(shè)

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!