基于單片機(jī)的LCD液晶顯示器控制原理系統(tǒng)設(shè)計(jì)-當(dāng)文網(wǎng)提供_第1頁(yè)
基于單片機(jī)的LCD液晶顯示器控制原理系統(tǒng)設(shè)計(jì)-當(dāng)文網(wǎng)提供_第2頁(yè)
基于單片機(jī)的LCD液晶顯示器控制原理系統(tǒng)設(shè)計(jì)-當(dāng)文網(wǎng)提供_第3頁(yè)
基于單片機(jī)的LCD液晶顯示器控制原理系統(tǒng)設(shè)計(jì)-當(dāng)文網(wǎng)提供_第4頁(yè)
基于單片機(jī)的LCD液晶顯示器控制原理系統(tǒng)設(shè)計(jì)-當(dāng)文網(wǎng)提供_第5頁(yè)
已閱讀5頁(yè),還剩69頁(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)介

1、 PAGE 74 摘 要本文圍繞設(shè)計(jì)以單片機(jī)作為L(zhǎng)CD液晶顯示系統(tǒng)控制器為主線,基于單片機(jī)8051,采用的液晶顯示控制器的芯片是SED1520,主要實(shí)現(xiàn)中文顯示、滾屏以及左右移動(dòng)功能。同時(shí)也對(duì)部分芯片和外圍電路進(jìn)行了介紹和設(shè)計(jì),并附以系統(tǒng)結(jié)構(gòu)框圖加以說(shuō)明,著重介紹了本系統(tǒng)應(yīng)用的各硬件接口技術(shù)和各個(gè)接口模塊的功能及工作過(guò)程,并詳細(xì)闡述了程序的各個(gè)模塊。本系統(tǒng)是以單片機(jī)的匯編語(yǔ)言來(lái)進(jìn)行軟件設(shè)計(jì),指令的執(zhí)行速度快,節(jié)省存儲(chǔ)空間。為了便于擴(kuò)展和更改,軟件的設(shè)計(jì)采用模塊化結(jié)構(gòu),使程序設(shè)計(jì)的邏輯關(guān)系更加簡(jiǎn)潔明了。使硬件在軟件的控制下協(xié)調(diào)運(yùn)作。其次闡述了部分程序的流程圖和實(shí)現(xiàn)過(guò)程。本文撰寫的主導(dǎo)思想是軟、硬

2、件相結(jié)合,以硬件為基礎(chǔ),來(lái)進(jìn)行各功能模塊的編寫。最后對(duì)我所開(kāi)發(fā)的用單片機(jī)實(shí)現(xiàn)LCD液晶顯示器控制原理的設(shè)計(jì)思想和軟、硬件調(diào)試作了詳細(xì)的論述。關(guān)鍵字:?jiǎn)纹瑱C(jī)、液晶顯示、8051、SED1520、 目 錄 TOC o 1-3 h z u HYPERLINK l _Toc292720110 1 緒 論 PAGEREF _Toc292720110 h 2 HYPERLINK l _Toc292720111 1.1 單片機(jī)液晶顯示系統(tǒng)設(shè)計(jì)課題背景 PAGEREF _Toc292720111 h 2 HYPERLINK l _Toc292720112 1.2 開(kāi)發(fā)單片機(jī)液晶顯示系統(tǒng)的意義 PAGEREF

3、_Toc292720112 h 2 HYPERLINK l _Toc292720115 1.3 課題完成的功能 PAGEREF _Toc292720115 h 3 HYPERLINK l _Toc292720116 2 單片機(jī)與C8051F020單片機(jī)實(shí)驗(yàn)系統(tǒng) PAGEREF _Toc292720116 h 4 HYPERLINK l _Toc292720117 2.1 單片機(jī)技術(shù)的發(fā)展特點(diǎn) PAGEREF _Toc292720117 h 4 HYPERLINK l _Toc292720118 2.2 C8051F020單片機(jī)實(shí)驗(yàn)系統(tǒng) PAGEREF _Toc292720118 h 5 HYP

4、ERLINK l _Toc292720119 2.3 CIP-51CPU PAGEREF _Toc292720119 h 7 HYPERLINK l _Toc292720127 3 液晶顯示控制器KS0108 PAGEREF _Toc292720127 h 10 HYPERLINK l _Toc292720128 3.1 KS0108的特點(diǎn) PAGEREF _Toc292720128 h 10 HYPERLINK l _Toc292720129 3.2 KS0108管腳 PAGEREF _Toc292720129 h 10 HYPERLINK l _Toc292720130 3.3 KS010

5、8受控引腳 PAGEREF _Toc292720130 h 11 HYPERLINK l _Toc292720131 3.4 KS0108的時(shí)序4 PAGEREF _Toc292720131 h 11 HYPERLINK l _Toc292720132 3.4.1 KS0108與68系列微處理器直接接口的時(shí)序 PAGEREF _Toc292720132 h 11 HYPERLINK l _Toc292720133 3.4.2 復(fù)位時(shí)序 PAGEREF _Toc292720133 h 12 HYPERLINK l _Toc292720134 3.5 KS0108顯示RAM地址結(jié)構(gòu) PAGEREF

6、 _Toc292720134 h 13 HYPERLINK l _Toc292720135 3.6 KS0108指令系統(tǒng)4 PAGEREF _Toc292720135 h 13 HYPERLINK l _Toc292720136 4 圖形動(dòng)態(tài)顯示 PAGEREF _Toc292720136 h 15 HYPERLINK l _Toc292720137 4.1 圖形點(diǎn)陣式液晶顯示控制原理 PAGEREF _Toc292720137 h 15 HYPERLINK l _Toc292720138 4.2 液晶顯示模塊外部接口 PAGEREF _Toc292720138 h 15 HYPERLINK

7、l _Toc292720139 4.3 圖形點(diǎn)陣液晶顯示編碼規(guī)則 PAGEREF _Toc292720139 h 17 HYPERLINK l _Toc292720140 4.3.1漢字編碼規(guī)則 PAGEREF _Toc292720140 h 17 HYPERLINK l _Toc292720141 4.3.2 圖形編碼規(guī)則 PAGEREF _Toc292720141 h 19 HYPERLINK l _Toc292720142 4.4 程序流程 PAGEREF _Toc292720142 h 19 HYPERLINK l _Toc292720143 4.5 功能實(shí)現(xiàn) PAGEREF _Toc

8、292720143 h 20 HYPERLINK l _Toc292720144 5 系統(tǒng)實(shí)驗(yàn)仿真 PAGEREF _Toc292720144 h 23 HYPERLINK l _Toc292720145 5.1 平臺(tái)及操作 PAGEREF _Toc292720145 h 23 HYPERLINK l _Toc292720146 5.2 仿真及結(jié)果 PAGEREF _Toc292720146 h 23 HYPERLINK l _Toc292720147 參考文獻(xiàn) PAGEREF _Toc292720147 h 25 HYPERLINK l _Toc292720148 致 謝 PAGEREF _

