微機(jī)控制應(yīng)用技術(shù)課件:無(wú)字庫(kù)LCD液晶顯示器12864_第1頁(yè)
微機(jī)控制應(yīng)用技術(shù)課件:無(wú)字庫(kù)LCD液晶顯示器12864_第2頁(yè)
微機(jī)控制應(yīng)用技術(shù)課件:無(wú)字庫(kù)LCD液晶顯示器12864_第3頁(yè)
微機(jī)控制應(yīng)用技術(shù)課件:無(wú)字庫(kù)LCD液晶顯示器12864_第4頁(yè)
微機(jī)控制應(yīng)用技術(shù)課件:無(wú)字庫(kù)LCD液晶顯示器12864_第5頁(yè)
已閱讀5頁(yè),還剩65頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

微機(jī)控制應(yīng)用技術(shù)項(xiàng)目任務(wù)與目標(biāo)4.112864屏幕管理機(jī)制4.212864硬件設(shè)計(jì)4.312864常用指令及函數(shù)4.412864常用函數(shù)4.512864顯示固定信息4.612864顯示變量的值在無(wú)字庫(kù)的LCD液晶顯示器12864上顯示班級(jí)及姓名,效果圖如圖4-1所示。能力目標(biāo)

·認(rèn)識(shí)無(wú)字庫(kù)LCD液晶顯示器12864并識(shí)別其引腳。

·能夠用頁(yè)地址、列地址正確描述顯示位置的起始地址。

·正確畫出硬件電路圖。

·能夠?qū)懗鲋噶畲a并編寫所需函數(shù)。

·編寫顯示固定信息所需的函數(shù)。

·理解并使用二維數(shù)組。

·編程顯示變量的值。知識(shí)目標(biāo)·了解LCD液晶顯示器。

·熟悉無(wú)字庫(kù)LCD液晶顯示器12864的屏幕管理機(jī)制。

·掌握DDRAM的作用及頁(yè)地址和列地址。

·掌握無(wú)字庫(kù)LCD液晶顯示器12864的接口設(shè)計(jì)。

·掌握常用指令。

·掌握固定信息的顯示方法并編寫函數(shù)。

·掌握變量的顯示方法。

·掌握二維數(shù)組的基本用法。

4.1

12864屏幕管理機(jī)制

4.1.112864概述LCD12864是一種常用的圖形點(diǎn)陣液晶顯示器,顧名思義,就是可以在水平方向顯示128個(gè)點(diǎn),在垂直方向顯示64個(gè)點(diǎn),顯示屏共有128列?×?64行個(gè)光點(diǎn)。通過(guò)對(duì)控制芯片寫入數(shù)據(jù),可以控制光點(diǎn)的亮滅,從而顯示字符、數(shù)字、漢字或者自定義的圖形。盡管各廠商生產(chǎn)的LCD12864所用的控制芯片和引腳定義不盡相同,但是其控制原理都大同小異。利用12864靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面。12864一般分為兩種,一種帶有中文字庫(kù),主要用于顯示漢字(僅限于國(guó)標(biāo)宋體),也可顯示圖形;另一種不帶中文字庫(kù),只是簡(jiǎn)單的點(diǎn)陣模式,主要用于顯示圖形,顯示漢字時(shí),需自己取字模,優(yōu)點(diǎn)是可以選擇自己喜歡的字體及大小。THGDK-1型實(shí)驗(yàn)箱使用的是無(wú)字庫(kù)的12864(本項(xiàng)目用的是無(wú)字庫(kù)12864

)。4.1.212864屏幕管理機(jī)制1.12864屏幕管理機(jī)制12864顯示屏的點(diǎn)陣大小為128列?×?64行。管理屏幕時(shí),以中間為間隔一分為二,左側(cè)的半屏叫做左屏,右側(cè)的半屏叫做右屏;左屏、右屏的點(diǎn)陣大小均為64列?×?64行;在控制光點(diǎn)的亮滅時(shí),左屏與右屏的地址完全相同,只有結(jié)合片選信號(hào)CS1、CS2,才能最終確定選擇哪半屏,如圖4-2所示。顯示數(shù)據(jù)存儲(chǔ)器DDRAM在12864液晶顯示器中的作用至關(guān)重要,在DDRAM中存放著64?×?64點(diǎn)陣顯示屏的顯示數(shù)據(jù)(字模),也就是說(shuō),DDRAM存儲(chǔ)器中存放的數(shù)據(jù)決定了12864顯示屏上顯示的內(nèi)容,DDRAM與12864顯示屏存在著一一對(duì)應(yīng)的關(guān)系,所以稱之為顯示數(shù)據(jù)存儲(chǔ)器。在對(duì)DDRAM存儲(chǔ)器進(jìn)行讀寫操作時(shí),它的地址應(yīng)符合12864的顯示屏管理機(jī)制。DDRAM地址與12864顯示屏的映射關(guān)系如圖4-3所示,DDRAM存儲(chǔ)器的容量為512B,恰好存放半屏64列?×?64行/8的顯示數(shù)據(jù)。12864的顯示屏共有64行,這些行均分為8個(gè)數(shù)據(jù)頁(yè)來(lái)管理,這8個(gè)數(shù)據(jù)頁(yè)對(duì)應(yīng)顯示屏從上到下,分別為第0~第7頁(yè);每頁(yè)的大小為8行、64列;由于51單片機(jī)是8位機(jī),通過(guò)數(shù)據(jù)總線DB7~DB0,一次可同時(shí)傳送8位二進(jìn)制數(shù),因此每一頁(yè)中的一列存放一個(gè)字節(jié)的數(shù)據(jù),是并行傳送的;因此,對(duì)于DDRAM的每個(gè)字節(jié),不管是讀或?qū)?,都需要根?jù)顯示位置確定好頁(yè)地址和列地址,然后才可以傳送顯示數(shù)據(jù)。12864要顯示信息比如圖形、文字的核心

就要向DDRAM存儲(chǔ)器寫顯示數(shù)據(jù)。DDRAM中每個(gè)字節(jié)中的每1個(gè)位(bit),控制顯示屏上的1個(gè)光點(diǎn)的亮滅。bit值為1時(shí),所控制的光點(diǎn)亮;反之光點(diǎn)不亮。DDRAM中的一個(gè)字節(jié)數(shù)據(jù)唯一對(duì)應(yīng)顯示屏某一頁(yè)中一列從下往上的8個(gè)顯示點(diǎn)。顯示屏上的光點(diǎn)的亮滅(決定了圖形)一一對(duì)應(yīng)了DDRAM的顯示數(shù)據(jù)(8個(gè)顯示點(diǎn)一一對(duì)應(yīng)DDRAM中的一個(gè)字節(jié))?!纠?-1】將0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00的8個(gè)數(shù)據(jù)寫入DDRAM第0頁(yè)的第0列至第7列。

