微機(jī)控制應(yīng)用技術(shù)課件:LED點(diǎn)陣屏_第1頁(yè)
微機(jī)控制應(yīng)用技術(shù)課件:LED點(diǎn)陣屏_第2頁(yè)
微機(jī)控制應(yīng)用技術(shù)課件:LED點(diǎn)陣屏_第3頁(yè)
微機(jī)控制應(yīng)用技術(shù)課件:LED點(diǎn)陣屏_第4頁(yè)
微機(jī)控制應(yīng)用技術(shù)課件:LED點(diǎn)陣屏_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

LED點(diǎn)陣屏第一節(jié)LED點(diǎn)陣概述第二節(jié)8×8點(diǎn)陣硬件設(shè)計(jì)

第三節(jié)顯示8×8圖片軟件設(shè)計(jì)第四節(jié)32×64點(diǎn)陣硬件設(shè)計(jì)

第五節(jié)32×64點(diǎn)陣軟件設(shè)計(jì)在32?×?64的LED點(diǎn)陣屏上顯示16?×?16的漢字,效果如圖3-1所示。知識(shí)目標(biāo)

·了解LED點(diǎn)陣屏。

·熟悉LED點(diǎn)陣屏的構(gòu)成及顯示原理。

·熟悉LED點(diǎn)陣屏的驅(qū)動(dòng)方法。

·掌握74HC573的引腳、功能、使用方法。

·掌握74LS154的引腳、功能、使用方法。

·掌握74LS595的引腳、功能、使用方法。

·掌握譯碼器的擴(kuò)展。

·掌握移位寄存器的擴(kuò)展。

·掌握LED點(diǎn)陣屏上顯示信息的方法。

·掌握取模軟件的使用。

·熟悉利用并行口模擬數(shù)據(jù)的串行傳送的方法。能力目標(biāo)

·認(rèn)識(shí)并描述LED點(diǎn)陣屏。

·能夠畫(huà)出LED點(diǎn)陣屏的驅(qū)動(dòng)電路。

·根據(jù)需要取出信息的字模。

·正確使用數(shù)字集成電路。

·正確編寫(xiě)函數(shù)顯示不同大小的點(diǎn)陣信息。

·正確編程實(shí)現(xiàn)數(shù)據(jù)串行傳送。

·根據(jù)顯示要求編程。

第一節(jié)LED點(diǎn)陣概述

1.1LED點(diǎn)陣LED是半導(dǎo)體發(fā)光二極管的縮寫(xiě)。LED點(diǎn)陣屏指的是由LED組成,通過(guò)LED亮滅來(lái)顯示文字、圖片、動(dòng)畫(huà)、視頻等的顯示器件。LED點(diǎn)陣屏的各部分組件都已模塊化,通常由顯示模塊、控制系統(tǒng)及電源系統(tǒng)組成。LED點(diǎn)陣像素的顏色有單色、雙色和全彩色三類(lèi);LED點(diǎn)陣像素的個(gè)數(shù)有8?×?8、16?×?16、24?×?24、40?×?40等多種;LED點(diǎn)陣像素的直徑有Φ3、Φ3.75、Φ8等;LED點(diǎn)陣屏在室內(nèi)和室外場(chǎng)地均可使用。根據(jù)像素的數(shù)目不同,像素顏色分為雙原色、三原色等。根據(jù)像素顏色的不同,所顯示的文字、圖像等內(nèi)容的顏色也不同,單原色點(diǎn)陣只能顯示固定色彩;雙原色和三原色點(diǎn)陣顯示內(nèi)容的顏色,由像素內(nèi)不同顏色發(fā)光二極管點(diǎn)亮的組合方式?jīng)Q定。假如按照脈沖方式控制二極管的點(diǎn)亮?xí)r間,則可實(shí)現(xiàn)256或更高級(jí)灰度顯示,即可實(shí)現(xiàn)真彩色顯示。LED點(diǎn)陣顯示系統(tǒng)中各模塊的顯示方式有靜態(tài)和動(dòng)態(tài)兩種。1.2LED8×8點(diǎn)陣內(nèi)部結(jié)構(gòu)1088BS是較為常用的單色8?×?8點(diǎn)陣,它由8行8列共64個(gè)LED構(gòu)成。在圖3-2(a)所示的外形圖上,其中一個(gè)側(cè)面印有1088BS的型號(hào),型號(hào)朝著自己并且正面朝上,俯視點(diǎn)陣屏?xí)r,最上面為第1行,最左側(cè)為第1列,約定好行列位置,在顯示信息時(shí)方便描述,當(dāng)然也可以自行定義行列序號(hào)。1088BS共有16個(gè)引腳,如圖3-2(b)所示,X0~X7為行號(hào),Y0~Y7為列號(hào);行號(hào)與列號(hào)在外形圖上是按順序排列的,但是在引腳圖上是亂序的,在制作硬件時(shí)一定要注意;型號(hào)朝著自己、正面朝上,下面一排引腳最左側(cè)的為第1腳。圖3-3所示為1088BS的內(nèi)部結(jié)構(gòu),圖中給出了64個(gè)LED的連接方法,每行8個(gè)LED的陽(yáng)極連接在一起為行線,每列8個(gè)LED的陰極連接在一起為列線,即“行陽(yáng)列陰”。點(diǎn)亮任何一個(gè)LED時(shí),需要給LED所在行線發(fā)送高電平,列線發(fā)送低電平。1.3LED點(diǎn)陣框圖用單片機(jī)控制LED點(diǎn)陣時(shí),為所有的行線與列線分配I/O口,由于同行或同列中連接的LED比較多,超過(guò)了單片機(jī)I/O口的帶負(fù)載能力,必須通過(guò)驅(qū)動(dòng)電路來(lái)提高單片機(jī)I/O口的帶負(fù)載能力,如圖3-4所示。

第二節(jié)8×8點(diǎn)陣硬件設(shè)計(jì)