9、Toc292720148 h 261 緒 論1.1 單片機(jī)液晶顯示系統(tǒng)設(shè)計(jì)課題背景單片機(jī)液晶顯示系統(tǒng)主要是指單片機(jī)以及由單片機(jī)驅(qū)動(dòng)的點(diǎn)陣式液晶顯示屏所組成的一個(gè)顯示系統(tǒng)。液晶顯示器與CRT(cathode-ray tube,陰極射線管)、LED (light-emitting diode,發(fā)光二級(jí)管)或等離子顯示器相比是一種低功耗的平面顯示器件。它在車內(nèi)廣告、在型智能廣告、可視電話、儀表盤、空調(diào)、洗衣機(jī)和其它低功耗電子產(chǎn)品中得到廣泛應(yīng)用。老式七段LCD(Liquid Crystal Display 液晶顯示屏)顯示的字符數(shù)量有限,只能用于簡(jiǎn)單顯示,而對(duì)于比較復(fù)雜的字符、圖形無(wú)法表達(dá)。然而在現(xiàn)代

10、工業(yè)控制和一些智能化儀器儀表中,越來(lái)越多的場(chǎng)所需要用點(diǎn)陣圖形顯示器顯示漢字。由于物探儀器的多功能化、智能化、并且普遍采用人機(jī)對(duì)話的交互方式,需要能夠顯示更豐富信息和通用性較強(qiáng)的顯示器,便于開(kāi)發(fā)和應(yīng)用,并要求其體積小、重量輕、功耗小。圖形點(diǎn)陣式LCD不僅可以顯示字符、數(shù)字,還可以顯示各種圖形、曲線及漢字,并且可以實(shí)現(xiàn)屏幕畫面滾動(dòng)、分區(qū)開(kāi)窗口、反轉(zhuǎn)、閃爍、位操作等功能,可以顯示用戶自定義的任意符號(hào)以及曲線、圖形等,是信息處理、信息輸出的重要手段之一,具有廣泛的應(yīng)用前景。1.2 開(kāi)發(fā)單片機(jī)液晶顯示系統(tǒng)的意義社會(huì)意義:液晶顯示器(LCD)具有功耗低、體積小、重量輕、超薄等許多其它顯示器無(wú)法相比的優(yōu)點(diǎn)。

11、近幾年來(lái)被廣泛用于單片機(jī)控制的智能儀器、儀表和低功耗電子產(chǎn)品中。液晶顯示器分為字符型LCD顯示模塊和點(diǎn)陣型LCD顯示模塊。字符型LCD是一種用57點(diǎn)陣圖形來(lái)顯示字符的液晶顯示器。點(diǎn)陣型液晶可顯示用戶自定義的任意符號(hào)和圖形,并可卷動(dòng)顯示,它作為便攜式單片機(jī)系統(tǒng)人機(jī)交互界面的重要組成部分被廣泛應(yīng)用于實(shí)時(shí)檢測(cè)和顯示的儀器儀表中。支持漢字顯示的點(diǎn)陣型液晶在現(xiàn)代單片機(jī)應(yīng)用系統(tǒng)中是一種十分常用的顯示設(shè)備,漢字BP機(jī)、手機(jī)上的顯示屏就是點(diǎn)陣型LCD。點(diǎn)陣型LCD是現(xiàn)代單片機(jī)應(yīng)用系統(tǒng)中最常用的人機(jī)交互界面之一?,F(xiàn)實(shí)意義:我選擇的單片機(jī)液晶顯示系統(tǒng)的開(kāi)發(fā),是基于KS0108液晶顯示控制器,在C8051F020單

12、片機(jī)實(shí)驗(yàn)系統(tǒng)上實(shí)現(xiàn)。KS0108是點(diǎn)陣型液晶顯示控制器,C8051F020單片機(jī)是美國(guó)Silabs公司推出的完全集成的混合信號(hào)系統(tǒng)芯片(SOC)。利用單片機(jī)控制液晶顯示系統(tǒng)的原理,完成單片機(jī)液晶顯示系統(tǒng)的設(shè)計(jì),我希望能夠觸類旁通,靈活應(yīng)用其他型號(hào)的液晶顯示控制器。將來(lái)如果有機(jī)會(huì)從事這方面的工作,要運(yùn)用的液晶顯示控制器不一定是KS0108,但這次畢業(yè)設(shè)計(jì)中學(xué)到的東西為此打下了良好的基礎(chǔ),相信自己能做好這方面的工作。1.3 課題完成的功能所選的單片機(jī)液晶顯示系統(tǒng)設(shè)計(jì),是在C8051F020系統(tǒng)實(shí)驗(yàn)設(shè)備上實(shí)現(xiàn)的。C8051F020中有內(nèi)藏KS0108控制器的液晶模塊CGM12864B。KS0108,

13、12864個(gè)點(diǎn)陣,與行控制器KS0107配合使用,組成液晶顯示驅(qū)動(dòng)控制系統(tǒng)。我最主要是用KS0108來(lái)設(shè)計(jì)圖形動(dòng)態(tài)顯示。在顯示屏上的顯示點(diǎn)是以字節(jié)數(shù)和位數(shù)為顯示單元的,單元內(nèi)為“1”的位在屏幕上反應(yīng)是亮點(diǎn),為“0”的位不亮。在字節(jié)中能夠顯示的位數(shù)可編程設(shè)置,范圍是116。如果小于等于8位,則用一個(gè)字節(jié),每個(gè)字節(jié)的低位不起顯示作用。例如,設(shè)置顯示單元為6,每個(gè)字節(jié)顯示6位,那么屏幕上的顯示單元為16點(diǎn);如果大于8位則用兩個(gè)字節(jié),低字節(jié)的低位不起顯示作用。屏幕上同一行的顯示單元從左到右地排列,對(duì)應(yīng)著顯示內(nèi)存中的地址是從高到低,同一列中的顯示單元從上到下,對(duì)應(yīng)顯示內(nèi)存中的地址相差一定的值,稱作行地址

14、間隔,可用程序設(shè)置。顯示內(nèi)存(RAM,Random Access Memory隨機(jī)存儲(chǔ)器)中的地址與屏幕上的顯示位置一一對(duì)應(yīng)。在液晶顯示屏上顯示圖形實(shí)際上是將對(duì)應(yīng)的圖形顯示數(shù)據(jù)寫入顯示RAM的相應(yīng)位置。顯示圖形首先需要將圖形轉(zhuǎn)換為圖形字模,然后根據(jù)該圖形的顯示位置將圖形字模寫入對(duì)應(yīng)的顯示RAM區(qū)地址。在圖形顯示過(guò)程中,按列掃描,顯示完一頁(yè)后,要送一個(gè)頁(yè)面地址加1指令,讓單片機(jī)將數(shù)據(jù)傳送到顯示RAM的下一頁(yè)。除了實(shí)現(xiàn)圖形簡(jiǎn)單的整屏顯示外,根據(jù)單片機(jī)編程控制靈活的特點(diǎn),還可以實(shí)現(xiàn)圖形的左右或上下滾動(dòng)。實(shí)現(xiàn)圖形左右滾屏的基本思想是讓后一列的數(shù)據(jù)寫住前一列的顯示RAM,直至整屏都往右移一列;實(shí)現(xiàn)上下滾

