基于單片機的彩屏控制畢業(yè)論文_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  畢業(yè)設計(論文)</b></p><p>  作 者: 學 號: </p><p>  專 業(yè): 應用電子技術 </p><p>  班 級: 應電0991 </p

2、><p>  題 目: 基于單片機的彩屏控制 </p><p>  指導者: </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)對屏幕的清屏等操作,還可以連接相應的外圍電路,使其發(fā)揮更大的作用。</p><p>  本文首先描述系統(tǒng)硬件工作原理,并附以系統(tǒng)結構框圖

4、加以說明,著重介紹了本系統(tǒng)所應用的各硬件模塊的功能和它的工作過程;其次,詳細闡述了程序的各個模塊及其實現(xiàn)過程。本系統(tǒng)的主要設計思想是以硬件為基礎,軟件和硬件相結合,最終實現(xiàn)各個模塊的功能。</p><p>  關鍵字:單片機;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 功能與設計要求2</p><p>  2.2 方案論證2</p><p>  2.2.1 TFT屏幕的選擇2</p><p>  2.2.2 控制芯片的選擇3</p><p>  3 彩屏控制系統(tǒng)的硬件設計4<

12、;/p><p>  3.1 ATmega128單片機簡介4</p><p>  3.11端口功能簡介5</p><p>  3.12外設特點7</p><p>  3.13特殊功能寄存器特點8</p><p>  3.14擴展的Standby 模式8</p><p>  3.2 硬件系統(tǒng)框

13、架8</p><p>  4 主控模塊電路設計9</p><p>  4.1 ATmega128最小電路9</p><p>  4.2 帶SD卡的TFT屏幕使用方法11</p><p>  5 電源電路的設計13</p><p>  6 軟件系統(tǒng)設計14</p><p>  6.1

14、軟件系統(tǒng)中的主模塊設計14</p><p><b>  總 結28</b></p><p><b>  參考文獻29</b></p><p><b>  致 謝30</b></p><p><b>  1引 言</b></p

15、><p>  進入新千年,作為信息產業(yè)的重要構成部分—顯示器件正在加速推進其平板化的進程。目前,世界已進入“信息革命”時代,顯示技術及顯示器件在信息技術的發(fā)展過程中占據了十分重要的地位,電視、電腦、移動電話、BP機、PDA等可攜式設備以及各類儀器儀表上的顯示屏為人們的日常生活和工作提供著大量的信息。沒有顯示器,就不會有當今迅猛發(fā)展的信息技術。顯示器集電子、通信和信息處理技術于一體,被認為是電子工業(yè)在20世紀微電子、計

16、算機之后的又一重大發(fā)展機會。 </p><p>  科學技術的發(fā)展日新月異,顯示技術也在發(fā)生一場革命,特別是自90年代以來,隨著技術的突破及市場需求的急劇增長,使得以液晶顯示(LCD)為代表的平板顯示(FPD)技術迅速崛起。據Stanford公司預測,F(xiàn)PD市場規(guī)模正在以年增長率16.2%的速度發(fā)展著,到2000年FPD和CRT的產業(yè)都達到300億美元,CRT平均年增長率不足6.3%,遠低于FED的平均增長率,且

17、FPD增長率仍在繼續(xù)提高,CRT在繼續(xù)下降,替代趨勢十分明朗,可以說平板顯示將成為21世紀顯示技術的主流,其產業(yè)和市場在不斷擴增之中</p><p>  經過二十多年的研究、競爭、發(fā)展,平板顯示器已進入角色,成為新世紀顯示器的主流產品,目前競爭最激烈的平板顯示器有四個品種: </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 功能與設計要求</p><p>  這套TFT屏幕控制系統(tǒng)可以方便地實現(xiàn)

19、圖片與文字的顯示等功能,并通過單片機連接調節(jié)亮度等,還可以連接相應的外圍電路,實現(xiàn)多種功能。</p><p>  1、單片機控制。對TFT屏幕控制而言,最基本的功能是實現(xiàn)單個漢字的顯示。復雜一點的是對圖片進行處理。</p><p>  2、屏幕控制。要求,基本控制屏幕,讓其顯示指定漢字或代碼,并控制調節(jié)亮度等。</p><p>  3、采用7805系列芯片對電源進行

20、控制,對電源要求,無強干擾波,沒有電壓突變等。 </p><p><b>  2.2 方案論證</b></p><p>  2.2.1 TFT屏幕的選擇</p><p><b>  TFT屏幕</b></p><p>  TFT(Thin Film Transistor)即薄膜場效應晶體管,屬于有源