2.18路鎖存器74HC573鎖存器在電路中的最主要作用是緩存,其次是解決高速的控制器與慢速的外設(shè)不同步問(wèn)題,再其次是解決驅(qū)動(dòng)的問(wèn)題,最后是提高單片機(jī)I/O口的帶負(fù)載能力。它包括不帶鎖存使能端的鎖存器和帶鎖存使能端的鎖存器。74HC573是帶鎖存使能端的鎖存器。1.特點(diǎn)74HC573為74高速CMOS系列集成電路,電源為3~18?V,后綴573表示集成電路的功能。74HC573輸出級(jí)為三態(tài)總線驅(qū)動(dòng)輸出,俗稱(chēng)三態(tài)門(mén)。三態(tài)門(mén)是指能夠輸出三種狀態(tài)(高電平、低電平、高阻狀態(tài))的門(mén)電路,三態(tài)門(mén)常用于構(gòu)成總線傳送數(shù)據(jù)。一般的門(mén)電路只有高電平、低電平兩種狀態(tài)。74HC573輸出引腳最大可承受35?mA的拉電流或灌電流,常用做點(diǎn)陣的驅(qū)動(dòng)電路。2.引腳圖74HC573的引腳圖如圖3-5(a)所示?!CC—電源輸入端,3~18?V。·GND—接地端。·D0~D7—并行數(shù)據(jù)輸入端。·Q0~Q7—并行數(shù)據(jù)輸出端。鎖存器、寄存器等數(shù)字集成電路,既可以采用并行方式(同時(shí)傳送)傳送數(shù)據(jù),也可以采用串行方式(分時(shí)傳送)傳送數(shù)據(jù),再結(jié)合輸入、輸出引腳,綜合來(lái)看,共有4種數(shù)據(jù)傳送方式:(1)并行輸入—并行輸出方式,簡(jiǎn)稱(chēng)為并入—并出;(2)并行輸入—串行輸出方式,簡(jiǎn)稱(chēng)為并入—串出;(3)串行輸入—并行輸出方式,簡(jiǎn)稱(chēng)為串入—并出;(4)串行輸入—串行輸出方式,簡(jiǎn)稱(chēng)為串入—串出。這4種方式中,并入—并出的數(shù)據(jù)傳送方式速度最快;串入—串出的數(shù)據(jù)傳送方式速度最慢;并入—串出的數(shù)據(jù)傳送方式可以將輸入的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)輸出,而串入—并出的數(shù)據(jù)傳送方式是將輸入的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)輸出。因此,并入—串出、串入—并出兩種方式主要用于實(shí)現(xiàn)數(shù)據(jù)格式的轉(zhuǎn)換。74HC573輸入為并行方式,輸出也為并行方式,因此為并入—并出方式,8位數(shù)據(jù)通過(guò)8個(gè)數(shù)據(jù)通路同時(shí)傳送,傳送速度最快?!ぁ敵鍪鼓芏?,低電平有效。是三態(tài)門(mén)的專(zhuān)屬使能端,當(dāng)=?0時(shí),三態(tài)門(mén)工作于傳送數(shù)據(jù)的狀態(tài)(使能),可以輸出高電平或低電平;當(dāng)=?1時(shí),三態(tài)門(mén)不能工作(禁止),此時(shí)三態(tài)門(mén)輸出為高阻狀態(tài)?!E—鎖存使能端,高電平有效。鎖存功能是指將數(shù)據(jù)保存在鎖存器的輸出端,與輸入信號(hào)沒(méi)有關(guān)系,且不會(huì)丟失。暫存數(shù)據(jù)之前,一定要先把正確的數(shù)據(jù)送入鎖存器。當(dāng)LE?=?1時(shí),鎖存器為傳送狀態(tài),將輸入端D7~D0的數(shù)據(jù)傳送至輸出端Q7~Q0,即采用并入—并出方式傳送8位二進(jìn)制數(shù)據(jù)。當(dāng)?LE?=?0時(shí),鎖存器為鎖存狀態(tài)。工作于鎖存狀態(tài)時(shí),將之前傳送至輸出端Q7~Q0的數(shù)據(jù)鎖存。此時(shí)Q7~Q0與輸入端D7~D0的狀態(tài)無(wú)關(guān),不會(huì)隨著輸入端的變化而變化,即使輸入端沒(méi)有數(shù)據(jù),輸出端仍有數(shù)據(jù)。3.功能表表3-1所示為74HC573的功能表,由表可知74HC573可以實(shí)現(xiàn)以下3種功能:(1)高阻狀態(tài)。當(dāng)=?1時(shí),鎖存使能端LE和輸入端D7~D0不起作用,輸出端Q7~Q0為高阻狀態(tài)。(2)傳送狀態(tài)。當(dāng)=?0時(shí),三態(tài)門(mén)打開(kāi);當(dāng)LE?=?1時(shí),鎖存器為傳送狀態(tài);Q7~Q0?=?D7~D0。(3)鎖存功能。當(dāng)=?0并且LE?=?0時(shí),鎖存器為鎖存狀態(tài);輸出端Q7~Q0鎖存的是最后一次傳送至輸出端的數(shù)據(jù)。4.邏輯符號(hào)74HC573的邏輯符號(hào)如圖3-5(b)所示,圖上只需體現(xiàn)信號(hào)的傳遞關(guān)系,即集成電路的邏輯功能。畫(huà)電路原理圖時(shí),最好用邏輯符號(hào)圖,直觀明了。引腳圖與實(shí)物一一對(duì)應(yīng),一般在制作電路時(shí)使用。·LE—鎖存使能端,高電平有效。鎖存功能是指將數(shù)據(jù)保存在鎖存器的輸出端,與輸入信號(hào)沒(méi)有關(guān)系,且不會(huì)丟失。暫存數(shù)據(jù)之前,一定要先把正確的數(shù)據(jù)送入鎖存器。當(dāng)LE?=?1時(shí),鎖存器為傳送狀態(tài),將輸入端D7~D0的數(shù)據(jù)傳送至輸出端Q7~Q0,即采用并入—并出方式傳送8位二進(jìn)制數(shù)據(jù)。當(dāng)?LE?=?0時(shí),鎖存器為鎖存狀態(tài)。工作于鎖存狀態(tài)時(shí),將之前傳送至輸出端Q7~Q0的數(shù)據(jù)鎖存。此時(shí)Q7~Q0與輸入端D7~D0的狀態(tài)無(wú)關(guān),不會(huì)隨著輸入端的變化而變化,即使輸入端沒(méi)有數(shù)據(jù),輸出端仍有數(shù)據(jù)。3.功能表表3-1所示為74HC573的功能表,由表可知74HC573可以實(shí)現(xiàn)以下3種功能:(1)高阻狀態(tài)。當(dāng)=?1時(shí),鎖存使能端LE和輸入端D7~D0不起作用,輸出端Q7~Q0為高阻狀態(tài)。(2)傳送狀態(tài)。當(dāng)=?0時(shí),三態(tài)門(mén)打開(kāi);當(dāng)LE?=?1時(shí),鎖存器為傳送狀態(tài);Q7~Q0?=?D7~D0。(3)鎖存功能。當(dāng)=?0并且LE?=?0時(shí),鎖存器為鎖存狀態(tài);輸出端Q7~Q0鎖存的是最后一次傳送至輸出端的數(shù)據(jù)。2.28×8點(diǎn)陣硬件設(shè)計(jì)圖3-6所示為8?×?8LED點(diǎn)陣硬件電路圖。如圖中所示,用74HC573(1)作為行驅(qū)動(dòng),74HC573(2)作為列驅(qū)動(dòng)。74HC573在傳送數(shù)據(jù)時(shí),需要一直打開(kāi)三態(tài)門(mén),即=0。由于74HC573的鎖存功能,兩片74HC573的并行數(shù)據(jù)口D7~D0可共用一個(gè)8位的I/O端口,為其分配單片機(jī)的P0口,其中數(shù)據(jù)口的最高位P0.7接X(jué)0、Y0,寫(xiě)代碼時(shí)要注意這一點(diǎn)。芯片74HC573(1)的鎖存使能端LE與P2.0相連,74HC573(2)的鎖存使能端LE與P2.2相連,在兩個(gè)鎖存使能端的作用下,兩片74HC573輪流傳送代碼并鎖存至行線與列線,從而點(diǎn)亮相關(guān)LED。編程時(shí),數(shù)據(jù)口P0采用字節(jié)尋址,鎖存使能端采用位尋址,定義如下:sbit XLE=P2^0;sbit YLE=P2^2;

第三節(jié)顯示8×8圖片軟件設(shè)計(jì)