15、屏的基本思想是每顯示完整屏數(shù)據(jù)后,顯示起始行地址加1,再顯示原整屏數(shù)據(jù),這樣就實(shí)現(xiàn)了上下滾屏的效果。2 單片機(jī)與C8051F020單片機(jī)實(shí)驗(yàn)系統(tǒng)2.1 單片機(jī)技術(shù)的發(fā)展特點(diǎn)注釋:李秉操.單片機(jī)接口技術(shù)及其在工業(yè)控制中的應(yīng)用M.陜西:陜西電子編輯部,1991.3:314-336.自單片機(jī)出現(xiàn)至今,單片機(jī)技術(shù)已走過(guò)了近20年的發(fā)展路程??v觀20年來(lái)單片機(jī)發(fā)展里程可以看出,單片機(jī)技術(shù)的發(fā)展以微處理器(MPU,Microprocessor Unit)技術(shù)及超大規(guī)模集成電路技術(shù)的發(fā)展為先導(dǎo),以廣泛的應(yīng)用領(lǐng)域拉動(dòng),表現(xiàn)出比微處理器更具個(gè)性的發(fā)展趨勢(shì)。 = 1 * GB2 單片機(jī)壽命長(zhǎng) 一般說(shuō)來(lái),單片機(jī)開(kāi)發(fā)

16、的產(chǎn)品可以穩(wěn)定可靠地工作10年、20年;另外,與微處理器相比,單片機(jī)的長(zhǎng)壽命表現(xiàn)在它不會(huì)像386、486、586等MPU一樣,隨著半導(dǎo)體技術(shù)的飛速發(fā)展,更新?lián)Q代的速度越來(lái)越快,很短的時(shí)間內(nèi)就被淘汰出局。傳統(tǒng)的單片機(jī)如68HC05、8051等年齡已有十幾年的歷史,但產(chǎn)量仍是上升的,這是因?yàn)樗鼈冊(cè)谄鋵?duì)相應(yīng)應(yīng)用領(lǐng)域的適應(yīng)性強(qiáng),并且與之兼容的I/O功能模塊的擴(kuò)展接口技術(shù)也層出不窮。 = 2 * GB2 8位、16位與32位單片機(jī)共同發(fā)展 這是單片機(jī)技術(shù)發(fā)展的另一個(gè)動(dòng)向。長(zhǎng)期以來(lái),單片機(jī)技術(shù)的發(fā)展是以8位機(jī)為主的。隨著移動(dòng)通信、網(wǎng)絡(luò)技術(shù)、多媒體技術(shù)等高科技產(chǎn)品進(jìn)入家庭,32位單片機(jī)應(yīng)用得到了長(zhǎng)足的發(fā)展,

17、而16位單片機(jī)的發(fā)展無(wú)論從品種和產(chǎn)量方面,近年來(lái)也有較大幅度的增長(zhǎng)。 = 3 * GB2 單片機(jī)的速度越來(lái)越快 MPU發(fā)展中表現(xiàn)出來(lái)的速度越來(lái)越快是以時(shí)鐘頻率越來(lái)越高為標(biāo)志的。而單片機(jī)則有所不同,為提高單片機(jī)抗干擾能力,降低噪聲,降低時(shí)鐘頻率而不犧牲運(yùn)算速度是單片機(jī)技術(shù)發(fā)展之追求。一些8051單片機(jī)兼容廠商改善了單片機(jī)的內(nèi)部時(shí)序,在不提高時(shí)鐘頻率的條件下,使運(yùn)算速度提高了許多。 = 4 * GB2 低電壓與低功耗 自80年代中期以來(lái),NMOS工藝單片機(jī)逐漸被CMOS(互補(bǔ)金屬氧化物半導(dǎo)體)工藝所代替,功耗得以大幅度下降,隨著超大規(guī)模集成電路技術(shù)由3m工藝發(fā)展1.5、1.2、0.8、0.5、0.

18、35進(jìn)而實(shí)現(xiàn)了0.2m工藝,全靜態(tài)設(shè)計(jì)使時(shí)鐘頻率從直流電到數(shù)十MHz任選,都使功耗不斷下降。幾乎所有的單片機(jī)都有Wait、Stop等省電運(yùn)行方式。允許使用的電源電壓范圍也越來(lái)越寬。一般單片機(jī)都能在36V范圍內(nèi)工作,對(duì)電池供電的單片機(jī)不再需要對(duì)電源采取穩(wěn)壓措施。低電壓供電的單片機(jī)電源下限已由2.7V降至2.2V、1.8V、0.9V供電的單片機(jī)已經(jīng)問(wèn)世。 = 5 * GB2 低噪聲與高可靠性技術(shù) 為提高單片機(jī)系統(tǒng)的抗電磁干擾能力,使產(chǎn)品能適應(yīng)惡劣的工作環(huán)境,滿足電磁兼容性方面更高標(biāo)準(zhǔn)的要求,各單片機(jī)商家在單片機(jī)內(nèi)部電路中采取了一些新的技術(shù)措施。 = 6 * GB2 OTP與掩膜 OTP是一次性寫入

19、的單片機(jī)。過(guò)去認(rèn)為一個(gè)單片機(jī)產(chǎn)品的成熟是以投產(chǎn)掩膜型單片機(jī)為標(biāo)志的。由于掩膜需要一定的生產(chǎn)周期,而OTP型單片機(jī)價(jià)格不斷下降,使得近年來(lái)直接使用OTP完成最終產(chǎn)品制造更為流行。它較之掩膜具有生產(chǎn)周期短、風(fēng)險(xiǎn)小的特點(diǎn)。近年來(lái),OTP型單片機(jī)需量大幅度上揚(yáng),為適應(yīng)這種需求許多單片機(jī)都采用了在片編程技術(shù)(In system Programming)。未編程的OTP芯片可采用裸片Bonding技術(shù)或表面貼裝技術(shù),先焊在印刷板上,然后通過(guò)單片機(jī)上的編程線、串行數(shù)據(jù)、時(shí)鐘線等對(duì)單片機(jī)編程,解決了批量寫OTP芯片時(shí)容易出現(xiàn)的芯片與寫入器接觸不好的問(wèn)題,使OTP的裸片得以廣泛應(yīng)用,降低了產(chǎn)品的成本。編程線與I

20、/O線共用,不增加單片機(jī)的額外引腳。而一些生產(chǎn)廠商推出的單片機(jī)不再有掩膜型,全部為有ISP功能的OTP。 = 7 * GB2 MTP向OTP挑戰(zhàn) MTP是可多次編程的意思。一些單片機(jī)廠商以MTP的性能、OTP的價(jià)位推出他們的單片機(jī),如ATMEL AVR單片機(jī),片內(nèi)采用FLASH,可多次編程。華幫公司生產(chǎn)的8051兼容的單片機(jī)也采用了MTP性能,OTP的價(jià)位。這些單片機(jī)都使用了ISP技術(shù),等安裝到印刷板線路板上以后再下載程序。2.2 C8051F020單片機(jī)實(shí)驗(yàn)系統(tǒng)潘琢金, 施國(guó)君編著. C8051F高速Soc單片機(jī)原理及應(yīng)用M.北京:北京航空航天大學(xué)出版社,2005.C8051F020器件是完

21、全集成的混合信號(hào)系統(tǒng)級(jí)MCU(微程序控制器)芯片,具有64個(gè)數(shù)字I/O引腳。下面列出了一些主要特性:高速、流水線結(jié)構(gòu)的8051兼容的CIP-51內(nèi)核(可達(dá)25MIPS(Million Instructions Per Second, 每秒百萬(wàn)條指令))全速、非侵入式的在系統(tǒng)調(diào)試接口(片內(nèi))真正12位、100ksps的8通道ADC,帶PGA和模擬多路開(kāi)關(guān)兩個(gè)12位DAC,可編程更新時(shí)序64K字節(jié)可在系統(tǒng)編程的FLASH存儲(chǔ)器4352(4096+256)字節(jié)的片內(nèi)RAM可尋址64K字節(jié)地址空間的外部數(shù)據(jù)存儲(chǔ)器接口硬件實(shí)現(xiàn)的SPI、SMBus/I2C和兩個(gè)UART串行接口5個(gè)通用的16位定時(shí)器具有5