21、矩陣液晶顯示器中的一種。它可以“主動地”對屏幕上的各個獨立的像素進行控制,這樣可以大大提高反應時間。一般TFT的反應時間比較快,約80毫秒,而且可視角度大,一般可達到130度左右,主要運用在高端產品。所謂薄膜場效應晶體管,是指液晶顯示器上的每一液晶象素點都是由集成在其后的薄膜晶體管來驅動。從而可以做到高速度、高亮度、高對比度顯示屏幕信息。TFT屬于有源矩陣液晶顯示器,在技術上采用了“主動式矩陣”的方式來驅動,方法是利用薄膜技術所作成的電

22、晶體電極,利用掃描的方法“主動拉”控制任意一個顯示點的開與關,光源照射時先通過下偏光板向上透出,借助液晶分子傳導光線,通過遮光和透光來達到顯示的目的。</p><p>  TFT-LCD液晶顯示屏是薄膜晶體管型液晶顯示屏,也就是“真彩”(TFT)。TFT液晶為每個像素都設有一個半導體開關,每個像素都可以通過點脈沖直接控制,因而每個節(jié)點都相對獨立,并可以連續(xù)控制,不僅提高了顯示屏的反應速度,同時可以精確控制顯示色階

23、,所以TFT液晶的色彩更真。TFT液晶顯示屏的特點是亮度好、對比度高、層次感強、顏色鮮艷,但也存在著比較耗電和成本較高的不足。TFT液晶技術加快了手機彩屏的發(fā)展。新一代的彩屏手機中很多都支持65536色顯示,有的甚至支持16萬色顯示,這時TFT的高對比度,色彩豐富的優(yōu)勢就非常重要了。</p><p>  TFT型的液晶顯示器主要的構成包括:螢光管、導光板、偏光板、濾光板、玻璃基板、配向膜、液晶材料、薄模式晶體管等

24、等。</p><p>  TFT的亮度好,對比度高,層次感強,顏色鮮艷。缺點是比較耗電,成本較高。</p><p>  2.2.2 控制芯片的選擇</p><p>  AVR單片機硬件結構采取8位機與16位機,即采用局部寄存器存堆(32個寄存器文件)和單體高速輸入/輸出的方案(即輸入捕獲寄存器、輸出比較匹配寄存器及相應控制邏輯)。提高了指令執(zhí)行速度(1Mips/MH

25、z),克服了瓶頸現(xiàn)象,增強了功能;同時又減少了對外設管理的開銷,相對簡化了硬件結構,降低了成本。故AVR單片機在軟/硬件開銷、速度、性能和成本諸多方面取得了優(yōu)化平衡,是高性價比的單片機。 </p><p>  AVR單片機內嵌高質量的Flash程序存儲器,擦寫方便,支持ISP和IAP,便于產品的調試、開發(fā)、生產、更新。內嵌長壽命的EEProm可長期保存關鍵數(shù)據,避免斷電丟失。片內大容量的RAM不僅能滿足一般場合的

26、使用,同時也更有效的支持使用高級語言開發(fā)系統(tǒng)程序,并可像MCS-51單片機那樣擴展外部 RAM。 </p><p>  AVR單片機的I/O線全部帶可設置的上拉電阻、可單獨設定為輸入/輸出、可設定(初始)高阻輸入、驅動能力強(可省去功率驅動器件)等特性,使的得I/O口資源靈活、功能強大、可充分利用。 </p><p>  AVR單片機片內具備多種獨立的時鐘分頻器,分別供UART、I2C、S

27、PI使用。其中與8/16位定時器配合的具有多達10 位的預分頻器,可通過軟件設定分頻系數(shù)提供多種檔次的定時時間。AVR單片機獨有的“以定時器/計數(shù)器(單)雙向計數(shù)形成三角波,再與輸出比較匹配寄存器配合,生成占空比可變、頻率可變、相位可變方波的設計方法(即脈寬調制輸出PWM)”更是令人耳目一新。 </p><p>  增強性的高速同/異步串口,具有硬件產生校驗碼、硬件檢測和校驗偵錯、兩級接收緩沖、波特率自動調整定位