向DDRAM第0頁(yè)第0列寫入數(shù)據(jù)=00000000B,則顯示屏第0頁(yè)第0列的8個(gè)點(diǎn)全滅;

向DDRAM第0頁(yè)第1列寫入數(shù)據(jù)0x70=01110000B,則顯示屏第0頁(yè)第1列的8個(gè)點(diǎn)從下往上為1的三個(gè)光點(diǎn)亮;

向DDRAM第0頁(yè)第2列寫入數(shù)據(jù)0x08=00001000B,則顯示屏第0頁(yè)第2列的8個(gè)點(diǎn)從下往上為1的一個(gè)光點(diǎn)亮;…………

8個(gè)數(shù)據(jù)全部寫入DDRAM后,效果如圖4-4所示,所有的1連起來(lái)就是要顯示的內(nèi)容。

2.PCtoLCD2002字模選項(xiàng)寫入DDRAM的字模,可以通過(guò)PCtoLCD2002取模軟件獲得。PCtoLCD2002取模軟件針對(duì)無(wú)字庫(kù)的12864取模時(shí),字模選項(xiàng)如圖4-5所示。其中:(1)點(diǎn)陣格式:陰碼。DDRAM中存放的數(shù)據(jù)為1時(shí),光點(diǎn)亮,反之光點(diǎn)滅。(2)取模方式:列行式。列行式取模指的是,從一張圖片或漢字左上角開始取模,從上至下,8位二進(jìn)制數(shù)(上面是最低位DB0)轉(zhuǎn)化為十六進(jìn)制數(shù)保存,第0列取8位之后,接著取第1列的8位,…,一直到圖片或漢字第0~第7行最后一列的8位取完;第0~第7行取完之后,開始取第8~第15行第0列的8位,…以此類推,直至全部取完。宏觀上看,是先列后行,所以稱之為列行式。可結(jié)合圖4-5右下角的動(dòng)畫,加深理解。無(wú)字庫(kù)12864的屏幕管理機(jī)制符合頁(yè)地址(每8行為一頁(yè))、列地址的要求。(3)取模走向:逆向(低位在前)。圖4-2中,每一頁(yè)中的每一列從上往下,分別為DB0至DB7,是從最低位的DB0開始的?!倦S堂練習(xí)4-1】(1)

將0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00共8個(gè)數(shù)據(jù),寫入DDRAM第1頁(yè)的第0列至第7列中,結(jié)果填入圖4-4中,并觀察顯示效果。(2)觀察圖4-5右下角的動(dòng)畫區(qū)分列行式、行列式。3.12864內(nèi)部結(jié)構(gòu)12864液晶顯示器的內(nèi)部結(jié)構(gòu)框圖如圖4-6所示,主要由行驅(qū)動(dòng)器IC3

+

2

個(gè)列驅(qū)動(dòng)器IC1、IC2

+

128列?×?64行全點(diǎn)陣液晶顯示屏組成。IC1控制顯示器的左半屏,IC2控制顯示器的右半屏。IC1、IC2、IC3主要由以下功能器件組成。指令寄存器(IR)。IR是用來(lái)寄存指令碼的,與顯示數(shù)據(jù)寄存器寄存數(shù)據(jù)相對(duì)應(yīng),只不過(guò)存放的內(nèi)容不同。當(dāng)RS=0時(shí),在E信號(hào)下降沿的作用下,DB7~DB0上傳送的指令碼被寫入IR。即(DB7~DB0上傳送的指令碼指令寄存器)數(shù)據(jù)寄存器DR。DR是用來(lái)存放數(shù)據(jù)的,與指令寄存器寄存指令碼相對(duì)應(yīng)。當(dāng)RS=1時(shí),在E信號(hào)的下降沿作用下,數(shù)據(jù)通過(guò)數(shù)據(jù)總線DB7~DB0寫入DR;或在E信號(hào)高電平作用下由DR讀至數(shù)據(jù)總線DB7~DB0;DR和DDRAM之間的數(shù)據(jù)傳輸是模塊內(nèi)部自動(dòng)執(zhí)行的。左屏右屏(3)狀態(tài)寄存器。狀態(tài)寄存器的有效數(shù)據(jù)位是3位,用于記錄“忙”信號(hào)的標(biāo)志位(BF)、復(fù)位標(biāo)志位(RST)以及開/關(guān)顯示狀態(tài)位(ON/OFF)。(4)顯示數(shù)據(jù)存儲(chǔ)器(DDRAM)。DDRAM是用來(lái)存儲(chǔ)顯示數(shù)據(jù)(字模、字節(jié))的。DDRAM的地址和顯示屏的關(guān)系如圖4-3所示(5)XY地址計(jì)數(shù)器。XY地址計(jì)數(shù)器是一個(gè)9位計(jì)數(shù)器。高3位是X地址計(jì)數(shù)器,低6位為Y地址計(jì)數(shù)器,XY地址計(jì)數(shù)器可作為DDRAM的地址指針,其中,X地址計(jì)數(shù)器為DDRAM的頁(yè)指針,Y地址計(jì)數(shù)器為DDRAM的列地址指針。X地址計(jì)數(shù)器沒有自加1的功能,只能用指令設(shè)置頁(yè)地址。Y地址計(jì)數(shù)器具有自加1的功能,顯示數(shù)據(jù)寫入后,列地址自動(dòng)加1,列地址從0到63。(6)Z地址計(jì)數(shù)器。Z地址計(jì)數(shù)器是一個(gè)6位計(jì)數(shù)器,該計(jì)數(shù)器具備自加1的功能,它用于顯示行掃描同步。當(dāng)一行掃描完成時(shí),Z地址計(jì)數(shù)器自動(dòng)加1,指向下一行掃描數(shù)據(jù),RST復(fù)位后Z地址計(jì)數(shù)器為0。Z地址計(jì)數(shù)器可以用設(shè)置顯示起始行指令預(yù)置。因此,屏幕顯示的起始行就由此指令控制,即DDRAM的數(shù)據(jù)從哪一行開始顯示在屏幕的第一行。12864的DDRAM共64行,屏幕可以循環(huán)滾動(dòng)顯示64行。4.1.312864顯示位置描述在12864上顯示信息時(shí),必須確定顯示的起始位置,而起始位置包括頁(yè)和列?!纠?-2】寫出下述位置的頁(yè)地址和列地址。(1)左屏右上角:第0頁(yè)第63列。(2)左屏左下角:第7頁(yè)第0列。(3)右屏左上角:第0頁(yè)第0列或第0頁(yè)第64列。(4)右屏右下角:第7頁(yè)第63列或第7頁(yè)第127列。【例4-3】在12864液晶顯示屏的右屏右下角顯示一個(gè)16?×?16的漢字,寫出起始地址。因?yàn)?6?×?16的漢字共占2頁(yè)(每頁(yè)有8行),每頁(yè)16列;在顯示屏右屏的右下角顯示一個(gè)16?×?16的漢字時(shí),起始地址為第6頁(yè)第48列或第6頁(yè)第112列。【隨堂練習(xí)4-2】(1)用頁(yè)地址和列地址描述左屏右下角、右屏左下角。(2)在12864顯示16×16的漢字“微機(jī)”,位置是第一行中間,寫出起始地址。