3.1掃描8×8點(diǎn)陣1.點(diǎn)亮一個(gè)像素動(dòng)態(tài)掃描點(diǎn)陣可以采用行掃描或列掃描方式,根據(jù)編程的簡(jiǎn)易程度選擇其中的一種。如圖3-6所示電路,用74HC573作為行驅(qū)動(dòng)與列驅(qū)動(dòng)時(shí),行掃描與列掃描的編程難度是一樣的,后面所有顯示效果均采用行掃描。行掃描是指每次只能選中一行,所有的行輪流點(diǎn)亮。行代碼的作用是在點(diǎn)陣中選中一行,稱(chēng)其為掃描碼;再由列代碼決定選中行像素的亮滅,稱(chēng)其為顯示碼(字模)。掃描碼是由硬件決定的,不管顯示任何內(nèi)容都是一樣的;而顯示碼是由顯示的圖片決定的,是隨顯示內(nèi)容變化的。當(dāng)掃描的速度足夠快時(shí),在視覺(jué)上,所有行是同時(shí)顯示的,這時(shí)即可觀察到顯示內(nèi)容?!纠?-1】點(diǎn)亮圖3-6中行X2與列Y3交點(diǎn)處的LED。(1)寫(xiě)出行掃描碼與列顯示碼。根據(jù)LED的工作原理,只有當(dāng)LED正偏(陽(yáng)極接高電位、陰極接低電位)時(shí)才能夠被點(diǎn)亮。在圖3-6中,每個(gè)LED的陽(yáng)極連接的是行線,陰極連接的是列線,簡(jiǎn)單地說(shuō),就是“行陽(yáng)列陰”,這4個(gè)字才是點(diǎn)亮LED的依據(jù)。在點(diǎn)亮X2與Y3交點(diǎn)處的LED時(shí),行X0~X7中,只有X2為1,其余的行均為0;列Y0~Y7中,只有Y3為0,其余的列均為1;代碼為行掃描碼:P0?=?P0.7~P0.0?=?X0~X7?=?00100000?=?0X20列顯示碼:P0?=?P0.7~P0.0?=?Y0~Y7?=?11101111?=?0xEF(2)通過(guò)74HC573的鎖存使能端傳送并鎖存代碼。74HC573首先傳送所需的數(shù)據(jù),在LE?=?1時(shí),將數(shù)據(jù)送至P0口傳送;然后使LE?=?0,鎖存之前傳送的數(shù)據(jù)。先傳送并鎖存行:XLE?=?1;P0?=?0X20;XLE?=?0;后傳送并鎖存列:YLE?=?1;P0?=?0XEF;YLE?=?0;(3)根據(jù)上述要點(diǎn)編寫(xiě)源程序。源程序如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;main(){XLE=1;P0=0x20;XLE=0;YLE=1;P0=0xEF;YLE=0; while(1);}2.點(diǎn)亮一行中若干像素【例3-2】點(diǎn)亮圖3-6中X2Y1、X2Y6交點(diǎn)處的LED。需要點(diǎn)亮的兩個(gè)LED都處于X2行,故X2行為高電平,其余行為低電平;兩個(gè)LED一個(gè)與Y1相連、一個(gè)與Y6相連,故列代碼中Y1、Y6為低電平,其余列為高電平。代碼為行掃描碼:P0?=?P0.7~P0.0?=?X0~X7?=?00100000?=?0X20列顯示碼:P0?=?P0.7~P0.0?=?Y0~Y7?=?10111101?=?0XBD源程序如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;main(){XLE=1;P0=0x20;XLE=0; YLE=1;P0=0xBD;YLE=0; while(1);}3.掃描8?×?8點(diǎn)陣【例3-3】編程先點(diǎn)亮X0行中所有像素,延時(shí)500ms;再點(diǎn)亮X1行中所有像素,延時(shí)500ms;……依此類(lèi)推,點(diǎn)亮至X7行后,再?gòu)腦0行重新開(kāi)始。每行的像素都是全亮,因此每一行像素的列代碼都是00000000,即0;編程時(shí),只需改變行代碼就可以了。源程序如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;voiddelay(uinta);main(){

while(1){XLE=1;P0=0x80;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x40;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x20;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x10;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x08;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x04;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x02;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x01;XLE=0; YLE=1;P0=0;YLE=0;delay(50);}}voiddelay(uinta){uinti,j;for(i=0;i<a;i++)for(j=0;j<1827;j++);}上述程序運(yùn)行后,可觀察到點(diǎn)陣的每一行輪流點(diǎn)亮,這種效果稱(chēng)之為行掃描。通過(guò)行掃描可以檢查點(diǎn)陣中每個(gè)像素的好壞??辞宄袙呙璧男Ч?,將每一行像素點(diǎn)亮的時(shí)間縮短為1ms,編譯下載之后,可觀察到所有行是一起亮的,這是由于掃描的速度太快,人的眼睛根本分辨不清楚,這也是動(dòng)態(tài)掃描的本質(zhì)。3.2顯示8×8圖片【例3-4】在8×8點(diǎn)陣上顯示“X”。(1)畫(huà)出“X”。在省略LED的8行8列上畫(huà)出要顯示的圖形,把需要顯示像素的交點(diǎn)處涂黑,如圖3-7所示。(2)寫(xiě)出行掃描時(shí)所需的顯示碼。X0行顯示碼:P0?=?Y0~Y7?=?01111110?=?0X7EX1行顯示碼:P0?=?Y0~Y7?=?10111101?=?0XBDX2行顯示碼:P0?=?Y0~Y7?=?11011011?=?0XDB…X7行顯示碼,P0?=?Y0~Y7?=?01111110?=?0X7E(3)根據(jù)上述代碼編程。當(dāng)掃描點(diǎn)陣的速度足夠快時(shí),顯示的畫(huà)面才不會(huì)有閃爍感。源程序如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;voiddelay(uinta);main(){while(1){ XLE=1;P0=0x80;XLE=0;YLE=1;P0=0x7E;YLE=0;delay(1); XLE=1;P0=0x40;XLE=0;YLE=1;P0=0xBD;YLE=0;delay(1); XLE=1;P0=0x20;XLE=0;YLE=1;P0=0xDB;YLE=0;delay(1); XLE=1;P0=0x10;XLE=0;YLE=1;P0=0xE7;YLE=0;delay(1); XLE=1;P0=0x08;XLE=0;YLE=1;P0=0xE7;YLE=0;delay(1); XLE=1;P0=0x04;XLE=0;YLE=1;P0=0xDB;YLE=0;delay(1); XLE=1;P0=0x02;XLE=0;YLE=1;P0=0xBD;YLE=0;delay(1); XLE=1;P0=0x01;XLE=0;YLE=1;P0=0x7E;YLE=0;delay(1);}}voiddelay(uinta){uintj;for(i=0;i<a;i++) for(j=0;j<130;j++);}3.3取模軟件1.字模的計(jì)算及存放任意大小的點(diǎn)陣信息在顯示時(shí),可由該信息的行數(shù)與列數(shù)計(jì)算出字模包含的字節(jié)數(shù),它們之間的關(guān)系是:行數(shù)×列數(shù)/8。字模包含的所有字節(jié)可通過(guò)定義一維數(shù)組進(jìn)行存放,且字模一般存放在ROM中。例如,ucharcodea[8]; //存放8?×?8點(diǎn)陣信息的字模,8行?×?8列?/?8?=?8BucharcodeB[64]; //存放16?×?32點(diǎn)陣信息的字模,16行?×?32列?/?8?=?64BucharcodeC[128]; //存放32?×?32點(diǎn)陣信息的字模,32行?×?32列?/?8?=?128B2.循環(huán)結(jié)構(gòu)將點(diǎn)陣的掃描碼與顯示碼(字模)用一維數(shù)組存放時(shí),可將例3-4中顯示“X”的程序改為循環(huán)結(jié)構(gòu)。程序的結(jié)構(gòu)改動(dòng)之后,字模可以通過(guò)取模軟件獲取。#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;ucharcodexsaomiao[8]; //掃描碼數(shù)組聲明ucharcodeyzimo[8]; //字模數(shù)組聲明voiddelay(void);main(){uchari; while(1) { for(i=0;i<8;i++){XLE=1;P0=xsaomiao[i];XLE=0;YLE=1;P0=yzimo[i];YLE=0;delay();} }}voiddelay(void){uintj;for(j=0;j<130;j++);}ucharcodexsaomiao[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //掃描碼ucharcodeyzimo[8]={0x7E,0xBD,0xDB,0xE7,0xE7,0xDB,0xBD,0x7E};//字模由取模軟件獲取3.取模軟件PCtoLCD2002PCtoLCD2002軟件用于生成顯示信息的字模。在生成中英文數(shù)字混合的字符串的字模數(shù)據(jù)時(shí),還可以選擇字體、大小,并且可單獨(dú)調(diào)整每一個(gè)文字的長(zhǎng)和寬,生成任意形狀的字符;還可以繪制圖片,并生成相應(yīng)的字模數(shù)據(jù)。1)打開(kāi)PCtoLCD2002軟件從開(kāi)始菜單或桌面上啟動(dòng)PCtoLCD2002軟件。雙擊PCtoLCD2002的圖標(biāo),啟動(dòng)后主窗口界面如圖3-8所示。2)畫(huà)圖(1)新建文件。單擊“文件/新建”,出現(xiàn)如圖3-9(b)所示窗口,輸入圖片的寬度與高度“8”,單擊“確定”按鈕,顯示出8?×?8點(diǎn)陣。(2)畫(huà)圖。單擊鼠標(biāo)左鍵,一次畫(huà)一個(gè)像素;按住左鍵后拖動(dòng)鼠標(biāo),可連續(xù)作畫(huà)。當(dāng)畫(huà)錯(cuò)需要修改時(shí),方法類(lèi)似,換為操作鼠標(biāo)右鍵即可。(3)保存。7.確定品牌名稱(chēng)的原則在確定品牌名稱(chēng)時(shí)需要堅(jiān)持營(yíng)銷(xiāo)層面、法律層面及語(yǔ)言層面的三大原則。1)營(yíng)銷(xiāo)層面營(yíng)銷(xiāo)層面原則是指根據(jù)營(yíng)銷(xiāo)傳播的預(yù)算大小、品牌和產(chǎn)品的關(guān)系、品牌的競(jìng)爭(zhēng)地位、品牌的開(kāi)發(fā)路線來(lái)確定品牌名稱(chēng)。首先,營(yíng)銷(xiāo)傳播預(yù)算的大小,決定品牌名稱(chēng)適于作為象征還是適于作為信號(hào)。若營(yíng)銷(xiāo)傳播費(fèi)用很少,品牌名稱(chēng)主要依據(jù)喬伊斯原則發(fā)生作用。倘若營(yíng)銷(xiāo)傳播預(yù)算較多,品牌名稱(chēng)主要依據(jù)朱麗葉原則發(fā)生作用。其次,若某一品牌基于功能與其他品牌區(qū)別開(kāi)來(lái),那么為該品牌選擇的名稱(chēng)最好能體現(xiàn)產(chǎn)品的特點(diǎn)。若品牌基于表現(xiàn)因素體現(xiàn)差別化,那么直接指明品牌名稱(chēng)通常不是最好的選擇。這時(shí),品牌名稱(chēng)最好能夠帶給人一種獨(dú)特的感受。再次,若推向市場(chǎng)的品牌商品具有極強(qiáng)的差別優(yōu)勢(shì),品牌名稱(chēng)應(yīng)十分新穎。若商品推出時(shí)遵循的是趨同化策略,品牌最好是能與該產(chǎn)品類(lèi)別中的龍頭品牌相協(xié)調(diào),或與人們已經(jīng)形成的對(duì)該產(chǎn)品類(lèi)別固有的重要形象相適應(yīng)。最后,不同國(guó)家在意識(shí)形態(tài)、宗教、語(yǔ)言、習(xí)俗等文化方面千差萬(wàn)別,如菊花在拉丁美洲與歐洲的有些國(guó)家就被視為葬花,因此品牌命名不能僅考慮在本國(guó)范圍內(nèi)使用,而應(yīng)力圖使之具有全球通用的能力。3)設(shè)置選項(xiàng)(1)單擊圖3-10(a)中的選項(xiàng)或快捷圖標(biāo)“”,打開(kāi)字模選項(xiàng)窗口,如圖3-10(a)所示。(2)點(diǎn)陣格式,可選擇陰碼或陽(yáng)碼兩種格式。陰碼:亮點(diǎn)為1,滅的點(diǎn)為0;陽(yáng)碼:亮點(diǎn)為0,滅的點(diǎn)為1。(3)選擇取模方式。取模方式有逐列式、逐行式、列行式、行列式四種。取模時(shí),每8個(gè)連續(xù)的像素為一個(gè)字節(jié),但究竟是一行中的8個(gè)連續(xù)的點(diǎn),還是一列中8個(gè)連續(xù)的點(diǎn),就是所謂的取模方式,取模方式與點(diǎn)陣的硬件電路有密切關(guān)系。逐列式從圖片或漢字的左上角開(kāi)始,從上至下,每8位二進(jìn)制數(shù)轉(zhuǎn)化為十六進(jìn)制保存,不夠8位的補(bǔ)足8位,第0列取完之后;接著從上至下取第1列,取完之后;取第2列,…,以此類(lèi)推,直到圖片或漢字的最后一列取完,如圖3-11(a)所示。逐行式從圖片或漢字的左上角開(kāi)始,從左至右,每8位二進(jìn)制數(shù)轉(zhuǎn)化為16進(jìn)制保存,不夠8位的補(bǔ)足8位,第0行取完之后;接著從左至右取第1行,取完之后;取第2行,…,以此類(lèi)推,直到圖片或漢字的最后一行取完,如圖3-11(b)所示。(4)取模走向,可選擇逆向或順向。取模走向是指生成字模時(shí)一個(gè)字節(jié)的8位二進(jìn)制數(shù)是先高位還是先低位,逆向是從低位至高位;順向則是從高位至低位。取模方式為逐行式時(shí),逆向是指從左至右的8位二進(jìn)制數(shù)分別是從低位至高位,順向則是指從左至右的8位二進(jìn)制數(shù)分別是從高位至低位,如圖3-12所示。容易混淆的是圖3-12中的取字模示意圖都是從低位開(kāi)始的,與逆向的原則先低位一致,每個(gè)字節(jié)是從左開(kāi)始的;與順向的原則先高位恰好相反,每個(gè)字節(jié)是從右開(kāi)始的。(5)輸出數(shù)制,一般選取十六進(jìn)制。(6)每行顯示數(shù)據(jù),有點(diǎn)陣和索引兩個(gè)數(shù)據(jù)。點(diǎn)陣后面的數(shù)據(jù)是指生成字模后,每行顯示的字節(jié)數(shù),字模越多,占的行數(shù)也就越多;當(dāng)點(diǎn)陣較大時(shí),可以增加每行的字節(jié)數(shù),從而減少字模所占的行數(shù)。索引后的數(shù)據(jù)與點(diǎn)陣的數(shù)據(jù)作用類(lèi)似。(7)自定義格式,可選擇A51或C51。選擇C51時(shí),適用于C語(yǔ)言編程。圖3-10(a)所示為自定義格式的初始狀態(tài),為了適應(yīng)C編程的格式要求,可刪除行前綴的“{”;行后綴刪除“}”,但保留“,”,如圖3-10(b)所示。(8)上述選項(xiàng)設(shè)置好后,其他選項(xiàng)默認(rèn),然后單擊確定。4.8?×?8點(diǎn)陣字模選項(xiàng)(1)點(diǎn)陣格式。8?×?8點(diǎn)陣編程時(shí)采用行掃描,列線的顯示碼就是要生成的字模,而列線為陰極,所以字模為0的時(shí)候點(diǎn)亮,最終選取陽(yáng)碼。(2)取模方式。編程時(shí),采用行掃描,因此選逐行式。(3)取模走向。圖3-6所示8?×?8點(diǎn)陣電路圖中,列線Y0~Y7與P0.7~P0.0相連,在取模時(shí),一個(gè)字節(jié)從左至右是先高位后低位,取模走向應(yīng)選順向。(4)生成字模。字模選項(xiàng)設(shè)置好后,單擊“生成字?!?。如圖3-13所示。將生成的字模選中,粘貼到循環(huán)結(jié)構(gòu)的源程序中定義數(shù)組存放,就可以編譯、下載,觀看顯示效果了。ucharcodeyzimo[8]={0xFF,0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE6};/*"C:\Users\Administrator\Desktop\xin.BMP",0*//*(8X8)*/

