版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)設(shè)計(論文)</b></p><p> 作 者: 學(xué) 號: </p><p> 專 業(yè): 應(yīng)用電子技術(shù) </p><p> 班 級: 應(yīng)電0991 </p
2、><p> 題 目: 基于單片機的彩屏控制 </p><p> 指導(dǎo)者: </p><p> 2012年 05 月 15 日</p><p><b> 摘 要</b></p><p> 本文提出的彩屏控制系統(tǒng)以
3、單片機(ATmega128L)為核心,由控制部分、顯示部分(320*240TFT)組成。該系統(tǒng)大部分功能通過硬件來實現(xiàn),電路簡單明了,系統(tǒng)穩(wěn)定性很高。</p><p> 這套彩屏控制系統(tǒng)可以方便地實現(xiàn)圖片顯示,動畫等功能,并通過與單片機連接的鍵盤可以實現(xiàn)對屏幕的清屏等操作,還可以連接相應(yīng)的外圍電路,使其發(fā)揮更大的作用。</p><p> 本文首先描述系統(tǒng)硬件工作原理,并附以系統(tǒng)結(jié)構(gòu)框圖
4、加以說明,著重介紹了本系統(tǒng)所應(yīng)用的各硬件模塊的功能和它的工作過程;其次,詳細(xì)闡述了程序的各個模塊及其實現(xiàn)過程。本系統(tǒng)的主要設(shè)計思想是以硬件為基礎(chǔ),軟件和硬件相結(jié)合,最終實現(xiàn)各個模塊的功能。</p><p> 關(guān)鍵字:單片機;ATmega128L;320*240TFT;彩屏控制;</p><p><b> ABSTRACT</b></p><p&
5、gt; This Colorized Screen Control System with single chip microcomputer (ATmega128L) as the core, is composed of a control part, display part (320 * 240TFT ). The system most of the functions achieved by hardware, the c
6、ircuit is simple, the stability of the system is very high.</p><p> This colorized screen control system can conveniently realize the picture display, animation and other functions, and through the connecte
7、d with the single chip microcomputer keyboard can be achieved on the screen to screen operation, also can be connected to the corresponding peripheral circuit, make its produce bigger effect.</p><p> This p
8、aper describes the system hardware working principle, together with the system block diagram to illustrate the structure, emphatically introduces the application of the system the hardware function and its working proces
9、s; secondly, the procedures described in detail the various modules and the realization process. This system main design idea is on the base of hardware, software and hardware integration, and ultimately to achieve the f
10、unctions of each module.</p><p> Key Words: SCM; Temperature collection; Hardware module </p><p><b> 目 錄</b></p><p><b> 1引 言4</b></p><p
11、><b> 2 方案論證2</b></p><p> 2.1 功能與設(shè)計要求2</p><p> 2.2 方案論證2</p><p> 2.2.1 TFT屏幕的選擇2</p><p> 2.2.2 控制芯片的選擇3</p><p> 3 彩屏控制系統(tǒng)的硬件設(shè)計4<
12、;/p><p> 3.1 ATmega128單片機簡介4</p><p> 3.11端口功能簡介5</p><p> 3.12外設(shè)特點7</p><p> 3.13特殊功能寄存器特點8</p><p> 3.14擴展的Standby 模式8</p><p> 3.2 硬件系統(tǒng)框
13、架8</p><p> 4 主控模塊電路設(shè)計9</p><p> 4.1 ATmega128最小電路9</p><p> 4.2 帶SD卡的TFT屏幕使用方法11</p><p> 5 電源電路的設(shè)計13</p><p> 6 軟件系統(tǒng)設(shè)計14</p><p> 6.1
14、軟件系統(tǒng)中的主模塊設(shè)計14</p><p><b> 總 結(jié)28</b></p><p><b> 參考文獻(xiàn)29</b></p><p><b> 致 謝30</b></p><p><b> 1引 言</b></p
15、><p> 進(jìn)入新千年,作為信息產(chǎn)業(yè)的重要構(gòu)成部分—顯示器件正在加速推進(jìn)其平板化的進(jìn)程。目前,世界已進(jìn)入“信息革命”時代,顯示技術(shù)及顯示器件在信息技術(shù)的發(fā)展過程中占據(jù)了十分重要的地位,電視、電腦、移動電話、BP機、PDA等可攜式設(shè)備以及各類儀器儀表上的顯示屏為人們的日常生活和工作提供著大量的信息。沒有顯示器,就不會有當(dāng)今迅猛發(fā)展的信息技術(shù)。顯示器集電子、通信和信息處理技術(shù)于一體,被認(rèn)為是電子工業(yè)在20世紀(jì)微電子、計
16、算機之后的又一重大發(fā)展機會。 </p><p> 科學(xué)技術(shù)的發(fā)展日新月異,顯示技術(shù)也在發(fā)生一場革命,特別是自90年代以來,隨著技術(shù)的突破及市場需求的急劇增長,使得以液晶顯示(LCD)為代表的平板顯示(FPD)技術(shù)迅速崛起。據(jù)Stanford公司預(yù)測,F(xiàn)PD市場規(guī)模正在以年增長率16.2%的速度發(fā)展著,到2000年FPD和CRT的產(chǎn)業(yè)都達(dá)到300億美元,CRT平均年增長率不足6.3%,遠(yuǎn)低于FED的平均增長率,且
17、FPD增長率仍在繼續(xù)提高,CRT在繼續(xù)下降,替代趨勢十分明朗,可以說平板顯示將成為21世紀(jì)顯示技術(shù)的主流,其產(chǎn)業(yè)和市場在不斷擴增之中</p><p> 經(jīng)過二十多年的研究、競爭、發(fā)展,平板顯示器已進(jìn)入角色,成為新世紀(jì)顯示器的主流產(chǎn)品,目前競爭最激烈的平板顯示器有四個品種: </p><p> 1.場致發(fā)射平板顯示器(FED) </p><p> 2.等離子體平
18、板顯示器(PDP)</p><p> 3.有機薄膜電致發(fā)光器(OLED) </p><p> 4.薄膜晶體管液晶平板顯示器(TFT-LCD) </p><p><b> 2 方案論證</b></p><p> 2.1 功能與設(shè)計要求</p><p> 這套TFT屏幕控制系統(tǒng)可以方便地實現(xiàn)
19、圖片與文字的顯示等功能,并通過單片機連接調(diào)節(jié)亮度等,還可以連接相應(yīng)的外圍電路,實現(xiàn)多種功能。</p><p> 1、單片機控制。對TFT屏幕控制而言,最基本的功能是實現(xiàn)單個漢字的顯示。復(fù)雜一點的是對圖片進(jìn)行處理。</p><p> 2、屏幕控制。要求,基本控制屏幕,讓其顯示指定漢字或代碼,并控制調(diào)節(jié)亮度等。</p><p> 3、采用7805系列芯片對電源進(jìn)行
20、控制,對電源要求,無強干擾波,沒有電壓突變等。 </p><p><b> 2.2 方案論證</b></p><p> 2.2.1 TFT屏幕的選擇</p><p><b> TFT屏幕</b></p><p> TFT(Thin Film Transistor)即薄膜場效應(yīng)晶體管,屬于有源
21、矩陣液晶顯示器中的一種。它可以“主動地”對屏幕上的各個獨立的像素進(jìn)行控制,這樣可以大大提高反應(yīng)時間。一般TFT的反應(yīng)時間比較快,約80毫秒,而且可視角度大,一般可達(dá)到130度左右,主要運用在高端產(chǎn)品。所謂薄膜場效應(yīng)晶體管,是指液晶顯示器上的每一液晶象素點都是由集成在其后的薄膜晶體管來驅(qū)動。從而可以做到高速度、高亮度、高對比度顯示屏幕信息。TFT屬于有源矩陣液晶顯示器,在技術(shù)上采用了“主動式矩陣”的方式來驅(qū)動,方法是利用薄膜技術(shù)所作成的電
22、晶體電極,利用掃描的方法“主動拉”控制任意一個顯示點的開與關(guān),光源照射時先通過下偏光板向上透出,借助液晶分子傳導(dǎo)光線,通過遮光和透光來達(dá)到顯示的目的。</p><p> TFT-LCD液晶顯示屏是薄膜晶體管型液晶顯示屏,也就是“真彩”(TFT)。TFT液晶為每個像素都設(shè)有一個半導(dǎo)體開關(guān),每個像素都可以通過點脈沖直接控制,因而每個節(jié)點都相對獨立,并可以連續(xù)控制,不僅提高了顯示屏的反應(yīng)速度,同時可以精確控制顯示色階
23、,所以TFT液晶的色彩更真。TFT液晶顯示屏的特點是亮度好、對比度高、層次感強、顏色鮮艷,但也存在著比較耗電和成本較高的不足。TFT液晶技術(shù)加快了手機彩屏的發(fā)展。新一代的彩屏手機中很多都支持65536色顯示,有的甚至支持16萬色顯示,這時TFT的高對比度,色彩豐富的優(yōu)勢就非常重要了。</p><p> TFT型的液晶顯示器主要的構(gòu)成包括:螢光管、導(dǎo)光板、偏光板、濾光板、玻璃基板、配向膜、液晶材料、薄模式晶體管等
24、等。</p><p> TFT的亮度好,對比度高,層次感強,顏色鮮艷。缺點是比較耗電,成本較高。</p><p> 2.2.2 控制芯片的選擇</p><p> AVR單片機硬件結(jié)構(gòu)采取8位機與16位機,即采用局部寄存器存堆(32個寄存器文件)和單體高速輸入/輸出的方案(即輸入捕獲寄存器、輸出比較匹配寄存器及相應(yīng)控制邏輯)。提高了指令執(zhí)行速度(1Mips/MH
25、z),克服了瓶頸現(xiàn)象,增強了功能;同時又減少了對外設(shè)管理的開銷,相對簡化了硬件結(jié)構(gòu),降低了成本。故AVR單片機在軟/硬件開銷、速度、性能和成本諸多方面取得了優(yōu)化平衡,是高性價比的單片機。 </p><p> AVR單片機內(nèi)嵌高質(zhì)量的Flash程序存儲器,擦寫方便,支持ISP和IAP,便于產(chǎn)品的調(diào)試、開發(fā)、生產(chǎn)、更新。內(nèi)嵌長壽命的EEProm可長期保存關(guān)鍵數(shù)據(jù),避免斷電丟失。片內(nèi)大容量的RAM不僅能滿足一般場合的
26、使用,同時也更有效的支持使用高級語言開發(fā)系統(tǒng)程序,并可像MCS-51單片機那樣擴展外部 RAM。 </p><p> AVR單片機的I/O線全部帶可設(shè)置的上拉電阻、可單獨設(shè)定為輸入/輸出、可設(shè)定(初始)高阻輸入、驅(qū)動能力強(可省去功率驅(qū)動器件)等特性,使的得I/O口資源靈活、功能強大、可充分利用。 </p><p> AVR單片機片內(nèi)具備多種獨立的時鐘分頻器,分別供UART、I2C、S
27、PI使用。其中與8/16位定時器配合的具有多達(dá)10 位的預(yù)分頻器,可通過軟件設(shè)定分頻系數(shù)提供多種檔次的定時時間。AVR單片機獨有的“以定時器/計數(shù)器(單)雙向計數(shù)形成三角波,再與輸出比較匹配寄存器配合,生成占空比可變、頻率可變、相位可變方波的設(shè)計方法(即脈寬調(diào)制輸出PWM)”更是令人耳目一新。 </p><p> 增強性的高速同/異步串口,具有硬件產(chǎn)生校驗碼、硬件檢測和校驗偵錯、兩級接收緩沖、波特率自動調(diào)整定位
28、(接收時)、屏蔽數(shù)據(jù)幀等功能,提高了通信的可靠性,方便程序編寫,更便于組成分布式網(wǎng)絡(luò)和實現(xiàn)多機通信系統(tǒng)的復(fù)雜應(yīng)用,串口功能大大超過MCS-51/96單片機的串口,加之AVR單片機高速,中斷服務(wù)時間短,故可實現(xiàn)高波特率通訊。 </p><p> 面向字節(jié)的高速硬件串行接口TWI、SPI。TWI與I2C接口兼容,具備ACK信號硬件發(fā)送與識別、地址識別、總線仲裁等功能,能實現(xiàn)主/從機的收/發(fā)全部4種組合的多機通信。S
29、PI支持主/從機等4種組合的多機通信。 </p><p> AVR單片機有自動上電復(fù)位電路、獨立的看門狗電路、低電壓檢測電路BOD,多個復(fù)位源(自動上下電復(fù)位、外部復(fù)位、看門狗復(fù)位、BOD復(fù)位),可設(shè)置的啟動后延時運行程序,增強了嵌入式系統(tǒng)的可靠性。 </p><p> AVR單片機具有多種省電休眠模式,且可寬電壓運行(5-1.8V),抗干擾能力強,可降低一般8位機中的軟件抗干擾設(shè)計工
30、作量和硬件的使用量。 </p><p> AVR單片機技術(shù)體現(xiàn)了單片機集多種器件(包括FLASH程序存儲器、看門狗、EEPROM、同/異步串行口、TWI、SPI、A/D模數(shù)轉(zhuǎn)換器、定時器/計數(shù)器等和多種功能增強可靠性的復(fù)位系統(tǒng)、降低功耗抗干擾的休眠模式、品種多門類全的中斷系統(tǒng)、具輸入捕獲和比較匹配輸出等多樣化功能的定時器/計數(shù)器、具替換功能的I/O端口。</p><p> 3 彩屏控制
31、系統(tǒng)的硬件設(shè)計</p><p> 3.1 ATmega128單片機簡介</p><p> ATmega128高性能、低功耗的 AVR 8 位微處理器,它擁有133 條指令 – 大多數(shù)可以在一個時鐘周期內(nèi)完成32 x 8 通用工作寄存器 + 外設(shè)控制寄存器全靜態(tài)工作,工作于16 MHz時性能高達(dá)16 MIPS只需兩個時鐘周期的硬件乘法器。 </p><p> 非
32、易失性的程序和數(shù)據(jù)存儲器,128K 字節(jié)的系統(tǒng)內(nèi)可編程Flash壽命: 10,000 次寫/ 擦除周期;具有獨立鎖定位、可選擇的啟動代碼區(qū)通過片內(nèi)的啟動程序?qū)崿F(xiàn)系統(tǒng)內(nèi)編程真正的讀- 修改- 寫操作;4K字節(jié)的EEPROM壽命: 100,000 次寫/ 擦除周期,4K 字節(jié)的內(nèi)部SRAM,多達(dá)64K 字節(jié)的優(yōu)化的外部存儲器空間可以對鎖定位進(jìn)行編程以實現(xiàn)軟件加密可以通過ISP實現(xiàn)系統(tǒng)內(nèi)編程.</p><p> JT
33、AG 接口( 與IEEE 1149.1 標(biāo)準(zhǔn)兼容)遵循JTAG 標(biāo)準(zhǔn)的邊界掃描功能;支持?jǐn)U展的片內(nèi)調(diào)試;通過JTAG 接口實現(xiàn)對Flash, EEPROM, 熔絲位和鎖定位的編程。</p><p> 3.11端口功能簡介</p><p><b> 3.12外設(shè)特點</b></p><p> 兩個具有獨立的預(yù)分頻器和比較器功能的8 位定時器
34、/ 計數(shù)器 </p><p> – 兩個具有預(yù)分頻器、比較功能和捕捉功能的16 位定時器/ 計數(shù)器 </p><p> – 具有獨立預(yù)分頻器的實時時鐘計數(shù)器 </p><p> – 兩路8 位PWM </p><p> – 6路分辨率可編程(2 到16 位)的PWM </p><p> – 輸出比較調(diào)制器 &
35、lt;/p><p> – 8路10 位ADC 8 個單端通道 7 個差分通道 </p><p> -2 個具有可編程增益(1x, 10x, 或200x)的差分通道 </p><p> – 面向字節(jié)的兩線接口 </p><p> – 兩個可編程的串行USART </p><p> – 可工作于主機/ 從機模式的
36、SPI 串行接口 </p><p> – 具有獨立片內(nèi)振蕩器的可編程看門狗定時器 </p><p><b> – 片內(nèi)模擬比較器</b></p><p> 3.13特殊功能寄存器特點</p><p> – 上電復(fù)位以及可編程的掉電檢測</p><p> – 片內(nèi)經(jīng)過標(biāo)定的RC 振蕩器&l
37、t;/p><p> – 片內(nèi)/ 片外中斷源</p><p> – 6種睡眠模式: 空閑模式、ADC 噪聲抑制模式、省電模式、掉電模式、Standby 模式</p><p> 3.14擴展的Standby 模式</p><p> – 可以通過軟件進(jìn)行選擇的時鐘頻率</p><p> – 通過熔絲位可以選擇ATmeg
38、a103 兼容模式</p><p> – 全局上拉禁止功能</p><p> 3.2 硬件系統(tǒng)框架</p><p> 本彩屏控制系統(tǒng)包括TFT彩屏部分及MCU部分,鍵盤部分以及電源等部分組成。</p><p> 彩屏控制的系統(tǒng)框架如圖4-1 所示。在系統(tǒng)中,除了按鍵電路以外,還有顯示電路等。</p><p>
39、 圖4-1 系統(tǒng)框架圖</p><p> 4 主控模塊電路設(shè)計</p><p> 彩屏系統(tǒng)的主控電路主要涉及單片機的最小電路、復(fù)位電路和電源控制電路組成。</p><p> 4.1 ATmega128最小電路</p><p> ATmega128的時鐘電路是采用的是設(shè)置熔絲位啟用內(nèi)部晶振。下圖為ATmega128的最小系統(tǒng)。其中包括復(fù)
40、位電路以及仿真口電路等。</p><p><b> 下圖為總電路圖:</b></p><p> 4.2 帶SD卡的TFT屏幕使用方法</p><p> 2.4 寸彩屏分辨率 320x240,樣例程序使用 16bit 表示一個點顏色,格式 565。</p><p> 320x240x2=153600 字節(jié),即 15
41、0K,所以如果完整寫一幅圖片,需要 150KROM 容量,顯然</p><p> 51 系列單片機是不夠的(最大內(nèi)部 ROM 64K),所以需要 SD 存儲圖片。</p><p> 程序樣例中使用簡單的讀 SD 方式,由于 51 系列單片機速度較低,所以顯示圖片需要較長時間,程序中做簡易處理,只做基礎(chǔ)功能。</p><p> SD 卡使用如下,2G 以下 SD
42、 卡,格式化成 FAT16 格式。然后把需要顯示的圖片,大小 320x240像素,bmp 格式,通過轉(zhuǎn)換軟件處理成 bin 格式,并通過讀卡器存儲到 SD 卡,</p><p> 處理軟件使用 Image2LCD 軟件。</p><p> SD 卡中不含有任何其他文件,之前必須先格式化 SD 卡。</p><p> 存儲到 SD 卡截圖如下:</p>
43、;<p> 我們用 winhex 軟件查看,能得到如下圖信息</p><p> 如上圖,點擊“車 1.bin”文件,可以看到右端第 1 扇區(qū)地址是 520,這個是數(shù)據(jù)區(qū)最小的地址,</p><p> 我們把圖片依次存放,讀圖片也是從這個圖片開始,然后看左下角圈起來的 2 個數(shù)字,一個是</p><p> 物理扇區(qū)編號,一個是邏輯扇區(qū)編號,配套的
44、程序中由于沒有使用完整的 FAT 格式(可以自行</p><p> 研究),所以這里我們選擇物理編號 769,那么對應(yīng)的地址就是 769x512=393728,這個是 1G 卡</p><p> FAT16 格式化后的初始數(shù)據(jù),2G 以下不同容量的的初始地址不同,請使用 winhex 軟件查看對</p><p> 應(yīng)的物理扇區(qū)編號,并計算出對應(yīng)的地址,然后在樣
45、例程序中更改。</p><p><b> 5 電源電路的設(shè)計</b></p><p> 本系統(tǒng)中+5v電壓,采用最簡單的7805標(biāo)準(zhǔn)+5V電源作為單片機以及彩屏的供電系統(tǒng)。下圖為7805的典型電路</p><p> 圖4-8 電源電路圖</p><p> 還應(yīng)當(dāng)說明的是,盡管有很多型號的78系列三端穩(wěn)壓集成芯片,
46、其標(biāo)稱最大輸出電流均為1.5A,但在實際應(yīng)用中,該最大輸出電流值往往取決于兩個方面:第一,足夠的散熱面積;第二,不同的生產(chǎn)廠家。按照很多開發(fā)者的經(jīng)驗,ST公司的78系列三端穩(wěn)壓芯片能接近標(biāo)稱值。另外電源設(shè)計中,必須保證、7809、7812等的輸入電壓Vi和輸出電壓Vo的壓差大于2.5V,即Vi-Vo>2.5V,否則失去穩(wěn)壓能力,同時考慮到功耗問題,此壓差又不宜太,太大則增加功率消耗,增加芯片的溫升,不利于安全。</p>
47、<p><b> 6 軟件系統(tǒng)設(shè)計</b></p><p> 單片機程序采用模塊化程序設(shè)計,主要模塊包括:數(shù)據(jù)采集模塊、數(shù)據(jù)處理和監(jiān)控模塊。模塊化設(shè)計的優(yōu)點是可靠性高、可讀性好、升級簡單。主循環(huán)和中斷服務(wù)程序之間的數(shù)據(jù)交換可通過事件標(biāo)志和數(shù)據(jù)緩沖實現(xiàn)。中斷引發(fā)中斷請求,中斷服務(wù)程序根據(jù)中斷請求類型操作,設(shè)置事件和填充數(shù)據(jù)緩沖區(qū)再傳輸給主循環(huán)。本系統(tǒng)軟件設(shè)計的重點在于溫度信號
48、的運算處理、顯示及按鍵的處理等方面。</p><p> 6.1 軟件系統(tǒng)中的主模塊設(shè)計</p><p> 主模塊是系統(tǒng)軟件的主框架。結(jié)構(gòu)化程序設(shè)計一般有“自上而下”和“自下而上”兩種方式,“自上而下”法的核心是主框架的構(gòu)建。它的合理與否關(guān)系到程序最終功能的多少和性能的好壞。本系統(tǒng)的主模塊的程序框圖可用下圖來表示。其具體代碼實現(xiàn)以下分別討論。主模塊流程如圖5-1所示</p>
49、<p><b> 圖5-1 流程圖</b></p><p><b> 程序附1</b></p><p> #include "TFT_Driver.h"</p><p> #include "Define.h"</p><p> void
50、 InitIO_TFT(void)</p><p><b> {</b></p><p> DDRA |= 0xFF;</p><p> DDRC |= 0xF0;</p><p> _delay_ms(1);</p><p><b> }</b></p>
51、;<p><b> //</b></p><p> void Config_TFT(void)</p><p><b> {</b></p><p> //TFT_CS;</p><p> TFT_read_1;</p><p> //--- 設(shè)
52、置液晶屏為四級亮度 ----</p><p> Write_CMD(0x06);</p><p> Write_TFT_Data(0x04);</p><p><b> }</b></p><p><b> //</b></p><p> void Write_C
53、MD(unsigned char CMD)</p><p><b> {</b></p><p> PORTC &= 0xCF;</p><p> PORTC |= 0x10;</p><p> TFT_write_1;</p><p> TFT_bus = CMD;</p
54、><p> TFT_write_0;</p><p> TFT_write_1;</p><p><b> }</b></p><p><b> //</b></p><p> void Local_TFT_XY(int X, int Y)</p><
55、;p><b> {</b></p><p> PORTC &= 0xCF;</p><p> TFT_bus = (unsigned char)X;</p><p> TFT_write_1;</p><p> TFT_write_0;</p><p> TFT_bus
56、 = (unsigned char)(X>>8);</p><p> TFT_write_1;</p><p> TFT_write_0;</p><p> PORTC &= 0xCF;</p><p> PORTC |= 0x20;</p><p> TFT_bus = (unsign
57、ed char)Y;</p><p> TFT_write_1;</p><p> TFT_write_0;</p><p> TFT_bus = (unsigned char)(Y>>8);</p><p> TFT_write_1;</p><p> TFT_write_0;</p&g
58、t;<p><b> }</b></p><p><b> //</b></p><p> void Write_TFT_Data(unsigned char data)</p><p><b> {</b></p><p> PORTC |= 0x30
59、;</p><p> TFT_bus = data;</p><p> TFT_write_1;</p><p> TFT_write_0;</p><p><b> }</b></p><p><b> //</b></p><p>
60、 void BackColorCH(void)</p><p><b> {</b></p><p> Write_CMD(0x04);//設(shè)置背景色</p><p> Write_TFT_Data(blue);</p><p> Write_CMD(0x08);//清屏指令</p><p&g
61、t; _delay_ms(50); //延時24毫秒,讓清屏操作完畢</p><p> Write_CMD(0x01);//指針沿x軸方向移動,8點寫模式</p><p><b> }</b></p><p><b> //</b></p><p> void SetBLFLInc
62、direction(unsigned char Bcolor, unsigned char Fcolor, unsigned char direction)</p><p><b> {</b></p><p> Write_CMD(0x04);//設(shè)置背景色</p><p> Write_TFT_Data(Bcolor);</p
63、><p> Write_CMD(0x02);//設(shè)置前景色</p><p> Write_TFT_Data(Fcolor);</p><p> Write_CMD(direction);//指針沿x軸方向移動,8點寫模式</p><p><b> }</b></p><p><b>
64、 //</b></p><p> void DSP8x11(unsigned int px, unsigned int py, const unsigned char* data)</p><p><b> {</b></p><p> unsigned char y;</p><p> fo
65、r(y=0;y<11;y++)</p><p><b> {</b></p><p> Local_TFT_XY(px, py++);</p><p> //----------------填充數(shù)據(jù)---------------------</p><p> Write_TFT_Data(pgm_
66、read_byte(&data[y]));</p><p><b> }</b></p><p><b> }</b></p><p><b> //</b></p><p> void DSP24x24(unsigned int px, unsigned
67、int py, const unsigned char* data)</p><p><b> {</b></p><p> unsigned char x,y;</p><p> for(y=0; y<24; y++)</p><p><b> {</b></p&g
68、t;<p> Local_TFT_XY(px, py++);</p><p> //----------------填充數(shù)據(jù)---------------------</p><p> for(x=0; x<3; x++)</p><p><b> {</b></p><p> Wr
69、ite_TFT_Data(pgm_read_byte(&data[y*3 + x]));</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> // </b&g
70、t;</p><p> void DSP16x24(unsigned int px, unsigned int py, const unsigned char* data)</p><p><b> {</b></p><p> unsigned char x,y;</p><p> for(y=0; y&
71、lt;24; y++)</p><p><b> {</b></p><p> Local_TFT_XY(px, py++);</p><p> //----------------填充數(shù)據(jù)---------------------</p><p> for(x=0; x<2; x++)</p&
72、gt;<p><b> {</b></p><p> Write_TFT_Data(pgm_read_byte(&data[y*2 + x]));</p><p><b> }</b></p><p><b> }</b></p><p>
73、<b> }</b></p><p><b> // </b></p><p> void DSP32x32(unsigned int px, unsigned int py, const unsigned char* data)</p><p><b> {</b></p>
74、<p> unsigned char x,y;</p><p> for(y=0; y<32; y++)</p><p><b> {</b></p><p> Local_TFT_XY(px, py++);</p><p> //----------------填充數(shù)據(jù)------
75、---------------</p><p> for(x=0; x<4; x++)</p><p><b> {</b></p><p> Write_TFT_Data(pgm_read_byte(&data[y*4 + x]));</p><p><b> }</b&g
76、t;</p><p><b> }</b></p><p><b> }</b></p><p><b> // </b></p><p> void DSP32x32Str(const unsigned char *item, unsigned char count,
77、 unsigned char interval,</p><p> unsigned int px, unsigned int py, unsigned char Bcolor, unsigned char Fcolor)</p><p><b> {</b></p><p> //---- 設(shè)置背景色,前景色,指針沿x軸方向移動,8點
78、寫模式 -----</p><p> SetBLFLIncdirection(Bcolor, Fcolor, 0x01);</p><p> while(count--)</p><p><b> {</b></p><p> DSP32x32(px, py, _32_32[pgm_read_byte(item
79、++)]);</p><p> px += interval;</p><p><b> }</b></p><p><b> }</b></p><p><b> //</b></p><p> void DSP24x24Str(const
80、unsigned char *item, unsigned char count, unsigned char interval,</p><p> unsigned int px, unsigned int py, unsigned char Bcolor, unsigned char Fcolor)</p><p><b> {</b></p>
81、<p> unsigned char tmp = 0;</p><p> unsigned char tmpinterval = interval;</p><p> //---- 設(shè)置背景色,前景色,指針沿x軸方向移動,8點寫模式 -----</p><p> SetBLFLIncdirection(Bcolor, Fcolor, 0x01);&
82、lt;/p><p> while(count--)</p><p><b> {</b></p><p> tmp = pgm_read_byte(item++);</p><p> DSP24x24(px, py, _24_24[tmp]);</p><p> if(tmp < 36
83、){interval = 12;}</p><p> else {interval = tmpinterval;}</p><p> px += interval;</p><p><b> }</b></p><p><b> }</b></p><p><b
84、> //</b></p><p> void DSP16x24Str(const unsigned char *item, unsigned char count, unsigned char interval,</p><p> unsigned int px, unsigned int py, unsigned char Bcolor, unsigned cha
85、r Fcolor)</p><p><b> {</b></p><p> unsigned char tmp = 0;</p><p> //---- 設(shè)置背景色,前景色,指針沿x軸方向移動,8點寫模式 -----</p><p> SetBLFLIncdirection(Bcolor, Fcolor, 0x0
86、1);</p><p> while(count--)</p><p><b> {</b></p><p> tmp = pgm_read_byte(item++);</p><p> DSP16x24(px, py, _16_24[tmp]);</p><p> px += inte
87、rval;</p><p><b> }</b></p><p><b> }</b></p><p><b> //</b></p><p> void DSPSpace48x48(unsigned int px, unsigned int py,</p>
88、<p> unsigned char Bcolor, unsigned char Fcolor)</p><p><b> {</b></p><p> unsigned char x,y;</p><p> //---- 設(shè)置背景色,前景色,指針沿x軸方向移動,8點寫模式 -----</p><p
89、> SetBLFLIncdirection(Bcolor, Fcolor, 0x01);</p><p> for(y=0; y<48; y++)</p><p><b> {</b></p><p> Local_TFT_XY(px, py++);</p><p> //---------
90、填充數(shù)據(jù) ----------</p><p> for(x=0; x<6; x++)</p><p><b> {</b></p><p> Write_TFT_Data(0xFF);</p><p><b> }</b></p><p><b&
91、gt; }</b></p><p><b> }</b></p><p><b> //</b></p><p> void DrawButtonH48(const unsigned char btnlong, const unsigned char *caption, const unsigned c
92、har count, const unsigned char interval,</p><p> const unsigned char startpos, const unsigned int px, const unsigned int py, const unsigned char Bcolor, const unsigned char Fcolor)</p><p><b
93、> {</b></p><p> unsigned char n;</p><p> for(n=0; n<btnlong; n++)</p><p><b> {</b></p><p> DSPSpace48x48(px+48*n, py, Bcolor, Bcolor);<
94、/p><p><b> }</b></p><p> for(n=0; n<4; n++)</p><p><b> {</b></p><p> DrawLine(px+48*btnlong+n, py+n+1, 6, 1, gray2, gray2, linebold);</p
95、><p><b> }</b></p><p> for(n=0; n<4; n++)</p><p><b> {</b></p><p> DrawLine(px+n+1, py+48+n, 6*btnlong, 0, gray2, gray2, linebold);</p&
96、gt;<p><b> }</b></p><p> DSP24x24Str(caption, count, interval, px+startpos, py+12, Bcolor, Fcolor);</p><p><b> }</b></p><p><b> //</b>
97、</p><p> void FormatValue(unsigned char *pformat, const unsigned int value, </p><p> const char *type, const unsigned char pointcount)</p><p><b> {</b></p><
98、;p> switch(pointcount) </p><p><b> {</b></p><p> case 0: *pformat++ = value/10000 + 0x30;</p><p> *pformat++ = (value%10000)/1000 + 0x30;</p><p> *p
99、format++ = (value%1000)/100 + 0x30;</p><p> *pformat++ = (value%100)/10 + 0x30;</p><p> *pformat++ = value%10 + 0x30;</p><p><b> break;</b></p><p> case
100、 1:*pformat++ = value/10000 + 0x30;</p><p> *pformat++ = (value%10000)/1000 + 0x30;</p><p> *pformat++ = (value%1000)/100 + 0x30;</p><p> *pformat++ = (value%100)/10 + 0x30;<
101、/p><p> *pformat++ = '.';</p><p> *pformat++ = value%10 + 0x30;</p><p><b> break;</b></p><p> case 2:*pformat++ = value/10000 + 0x30;</p>&
102、lt;p> *pformat++ = (value%10000)/1000 + 0x30;</p><p> *pformat++ = (value%1000)/100 + 0x30;</p><p> *pformat++ = '.';</p><p> *pformat++ = (value%100)/10 + 0x30;&
103、lt;/p><p> *pformat++ = value%10 + 0x30;</p><p><b> break;</b></p><p> case 3:*pformat++ = value/10000 + 0x30;</p><p> *pformat++ = (value%10000)/1000 + 0
104、x30;</p><p> *pformat++ = '.';</p><p> *pformat++ = (value%1000)/100 + 0x30;</p><p> *pformat++ = (value%100)/10 + 0x30;</p><p> *pformat++ = value%10 +
105、 0x30;</p><p><b> break;</b></p><p><b> }</b></p><p> while(*type)</p><p><b> {</b></p><p> *pformat++ = *type++;
106、</p><p><b> }</b></p><p><b> }</b></p><p><b> //</b></p><p> void PrintValue(unsigned char startindex, unsigned char pointcount,
107、 const unsigned int value, const char *type, </p><p> unsigned char interval, unsigned int px, unsigned int py, unsigned char Bcolor, unsigned char Fcolor)</p><p><b> {</b></p&
108、gt;<p> unsigned char format[15] = {0};</p><p> unsigned char index = 0;</p><p> FormatValue(format, value, type, pointcount);</p><p> //---- 設(shè)置背景色,前景色,指針沿x軸方向移動,8點寫模式 -
109、----</p><p> SetBLFLIncdirection(Bcolor, Fcolor, 0x01);</p><p> index = startindex;</p><p> while(format[index] != 0)</p><p><b> {</b></p><p&
110、gt; DSP16x24(px, py, _16_24[format[index++]-0x20]);</p><p> px += interval;</p><p><b> }</b></p><p><b> }</b></p><p><b> //</b>
111、</p><p> void DSP8x11Value(unsigned char startindex, unsigned char pointcount, const unsigned int value, const char *type, unsigned char interval,</p><p> unsigned int px, unsigned int py, uns
112、igned char Bcolor, unsigned char Fcolor)</p><p><b> {</b></p><p> unsigned char format[15] = {0};</p><p> unsigned char index = 0;</p><p> FormatValue(f
113、ormat, value, type, pointcount);</p><p> //---- 設(shè)置背景色,前景色,指針沿x軸方向移動,8點寫模式 -----</p><p> SetBLFLIncdirection(Bcolor, Fcolor, 0x01);</p><p> index = startindex;</p><p>
114、; while(format[index] != 0)</p><p><b> {</b></p><p> DSP8x11(px, py, _8_11[format[index++]-0x20]);</p><p> px += interval;</p><p><b> }</b>
115、</p><p><b> }</b></p><p><b> //</b></p><p> void PrintTime(const void *time, unsigned char interchar, unsigned char time_type,</p><p> unsig
116、ned int px, unsigned int py, unsigned char Bcolor, unsigned char Fcolor)</p><p><b> {</b></p><p> unsigned char format[20] = {0};</p><p> unsigned char index = 0;<
117、/p><p> if(time_type == YYMDHMS)</p><p><b> {</b></p><p> format[0] = '2';</p><p> format[1] = '0';</p><p> format[2] = ((Dat
118、e_Time*)time)->year / 10 + 0x30;</p><p> format[3] = ((Date_Time*)time)->year % 10 + 0x30;</p><p> format[4] = '-';</p><p> format[5] = ((Date_Time*)time)->month
119、 / 10 + 0x30;</p><p> format[6] = ((Date_Time*)time)->month % 10 + 0x30;</p><p> format[7] = '-';</p><p> format[8] = ((Date_Time*)time)->day / 10 + 0x30;</p>
120、<p> format[9] = ((Date_Time*)time)->day % 10 + 0x30;</p><p> format[10] = ' ';</p><p> format[11] = ((Date_Time*)time)->hour / 10 + 0x30;</p><p> format[12
121、] = ((Date_Time*)time)->hour % 10 + 0x30;</p><p> format[13] = ':';</p><p> format[14] = ((Date_Time*)time)->minute / 10 + 0x30;</p><p> format[15] = ((Date_Time*)t
122、ime)->minute % 10 + 0x30;</p><p> format[16] = ':';</p><p> format[17] = ((Date_Time*)time)->second / 10 + 0x30;</p><p> format[18] = ((Date_Time*)time)->second
123、% 10 + 0x30;</p><p><b> }</b></p><p> else if(time_type == YMDHM)</p><p><b> {</b></p><p> format[0] = ((Date_Time*)time)->year / 10 +
124、0x30;</p><p> format[1] = ((Date_Time*)time)->year % 10 + 0x30;</p><p> format[2] = '-';</p><p> format[3] = ((Date_Time*)time)->month / 10 + 0x30;</p><p
125、> format[4] = ((Date_Time*)time)->month % 10 + 0x30;</p><p> format[5] = '-';</p><p> format[6] = ((Date_Time*)time)->day / 10 + 0x30;</p><p> format[7] = ((Dat
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文--基于單片機的溫度控制
- 基于單片機的步進(jìn)電機控制-畢業(yè)論文
- 基于單片機控制的步進(jìn)電機畢業(yè)論文
- 畢業(yè)論文——基于單片機的舵機控制裝置
- 基于單片機的步進(jìn)電機控制-畢業(yè)論文
- 基于單片機的步進(jìn)電機控制畢業(yè)論文
- 基于單片機的智能小車控制畢業(yè)論文
- 51單片機畢業(yè)論文---基于單片機的進(jìn)制換算
- 基于單片機控制的步進(jìn)電機的畢業(yè)論文
- 【畢業(yè)論文】基于單片機控制智能窗簾設(shè)計
- 基于單片機控制電子琴畢業(yè)論文
- 基于單片機控制電子琴畢業(yè)論文
- 基于單片機的溫度控制系統(tǒng)畢業(yè)論文
- 畢業(yè)論文---基于單片機控制的電梯控制器
- 畢業(yè)論文--基于單片機的溫度控制系統(tǒng)
- 基于單片機的電梯控制系統(tǒng)畢業(yè)論文
- 基于單片機控制的紅外烘手器畢業(yè)論文
- 基于單片機的溫度控制系統(tǒng)畢業(yè)論文
- 畢業(yè)論文基于單片機的繼電器控制設(shè)計
- 基于單片機的交通控制系統(tǒng)畢業(yè)論文
評論
0/150
提交評論