4.2

12864硬件設(shè)計(jì)

4.2.112864引腳圖LCD12864液晶顯示器共有20個(gè)引腳,包括8位雙向數(shù)據(jù)線、6條控制線及電源等,如圖4-7所示?!DD—電源電壓端,電源為5?V?!SS—接地端?!0—液晶顯示器驅(qū)動(dòng)調(diào)節(jié)電壓?!EE—LCD驅(qū)動(dòng)負(fù)電壓,-10?V?!ED+—背光電源正極?!ED-—背光電源負(fù)極。·DB7~DB0—雙向數(shù)據(jù)線,傳遞指令或數(shù)據(jù),并行傳送?!S1—左屏片選信號(hào),高電平有效,用以選擇左屏。·CS2—右屏片選信號(hào),高電平有效,用以選擇右屏如表4-1所示無(wú)字庫(kù)12864片選信號(hào)選擇結(jié)果?!S—數(shù)據(jù)指令選擇端。

當(dāng)RS?=?1時(shí),表示DB7~DB0上傳送的是顯示數(shù)據(jù)(字模);

當(dāng)RS?=?0時(shí),表示DB7~DB0上傳送的是指令數(shù)據(jù)(指令或地址)?!/—讀寫選擇端。

當(dāng)R/=?1時(shí),讀操作,數(shù)據(jù)由12864傳送至單片機(jī),從12864讀出;

當(dāng)R/=?0時(shí),寫操作,數(shù)據(jù)由單片機(jī)傳送至12864,寫入12864。(項(xiàng)目只用寫操作)·E:使能信號(hào)。

在E信號(hào)的下降沿(有效)

,數(shù)據(jù)被寫入數(shù)據(jù)總線DB7~DB0;再寫入12864。

在E的高電平期間,DDRAM中的數(shù)據(jù)被讀至DB7~DB0?!ST:復(fù)位信號(hào),高電平復(fù)位。復(fù)位信號(hào)有效時(shí),關(guān)閉液晶顯示,使顯示起始行為0。RST可與單片機(jī)相連,由單片機(jī)控制;也可直接接VDD,使之不起作用。4.2.212864基本操作寫指令操作:R/=?0,RS?=?0,指令碼送入DB7~DB0后,在E的下降沿到來(lái)時(shí),指令碼存至12864內(nèi)的指令寄存器;寫指令操作沒有輸出信號(hào)。寫數(shù)據(jù)操作:R/=?0,RS?=?1,顯示數(shù)據(jù)送入DB7~DB0后,在E的下降沿到來(lái)時(shí),顯示數(shù)據(jù)存至12864內(nèi)的顯示數(shù)據(jù)存儲(chǔ)器DDRAM中;寫數(shù)據(jù)操作沒有輸出信號(hào)。讀狀態(tài)操作:R/=?1,RS?=?0,在E的高電平期間,狀態(tài)字被讀至DB7~DB0。讀數(shù)據(jù)操作:R/=?1,RS?=?1,在E的高電平期間,DDRAM中的顯示數(shù)據(jù)被讀至DB7~DB0。4.2.312864硬件設(shè)計(jì)圖4-8所示為12864與單片機(jī)的連接圖,為數(shù)據(jù)口DB7~DB0分配的是P0口,編程時(shí)采用字節(jié)尋址;為12864顯示器的整體使能信號(hào)“E”分配的是P2.1,只有當(dāng)該信號(hào)為高電平時(shí),所有的電路才會(huì)有效;為左右半屏片選信號(hào)CS1和CS2分配P2.5、P2.2,CS1和CS2各自為高電平時(shí),分別選中左屏和右屏;為了區(qū)分讀寫的是數(shù)據(jù)還是指令,還需為數(shù)據(jù)/指令選擇端RS分配P2.0;使能端、片選信號(hào)等雖同為P2口,但作用各不相同,編程時(shí)應(yīng)采用位尋址,定義如下:sbitCS1=P2^5;sbitCS2=P2^2;sbitRS=P2^0;sbitRW=P2^4;sbitE=P2^1;sbitRST=P2^6;

4.3

12864常用指令及函數(shù)