第四節(jié)32×64點(diǎn)陣硬件設(shè)計(jì)

4.132×64點(diǎn)陣概述32?×?64表示點(diǎn)陣的大小為32行,每行有64列,由8塊16?×?16的點(diǎn)陣構(gòu)成,行線接陽(yáng)極、列線接陰極,編程時(shí)仍采用行掃描方式。這些特點(diǎn)均與上述8?×?8相同,只是點(diǎn)陣的面積增大了,一屏內(nèi)可以顯示的最大點(diǎn)陣信息為32?×?64,當(dāng)然也可以顯示小于32?×?64的任何點(diǎn)陣信息,如16?×?16、32?×?32、16?×?8等,當(dāng)信息量大時(shí),也可以分多屏顯示?,F(xiàn)在的大面積點(diǎn)陣都已實(shí)現(xiàn)模塊化生產(chǎn),如圖3-14所示。隨著點(diǎn)陣面積的增大,在控制時(shí)會(huì)出現(xiàn)一些新的問(wèn)題。32?×?64點(diǎn)陣如果仍采用74HC573鎖存器作為行驅(qū)動(dòng)與列驅(qū)動(dòng),就需要32條行線、64條列線,共96條控制線,而51單片機(jī)的并行I/O口P0、P1、P2、P3總共只有32條線,遠(yuǎn)遠(yuǎn)不能滿(mǎn)足要求。32?×?64點(diǎn)陣硬件電路設(shè)計(jì)的基本原則是:減少控制線并提高帶負(fù)載能力。采用行掃描編程時(shí),行驅(qū)動(dòng)的作用是在所有行中選中一行。為了減少控制線,需要找到一種數(shù)字集成電路,該電路的輸入端與單片機(jī)相連,輸出端通過(guò)驅(qū)動(dòng)芯片與點(diǎn)陣相連;對(duì)于輸入的任何一種組合,32個(gè)輸出中,每次只能有1個(gè)輸出為高電平,其余的31個(gè)輸出均為低電平,即在32條行線中只選中一行,能實(shí)現(xiàn)這個(gè)功能的電路就是譯碼器。列驅(qū)動(dòng)的作用是為選中行發(fā)送點(diǎn)陣信息的字模,采用串行器件傳送字模,可有效地減少控制線。4.24線-16線譯碼器74LS1541.概述二進(jìn)制譯碼器是指輸入為n位二進(jìn)制代碼,輸出為2n個(gè)信號(hào)的電路。輸入的一個(gè)代碼只能用一個(gè)輸出端表示,因此輸入又稱(chēng)為地址線。二進(jìn)制譯碼器常見(jiàn)的有2線-4線譯碼器、3線-8線譯碼器、4線-16線譯碼器,第一個(gè)數(shù)字表示輸入二進(jìn)制代碼的位數(shù),第二個(gè)數(shù)字表示輸出線的個(gè)數(shù)。這些二進(jìn)制譯碼器不同的廠家都有生產(chǎn),更復(fù)雜的5線-32線譯碼器,6線-64線譯碼器一般不直接生產(chǎn),而是由比較簡(jiǎn)單的譯碼器擴(kuò)展連接而成。例如,2塊4線-16線譯碼器可以構(gòu)成5線-32線譯碼器,由3線-8線構(gòu)成5線-32線譯碼器,則需要4塊,由2線-4線構(gòu)成5線-32線譯碼器則需要8塊。如何進(jìn)行譯碼器的擴(kuò)展,是學(xué)習(xí)的重點(diǎn)也是難點(diǎn)。2.特點(diǎn)74LS154是TTL的74系列數(shù)字集成電路,它可以實(shí)現(xiàn)4線-16線譯碼功能,輸入為4位二進(jìn)制代碼,16個(gè)輸出端為低電平有效。3.引腳74LS154引腳圖和邏輯符號(hào)圖如圖3-15所示?!CC—電源輸入端,5V。·GND—接地端?!BCD—輸入端,或地址線?!ぁ敵龆耍碗娖接行??!ぁⅰ鼓芏?,低電平有效。當(dāng)、有任何一個(gè)處于無(wú)效狀態(tài)時(shí),74LS154不工作(禁止?fàn)顟B(tài));只有當(dāng)、全部有效時(shí),74LS154才實(shí)現(xiàn)譯碼功能(使能狀態(tài))。4.功能表表3-2所示為74LS154的功能表。(1)禁止。當(dāng)=?1或=?1時(shí),輸入ABCD不起作用,74LS154不能譯碼,~16個(gè)輸出端均為無(wú)效電平1。(2)譯碼。當(dāng)==?0時(shí),74LS154實(shí)現(xiàn)譯碼功能。這時(shí)輸出取決于輸入ABCD。對(duì)于每一個(gè)輸入代碼,~16個(gè)輸出端只有一個(gè)為有效電平0,其余15個(gè)都為無(wú)效電平1。5.應(yīng)用4.3行驅(qū)動(dòng)硬件設(shè)計(jì)1.行驅(qū)動(dòng)硬件設(shè)計(jì)32?×?64點(diǎn)陣有32條行線,并且行線連接的是LED的陽(yáng)極,所以行驅(qū)動(dòng)硬件主要是設(shè)計(jì)一個(gè)5線-32線、輸出高電平有效的譯碼器。(1)確定芯片的個(gè)數(shù)及32線輸出端。74LS154有16個(gè)輸出端,擴(kuò)展為32線譯碼器時(shí)需要2片154。32線輸出由兩片154的輸出端組合而成,其中,154(1)的輸出端重新定義為~,154(2)的輸出端重新定義為~。由于74LS154的輸出為低電平有效,因此需要通過(guò)32個(gè)非門(mén)將154的輸出轉(zhuǎn)換為高電平有效,再與32條行線X0~X31相連,如圖3-17(a)所示。(2)確定5線輸入端ABCDE。①列出5線-32線譯碼器功能表。列出5線-32線譯碼的功能表,功能表輸入端的32種組合全部列出,但32個(gè)輸出端并不需要單獨(dú)列出,而是根據(jù)構(gòu)成它的154芯片的個(gè)數(shù),將32個(gè)輸出分為2列,154(1)的~和154(2)的~,如表3-3所示。②確定低4位輸入BCDE。5線-32線譯碼器由2個(gè)74LS154芯片構(gòu)成,將表3-3所示32種輸入組合分為2組,也就是找到兩片154輸入的16個(gè)代碼(0000~1111),共有2組。觀察表3-3,可以看出兩組0000~1111都出現(xiàn)在5線輸入的低4位BCDE處,它的前16行為第一組0000~1111,后16行為第2組0000~1111,同時(shí)送給2片154的輸入ABCD。也就是說(shuō),將2個(gè)154芯片的輸入端A并聯(lián)后,作為5線輸入的B;將2個(gè)154芯片的輸入端B并聯(lián)后,作為5線輸入的C;…,即5線的低4位BCDE?=?154的ABCD,如圖3-17(b)所示。譯碼器的擴(kuò)展電路圖較為復(fù)雜,畫(huà)圖時(shí)最好結(jié)合原理一步一步畫(huà),每一條線盡可能保證不出錯(cuò),節(jié)點(diǎn)也是必不可少的。③確定最高位A。首先,5線-32線譯碼器任何時(shí)刻都只能有一個(gè)輸出端處于有效狀態(tài),因此2片154絕對(duì)不能同時(shí)譯碼,一個(gè)譯碼的同時(shí)另一個(gè)只能禁止。表3-3中,前16種組合00000~01111分別選中~中的一個(gè)輸出端,~均為無(wú)效狀態(tài);而后16種組合10000~11111分別選中~中的一個(gè)輸出端,~均為無(wú)效狀態(tài)。據(jù)此可知,前16行A?=?0時(shí),154(1)譯碼、154(2)禁止;后16行A?=?1時(shí),154(2)譯碼、154(1)禁止。其次,5線-32線譯碼器低4位輸入BCDE,由2個(gè)154的ABCD并聯(lián)而成,那么最高位輸入端A只能與154的使能端相連。最后,在154譯碼時(shí),確定A的連接方式。154(1)在A?=?0時(shí)譯碼,所以A應(yīng)連接至154(1)的低電平有效的使能端154(2)在A?=?1時(shí)譯碼,所以A應(yīng)接154(2)的高電平有效的使能端,但是154沒(méi)有高電平有效的使能端,只能通過(guò)非門(mén)取反后,再連接至154(2)的,如圖3-18(a)所示。④處理多余的使能端。2片154芯片上未使用的使能端一般不能懸空,應(yīng)接使其有效的固定狀態(tài)0。這樣154才能夠在需要時(shí)實(shí)現(xiàn)譯碼功能。到這里,5線-32線譯碼器就全部連接完成了,如圖3-18(b)所示。(3)分配端口。將P3.6~P3.2分別分配給5線輸入ABCDE,編程時(shí)采用位尋址,定義為sbitXA=P3^6;sbitXB=P3^5;sbitXC=P3^4;sbitXD=P3^3;sbitXE=P3^2;2.行掃描函數(shù)行掃描時(shí),根據(jù)行號(hào)從32條行線中每次只選中一行,編程時(shí),需將行號(hào)轉(zhuǎn)換為5位二進(jìn)制數(shù),通過(guò)P3.6~P3.2端口送至5線-32線譯碼器的輸入端ABCDE,由5線-32線譯碼器譯碼后選中其中一行。由32分支程序?qū)崿F(xiàn)將行號(hào)轉(zhuǎn)換為譯碼器的5位輸入。源代碼如下:/*函數(shù)名:xsaomiao()作用:選中行x。將行號(hào)x轉(zhuǎn)換為5位二進(jìn)制數(shù),送至5線-32線譯碼器的輸入端ABCDE。入口參數(shù):形參x:存放待選中行的行號(hào),范圍從0~31。出口參數(shù):無(wú)。*/voidxsaomiao(ucharx){ switch(x) { case0: XA=0; XB=0; XC=0; XD=0; XE=0; break; case1: XA=0; XB=0; XC=0; XD=0; XE=1; break;

case2: XA=0; XB=0; XC=0; XD=1; XE=0; break; case3: XA=0; XB=0; XC=0; XD=1; XE=1; break;case3: XA=0; XB=0; XC=0; XD=1; XE=1; break; case4: XA=0; XB=0; XC=1; XD=0; XE=0; break; case5: XA=0; XB=0; XC=1; XD=0; XE=1; break; case6: XA=0; XB=0; XC=1; XD=1; XE=0; break; case7: XA=0; XB=0; XC=1; XD=1; XE=1; break; case8: XA=0; XB=1; XC=0; XD=0; XE=0; break; case9: XA=0; XB=1; XC=0; XD=0; XE=1; break; case10: XA=0; XB=1; XC=0; XD=1; XE=0; break; case11: XA=0; XB=1; XC=0; XD=1; XE=1; break; case12: XA=0; XB=1; XC=1; XD=0; XE=0; break; case13: XA=0; XB=1; XC=1; XD=0; XE=1; break; case14: XA=0; XB=1; XC=1; XD=1; XE=0; break; case15: XA=0; XB=1; XC=1; XD=1; XE=1; break;case16: XA=1; XB=0; XC=0; XD=0; XE=0; break;

case17: XA=1; XB=0; XC=0; XD=0; XE=1; break; case18: XA=1; XB=0; XC=0; XD=1; XE=0; break; case19: XA=1; XB=0; XC=0; XD=1; XE=1; break; case20: XA=1; XB=0; XC=1; XD=0; XE=0; break; case21: XA=1; XB=0; XC=1; XD=0; XE=1; break; case22: XA=1; XB=0; XC=1; XD=1; XE=0; break; case23: XA=1; XB=0; XC=1; XD=1; XE=1; break; case24: XA=1; XB=1; XC=0; XD=0; XE=0; break; case25: XA=1; XB=1; XC=0; XD=0; XE=1; break; case26: XA=1; XB=1; XC=0; XD=1; XE=0; break; case27: XA=1; XB=1; XC=0; XD=1; XE=1; break; case28: XA=1; XB=1; XC=1; XD=0; XE=0; break; case29: XA=1; XB=1; XC=1; XD=0; XE=1; break; case30: XA=1; XB=1; XC=1; XD=1; XE=0; break; case31: XA=1; XB=1; XC=1; XD=1; XE=1; break; }} 4.48位移位寄存器74LS59532?×?64點(diǎn)陣的列線上傳送的是選中行點(diǎn)陣信息的字模。為了減少控制線,需采用串行方式發(fā)送這些字模,74LS595移位寄存器可以實(shí)現(xiàn)數(shù)據(jù)的串行傳送。1.特點(diǎn)74LS595是8位移位寄存器/存儲(chǔ)器,可以實(shí)現(xiàn)數(shù)據(jù)的串行輸入,輸出可以是串行輸出或并行輸出,輸出為三態(tài)結(jié)構(gòu),驅(qū)動(dòng)電流可達(dá)35mA,其優(yōu)點(diǎn)是具有數(shù)據(jù)存儲(chǔ)功能,在數(shù)據(jù)移位的過(guò)程中,輸出端的數(shù)據(jù)可以保持不變,主要應(yīng)用于點(diǎn)陣屏。2.內(nèi)部結(jié)構(gòu)74LS595的內(nèi)部結(jié)構(gòu)如圖3-19所示,它由8位移位寄存器、8位存儲(chǔ)器和8個(gè)三態(tài)門(mén)三級(jí)電路組成,每一級(jí)都可以進(jìn)行單獨(dú)地控制。74LS595的數(shù)據(jù)傳送方式有兩種:(1)從SI輸入,QA~QH輸出時(shí),為串行輸入—并行輸出方式,簡(jiǎn)稱(chēng)為串入-并出;(2)從SI輸入,SQH輸出時(shí),為串行輸入—串行輸出方式,簡(jiǎn)稱(chēng)為串入-串出。3.引腳·VCC—電源輸入端,5?V?!ND—接地端?!I—串行數(shù)據(jù)輸入端?!A~QH—并行數(shù)據(jù)輸出端,是最后一級(jí)三態(tài)門(mén)的輸出端?!QH—串行數(shù)據(jù)輸出端,由圖3-19內(nèi)部結(jié)構(gòu)圖可知,SQH與第一級(jí)8位移位寄存器的并行輸出端QH'相同?!ぁ敵鍪鼓芏?,低電平有效?!ぁ袛?shù)據(jù)清零端,低電平有效?!CK—串行移位時(shí)鐘,上升沿有效。·RCK—存儲(chǔ)時(shí)鐘,上升沿有效。4.功能表74LS595的功能表如表3-4所示。在表3-4中,74LS595所能實(shí)現(xiàn)的功能是按照8位移位寄存器、8位存儲(chǔ)器、8個(gè)三態(tài)門(mén)列出的。(1)?8個(gè)三態(tài)門(mén)。當(dāng)=?0時(shí),三態(tài)門(mén)打開(kāi),QA~QH并行輸出8位數(shù)據(jù);當(dāng)=1時(shí),三態(tài)門(mén)禁止,QA~QH為高阻狀態(tài)。(2)?8位存儲(chǔ)器。在RCK上升沿到來(lái)時(shí),8位存儲(chǔ)器接收前一級(jí)的并行輸出信號(hào),并保存;在RCK為高電平、下降沿或低電平時(shí),8位存儲(chǔ)器處于保持狀態(tài)。(3)?8位移位寄存器。當(dāng)=?0時(shí),第一級(jí)8位移位寄存器清零,與后面存儲(chǔ)器、三態(tài)門(mén)無(wú)直接關(guān)系;當(dāng)=1時(shí),8位移位寄存器可以進(jìn)行移位,實(shí)現(xiàn)數(shù)據(jù)的串行傳送。移位寄存器在移位時(shí)鐘SCK的作用下,串行接收數(shù)據(jù)并移位。在SCK上升沿到來(lái)時(shí),8位移位寄存器串行接收新的數(shù)據(jù)并實(shí)現(xiàn)數(shù)據(jù)移位;在SCK為高電平、下降沿或低電平時(shí),8位移位寄存器處于保持狀態(tài)。在SCK加入1個(gè)上升沿時(shí),8位移位寄存器中數(shù)據(jù)的移位方向?yàn)镼G'移入QH'(SQH)QF'移入QG'QE'移入QF'QD'移入QE'QC'移入QD'QB'移入QC'QA'移入QB'SI移入QA'在一個(gè)上升沿的作用下,接收1位新數(shù)據(jù)的同時(shí),原有的數(shù)據(jù)同時(shí)向高位移動(dòng),所以移位寄存器均為同步時(shí)序電路。4.5列驅(qū)動(dòng)硬、軟件設(shè)計(jì)1.列驅(qū)動(dòng)硬件設(shè)計(jì)列驅(qū)動(dòng)電路通過(guò)串行輸入—并行輸出的方式,串行傳送選中行的字模。由于點(diǎn)陣有64條列線,因此需要構(gòu)成一個(gè)可以串入—并出的64位移位寄存器。1)確定芯片的個(gè)數(shù)及輸出線74LS595為8位移位寄存器,構(gòu)成64位移位寄存器需要8片595。8片595的輸出引腳重新定義,595(1)的輸出定義為Q0~Q7,595(2)的輸出定義為Q8~Q15,…,5957的輸出定義為Q48~Q55,595(8)的輸出定義為Q56~Q63,Q0~Q63與32×64點(diǎn)陣的64條列線Y0~Y63相連,如圖3-22所示。2)確定595的工作方式(1)確定595級(jí)間方式。64位移位寄存器在1個(gè)移位時(shí)鐘到來(lái)時(shí),64位要同步移位一次。在圖3-22中,595(1)實(shí)現(xiàn)Q0'?~Q7'?之間數(shù)據(jù)的移位,595(2)實(shí)現(xiàn)Q8'?~Q15'?之間數(shù)據(jù)的移位,…,595(7)實(shí)現(xiàn)Q48'?~Q55'?,595(8)實(shí)現(xiàn)Q56'?~Q63'?之間數(shù)據(jù)的移位?,F(xiàn)在的問(wèn)題是,如何使數(shù)據(jù)在相鄰的兩片595之間移位,即前一片的最高位移入后一片的最低位。例如,Q7'?原來(lái)的數(shù)據(jù)移入Q8'?,Q15'?原來(lái)的數(shù)據(jù)移入Q16'?,類(lèi)似地,Q23'?移入Q24'?、Q31'?移入Q32'?、Q39'?移入Q40'?、Q47'?移入Q48'?、Q55'?移入Q56'??,F(xiàn)以Q7'?移入Q8'?為例進(jìn)行分析。Q7'?是芯片595(1)移位寄存器最高位的輸出端,Q8'?是芯片595(2)移位寄存器最低位的輸出端,結(jié)合內(nèi)部結(jié)構(gòu)圖與移位方向可知:對(duì)于595(1)而言,Q7'?=?QH'?=?SQH。對(duì)于595(2)而言,Q8'?=?QA'?=?SI。將Q7'?原來(lái)的數(shù)據(jù)移入Q8'?,即使Q8'?=?Q7'?。所以,SI=SQH。分析了這么多,在電路圖上就是將前一片的串行數(shù)據(jù)輸出端SQH,與后一片的串行數(shù)據(jù)輸入端相連,工作于串入-串出方式,如圖3-22所示。(2)確定每片595的工作方式。為了減少控制端口,字模數(shù)據(jù)要串行輸入,而點(diǎn)陣在顯示時(shí),一行的字模數(shù)據(jù)又要同時(shí)作用于列線,所以每一片595應(yīng)工作于串入—并出方式。因此每一片595應(yīng)作如下設(shè)置:①當(dāng)=?1時(shí),595不清0。②當(dāng)=?0時(shí),打開(kāi)三態(tài)門(mén),可以傳送數(shù)據(jù)。③SCK并聯(lián)。8片595的SCK受同一個(gè)信號(hào)控制,實(shí)現(xiàn)同步64位移位寄存器。在加入64個(gè)上升沿后,Q0'?~Q63'?全部更換為新的數(shù)據(jù)。④RCK并聯(lián),8片595的RCK也受同一個(gè)信號(hào)控制,實(shí)現(xiàn)同步64位存儲(chǔ)器。在加入1個(gè)↑后,經(jīng)過(guò)三態(tài)門(mén)使Q0~Q63得到更新。完整的列驅(qū)動(dòng)硬件電路圖如圖3-22所示。64位移位寄存器工作時(shí),先在64個(gè)SCK移位時(shí)鐘的作用下,將64位數(shù)據(jù)移入第1級(jí)的64位移位寄存器,再在1個(gè)RCK存儲(chǔ)時(shí)鐘的作用下,將64位數(shù)據(jù)存至第2級(jí)的64位存儲(chǔ)器,并通過(guò)打開(kāi)的三態(tài)門(mén)輸出至64個(gè)并行輸出端。完整的硬件電路圖如圖3-23所示。3)分配端口將P3.0分配給SI,P3.1分配給SCK,P3.7分配給RCK。采用位尋址,分別定義為sbitSI=P3^0;sbitSCK=P3^1;sbitRCK=P3^7;2.列驅(qū)動(dòng)軟件設(shè)計(jì)1)二進(jìn)制數(shù)的拆分串行傳送數(shù)據(jù)時(shí),每次只能傳一位,需將一個(gè)多位的二進(jìn)制數(shù)拆分為多個(gè)一位二進(jìn)制數(shù)。待拆分的多位二進(jìn)制數(shù)為X時(shí),步驟如下:(1)將數(shù)X和一個(gè)常量按位與。保留多位數(shù)X中指定的一位,其余位都變?yōu)?。確定常量值的方法:對(duì)應(yīng)X中保留的位,該常量的對(duì)應(yīng)位為1,其余位為零,再將該常量轉(zhuǎn)換成十六進(jìn)制數(shù)。(2)根據(jù)第一步的運(yùn)算結(jié)果,判斷保留的一位是0還是1。2)列函數(shù)32?×?64點(diǎn)陣在一屏內(nèi),可以顯示滿(mǎn)屏32?×?64的點(diǎn)陣信息,也可以顯示小于32?×?64的任意點(diǎn)陣的信息,這時(shí)每一行字模有多少個(gè)字節(jié),是根據(jù)顯示信息變化的,但肯定都是以字節(jié)為單位的,為了便于控制,在列函數(shù)中只實(shí)現(xiàn)一個(gè)字節(jié)的串行移入,然后根據(jù)顯示信息的大小決定調(diào)用列函數(shù)的次數(shù)。串行傳送一個(gè)字節(jié)的數(shù)據(jù),需要將其拆分為8個(gè)一位二進(jìn)制數(shù),傳送8次。由于取模時(shí),取模走向設(shè)置為順向,因此在串行發(fā)送一個(gè)字節(jié)時(shí),應(yīng)先傳送位0,這樣在經(jīng)過(guò)8次移位后,最先移入的位0,才能夠移至一片595的QH'?,用以控制點(diǎn)陣中選中行每8列的最右一列,與取模走向一致。源代碼如下:/*函數(shù)名:yzimo()作用:串行移入一個(gè)字節(jié)的數(shù)據(jù)至一片595的8位移位寄存器。入口參數(shù):形參y:待移入的一個(gè)字節(jié)數(shù)據(jù)。出口參數(shù):無(wú)。*/voidyzimo(uchary){uchari;for(i=0;i<8;i++) //一個(gè)字節(jié)分8次串行輸入{SCK=0; //移位時(shí)鐘起始電平if(y&0x01) SI=1; //取出變量y的位0,并送至SIelse SI=0;SCK=1; //移位時(shí)鐘上升沿y=y>>1; //修正y,為后續(xù)取出位1~位7作準(zhǔn)備}}每次執(zhí)行循環(huán)體時(shí),給SI送的都是變量y的位0,但實(shí)際上,只有第一次執(zhí)行循環(huán)體時(shí),送位0;第二次執(zhí)行循環(huán)體時(shí),送的是位1;依此類(lèi)推,每次都不一樣,在循環(huán)體的最后,通過(guò)右移一位修正變量y,可使后續(xù)取出的位0,實(shí)際上是位1~位7。