22、個(gè)捕捉/比較模塊的可編程計(jì)數(shù)器/定時(shí)器陣列片內(nèi)看門狗定時(shí)器、VDD監(jiān)視器和溫度傳感器具有片內(nèi)VDD監(jiān)視器、看門狗定時(shí)器和時(shí)鐘振蕩器的C8051F020是真正能獨(dú)立工作的片上系統(tǒng)。所有模擬和數(shù)字外設(shè)均可由用戶固件配置為使能或禁止。FLASH存儲(chǔ)器還具有在系統(tǒng)重新編程能力,可用于非易失性數(shù)據(jù)存儲(chǔ),并允許現(xiàn)場(chǎng)更新8051固件。片內(nèi)FTAG調(diào)試電路允許使用安裝在最終應(yīng)用系統(tǒng)上的產(chǎn)品MCU進(jìn)行非侵入式(不占用片內(nèi)資源)、全速、在系統(tǒng)調(diào)試.該調(diào)試系統(tǒng)支持觀察和修改存儲(chǔ)器和寄存器,支持?jǐn)帱c(diǎn)、觀察點(diǎn)、單步及運(yùn)行和停機(jī)命令。在使用JTAG調(diào)試時(shí),所有的模擬和數(shù)字外設(shè)都可全功能運(yùn)行。每個(gè)MCU都可在工業(yè)溫度范圍(

23、-45+85)內(nèi)用2.7V3.6V的電壓工作。端口I/O、/RST、和JTAG引腳都容許5V的輸入信號(hào)電壓。C8051020為100腳TQFP封裝(見(jiàn)圖2.1)。圖2.1 C8051F020原理框架2.3 CIP-51CPU與8051完全兼容C8051F020系列器件使用Cygnal的專利CIP-51微控制器內(nèi)核。CIP-51與MCS-51指令集完全兼容,可以使用標(biāo)準(zhǔn)803x/805x的匯編器和編譯器進(jìn)行軟件開(kāi)發(fā)。CIP-51內(nèi)核具有標(biāo)準(zhǔn)8052的所有外設(shè)部件,包括5個(gè)16位的計(jì)數(shù)器/定時(shí)器、兩個(gè)全雙工UART、256字節(jié)內(nèi)部RAM、128字節(jié)特殊功能寄存器(SFR)地址空間及8/4個(gè)字節(jié)寬的

24、I/O端口。速度提高CIP-51采用流水線結(jié)構(gòu),與標(biāo)準(zhǔn)的8051結(jié)構(gòu)相比指令執(zhí)行速度有很大的提高。在一個(gè)標(biāo)準(zhǔn)的8051中,除MUL和DIV以外所有指令都需要12或24個(gè)系統(tǒng)時(shí)鐘周期,最大系統(tǒng)時(shí)鐘頻率為1224MHz。而對(duì)于CIP-51內(nèi)核,70的指令的執(zhí)行時(shí)間為1或2個(gè)系統(tǒng)時(shí)鐘周期,只有4條指令的執(zhí)行時(shí)間大于4個(gè)系統(tǒng)時(shí)鐘周期。增加的功能C8051F202系列MCU在CIP-51內(nèi)核和外設(shè)有幾項(xiàng)關(guān)鍵性的改進(jìn),提高了整體性能,更易于在最終應(yīng)用中使用。擴(kuò)展的中斷系統(tǒng)向CIP-51提供22個(gè)中斷源(標(biāo)準(zhǔn)8051只有7個(gè)中斷源),允許大量的模擬和數(shù)字外設(shè)中斷微控制器,一個(gè)中斷驅(qū)動(dòng)的系統(tǒng)需要較小的MCU干

25、預(yù),因而有更高的執(zhí)行效率。在設(shè)計(jì)一個(gè)多任務(wù)實(shí)時(shí)系統(tǒng)時(shí),這些增加的中斷源是非常有用的。MCU可有多達(dá)7個(gè)復(fù)位源:一個(gè)片內(nèi)CDD監(jiān)視器、一個(gè)看門狗定時(shí)器、一個(gè)時(shí)鐘丟失檢測(cè)器、一個(gè)由比較器0提供的電壓檢測(cè)器、一個(gè)軟件強(qiáng)制復(fù)位、CNVSTR引腳及/RST引腳。MCU內(nèi)部有一個(gè)獨(dú)立運(yùn)行的時(shí)鐘發(fā)生器,在復(fù)位后被默認(rèn)為系統(tǒng)時(shí)鐘。如果需要,時(shí)鐘源可以在運(yùn)行時(shí)切換到外部振蕩器,外部振蕩器可以使用晶體、陶瓷諧振器、電容、RC或外部時(shí)鐘源產(chǎn)生系統(tǒng)時(shí)鐘。 片內(nèi)存儲(chǔ)器新華龍有限公司.C8051F020單片機(jī)實(shí)驗(yàn)系統(tǒng)使用說(shuō)明書.CIP-51有標(biāo)準(zhǔn)的8051程序和數(shù)據(jù)地址配置。它包括256字節(jié)的數(shù)據(jù)RAM,其中高128字節(jié)

26、為雙映射。用間接尋址訪問(wèn)通用RAM的高128字節(jié),用直接尋址訪問(wèn)128字節(jié)的SFR地址空間。數(shù)據(jù)RAM的低128字節(jié)可用直接或間接尋址方式訪問(wèn)。前32個(gè)字節(jié)為4個(gè)通用寄存器區(qū),接下來(lái)的16個(gè)字節(jié)既可以按字節(jié)尋址也可以按位尋址。MCU的程序存儲(chǔ)器包含64K字節(jié)的FLASH。該存儲(chǔ)器以512字節(jié)為一個(gè)扇區(qū),可以在系統(tǒng)編程,且不需要特別的編程電壓。從0 xFE00到0 xFFFF的512字節(jié)被保留,由工廠使用。還有一個(gè)位于地址0 x100000 x1007F的128字節(jié)的扇區(qū),該扇子區(qū)可作為一個(gè)小的軟件常數(shù)表使用。圖2.2給出了MCU系統(tǒng)的存儲(chǔ)器結(jié)構(gòu)。圖2.2 片內(nèi)存儲(chǔ)器組織JTAG調(diào)試和邊界掃描C

27、8051F020系列具有片內(nèi)JTAG邊界掃描和調(diào)試電路,通過(guò)4腳JTAG接口并使用安裝在最終應(yīng)用系統(tǒng)中的產(chǎn)品器件就可以進(jìn)行非侵入式、全速的在系統(tǒng)調(diào)試。該JTAG接口完全符合IEEE1149.1規(guī)范,為生產(chǎn)和測(cè)試提供完全的邊界掃描功能。Cygnal的調(diào)試系統(tǒng)支持觀察和修改存儲(chǔ)器和寄存器,支持?jǐn)帱c(diǎn)、觀察點(diǎn)、堆棧指示器和單步執(zhí)行。不需要額外的目標(biāo)RAM、程序存儲(chǔ)器、定時(shí)器或通信通道。在調(diào)試時(shí)所有的模擬和數(shù)字外設(shè)都正常運(yùn)行,以保持同步。圖2.3給出了調(diào)試環(huán)境示意圖。圖2.3 調(diào)試環(huán)境示意圖可編程數(shù)字I/O和交叉開(kāi)關(guān)該系列MCU具有標(biāo)準(zhǔn)8051的端口(0、1、2和3)。在C8051F020中有4個(gè)附加的