無(wú)字庫(kù)12864的指令包含顯示開/關(guān)控制、設(shè)置顯示起始行、設(shè)置頁(yè)地址、設(shè)置列地址、讀狀態(tài)、寫顯示數(shù)據(jù)、讀顯示數(shù)據(jù),共7條指令。下面重點(diǎn)介紹在本項(xiàng)目中用到的指令,沒介紹的指令可自行上網(wǎng)搜索,用法是類同的。4.3.1顯示開/關(guān)控制及函數(shù)1.顯示開/關(guān)控制指令格式顯示開/關(guān)控制指令用于設(shè)置12864液晶屏幕顯示的開/關(guān)。D0=1時(shí),開顯示,12864顯示信息;D0=0時(shí),關(guān)顯示,12864不顯示任何信息。該指令不影響DDRAM存儲(chǔ)器中的內(nèi)容。指令格式如表4-2所示。在表4-2中,由于R/=0,為寫操作;RS=0,數(shù)據(jù)線DB7~DB0上傳送的是指令數(shù)據(jù);兩者結(jié)合起來(lái)表示顯示開/關(guān)控制指令為寫指令操作。顯示開/關(guān)控制指令的指令碼取決于數(shù)據(jù)線DB7~DB0,在表4-2中,DB7~DB0=00111111D0,其中DB7~DB1為常量,而最低位DB0是可以變化的,DB0取不同的值,指令碼也會(huì)不同,因此DB0決定了顯示開/關(guān)控制指令的指令碼的數(shù)量與作用。當(dāng)數(shù)據(jù)線DB7~DB0中只有DB0一個(gè)變化位時(shí),有21個(gè)指令碼,為當(dāng)D0=0時(shí),關(guān)顯示。指令碼?=?DB7~DB0?=?00111110?=?0x3E當(dāng)D0=1時(shí),開顯示。指令碼?=?DB7~DB0?=?00111111?=?0x3F2.顯示開/關(guān)控制指令函數(shù)確定了指令碼之后,編寫實(shí)現(xiàn)指令功能的函數(shù)。函數(shù)的類型(有無(wú)入口參數(shù)、出口參數(shù))根據(jù)編程者的需求而定,不能一概而論。顯示開/關(guān)控制指令有開顯示與關(guān)顯示兩個(gè)作用,可以編寫一個(gè)函數(shù),但需要一個(gè)入口參數(shù),由入口參數(shù)來(lái)決定函數(shù)是實(shí)現(xiàn)開顯示還是關(guān)顯示;當(dāng)然也可以直接編寫兩個(gè)函數(shù),一個(gè)實(shí)現(xiàn)開顯示,一個(gè)實(shí)現(xiàn)關(guān)顯示,但是這種情況就不需要入口參數(shù)。與12864顯示器有關(guān)的函數(shù)一般不需要出口參數(shù)。/*函數(shù)名:lcdkaixianshi()作用:設(shè)置12864顯示屏開顯示。將開顯示的指令碼0x3f通過(guò)數(shù)據(jù)口DB7~DB0寫入12864。入口參數(shù):無(wú)出口參數(shù):無(wú)*/voidlcdkaixianshi(void){P0=0x3f;RW=0;RS=0;E=1;E=0;}/*函數(shù)名:lcdguanxianshi()作用:設(shè)置12864顯示屏關(guān)顯示。將關(guān)顯示的指令碼0x3e通過(guò)數(shù)據(jù)口DB7~DB0寫入12864。入口參數(shù):無(wú)出口參數(shù):無(wú)*/voidlcdguanxianshi(void){P0=0x3e;RW=0;RS=0;E=1;E=0;}【隨堂練習(xí)4-3】(1)注釋開顯示與關(guān)顯示函數(shù)。(2)根據(jù)上述開顯示與關(guān)顯示的函數(shù)定義,寫出函數(shù)聲明與調(diào)用語(yǔ)句。4.3.2設(shè)置頁(yè)地址及函數(shù)1.設(shè)置頁(yè)地址指令格式設(shè)置頁(yè)地址指令用于設(shè)置DDRAM的頁(yè)地址。頁(yè)地址由A2A1A0三位確定,指令格式如表4-3所示。設(shè)置頁(yè)地址指令為寫指令操作。頁(yè)地址就是DDRAM的行地址,8行為一頁(yè),顯示屏共64行即8頁(yè),A2A1A0三位二進(jìn)制數(shù)共有8種狀態(tài),分別表示頁(yè)地址0~7。讀寫數(shù)據(jù)對(duì)頁(yè)地址沒有影響,頁(yè)地址由本指令設(shè)置或RST信號(hào)復(fù)位后頁(yè)地址為0。頁(yè)地址0~7對(duì)應(yīng)的指令碼如下:當(dāng)A2A1A0=000時(shí),設(shè)置第0頁(yè)。指令碼?=?DB7~DB0?=?10111000?=?0xb8當(dāng)A2A1A0=001時(shí),設(shè)置第1頁(yè)。指令碼?=?DB7~DB0?=?10111001?=?0xb9…當(dāng)A2A1A0=111時(shí),設(shè)置第7頁(yè)。指令碼?=?DB7~DB0?=?10111111?=?0xbf設(shè)置頁(yè)地址指令共有8個(gè)指令碼,因此更適合編寫有入口參數(shù)的函數(shù),通過(guò)入口參數(shù)來(lái)改變所設(shè)置的頁(yè)地址。觀察上述指令碼,可得出頁(yè)地址與指令碼之間的關(guān)系為指令碼=0xb8|頁(yè)地址2.設(shè)置頁(yè)地址指令函數(shù)/*函數(shù)名:lcdshezhiye()作用:設(shè)置DDRAM的頁(yè)地址,頁(yè)地址范圍是0~7。將頁(yè)地址0~7轉(zhuǎn)換為指令碼0xb8~0xbf,送入12864的指令寄存器中。入口參數(shù):形參ye:存放待設(shè)置的頁(yè)地址。出口參數(shù):無(wú)*/voidlcdshezhiye(ucharye){P0=0xb8|ye;RW=0;RS=0;E=1;E=0;}4.3.3設(shè)置列地址及函數(shù)1.設(shè)置列地址指令格式設(shè)置列地址指令用于設(shè)置DDRAM的列地址。列地址由A5~A0六位確定,指令格式如表4-4所示。設(shè)置列地址指令為寫指令操作。12864顯示器的顯示屏分為左屏與右屏,左屏與右屏完全相同,均為64列?×?64行,由兩個(gè)獨(dú)立且相同的模塊IC1、IC2控制,因此顯示屏雖然有128列,但能設(shè)置的列地址只有64個(gè),從0~63,由DB7~DB0的低6位A5~A0確定。與設(shè)置頁(yè)地址不同的是,在對(duì)DDRAM進(jìn)行讀寫操作后,Y地址指針自動(dòng)加1,指向下一列DDRAM字節(jié)單元?;诹械刂返淖约?功能,顯示信息時(shí),只需設(shè)置列的首地址即可。列地址0~63對(duì)應(yīng)的指令碼為當(dāng)A5~A0?=?000000時(shí),設(shè)置第0列。指令碼?=?DB7~DB0?=?01000000?=?0x40當(dāng)A5~A0?=?000001時(shí),設(shè)置第1列。指令碼?=?DB7~DB0?=?01000001?=?0x41…當(dāng)A5~A0?=?111111時(shí),設(shè)置第63列。指令碼?=?DB7~DB0?=?01111111?=?0x7f設(shè)置列地址指令共有64個(gè)指令碼,只能編寫有入口參數(shù)的函數(shù)。觀察上述指令碼,可得出列地址與指令碼之間的關(guān)系為指令碼?=?0x40|列地址2.設(shè)置列地址函數(shù)/*函數(shù)名:lcdshezhilie()作用:設(shè)置DDRAM的列地址,列地址范圍是0~63。將列地址轉(zhuǎn)換為指令碼后,送入12864的指令寄存器中。入口參數(shù):形參lie:存放待設(shè)置的列地址。出口參數(shù):無(wú)*/voidlcdshezhiye(ucharlie){P0=0x40|lie;RW=0;RS=0;E=1;E=0;}【隨堂練習(xí)4-4】(1)根據(jù)上述設(shè)置頁(yè)地址與設(shè)置列地址的函數(shù)定義,寫出聲明與調(diào)用語(yǔ)句。(2)計(jì)算0x3e|0x69。4.3.4寫顯示數(shù)據(jù)及函數(shù)寫顯示數(shù)據(jù)的作用是將圖片或漢字等顯示信息的字模寫入相應(yīng)的DDRAM存儲(chǔ)單元,格式如表4-5所示。D7~D0為顯示數(shù)據(jù),DDRAM每寫入一個(gè)字節(jié),列地址指針自動(dòng)加1。請(qǐng)注意,寫顯示數(shù)據(jù)與顯示開/關(guān)控制、設(shè)置頁(yè)地址、設(shè)置列地址是不一樣的。寫顯示數(shù)據(jù)的RS?=?1,表示數(shù)據(jù)總線DB7~DB0上傳送的是顯示數(shù)據(jù),而非指令碼。/*函數(shù)名:lcdxiezimo()作用:將顯示信息字模的一個(gè)字節(jié)寫入DDRAM相應(yīng)的單元。入口參數(shù):形參zijie:存放待寫入DDRAM的一個(gè)字節(jié)的數(shù)據(jù)。出口參數(shù):無(wú)*/voidlcdxiezimo(ucharzijie){ P0=zijie; RW=0; RS=1; E=1; E=0;}【隨堂練習(xí)4-5】(1)根據(jù)寫顯示數(shù)據(jù)的函數(shù)定義,寫出聲明與調(diào)用語(yǔ)句。(2)建立源程序框架,并錄入上述函數(shù)。