第五節(jié)32×64點(diǎn)陣軟件設(shè)計(jì)

5.1第一行16×16信息顯示如圖3-1所示,在32?×?64點(diǎn)陣第一行顯示“單片機(jī)”,字的大小為16?×?16。1.取模并存放(1)分析待顯示信息與點(diǎn)陣屏的關(guān)系。在32?×?64點(diǎn)陣上,全部顯示16?×?16點(diǎn)陣信息時(shí),一屏最多可以顯示32/16?=?2行,每行64/16?=?4列,共計(jì)2行?×?4列?=?8個(gè)16?×?16點(diǎn)陣信息。(2)取出顯示信息的字模并存放。16?×?16點(diǎn)陣信息的字模為16?×?16/8?=?32B。在取模方式為“逐行式”時(shí),表示一個(gè)信息共有16行、每行2個(gè)字節(jié)。在PCtoLCD2002取模軟件中,選擇模式→字符模式,字模選項(xiàng)見(jiàn)3-10(b),輸入“單片機(jī)”,并選擇字體、加粗等后,單擊生成字模,將所有字模全選粘貼到源程序中,并定義數(shù)組存放。2.編寫(xiě)函數(shù)采用行掃描編程在第一行顯示16?×?16點(diǎn)陣信息時(shí),編程步驟如下:(1)由for(i=0;i<16;i++)實(shí)現(xiàn)16行的掃描。(2)執(zhí)行16次的循環(huán)體中,實(shí)現(xiàn)選中行4個(gè)16?×?16點(diǎn)陣字模的串行發(fā)送。傳送16?×?16點(diǎn)陣每行2字節(jié)的字模時(shí),由for(j=1;i>=0;j--)實(shí)現(xiàn),采用j--?是由于,在圖3-22中,先移入的字節(jié)控制16?×?16點(diǎn)陣右側(cè)的顯示,后移入的字節(jié)控制16?×?16點(diǎn)陣左側(cè)的顯示;再結(jié)合取模方式“逐行式”,點(diǎn)陣右側(cè)字節(jié)在數(shù)組中的下標(biāo)大,左側(cè)字節(jié)在數(shù)組中的下標(biāo)小,只有采用j--,才能夠真實(shí)地還原點(diǎn)陣信息。例如,一行2個(gè)字節(jié)為{0xFF,0xDF}時(shí),先移入0xDF,后移入0xFF;在圖3-22中,0xdf在595(2)中,0xFF在595(1)中。在for(j=1;i>=0;j--)的循環(huán)體中,調(diào)用列函數(shù)“yzimo(tab1[i*2+j]);”發(fā)送一個(gè)字節(jié)。數(shù)組tab1的下標(biāo)從0~31,將其轉(zhuǎn)換為由行變量i和列變量j共同控制時(shí),用表達(dá)式(i*2+j)表示。4個(gè)16?×?16點(diǎn)陣的字模存放在數(shù)組tab1[]~tab4[]中,第一個(gè)for(j=1;i>=0;j--),將tab1[]中選中行的字模,移入595(1)和595(2);第二個(gè)for(j=1;i>=0;j--),將tab2[]中選中行的字模,移入595(1)和595(2),而之前移入的tab1[]的字模,移至595(3)和595(4);…,重復(fù)4次,在64個(gè)SCK時(shí)鐘的作用下,選中行4個(gè)16?×?16點(diǎn)陣的字模,全部移入8片595的第一級(jí)移位寄存器。(3)送存儲(chǔ)時(shí)鐘RCK,選中行的字模存至8片595第二級(jí)的存儲(chǔ)器中,通過(guò)打開(kāi)的三態(tài)門(mén)送至64條列線上。第一行16×16點(diǎn)陣信息源代碼如下:/*函數(shù)名:diyihang16x16()作用:在32?×?64點(diǎn)陣屏的第一行顯示4個(gè)16?×?16的點(diǎn)陣信息。入口參數(shù):形參tab4[]:存放16?×?16點(diǎn)陣字模,顯示在第一行從左數(shù)第1個(gè)位置。形參tab3[]:存放16?×?16點(diǎn)陣字模,顯示在第一行從左數(shù)第2個(gè)位置。形參tab2[]:存放16?×?16點(diǎn)陣字模,顯示在第一行從左數(shù)第3個(gè)位置。形參tab1[]:存放16?×?16點(diǎn)陣字模,顯示在第一行從左數(shù)第4個(gè)位置。出口參數(shù):無(wú)*/voiddiyihang16x16(uchartab1[],uchartab2[],uchartab3[],uchartab4[]){ chari,j; for(i=0;i<16;i++) { RCK=0;

for(j=1;j>=0;j--) yzimo(tab1[i*2+j]); for(j=1;j>=0;j--) yzimo(tab2[i*2+j]); for(j=1;j>=0;j--) yzimo(tab3[i*2+j]); for(j=1;j>=0;j--) yzimo(tab4[i*2+j]); RCK=1; xsaomiao(i); _nop_(); }}函數(shù)“_nop_();”的作用是延時(shí)1us,該函數(shù)的原形在頭文件intrins.h中。在32?×?64點(diǎn)陣屏的第一行,從左至右顯示“單片機(jī)”時(shí),函數(shù)diyihang16x16()的調(diào)用語(yǔ)句為diyihang16x16(mie,ji,pian,dan);第一個(gè)實(shí)參數(shù)組mie,是由于顯示“單片機(jī)”時(shí),最右側(cè)缺少一個(gè)字,數(shù)組mie的內(nèi)容為全滅的代碼0xff,共32B。在需要時(shí),可移入數(shù)組mie的內(nèi)容,滿(mǎn)足顯示需求。3.源程序32?×?64點(diǎn)陣屏在顯示16?×?16點(diǎn)陣信息時(shí),采用行掃描,由4重循環(huán)組成。最外層循環(huán)是由while(1)構(gòu)成,對(duì)點(diǎn)陣進(jìn)行無(wú)數(shù)遍掃描,在while(1)的循環(huán)體內(nèi),實(shí)現(xiàn)16?×?16點(diǎn)陣信息的一遍掃描;第二層循環(huán)由for(i=0;i<16;i++)構(gòu)成,表示待顯示的點(diǎn)陣信息共有16行,在第二層的循環(huán)體內(nèi),完成一行字模的發(fā)送;第三層循環(huán)由4個(gè)for(j=1;j>=0;j--)構(gòu)成,完成一行4個(gè)16?×?16點(diǎn)陣信息共8B字模的串行發(fā)送;最內(nèi)層的循環(huán)由for(i=0;i<8;i++)構(gòu)成,實(shí)現(xiàn)一個(gè)字節(jié)的串行發(fā)送。在main()中只能看到while(1)循環(huán),其他的循環(huán)是通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)的;在while(1)的循環(huán)體中,調(diào)用函數(shù)diyihang16x16(),完成每一遍16行的掃描;在diyihang16x16()中調(diào)用函數(shù)xsaomiao()選中一行,以及8次調(diào)用函數(shù)yzimo()完成每行8B字模的發(fā)送;最后在函數(shù)yzimo()中,完成一個(gè)字節(jié)的串行發(fā)送。函數(shù)調(diào)用關(guān)系如圖3-24所示。源程序如下:#include <reg51.h>#include <intrins.h>#define ucharunsignedchar#define uint unsignedintsbit XA=P3^6;sbit XB=P3^5;sbit XC=P3^4;sbit XD=P3^3;sbit XE=P3^2;sbit SI=P3^0;sbit SCK=P3^1;sbit RCK=P3^7;ucharcodedan[32];ucharcodepian[32];ucharcodeji[32];ucharcodemie[32];voidxsaomiao(ucharx);voidyzimo(uchary);voiddiyihang16x16(uchartab1[],uchartab2[],uchartab3[],uchartab4[]);main(){ while(1) { diyihang16x16(mie,ji,pian,dan); }}voiddiyihang16x16(uchartab1[],uchartab2[],uchartab3[],uchartab4[]){ chari,j; for(i=0;i<16;i++)