28、端口(4、5、6和7),因此共有64個(gè)通用端口I/O。這些端口I/O的工作情況與標(biāo)準(zhǔn)8051相似,但有一些改進(jìn)??赡茏瞠?dú)特的改進(jìn)是引入了數(shù)字交叉開(kāi)關(guān)。這是一個(gè)大的數(shù)字開(kāi)關(guān)網(wǎng)絡(luò),允許將內(nèi)部數(shù)字系統(tǒng)資源映射到P0、P1、P2和P3的端口I/O引腳(見(jiàn)圖2.4)。具有標(biāo)準(zhǔn)復(fù)用數(shù)字I/O的微控制器不同,這種結(jié)構(gòu)可支持所有的功能組合。圖2.4 數(shù)字交叉開(kāi)關(guān)原理框圖可編程計(jì)數(shù)器陣列除了5個(gè)16位的通用計(jì)數(shù)器/定時(shí)器之外,C8051F020 MCU系列還有一個(gè)片內(nèi)可編程計(jì)數(shù)器/定時(shí)器陣列(PCA)。PCA包括一個(gè)專用的16位計(jì)數(shù)器/定時(shí)器時(shí)間基準(zhǔn)和5個(gè)可編程的捕捉/比較模塊。時(shí)間基準(zhǔn)的時(shí)鐘可以是下面的6個(gè)時(shí)

29、鐘源之一:系統(tǒng)時(shí)鐘/12、系統(tǒng)時(shí)鐘/4、定時(shí)器0溢出、外部時(shí)鐘輸入(ECI)、系統(tǒng)時(shí)鐘和外部振蕩器源頻率/8。C8051F020還有更多的優(yōu)勢(shì),需要詳細(xì)了解的請(qǐng)參考文獻(xiàn)9。本節(jié)主要講了單片機(jī)的特點(diǎn)和C8051F020單片機(jī)實(shí)驗(yàn)系統(tǒng)的特性。C8051F020與8051完全兼容,指令采用流水線結(jié)構(gòu)提高了系統(tǒng)速度,有可編程數(shù)字I/O和交叉開(kāi)關(guān),增加了一些功能器件,提高了C8051F020整體性能。3 液晶顯示控制器KS0108KS0108是一種帶有驅(qū)動(dòng)輸出的點(diǎn)陣型液晶顯示控制器,它可直接與8位微處理器相連,它可與KS0107配合對(duì)液晶顯示控制器進(jìn)行行、列驅(qū)動(dòng),組成液晶顯示驅(qū)動(dòng)控制系統(tǒng)。3.1 KS0

30、108的特點(diǎn)(1).內(nèi)藏6464=4096位顯示RAM,RAM中每位數(shù)據(jù)對(duì)應(yīng)LCD屏上一個(gè)點(diǎn)的亮、暗狀態(tài);(2).KS0108是列驅(qū)動(dòng)器,具有64路列驅(qū)動(dòng)輸出;(3).KS0108讀、寫操作時(shí)序與68系列微處理器相符,因此它可直接與68系列微處理器接口相連;(4).KS0108的占空比為1/481/64;(5).具有專用指令集,可完成文本顯示或圖形顯示的功能設(shè)置,以及實(shí)現(xiàn)畫面滾動(dòng)、光標(biāo)、閃爍和位操作等功能;(6).KS0108可管理64KB顯示RAM。其中,圖形方式為64KB;字符方式為4KB。3.2 KS0108管腳 冀誠(chéng)電子有限公司.KS0108液晶顯示控制驅(qū)動(dòng)器的應(yīng)用.KS0108的管腳

31、見(jiàn)圖3.1所示:圖3.1 KS0108管腳圖3.3 KS0108受控引腳KS0108的引腳功能見(jiàn)表1表1 引腳功能引腳符號(hào)狀態(tài)引腳名稱功能CS1,CS2,CS3輸入芯片片選端CS1和CS2低電平選通,CS3高電平選通E輸入讀寫使能信號(hào)在E下降沿,數(shù)據(jù)被鎖存(寫)入KS0108;在E高電平時(shí),數(shù)據(jù)被讀出R/W輸入讀寫選擇信號(hào)R/W=1,為讀選通;R/W=0為寫選通RS(也習(xí)慣叫做D/I)輸入數(shù)據(jù)、指令選擇信號(hào)RS=1為數(shù)據(jù)操作RS=0為寫指令或讀狀態(tài)DB0-DB7三態(tài)數(shù)據(jù)總線RST輸入復(fù)位信號(hào)低電平有效,復(fù)位信號(hào)有效時(shí),關(guān)閉液晶顯示,使顯示起始終不渝行為0,RST可跟MPU相連,由MPU控制;也

32、右直接接VDD,使之不起作用。3.4 KS0108的時(shí)序43.4.1 KS0108與68系列微處理器直接接口的時(shí)序各種信號(hào)波形對(duì)照見(jiàn)表2:表2 信號(hào)波形MPU讀時(shí)序見(jiàn)圖3.2:圖3.2 讀時(shí)序MPU寫時(shí)序見(jiàn)圖3.3:圖3.3 寫時(shí)序3.4.2 復(fù)位時(shí)序復(fù)位后,KA0108顯示關(guān)閉,顯存地址歸零。復(fù)位條件見(jiàn)表3和圖3.4:表3 復(fù)位條件項(xiàng)目符號(hào)最小值典型值最大值單位復(fù)位時(shí)間Trs1.0微秒上升時(shí)間Tr200納秒圖3.4 復(fù)位條件3.5 KS0108顯示RAM地址結(jié)構(gòu) KS0108中的顯示RAM共有64行,64列,其結(jié)構(gòu)見(jiàn)圖3.5圖3.5 顯示RAM地址結(jié)構(gòu)3.6 KS0108指令系統(tǒng)4KS010

33、8的指令系統(tǒng)比較簡(jiǎn)單,總共只有七種。現(xiàn)分別介紹如下:顯示開(kāi)/關(guān)指令見(jiàn)表4表4 顯示開(kāi)/關(guān)指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 00 0 1 1 1 1 1 1/0當(dāng)DBO=1時(shí),LCD顯示RAM中的內(nèi)容;DBO=0時(shí),關(guān)閉顯示。3.6.2 顯示起始行(ROW)設(shè)置指令見(jiàn)表5表5 顯示起始行指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 01 1 顯示起始行(0-63)該指令設(shè)置了對(duì)應(yīng)液晶屏最一行的顯示RAM的行號(hào),有規(guī)律的改變顯示起始行,可以使LCD實(shí)現(xiàn)顯示滾屏的效果。3.6.3 頁(yè)(RAGE)設(shè)置指令見(jiàn)表6表6 頁(yè)

34、設(shè)置指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 01 0 1 1 1 頁(yè)號(hào)(0-7)顯示RAM共64行,分8頁(yè),每頁(yè)8行。列地址(Y Address)設(shè)置指令見(jiàn)表7表7 列地址設(shè)置指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 00 1 顯示列地址(0-63)設(shè)置了頁(yè)地址和列地址,就唯一確定了顯示RAM中的一個(gè)單元,這樣MPU就可以用讀、寫指令讀出該單元中的內(nèi)容或向該單元寫進(jìn)一個(gè)字節(jié)數(shù)據(jù)。讀狀態(tài)指令見(jiàn)表8表8 讀狀態(tài)指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB01 0BUSY 0 ON/OF