4.4

12864常用函數(shù)

4.1設(shè)置頁(yè)列函數(shù)前面提到的設(shè)置列地址指令是針對(duì)DDRAM存儲(chǔ)器的,DDRAM只有64個(gè)列地址,而12864的顯示屏共有128列,在確定顯示信號(hào)在全屏中的顯示位置時(shí),需要由片選信號(hào)CS1、CS2來(lái)區(qū)分是左屏還是右屏。編寫設(shè)置頁(yè)列函數(shù)時(shí),通過(guò)調(diào)用設(shè)置頁(yè)地址函數(shù)和設(shè)置列地址函數(shù),并結(jié)合片選信號(hào)CS1、CS2,實(shí)現(xiàn)8個(gè)頁(yè)地址、128個(gè)列地址的設(shè)置。當(dāng)列地址<64時(shí),選中左屏。CS1?=?1,CS2?=?0。調(diào)用設(shè)置列地址函數(shù)時(shí),直接用列地址作為入口參數(shù)。當(dāng)列地址>64時(shí),選中右屏。CS1?=?0,CS2?=?1。調(diào)用設(shè)置列地址函數(shù)時(shí),列地址由于超過(guò)了DDRAM的地址范圍,列地址減去64(還原為0~63)后作為入口參數(shù)。/*函數(shù)名:lcdshezhiyelie()作用:設(shè)置12864顯示屏的顯示位置,包含頁(yè)地址和列地址。入口參數(shù):形參ye:存放顯示位置相應(yīng)的頁(yè)地址,頁(yè)地址從0~7。形參lie:存放顯示位置相應(yīng)的列地址,列地址從0~127。出口參數(shù):無(wú)*/

voidlcdshezhiyelie(ucharye,ucharlie){

lcdshezhiye(ye); if(lie<64) {CS1=1;CS2=0;lcdshezhilie(lie);} else {CS1=0;CS2=1;lcdshezhilie(lie-64);}4.2清屏函數(shù)12864在初始化或顯示多屏信息時(shí),需要將前一屏的顯示內(nèi)容清除,然后才能夠顯示新的一屏信息,這就需要編寫清屏函數(shù)。12864的顯示屏大小為8頁(yè)(64行)、每頁(yè)128列,采用雙重循環(huán)控制頁(yè)地址和列地址。外層循環(huán)8次設(shè)置頁(yè)地址,內(nèi)層循環(huán)128次控制列地址;在內(nèi)層的循環(huán)體中先設(shè)置頁(yè)、列地址,然后再發(fā)送滅的字模0。/*函數(shù)名:lcdqingping()作用:消除顯示屏上顯示的內(nèi)容,即顯示屏全暗。通過(guò)給DDRAM所有字節(jié)寫入0來(lái)實(shí)現(xiàn)。入口參數(shù):無(wú)出口參數(shù):無(wú)*/voidlcdqingping(void){ uchari,j; for(i=0;i<8;i++) { for(j=0;j<128;j++) { lcdshezhiyelie(i,j); lcdxiezimo(0);

}

}}4.3初始化函數(shù)/*函數(shù)名:lcdchushihua()作用:初始化12864。入口參數(shù):無(wú)出口參數(shù):無(wú)*/voidlcdchushihua(void){ RST=1; lcdguanxianshi(); lcdshezhiye(0); lcdshezhilie(0); lcdkaixianshi(); lcdqingping();}【隨堂練習(xí)4-6】(1)寫出常用函數(shù)的聲明與調(diào)用語(yǔ)句。(2)voidlcdshezhiyelie(ucharye,ucharlie)能否寫作voidlcdshezhiyelie(ucharlie,ucharye)。(3)錄入3個(gè)常用函數(shù)。

4.5

12864顯示固定信息

無(wú)字庫(kù)的12864可以很靈活、方便地顯示所需要的信息,構(gòu)成人機(jī)交互界面。固定信息一方面是指顯示的內(nèi)容固定,二是指信息的大小固定。例如,在12864的一屏上可以混合顯示圖片、漢字、字符等,它們的大小可以是相同的,也可以是不同的,這些信息雖然形式不同、大小不同,但是顯示原理是類同的。下面介紹標(biāo)準(zhǔn)的16×16點(diǎn)陣漢字的顯示方法,當(dāng)然也適用于相同大小的圖片。4.5.1信息分析如圖4-1所示,在12864上顯示“室內(nèi)溫度:”,字的大小為16×16,顯示位置也可自定。(1)計(jì)算出字模的大小。16?×?16點(diǎn)陣的字模?=?16?×?16/8?=?32B。(2)確定顯示信息在12864顯示屏上所占的面積。16?×?16點(diǎn)陣的行數(shù)為16行,占2頁(yè);每頁(yè)16列。12864顯示屏的大小為128?×?64,全部顯示16?×?16點(diǎn)陣的信息時(shí),一屏可以顯示64行(8頁(yè))/2頁(yè)?=?4行,128列/16?=?8列,共計(jì)4行?×?8列?=?32個(gè)。(3)確定顯示信息起始位置的地址?!笆覂?nèi)溫度:”位于顯示屏的第三行,第三行占用的是第4頁(yè)和第5頁(yè),因此起始頁(yè)地址為第4頁(yè);根據(jù)前一個(gè)顯示信息的起始地址及列數(shù),可計(jì)算出后一個(gè)的起始地址,“室內(nèi)溫度”4個(gè)字的起始地址為①室:第4頁(yè),第0列;②內(nèi):第4頁(yè),第16列;③溫:第4頁(yè),第32列;④度:第4頁(yè),第48列;⑤“:”:第4頁(yè),第64列。(4)取出顯示信息的字模并存放。字模選項(xiàng)見圖4-5,生成字模后,將所有字模粘貼到源程序中,并定義數(shù)組存放。例如:ucharcodeshi[32]; //數(shù)組聲明,源程序開始處ucharcodeshi[32]={ //數(shù)組賦初值,源程序最后0x00,0x00,0x60,0x38,0x10,0x10,0x50,0xD6,0x54,0x30,0x10,0x28,0x18,0x10,0x00,0x00,0x00,0x00,0x40,0x40,0x48,0x4A,0x4B,0x3E,0x2A,0x29,0x2B,0x20,0x20,0x00,0x00,0x00};/*"室",0*//*(16X16,楷體)*/4.5.2顯示16?×?16信息函數(shù)在12864顯示屏指定位置(如室內(nèi)溫度),顯示16?×?16點(diǎn)陣信息時(shí),除了存放字模的數(shù)組tab[]外,還需要起始頁(yè)地址qiye、起始列地址qilie兩個(gè)與顯示起始位置有關(guān)的入口參數(shù)。采用雙重循環(huán)控制頁(yè)、列地址。外層循環(huán)控制變量為i,控制2頁(yè);內(nèi)層循環(huán)控制變量為j,控制16列;變量i、j只是控制了點(diǎn)陣的大小,具體顯示在屏幕的什么位置則取決于形參qiye、qilie。在內(nèi)層的循環(huán)體中將16×16點(diǎn)陣的32個(gè)字節(jié)的字模發(fā)送至從起始地址開始的位置上。先調(diào)用lcdshezhiyelie(i+qiye,j+qilie);設(shè)置顯示位置,字模每個(gè)字節(jié)的頁(yè)地址為i+qiye,列址為j+qilie;再調(diào)用lcdxiezimo(tab[i*16+j]);發(fā)送字模,存放字模的一維數(shù)組有32B,下標(biāo)為0~31,而DDRAM中字節(jié)的地址需要頁(yè)地址和列地址方能定位,因此要將下標(biāo)0~31用頁(yè)地址的變量i和列地址的變量j表示,它們之間的關(guān)系為i*16+j。/*函數(shù)名:lcdxianshi16x16()作用:將16×16的點(diǎn)陣從指定的起始位置顯示。入口參數(shù):