{ RCK=0; for(j=1;j>=0;j--) yzimo(tab1[i*2+j]); for(j=1;j>=0;j--) yzimo(tab2[i*2+j]); for(j=1;j>=0;j--) yzimo(tab3[i*2+j]); for(j=1;j>=0;j--) yzimo(tab4[i*2+j]); RCK=1; xsaomiao(i); _nop_(); }}voidxsaomiao(ucharx){ switch(x) { case0: XA=0; XB=0; XC=0; XD=0; XE=0; break; case1: XA=0; XB=0; XC=0; XD=0; XE=1; break;

case2: XA=0; XB=0; XC=0; XD=1; XE=0; break; case3: XA=0; XB=0; XC=0; XD=1; XE=1; break; case4: XA=0; XB=0; XC=1; XD=0; XE=0; break; case5: XA=0; XB=0; XC=1; XD=0; XE=1; break; case6: XA=0; XB=0; XC=1; XD=1; XE=0; break; case7: XA=0; XB=0; XC=1; XD=1; XE=1; break; case8: XA=0; XB=1; XC=0; XD=0; XE=0; break;case9: XA=0; XB=1; XC=0; XD=0; XE=1; break; case10: XA=0; XB=1; XC=0; XD=1; XE=0; break; case11: XA=0; XB=1; XC=0; XD=1; XE=1; break; case12: XA=0; XB=1; XC=1; XD=0; XE=0; break; case13: XA=0; XB=1; XC=1; XD=0; XE=1; break; case14: XA=0; XB=1; XC=1; XD=1; XE=0; break; case15: XA=0; XB=1; XC=1; XD=1; XE=1; break; case16: XA=1; XB=0; XC=0; XD=0; XE=0; break; case17: XA=1; XB=0; XC=0; XD=0; XE=1; break; case18: XA=1; XB=0; XC=0; XD=1; XE=0; break; case19: XA=1; XB=0; XC=0; XD=1; XE=1; break; case20: XA=1; XB=0; XC=1; XD=0; XE=0; break; case21: XA=1; XB=0; XC=1; XD=0; XE=1; break; case22: XA=1; XB=0; XC=1; XD=1; XE=0; break; case23: XA=1; XB=0; XC=1; XD=1; XE=1; break; case24: XA=1; XB=1; XC=0; XD=0; XE=0; break; case25: XA=1; XB=1; XC=0; XD=0; XE=1; break; case26: XA=1; XB=1; XC=0; XD=1; XE=0; break; case27: XA=1; XB=1; XC=0; XD=1; XE=1; break; case28: XA=1; XB=1; XC=1; XD=0; XE=0; break; case29: XA=1; XB=1; XC=1; XD=0; XE=1; break; case30: XA=1; XB=1; XC=1; XD=1; XE=0; break; case31: XA=1; XB=1; XC=1; XD=1; XE=1; break; }}voidyzimo(uchary) { uchari; for(i=0;i<8;i++) { SCK=0; if(y&0x01) SI=1; else SI=0; SCK=1; y=y>>1; }}ucharcodedan[32]={/*"單",0*//*(16X16,仿宋)*/ 0xFF,0xFF,0xFF,0xDF,0xFB,0xBF,0xFD,0xBF,0xF6,0x0F,0xF0,0xEF,0xF6,0x0F,0xF0,0xEF,0xF6,0x0F,0xF8,0xFF,0xFE,0xE1,0xC0,0x1F,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFF};ucharcodepian[32]={/*"片",1*//*(16X16,仿宋)*/0xFF,0xFF,0xFF,0xBF,0xF7,0xBF,0xF7,0xBF,0xF7,0xBF,0xF7,0xBB,0xF8,0x07,0xF7,0xFF,0xF7,0xDF,0xF8,0x1F,0xF7,0xDF,0xF7,0xDF,0xEF,0xDF,0xEF,0xDF,0xDF,0xDF,0xFF,0xFF};ucharcodeji[32]={/*"機(jī)",2*//*(16X16,仿宋)*/0xFF,0xFF,0xF7,0xFF,0xF7,0xFF,0xF7,0x0F,0xF7,0x6F,0xF9,0x6F,0xE6,0x6F,0xF7,0x6F,0xE1,0x6F,0xD6,0xEF,0xD6,0xEF,0xB6,0xEF,0xF5,0xED,0xF5,0xED,0xF3,0xF3,0xFF,0xFF};ucharcodemie[32]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};5.2第二行16×16信息顯示如圖3-1所示,在32?×?64點(diǎn)陣第二行顯示“微機(jī)控制”。第二行與第一行顯示方法相同,首先取出“微機(jī)控制”的字模,“機(jī)”前面取過(guò)字模,可以只取其余3個(gè)字的字模。其次,編寫(xiě)函數(shù)dierhang16x16()。與函數(shù)diyihang16x16()不同的是,第二行16×16信息位于點(diǎn)陣屏的16~31行,因此調(diào)用函數(shù)xsaomiao()選中一行時(shí),實(shí)參應(yīng)為i+16。源程序如下:#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbit XA=P3^6;sbit XB=P3^5;sbit XC=P3^4;sbit XD=P3^3;sbit XE=P3^2;sbit SI=P3^0;sbit SCK=P3^1;sbit RCK=P3^7;ucharcodedan[32];ucharcodepian[32];ucharcodeji[32];ucharcodewei[32];ucharcodekong[32];ucharcodezhi[32];ucharcodemie[32];voidxsaomiao(ucharx);voidyzimo(uchary);voiddiyihang16x16(uchartab1[],uchartab2[],uchartab3[],uchartab4[]);voiddierhang16x16(uchartab1[],uchartab2[],uchartab3[],uchartab4[]);main(){ while(1) { diyihang16x16(mie,ji,pian,dan); dierhang16x16(zhi,kong,ji,wei); }}voiddierhang16x16(uchartab1[],uchartab2[],uchartab3[],uchartab4[]){ chari,j; for(i=0;i<16;i++) { RCK=0;

for(j=1;j>=0;j--) yzimo(tab1[i*2+j]); for(j=1;j>=0;j--) yzimo(tab2[i*2+j]); for(j=1;j>=0;j--) yzimo(tab3[i*2+j]); for(j=1;j>=0;j--) yzimo(tab4[i*2+j]); xsaomiao(i+16);RCK=1; _nop_(); }}voiddiyihang16x16(uchartab1[],uchartab2[],uchartab3[],uchartab4[]){ chari,j; for(i=0;i<16;i++) { RCK=0; for(j=1;j>=0;j--) yzimo(tab1[i*2+j]); for(j=1;j>=0;j--) yzimo(tab2[i*2+j]);

for(j=1;j>=0;j--) yzimo(tab3[i*2+j]); for(j=1;j>=0;j--) yzimo(tab4[i*2+j]); xsaomiao(i);RCK=1; _nop_(); }}voidxsaomiao(ucharx){ switch(x) { case0: XA=0; XB=0; XC=0; XD=0; XE=0; break; case1: XA=0; XB=0; XC=0; XD=0; XE=1; break; case2: XA=0; XB=0; XC=0; XD=1; XE=0; break; case3: XA=0; XB=0; XC=0; XD=1;

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論