35、F REST 0 0 0 0該指令用來(lái)查詢KS0108的狀態(tài),各參量含義如下:BUSY:1-內(nèi)部在工作 0-正常狀態(tài)ON/OFF:1-顯示關(guān)閉 0-顯示打開(kāi)REST: 1-復(fù)位狀態(tài) 0-正常狀態(tài)在BUSY和REST狀態(tài)時(shí),除讀狀態(tài)指令外,其它指令均不對(duì)KS0108產(chǎn)生作用。在對(duì)KS0108操作之前要查詢BUSY狀態(tài),以確定是否可以對(duì)KS0108進(jìn)行操作。寫數(shù)據(jù)指令見(jiàn)表9表9 寫數(shù)據(jù)指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 1 寫 數(shù) 據(jù)讀數(shù)據(jù)指令見(jiàn)表10表10 讀數(shù)據(jù)指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB01 1 讀

36、 顯 示 數(shù) 據(jù)讀、寫數(shù)據(jù)指令每執(zhí)行完一次讀、寫操作,列地址就自動(dòng)增一,必須注意的是,進(jìn)行讀、寫操作之前,必須有一次空讀操作,緊接著再讀才會(huì)讀出所要讀的單元中的數(shù)據(jù)。本節(jié)主要是介紹液晶顯示控制器KS0108的特點(diǎn)、外部部分引腳功能、時(shí)序、顯示RAM地址結(jié)構(gòu)及指令集,為單片機(jī)液晶顯示系統(tǒng)設(shè)計(jì)打下基礎(chǔ)。4 圖形動(dòng)態(tài)顯示4.1 圖形點(diǎn)陣式液晶顯示控制原理C8051F020實(shí)驗(yàn)板中使用的是內(nèi)置液晶顯示模塊CGM12864B的液晶屏。CGM12864B內(nèi)部沒(méi)有振蕩器電路,它必須由外部提供一個(gè)時(shí)序發(fā)生器作為振蕩源方可工作,它由兩片帶有64列驅(qū)動(dòng)控制器KS0108和一片帶有64行驅(qū)動(dòng)控制器KS0107組合而

37、成。另外還可以附加負(fù)壓發(fā)生電路。顯示是以一12864 個(gè)點(diǎn)的液晶屏顯示。圖形液晶顯示模塊KS0108將顯示區(qū)分為左右半屏,整個(gè)屏從上到下64 行分為8 頁(yè),每頁(yè)8 行,頁(yè)地址范圍為:B8HBFH。列地址范圍為:40H7FH。數(shù)據(jù)為縱向讀寫,即每頁(yè)的第一行對(duì)應(yīng)D0 第八行對(duì)應(yīng)D7。左、右半屏由CS1、CS2選擇。控制器KS0108 的指令相對(duì)簡(jiǎn)單,總共七條指令:顯示開(kāi)關(guān)設(shè)定(3EH/ 3FH),顯示起始行設(shè)定(C0H /FFH),頁(yè)地址設(shè)定(B8H/ BFH),列地址設(shè)定(40H/ 7FH)狀態(tài)讀取,寫數(shù)據(jù),讀數(shù)據(jù)。12864點(diǎn)陣式液晶模塊的邏輯圖見(jiàn)圖4.14圖4.1 液晶模塊邏輯圖4.2 液晶

38、顯示模塊外部接口外部接口信號(hào)見(jiàn)表11表11 外部接口信號(hào)管腳號(hào)管腳名稱LEVER管腳功能描述1Vss0電源地2Vdd+0.5V電源電壓3V0液晶顯示器驅(qū)動(dòng)電壓4D/IH/LD/I=“H”,表示DB7DB0為顯示數(shù)據(jù)D/I=“L”,表示DB7DB0為顯示指令數(shù)據(jù)5R/WH/LR/W=“H”,E=“H”數(shù)據(jù)被讀到DB0DB7R/W=“H”,E=“HL”數(shù)據(jù)被寫到IR或DR6EH/LR/W=“L”,E信號(hào)下降沿鎖存DB7DB0R/W=“H”,E=“H”DDRAM數(shù)據(jù)讀到DB7DB07DB0H/L數(shù)據(jù)線8DB1H/L數(shù)據(jù)線9DB2H/L數(shù)據(jù)線10DB3H/L數(shù)據(jù)線11DB4H/L數(shù)據(jù)線12DB5H/L

39、數(shù)據(jù)線13DB6H/L數(shù)據(jù)線14DB7H/L數(shù)據(jù)線15CS1H/LH:選擇芯片(右半屏)信號(hào)16CS2H/LH:選擇芯片(左半屏)信號(hào)17RSTH/L復(fù)位信號(hào),低電平復(fù)位18Vee-10VLCD驅(qū)動(dòng)負(fù)電壓19LED-LED背光板電源20LED+-LED背光板電源12864A接口定義及其與C8051F020的接口電路圖見(jiàn)圖4.2圖4.2 接口電路KS0108采用8位數(shù)據(jù)傳送,間接控制方式。所謂間接控制方式就是通過(guò)單片機(jī)的并行接口與液晶顯示模塊直接連接,單片機(jī)通過(guò)對(duì)這些接口的操作,實(shí)現(xiàn)對(duì)液晶顯示模塊的控制,完成相應(yīng)的顯示,可以顯示數(shù)字、字母、圖形符號(hào)及自定義符號(hào)。使用LCD做數(shù)據(jù)顯示,一旦數(shù)據(jù)寫入

40、LCD,數(shù)據(jù)就會(huì)一直顯示在液晶屏上,不必像數(shù)碼管顯示那樣要定時(shí)掃描才能將數(shù)據(jù)顯示,其顯示效果遠(yuǎn)遠(yuǎn)超過(guò)數(shù)碼管顯示。4.3 圖形點(diǎn)陣液晶顯示編碼規(guī)則4.3.1漢字編碼規(guī)則一般地,常用點(diǎn)陣液晶顯示模塊的漢字字模是直接從中文系統(tǒng)漢字字庫(kù)中提取的,然后經(jīng)過(guò)格式上的調(diào)整和轉(zhuǎn)換,可以得到欲顯示的漢字字模。在畢業(yè)設(shè)計(jì)中,我用的漢字不是從字庫(kù)中提取字模,而是采用了一個(gè)字模軟件來(lái)取模(將圖形點(diǎn)陣轉(zhuǎn)換為計(jì)算機(jī)內(nèi)部顯示緩沖單元的數(shù)據(jù))。字模軟件的界面見(jiàn)圖4.3。圖4.3 字模軟件界面圖這個(gè)字模軟件使用起來(lái)相當(dāng)簡(jiǎn)單和方便。LCD顯示模塊顯示中文字符串中,顯示漢字(1616點(diǎn)陣)必須使用圖形方式。在使用KS0108圖形方