tab[]:存放16*16點(diǎn)陣信息的字模。

qiye:存放顯示位置的起始頁(yè)地址。

qilie:存放顯示位置的起始列地址。出口參數(shù):無(wú)*/voidlcdxianshi16x16(uchartab[],ucharqiye,ucharqilie){ uchari,j; for(i=0;i<2;i++) { for(j=0;j<16;j++) { lcdshezhiyelie(i+qiye,j+qilie); lcdxiezimo(tab[i*16+j]);

}

}}【隨堂練習(xí)4-7】(1)理解并注釋顯示16×16信息函數(shù)。(2)寫出顯示16×16信息函數(shù)的聲明與調(diào)用。4.5.3源程序#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitCS1=P2^5;sbitCS2=P2^2;sbitRS=P2^0;sbitRW=P2^4;sbitE=P2^1;sbitRST=P2^6;ucharcodeshi[32];ucharcodenei[32];ucharcodewen[32];ucharcodedu[32];ucharcodemaohao[32];voidlcdkaixianshi(void);voidlcdguanxianshi(void);voidlcdshezhiye(ucharye);voidlcdshezhilie(ucharlie);voidlcdxiezimo(ucharzijie);voidlcdshezhiyelie(ucharye,ucharlie);voidlcdqingping(void);voidlcdchushihua(void);voidlcdxianshi16x16(uchartab[],ucharqiye,ucharqilie);main(){

lcdchushihua(); lcdxianshi16x16(shi,4,0); lcdxianshi16x16(nei,4,16); lcdxianshi16x16(wen,4,32);