28、(接收時)、屏蔽數(shù)據幀等功能,提高了通信的可靠性,方便程序編寫,更便于組成分布式網絡和實現(xiàn)多機通信系統(tǒng)的復雜應用,串口功能大大超過MCS-51/96單片機的串口,加之AVR單片機高速,中斷服務時間短,故可實現(xiàn)高波特率通訊。 </p><p>  面向字節(jié)的高速硬件串行接口TWI、SPI。TWI與I2C接口兼容,具備ACK信號硬件發(fā)送與識別、地址識別、總線仲裁等功能,能實現(xiàn)主/從機的收/發(fā)全部4種組合的多機通信。S

29、PI支持主/從機等4種組合的多機通信。 </p><p>  AVR單片機有自動上電復位電路、獨立的看門狗電路、低電壓檢測電路BOD,多個復位源(自動上下電復位、外部復位、看門狗復位、BOD復位),可設置的啟動后延時運行程序,增強了嵌入式系統(tǒng)的可靠性。 </p><p>  AVR單片機具有多種省電休眠模式,且可寬電壓運行(5-1.8V),抗干擾能力強,可降低一般8位機中的軟件抗干擾設計工

30、作量和硬件的使用量。 </p><p>  AVR單片機技術體現(xiàn)了單片機集多種器件(包括FLASH程序存儲器、看門狗、EEPROM、同/異步串行口、TWI、SPI、A/D模數(shù)轉換器、定時器/計數(shù)器等和多種功能增強可靠性的復位系統(tǒng)、降低功耗抗干擾的休眠模式、品種多門類全的中斷系統(tǒng)、具輸入捕獲和比較匹配輸出等多樣化功能的定時器/計數(shù)器、具替換功能的I/O端口。</p><p>  3 彩屏控制

31、系統(tǒng)的硬件設計</p><p>  3.1 ATmega128單片機簡介</p><p>  ATmega128高性能、低功耗的 AVR 8 位微處理器,它擁有133 條指令 – 大多數(shù)可以在一個時鐘周期內完成32 x 8 通用工作寄存器 + 外設控制寄存器全靜態(tài)工作,工作于16 MHz時性能高達16 MIPS只需兩個時鐘周期的硬件乘法器。 </p><p>  非

32、易失性的程序和數(shù)據存儲器,128K 字節(jié)的系統(tǒng)內可編程Flash壽命: 10,000 次寫/ 擦除周期;具有獨立鎖定位、可選擇的啟動代碼區(qū)通過片內的啟動程序實現(xiàn)系統(tǒng)內編程真正的讀- 修改- 寫操作;4K字節(jié)的EEPROM壽命: 100,000 次寫/ 擦除周期,4K 字節(jié)的內部SRAM,多達64K 字節(jié)的優(yōu)化的外部存儲器空間可以對鎖定位進行編程以實現(xiàn)軟件加密可以通過ISP實現(xiàn)系統(tǒng)內編程.</p><p>  JT

33、AG 接口( 與IEEE 1149.1 標準兼容)遵循JTAG 標準的邊界掃描功能;支持擴展的片內調試;通過JTAG 接口實現(xiàn)對Flash, EEPROM, 熔絲位和鎖定位的編程。</p><p>  3.11端口功能簡介</p><p><b>  3.12外設特點</b></p><p>  兩個具有獨立的預分頻器和比較器功能的8 位定時器

34、/ 計數(shù)器 </p><p>  – 兩個具有預分頻器、比較功能和捕捉功能的16 位定時器/ 計數(shù)器 </p><p>  – 具有獨立預分頻器的實時時鐘計數(shù)器 </p><p>  – 兩路8 位PWM </p><p>  – 6路分辨率可編程(2 到16 位)的PWM </p><p>  – 輸出比較調制器 &

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>  – 具有獨立片內振蕩器的可編程看門狗定時器 </p><p><b>  – 片內模擬比較器</b></p><p>  3.13特殊功能寄存器特點</p><p>  – 上電復位以及可編程的掉電檢測</p><p>  – 片內經過標定的RC 振蕩器&l

37、t;/p><p>  – 片內/ 片外中斷源</p><p>  – 6種睡眠模式: 空閑模式、ADC 噪聲抑制模式、省電模式、掉電模式、Standby 模式</p><p>  3.14擴展的Standby 模式</p><p>  – 可以通過軟件進行選擇的時鐘頻率</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 主控模塊電路設計</p><p>  彩屏系統(tǒng)的主控電路主要涉及單片機的最小電路、復位電路和電源控制電路組成。</p><p>  4.1 ATmega128最小電路</p><p>  ATmega128的時鐘電路是采用的是設置熔絲位啟用內部晶振。下圖為ATmega128的最小系統(tǒng)。其中包括復

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 系列單片機是不夠的(最大內部 ROM 64K),所以需要 SD 存儲圖片。</p><p>  程序樣例中使用簡單的讀 SD 方式,由于 51 系列單片機速度較低,所以顯示圖片需要較長時間,程序中做簡易處理,只做基礎功能。</p><p>  SD 卡使用如下,2G 以下 SD

42、 卡,格式化成 FAT16 格式。然后把需要顯示的圖片,大小 320x240像素,bmp 格式,通過轉換軟件處理成 bin 格式,并通過讀卡器存儲到 SD 卡,</p><p>  處理軟件使用 Image2LCD 軟件。</p><p>  SD 卡中不含有任何其他文件,之前必須先格式化 SD 卡。</p><p>  存儲到 SD 卡截圖如下:</p>

43、;<p>  我們用 winhex 軟件查看,能得到如下圖信息</p><p>  如上圖,點擊“車 1.bin”文件,可以看到右端第 1 扇區(qū)地址是 520,這個是數(shù)據區(qū)最小的地址,</p><p>  我們把圖片依次存放,讀圖片也是從這個圖片開始,然后看左下角圈起來的 2 個數(shù)字,一個是</p><p>  物理扇區(qū)編號,一個是邏輯扇區(qū)編號,配套的

44、程序中由于沒有使用完整的 FAT 格式(可以自行</p><p>  研究),所以這里我們選擇物理編號 769,那么對應的地址就是 769x512=393728,這個是 1G 卡</p><p>  FAT16 格式化后的初始數(shù)據,2G 以下不同容量的的初始地址不同,請使用 winhex 軟件查看對</p><p>  應的物理扇區(qū)編號,并計算出對應的地址,然后在樣

45、例程序中更改。</p><p><b>  5 電源電路的設計</b></p><p>  本系統(tǒng)中+5v電壓,采用最簡單的7805標準+5V電源作為單片機以及彩屏的供電系統(tǒng)。下圖為7805的典型電路</p><p>  圖4-8 電源電路圖</p><p>  還應當說明的是,盡管有很多型號的78系列三端穩(wěn)壓集成芯片,

46、其標稱最大輸出電流均為1.5A,但在實際應用中,該最大輸出電流值往往取決于兩個方面:第一,足夠的散熱面積;第二,不同的生產廠家。按照很多開發(fā)者的經驗,ST公司的78系列三端穩(wěn)壓芯片能接近標稱值。另外電源設計中,必須保證、7809、7812等的輸入電壓Vi和輸出電壓Vo的壓差大于2.5V,即Vi-Vo>2.5V,否則失去穩(wěn)壓能力,同時考慮到功耗問題,此壓差又不宜太,太大則增加功率消耗,增加芯片的溫升,不利于安全。</p>

47、<p><b>  6 軟件系統(tǒng)設計</b></p><p>  單片機程序采用模塊化程序設計,主要模塊包括:數(shù)據采集模塊、數(shù)據處理和監(jiān)控模塊。模塊化設計的優(yōu)點是可靠性高、可讀性好、升級簡單。主循環(huán)和中斷服務程序之間的數(shù)據交換可通過事件標志和數(shù)據緩沖實現(xiàn)。中斷引發(fā)中斷請求,中斷服務程序根據中斷請求類型操作,設置事件和填充數(shù)據緩沖區(qū)再傳輸給主循環(huán)。本系統(tǒng)軟件設計的重點在于溫度信號

48、的運算處理、顯示及按鍵的處理等方面。</p><p>  6.1 軟件系統(tǒng)中的主模塊設計</p><p>  主模塊是系統(tǒng)軟件的主框架。結構化程序設計一般有“自上而下”和“自下而上”兩種方式,“自上而下”法的核心是主框架的構建。它的合理與否關系到程序最終功能的多少和性能的好壞。本系統(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>  //--- 設

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);//設置背景色</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);//設置背景色</p><p>  Write_TFT_Data(Bcolor);</p

63、><p>  Write_CMD(0x02);//設置前景色</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ù)據---------------------</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ù)據---------------------</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ù)據---------------------</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ù)據------

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>  //---- 設置背景色,前景色,指針沿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>  //---- 設置背景色,前景色,指針沿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>  //---- 設置背景色,前景色,指針沿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>  //---- 設置背景色,前景色,指針沿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ù)據 ----------</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>  //---- 設置背景色,前景色,指針沿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>  //---- 設置背景色,前景色,指針沿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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論