41、式時(shí),顯示緩沖區(qū)單元與顯示屏的對(duì)應(yīng)關(guān)系見(jiàn)圖4.4所示。圖4.4 顯示緩沖區(qū)單元與顯示屏的關(guān)系馬忠梅,籍順心等編著.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)(第3版)M.北京:北京航空航天大學(xué)出版社,2003.11.圖4.4所示的顯示格式與我們的習(xí)慣正好相反,如想在顯示屏上顯示10010110,則須向RAM中寫入01101001。這適應(yīng)人們的習(xí)慣,在字模軟件取模時(shí)設(shè)置“字節(jié)倒序”,字模軟件在取模的參數(shù)設(shè)置見(jiàn)圖4.5所示。1616漢字共有32個(gè)字節(jié)。這32字節(jié)存放方式見(jiàn)表11所示:表11 32字節(jié)存放方式1172181632圖4.5 取模參數(shù)設(shè)置在取模時(shí),須設(shè)置取模參數(shù)如圖4.5所示:縱向取模、字節(jié)倒序。在對(duì)字

42、符取模時(shí),可以根據(jù)個(gè)人需要設(shè)置不同字體和字號(hào)。不同字體和字號(hào),取模之后得到的對(duì)應(yīng)字陣的寬和高不同,但建議最好用1616字陣,這是為了在顯示過(guò)程中便于控制寫數(shù)據(jù)。例如:取模得到“湖”字的編碼為:/*- 文字: 湖 -*/*- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 -*/0 x10,0 x21,0 x86,0 x60,0 x90,0 x90,0 xFF,0 x90,0 x90,0 x00,0 xFE,0 x92,0 x92,0 xFE,0 x00,0 x00,0 x04,0 xFC,0 x03,0 x00,0 x1F,0 x10,0 x10,0 x90,0 x5F,0 x30,0

43、x0F,0 x40,0 x80,0 x7F,0 x00,0 x00在一個(gè)字符顯示過(guò)程中,掃描方式是按列掃描。4.3.2 圖形編碼規(guī)則圖形與字符的編碼規(guī)則一樣。但在圖形取模時(shí),要求是位圖(文件的擴(kuò)展名為BMP),其它類型圖形無(wú)法取模。位圖的大小為128*64,不能超出這個(gè)范圍。例如下圖(圖4.6)取模后所得編碼在附錄:程序代碼里KS0108.C部分char code sreen3中已列出。圖4.6 位圖圖形轉(zhuǎn)換為機(jī)內(nèi)字模之后,跟字符顯示原理一樣。在圖形的上下滾動(dòng)上,是將顯示起始行地址在顯示完本屏之后增加1;在圖形的左右移動(dòng)上,相對(duì)而言要復(fù)雜得多:起始行地址不變,但由于液晶屏的列是由兩塊KS010

44、8分左、右屏控制的,必須注意左、右屏的分開(kāi)控制:當(dāng)在起始列在左半屏?xí)r,先從左半屏的起始列寫數(shù)據(jù),寫到左半屏的第64列,然后從左半屏的第一列開(kāi)始寫數(shù)據(jù)直到左半屏的第64列;當(dāng)起始列在右半屏?xí)r,左半屏不需要驅(qū)動(dòng),直接從起始列中減去64而得到對(duì)應(yīng)右半屏的第多少列,然后從右半屏的第多少列驅(qū)動(dòng)。4.4 程序流程程序流程見(jiàn)圖4.7和圖4.8初始化時(shí)鐘初始化定時(shí)器0初始化IO口初始化SPIO使能比較器1使能片內(nèi)參考電壓使能DAC0開(kāi)中斷調(diào)用顯示子程序開(kāi)始結(jié)束 圖4.7 主程序流程圖 實(shí)現(xiàn)位圖左右移動(dòng)靜態(tài)顯示文字實(shí)現(xiàn)位圖上下滾動(dòng)靜態(tài)顯示位圖字符從右向左移動(dòng)字符從上到下移動(dòng)開(kāi)始 圖4.8 LCD測(cè)試流程圖4.5

45、 功能實(shí)現(xiàn)LCD初始化:void InitLCD(void)/初始化LCDchar i,j;LCD_RST=0;Delay1ms(1);LCD_RST=1;LCD_WriteCommand1(0 xc0);LCD_WriteCommand2(0 xc0);LCD_WriteCommand1(0 x3f); /開(kāi)顯示LCD_WriteCommand2(0 x3f);for (j=0;j8;j+) /清屏LCD_WriteCommand1(0 xB8+j); /清左半屏LCD_WriteCommand1(0 x40);for (i=0;i64;i+)LCD_WriteData1(0 x00);LC

46、D_WriteCommand2(0 xB8+j); /清右半屏LCD_WriteCommand2(0 x40);for (i=0;i64;i+)LCD_WriteData2(0 x00); 單個(gè)漢字顯示:void LCD_Write_A_HZ(char x,char y,char *Dot) /顯示16*16點(diǎn)陣漢字 char i;for (i=0;i32;i+) if (x+i%16)64)LCD_WriteCommand1(0 xB8+y+i/16);LCD_WriteCommand1(0 x40+x+i%16);LCD_WriteData1(Doti);else LCD_WriteCom

47、mand2(0 xB8+y+i/16);LCD_WriteCommand2(0 x40+x-64+i%16);LCD_WriteData2(Doti);靜態(tài)顯示一幅位圖:void DispBmp(char *buf) /顯示一幅位圖 int i,j;for (j=0;j8;j+) /顯示位圖 LCD_WriteCommand1(0 xB8+j); LCD_WriteCommand1(0 x40);for (i=0;i64;i+)LCD_WriteData1(buf(j*2)*64+i); LCD_WriteCommand2(0 xB8+j);LCD_WriteCommand2(0 x40);f

48、or (i=0;i64;i+)LCD_WriteData2(buf(j*2+1)*64+i);位圖上下滾動(dòng)實(shí)現(xiàn):Void DispBmp_Roll(char *buf)char *Buffer; int i; Buffer=buf; DispBmp(Buffer);for (i=0;i64;i+)Delay1ms(50); LCD_WriteCommand1(0 xc0+i%64);/設(shè)置起始行,實(shí)現(xiàn)向上滾動(dòng) LCD_WriteCommand2(0 xc0+i%64); 位圖從左到右移動(dòng)實(shí)現(xiàn):void DispBmp_Move(char *buf) /左右移動(dòng)一幅位圖 int line,lin

49、e0,row,eight; /顯示位圖 for (row=0;row128;row+) Delay1ms(50); for (eight=0;eight8;eight+) if (row64) LCD_WriteCommand1(0 xB8+eight); LCD_WriteCommand1(0 x40+row); for (line=0;line+row64;line+) LCD_WriteData1(buf(eight*2)*64+line); LCD_WriteCommand2(0 xB8+eight); LCD_WriteCommand2(0 x40); for (line0=0;li

50、ne0+row64;line0+) LCD_WriteData2(buf(eight*2)*64+line+line0); else LCD_WriteCommand2(0 xB8+eight); LCD_WriteCommand2(0 x40+row-64); for (line0=0;line0+row-64 1. 在.h/.cpp的開(kāi)頭應(yīng)有一段格式統(tǒng)一的說(shuō)明,內(nèi)容包括: a. 文件名 (FileName); b. 創(chuàng)建人 (Creater); c. 文件創(chuàng)建時(shí)間 (Date); d. 簡(jiǎn)短說(shuō)明文件功能、用途 (Comment)。好習(xí)慣 2. 除非極其簡(jiǎn)單,否則對(duì)函數(shù)應(yīng)有注釋說(shuō)明。內(nèi)容包括

51、:功能、入口/出口參數(shù),必要 時(shí)還可有備注或補(bǔ)充說(shuō)明。還是好習(xí)慣 3. 每列代碼的長(zhǎng)度推薦為 80列,最長(zhǎng)不得超過(guò)120列;折行以對(duì)齊為準(zhǔn)。太寬了,我的限制是60列,因?yàn)槲谋痉绞较缕聊灰还?0列,如果你用BC這一類的編輯器,窗口邊框等又要占據(jù)一定空間,所以80列太寬 4. 循環(huán)、分支代碼,判斷條件與執(zhí)行代碼不得在同一行上。很對(duì) 5. 指針的定義,* 號(hào)既可以緊接類型,也可以在變量名之前。 例:可寫做:int*pnsize; 也可寫做:int*pnsize; 但不得寫做:int*pnsize;建議采用第二種,除非附加另外一條規(guī)定:一次只聲明一個(gè)變量,否則就會(huì)讓人混淆,比如:int* a, b;看