lcdxianshi16x16(du,4,48); lcdxianshi16x16(maohao,4,66); while(1); }voidlcdxianshi16x16(uchartab[],ucharqiye,ucharqilie){ uchari,j; for(i=0;i<2;i++) { for(j=0;j<16;j++) { lcdshezhiyelie(i+qiye,j+qilie); lcdxiezimo(tab[i*16+j]); } }}voidlcdkaixianshi(void){ P0=0X3F; RW=0; RS=0; E=1; E=0;}voidlcdguanxianshi(void){ P0=0X3E; RW=0; RS=0; E=1; E=0;}voidlcdshezhiye(ucharye){ P0=0XB8|ye; RW=0; RS=0; E=1; E=0;}voidlcdshezhilie(ucharlie){ P0=0X40|lie; RW=0; RS=0; E=1; E=0;}voidlcdxiezimo(ucharzijie){ P0=zijie; RW=0; RS=1; E=1; E=0;}voidlcdshezhiyelie(ucharye,ucharlie){ lcdshezhiye(ye); if(lie<64) {CS1=1;CS2=0;lcdshezhilie(lie);} else {CS1=0;CS2=1;lcdshezhilie(lie-64);}}voidlcdqingping(void){ uchari,j; for(i=0;i<8;i++) { for(j=0;j<128;j++) { lcdshezhiyelie(i,j); lcdxiezimo(0); } }}void lcdchushihua(void){ RST=1; lcdguanxianshi(); lcdshezhiye(0); lcdshezhilie(0); lcdkaixianshi(); lcdqingping();}ucharcodeshi[32]={/*"室",0*//*(16X16,楷體)*/0x00,0x00,0x60,0x38,0x10,0x10,0x50,0xD6,0x54,0x30,0x10,0x28,0x18,0x10,0x00,0x00,0x00,0x00,0x40,0x40,0x48,0x4A,0x4B,0x3E,0x2A,0x29,0x2B,0x20,0x20,0x00,0x00,0x00ucharcodenei[32]={/*"內(nèi)",1*//*(16X16,楷體)*/0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0xFE,0xA0,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x02,0x01,0x00,0x00,0x01,0x42,0x40,0x7F,0x00,0x00,0x00};ucharcodewen[32]={/*"溫",2*//*(16X16,楷體)*/0x00,0x00,0x40,0x08,0x18,0x00,0x08,0xF8,0xA8,0x68,0x68,0x74,0x18,0x00,0x00,0x00,0x00,0x00,0x30,0x0E,0x22,0x20,0x3E,0x22,0x1E,0x12,0x2E,0x22,0x1F,0x12,0x00,0x00};ucharcodedu[32]={/*"度",3*//*(16X16,楷體)*/0x00,0x00,0x00,0x00,0xF0,0x90,0xB0,0xF0,0x56,0xD8,0x28,0x48,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x0C,0x43,0x40,0x40,0x2D,0x13,0x1E,0x22,0x60,0x40,0x40,0x40,0x00};ucharcodemaohao[32]={ /*":",4*//*(16X16,楷體)*/0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};【隨堂練習(xí)4-8】(1)12864的數(shù)據(jù)口DJ1與P0用并行線相連,控制口DJ2則連至P2。然后編輯并編譯上述源程序后,下載觀察效果。(2)顯示自己的姓名,位置如圖4-1所示。4.5.4練習(xí)在12864上顯示自己的班級(jí),如圖4-1所示。顯示班級(jí)時(shí),既有16×16點(diǎn)陣的漢字,也需要0~9的字符,字符標(biāo)準(zhǔn)的點(diǎn)陣大小為16×8。一個(gè)16×16點(diǎn)陣的漢字相當(dāng)于2個(gè)16×8的字符。(1)計(jì)算出字模的大小。16×8點(diǎn)陣的字模=16×8/8=16B。(2)確定顯示信息在12864顯示屏上所占的面積。16×8點(diǎn)陣的行數(shù)為16行,占2頁(yè);每頁(yè)8列。(3)確定顯示信息起始位置的地址。以“電氣13.2班”為例?!半姎?3.2班”位于顯示屏的第一行,第一行占用的是第0頁(yè)和第1頁(yè),因此起始頁(yè)地址為第0頁(yè);第0列開始先顯示“班級(jí):”3個(gè)16×16點(diǎn)陣,共用48列,“電”字只能從第48列開始顯示,結(jié)合顯示信息的列數(shù),可計(jì)算出“電氣13.2班”的起始地址為:電:第0頁(yè),第48列氣:第0頁(yè),第64列1:第0頁(yè),第80列(4)取出顯示信息的字模并存放。注意,“電”和“.”的漢語(yǔ)拼音相同,不能重名。ucharcodedian[32]={……};/*"電",0*//*(16X16,楷體)*/ucharcodexiaoshudian[16]={……};/*".",1*//*(8X16,楷體)*/3:第0頁(yè),第88列“.”:第0頁(yè),第96列2:第0頁(yè),第104列班:第0頁(yè),第112列(5)編寫顯示該信息的函數(shù)。/*函數(shù)名:lcdxianshi16x8()作用:16×8的點(diǎn)陣從指定的起始位置開始顯示。入口參數(shù):tab[]:存放16×8點(diǎn)陣信息的字模。qiye:存放顯示位置的起始頁(yè)地址。qilie:存放顯示位置的起始列地址。出口參數(shù):無(wú)*/voidlcdxianshi16x8(uchartab[],ucharqiye,ucharqilie){uchari,j;for(i=0;i<2;i++){

for(j=0;j<8;j++) { lcdshezhiyelie(i+ye,j+lie); lcdxiezimo(tab[i*8+j]);

}

}}(6)源程序#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitCS1=P2^5; ...... sbitRST=P2^6;ucharcodeshi[32]; ...... ucharcodemaohao[32];ucharcodeban[32];ucharcodeji[32];ucharcodedian[32];ucharcodeqi[32];ucharcodeyi[16];ucharcodesan[16];ucharcodexiaoshudian[16];ucharcodeer[16]; voidlcdkaixianshi(void);voidlcdguanxianshi(void);voidlcdshezhiye(ucharye);voidlcdshezhilie(ucharlie);voidlcdxiezimo(ucharzijie);voidlcdshezhiyelie(ucharye,ucharlie);voidlcdqingping(void);voidlcdchushihua(void);voidlcdxianshi16x16(uchartab[],ucharqiye,ucharqilie);voidlcdxianshi16x8(uchartab[],ucharqiye,ucharqilie);

main(){ lcdchushihua(); lcdxianshi16x16(ban,0,0); lcdxianshi16x16(ji,0,16); lcdxianshi16x16(maohao,0,32); lcdxianshi16x16(dian,0,48); lcdxianshi16x16(qi,0,64); lcdxianshi16x8(yi,0,80); lcdxianshi16x8(san,0,88); lcdxianshi16x8(xiaoshudian,0,96); lcdxianshi16x8(er,0,104); lcdxianshi16x16(ban,0,112); lcdxianshi16x16(shi,4,2); lcdxianshi16x16(nei,4,18); lcdxianshi16x16(wen,4,34); lcdxianshi16x16(du,4,50); lcdxianshi16x16(maohao,4,66); while(1); }voidlcdxianshi16x8(uchartab[],ucharqiye,ucharqilie){ uchari,j; for(i=0;i<2;i++) { for(j=0;j<8;j++) { lcdshezhiyelie(i+qiye,j+qilie); lcdxiezimo(tab[i*8+j]); } }}voidlcdxianshi16x16(uchartab[],ucharqiye,ucharqilie){ uchari,j; for(i=0;i<2;i++) { for(j=0;j<16;j++) { lcdshezhiyelie(i+qiye,j+qilie); lcdxiezimo(tab[i*16+j]); } }}voidlcdkaixianshi(void){ ....... }voidlcdguanxianshi(void){ ....... }voidlcdshezhiye(ucharye){ ....... }voidlcdshezhilie(ucharlie){ ....... }voidlcdxiezimo(ucharzijie){ ....... }voidlcdshezhiyelie(ucharye,ucharlie){ ....... }voidlcdqingping(void){ ....... }void lcdchushihua(void){ ....... }ucharcodeshi[32]={.......}; ucharcodenei[32]={.......};ucharcodewen[32]={......};ucharcodedu[32]={.......};ucharcodemaohao[32]={.......};ucharcodeban[32]={......};ucharcodeji[32]={.......};ucharcodedian[32]={.......};ucharcodeqi[32]={.......};ucharcodeyi[16]={.......};ucharcodesan[16]={......};ucharcodexiaoshudian[16]={......};ucharcodeer[16]={.......};【隨堂練習(xí)4-9】(1)編輯并編譯上述源程序后,下載,觀察效果。(2)顯示滿幅圖片。(3)顯示一個(gè)32×32的漢字,位置自定。

4.6

12864顯示變量的值

4.6.1二維數(shù)組前面顯示班級(jí)名稱如3班時(shí),雖然用到了數(shù)字0~9,但是班級(jí)名稱中的數(shù)字是常量,是固定不變的,如果顯示變量wendu的值,它的取值范圍是0~99,就需要用到二維數(shù)組。二維數(shù)組與一維數(shù)組的區(qū)別在于,一維數(shù)組只有一個(gè)下標(biāo)(元素個(gè)數(shù)),用于存儲(chǔ)表格中的一列數(shù)據(jù),例如,“uchara1[3];”;而二維數(shù)組有兩個(gè)下標(biāo),也稱為矩陣,一個(gè)下標(biāo)表示行數(shù),另一個(gè)下標(biāo)表示列數(shù),可用于存儲(chǔ)表格中的所有數(shù)據(jù)。1.二維數(shù)組的定義二維數(shù)組定義的一般形式為數(shù)據(jù)類型 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];上式中,常量表達(dá)式1表示二維數(shù)組的行數(shù);常量表達(dá)式2表示二維數(shù)組的列數(shù)。2.二維數(shù)組的存儲(chǔ)用行列表格的形式表示二維數(shù)組,有助于理解邏輯上的概念,而存儲(chǔ)器是一維的、線性的,各元素在存儲(chǔ)器中是連續(xù)存放的。在C語(yǔ)言中,二維數(shù)組在存儲(chǔ)器中是按行存放的,且所有元素占用一片連續(xù)的存儲(chǔ)單元。存放順序是先存放第1行的所有元素,接著再存放第2行的元素。數(shù)組a[3][4]在存儲(chǔ)器中的存放順序如表4-7所示。假如數(shù)組a存放在從1000字節(jié)開始的連續(xù)單元中,一個(gè)元素占一個(gè)字節(jié),1000~1003字節(jié)中存放第0行中的4個(gè)元素,1004~1007字節(jié)中存放第1行中的4個(gè)元素,以此類推。二維數(shù)組在使用中需要注意:(1)數(shù)組中的所有元素在存儲(chǔ)器中是連續(xù)存放的。(2)數(shù)組名代替了元素存放區(qū)域的首地址。(3)二維數(shù)組可以看作是一種特殊的一維數(shù)組,它的元素也是一個(gè)一維數(shù)組。例如,二維數(shù)組a[3][4]看作是一維數(shù)組時(shí),只有3個(gè)元素,分別為a[0],a[1],a[2]這三個(gè)元素分別代表了三行的行地址,它們也是由4個(gè)元素組成的一維數(shù)組,如表4-8所示。二維數(shù)組的每一行就是一個(gè)一維數(shù)組,每個(gè)一維數(shù)組的數(shù)組名就是該行的首地址。3.二維數(shù)組的初始化二維數(shù)組的初始化分為全部初始化和部分初始化。這里只介紹全部初始化。二維數(shù)組全部初始化可以按行分段賦初值,也可以按行連續(xù)賦初值。根據(jù)表4-9的內(nèi)容完成數(shù)組a[3][4]的初始化。(1)按行分段賦初值。uchara[3][4]={{78,86,75,85},{86,68,89,79},{90,88,83,82},};按行分段賦初值是將表4-9中第1行張同學(xué)的成績(jī)用第1對(duì)“{}”括起來(lái),第2行李同學(xué)的成績(jī)用第2對(duì)“{}”括起來(lái),…,以此類推,在程序中分行書寫時(shí),相當(dāng)于一個(gè)沒有表格線的表格,非常直觀。(2)按行連續(xù)賦初值。uchara[3][4]={78,86,75,85,86,68,89,79,90,88,83,82};按行連續(xù)賦初值是將表4-9中三位同學(xué)的所有成績(jī)按行連續(xù)書寫,沒有了每一行的花括號(hào),在數(shù)據(jù)多時(shí),會(huì)連成一片,容易出錯(cuò)。在對(duì)二維數(shù)組全部賦初值時(shí),最好使用按行分段賦初值的方式。4.二維數(shù)組元素的引用引用二維數(shù)組的元素有以下兩種形式。(1)引用一個(gè)元素。引用二維數(shù)組中的一個(gè)元素時(shí),需要給出行、列下標(biāo),引用形式為數(shù)組名[下標(biāo)][下標(biāo)]引用時(shí),要注意:下標(biāo)應(yīng)是整型表達(dá)式;數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值;下標(biāo)不能超范圍。均為正確的引用。(2)引用一行元素(一維數(shù)組)。在需要時(shí),也可一次引用二維數(shù)組中的一行元素,引用形式為數(shù)組名[行下標(biāo)]二維數(shù)組的每行元素相當(dāng)于一個(gè)一維數(shù)組,一維數(shù)組的名稱代表了該行數(shù)據(jù)的首地址?!倦S堂練習(xí)4-10】建立數(shù)據(jù)表,存放“一~七”的字模;并取出“六”的字模。4.6.2顯示變量的值在圖4-1所示效果圖“室內(nèi)溫度:”后顯示變量wendu的值,初值為26。(1)取模,定義數(shù)組存放0~9的字模。ucharcodeshuzi[10][16]; //數(shù)組定義,寫在開始處ucharcodeshuzi[10][16]={....}; //數(shù)組賦初值,寫在最后(2)編程。定義變量wendu并賦初值26;在主函數(shù)中調(diào)用函數(shù)lcdxianshi16x8(),分別顯示wendu的十位與個(gè)位。lcdxianshi16x8(shuzi[wendu/10],4,72); //顯示十位lcdxianshi16x8(shuzi[wendu%10],4,79); //顯示個(gè)位源程序

#include<reg51.h>

#defineuintunsignedint

#defineucharunsignedchar

sbitCS1=P2^5; ...... sbitRST=P2^6;

ucharcodeshi[32]; ...... ucharcodeer[16];

ucharcodeshuzi[10][16];

voidlcdkaixianshi(void);

......

voidlcdxianshi16x16(uchartab[],ucharqiye,ucharqilie);

voidlcdxianshi16x8(uchartab[],ucharqiye,ucharqilie);

main()

{

ucharwendu=26;

lcdchushihua();

lcdxianshi16x16(ban,0,0);

lcdxianshi16x16(ji,0,16); lcdxianshi16x16(maohao,0,32); lcdxianshi16x16(dian,0,48); lcdxianshi16x16(qi,0,64); lcdxianshi16x8(yi,0,80); lcdxianshi16x8(san,0,88); lcdxianshi16x8(xiaoshudian,0,96); lcdxianshi16x8(er,0,104); lcdxianshi16x16(ban,0,112); lcdxianshi16x16(shi,4,2); lcdxianshi16x16(nei,4,18); lcdxianshi16x16(wen,4,34

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論