52、起來(lái)b好像也是個(gè)指針,其實(shí)不是。 6. 在類的成員函數(shù)內(nèi)調(diào)用非成員函數(shù)時(shí),在非成員函數(shù)名前必須加上:。這一條我倒覺(jué)得并不是必需的,我的看法是決不要讓你的類成員函數(shù)和全局函數(shù)的名稱相同(或類似) 7. 函數(shù)入口參數(shù)有缺省值時(shí),應(yīng)注釋說(shuō)明。 例:BOOL CWpsDib:PaintDIB(CDC* pDC, CRect& rc,int nBrightness, file:/*=0*/BOOL bGrayScale file:/*=FALSE*/ )每個(gè)變量寫一行,必要時(shí)加上/*in, out*/注釋 8. elseif 必須寫在一行。應(yīng)該盡量避免else if這樣的結(jié)構(gòu) 9. 與、有關(guān)的各項(xiàng)規(guī)定:

53、9.1、應(yīng)獨(dú)占一行。在該行內(nèi)可有注釋。 9.2 必須另起一行, 之后的代碼必須縮進(jìn)一個(gè)Tab。與必須在同 一列上。 9.3 在循環(huán)、分支之后若只有一行代碼,雖然可省略、,但不推薦這么 做。若省略后可能引起歧義,則必須加上、。持保留意見(jiàn),因?yàn)镚NU的代碼規(guī)范是這樣的:if ( NULL = ptr )/ do something here或者if ( NULL = ptr ) / do something here爭(zhēng)論哪個(gè)更好并沒(méi)有意義,關(guān)鍵是統(tǒng)一,如果用VC當(dāng)然你的辦法最方便,可是如果你用emacs或者vi,就不是這樣了。 10. 與空格有關(guān)的各項(xiàng)規(guī)定。 10.1 在所有兩目、三目運(yùn)算符的兩邊

54、都必須有空格。在單目運(yùn)算符兩端不必空格。但 在、:、.、等運(yùn)算符前后,及&(取地址)、* (取值)等運(yùn)算符之后不得有空格。 10.2for、while、if 等關(guān)鍵詞之后應(yīng)有1個(gè)空格,再接(,之后無(wú)空格;在結(jié)尾 的)前不得有空格。我認(rèn)為在括號(hào)兩端加空格并不是什么錯(cuò)誤,尤其是在一個(gè)條件十分復(fù)雜的if語(yǔ)句里 10.3 調(diào)用函數(shù)、宏時(shí),(、)前后不得有空格。 10.4類型強(qiáng)制轉(zhuǎn)換時(shí),()前后不得有空格同上 11. 與縮進(jìn)有關(guān)的各項(xiàng)規(guī)定 11.1 縮進(jìn)以 Tab 為單位。1 個(gè) Tab 為 4 個(gè)空格我認(rèn)為這個(gè)值應(yīng)該更大,我自己使用8個(gè)空格,如果你的代碼因?yàn)榭s進(jìn)幅度太大而導(dǎo)致折行,那么幾乎可以肯定你的

55、程序設(shè)計(jì)方案有問(wèn)題。 11.2 下列情況,代碼縮進(jìn)一個(gè) Tab: 1. 函數(shù)體相對(duì)函數(shù)名及、。 2. if、else、for、while、do 等之后的代碼。 3. 一行之內(nèi)寫不下,折行之后的代碼,應(yīng)在合理的位置進(jìn)行折行。若有 + - * / 等運(yùn) 算符,則運(yùn)算符應(yīng)在上一行末尾,而不應(yīng)在下一行的行首。這一條我反對(duì),運(yùn)算符應(yīng)該放在下一行行首,以使人能清楚的知道這一行是續(xù)上一行的,比如if ( something& somethingelse& otherthings )如果寫做if ( something &somethingelse &otherthings )反而看不清楚 11.3 下列情況

56、,不必縮進(jìn):switch 之后的 case、default。編程規(guī)范與范例目 錄1 排版 62 注釋 113 標(biāo)識(shí)符命名 184 可讀性 205 變量、結(jié)構(gòu) 226 函數(shù)、過(guò)程 287 可測(cè)性 368 程序效率 409 質(zhì)量保證 4410 代碼編輯、編譯、審查 5011 代碼測(cè)試、維護(hù) 5212 宏 53 1 排版1-1:程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為4個(gè)。說(shuō)明:對(duì)于由開(kāi)發(fā)工具自動(dòng)生成的代碼可以有不一致。1-2:相對(duì)獨(dú)立的程序塊之間、變量說(shuō)明之后必須加空行。示例:如下例子不符合規(guī)范。if (!valid_ni(ni) . / program coderepssn_ind = ssn_

57、dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;應(yīng)如下書寫if (!valid_ni(ni) . / program coderepssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;1-3:較長(zhǎng)的語(yǔ)句(80字符)要分成多行書寫,長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語(yǔ)句可讀。示例:perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN + STAT

58、_SIZE_PER_FRAM * sizeof( _UL );act_task_tableframe_id * STAT_TASK_CHECK_NUMBER + index.occupied = stat_poiindex.occupied;act_task_tabletaskno.duration_true_or_false = SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = (taskno MAX_ACT_TASK_NUMBER) & (n7stat_stat_item_valid (stat_item) & (

59、act_task_tabletaskno.result_data != 0); 1-4:循環(huán)、判斷等語(yǔ)句中若有較長(zhǎng)的表達(dá)式或語(yǔ)句,則要進(jìn)行適應(yīng)的劃分,長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首。示例:if (taskno max_act_task_number) & (n7stat_stat_item_valid (stat_item) . / program codefor (i = 0, j = 0; (i BufferKeywordword_index.word_length) & (j NewKeyword.word_length); i+, j+) . / progra

60、m codefor (i = 0, j = 0; (i first_word_length) & (j ),后不應(yīng)加空格。說(shuō)明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。由于留空格所產(chǎn)生的清晰性是相對(duì)的,所以,在已經(jīng)非常清晰的語(yǔ)句中沒(méi)有必要再留空格,如果語(yǔ)句已足夠清晰則括號(hào)內(nèi)側(cè)(即左括號(hào)后面和右括號(hào)前面)不需要加空格,多重括號(hào)間不必加空格,因?yàn)樵贑/C+語(yǔ)言中括號(hào)已經(jīng)是最清晰的標(biāo)志了。在長(zhǎng)語(yǔ)句中,如果需要加的空格非常多,那么應(yīng)該保持整體清晰,而在局部不加空格。給操作符留空格時(shí)不要連續(xù)留兩個(gè)以上空格。示例:(1) 逗號(hào)、分號(hào)只在后面加空格。int a, b, c; (2)比較操作符, 賦值

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論