版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)設(shè)計(jì)(論文)</b></p><p> 作 者: 學(xué) 號(hào): </p><p> 專 業(yè): 應(yīng)用電子技術(shù) </p><p> 班 級(jí): 應(yīng)電0991 </p
2、><p> 題 目: 基于單片機(jī)的彩屏控制 </p><p> 指導(dǎo)者: </p><p> 2012年 05 月 15 日</p><p><b> 摘 要</b></p><p> 本文提出的彩屏控制系統(tǒng)以
3、單片機(jī)(ATmega128L)為核心,由控制部分、顯示部分(320*240TFT)組成。該系統(tǒng)大部分功能通過硬件來實(shí)現(xiàn),電路簡(jiǎn)單明了,系統(tǒng)穩(wěn)定性很高。</p><p> 這套彩屏控制系統(tǒng)可以方便地實(shí)現(xiàn)圖片顯示,動(dòng)畫等功能,并通過與單片機(jī)連接的鍵盤可以實(shí)現(xiàn)對(duì)屏幕的清屏等操作,還可以連接相應(yīng)的外圍電路,使其發(fā)揮更大的作用。</p><p> 本文首先描述系統(tǒng)硬件工作原理,并附以系統(tǒng)結(jié)構(gòu)框圖
4、加以說明,著重介紹了本系統(tǒng)所應(yīng)用的各硬件模塊的功能和它的工作過程;其次,詳細(xì)闡述了程序的各個(gè)模塊及其實(shí)現(xiàn)過程。本系統(tǒng)的主要設(shè)計(jì)思想是以硬件為基礎(chǔ),軟件和硬件相結(jié)合,最終實(shí)現(xiàn)各個(gè)模塊的功能。</p><p> 關(guān)鍵字:?jiǎn)纹瑱C(jī);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è)計(jì)要求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è)計(jì)4<
12、;/p><p> 3.1 ATmega128單片機(jī)簡(jiǎn)介4</p><p> 3.11端口功能簡(jiǎn)介5</p><p> 3.12外設(shè)特點(diǎn)7</p><p> 3.13特殊功能寄存器特點(diǎn)8</p><p> 3.14擴(kuò)展的Standby 模式8</p><p> 3.2 硬件系統(tǒng)框
13、架8</p><p> 4 主控模塊電路設(shè)計(jì)9</p><p> 4.1 ATmega128最小電路9</p><p> 4.2 帶SD卡的TFT屏幕使用方法11</p><p> 5 電源電路的設(shè)計(jì)13</p><p> 6 軟件系統(tǒng)設(shè)計(jì)14</p><p> 6.1
14、軟件系統(tǒng)中的主模塊設(shè)計(jì)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ù)及顯示器件在信息技術(shù)的發(fā)展過程中占據(jù)了十分重要的地位,電視、電腦、移動(dòng)電話、BP機(jī)、PDA等可攜式設(shè)備以及各類儀器儀表上的顯示屏為人們的日常生活和工作提供著大量的信息。沒有顯示器,就不會(huì)有當(dāng)今迅猛發(fā)展的信息技術(shù)。顯示器集電子、通信和信息處理技術(shù)于一體,被認(rèn)為是電子工業(yè)在20世紀(jì)微電子、計(jì)
16、算機(jī)之后的又一重大發(fā)展機(jī)會(huì)。 </p><p> 科學(xué)技術(shù)的發(fā)展日新月異,顯示技術(shù)也在發(fā)生一場(chǎng)革命,特別是自90年代以來,隨著技術(shù)的突破及市場(chǎng)需求的急劇增長(zhǎng),使得以液晶顯示(LCD)為代表的平板顯示(FPD)技術(shù)迅速崛起。據(jù)Stanford公司預(yù)測(cè),F(xiàn)PD市場(chǎng)規(guī)模正在以年增長(zhǎng)率16.2%的速度發(fā)展著,到2000年FPD和CRT的產(chǎn)業(yè)都達(dá)到300億美元,CRT平均年增長(zhǎng)率不足6.3%,遠(yuǎn)低于FED的平均增長(zhǎng)率,且
17、FPD增長(zhǎng)率仍在繼續(xù)提高,CRT在繼續(xù)下降,替代趨勢(shì)十分明朗,可以說平板顯示將成為21世紀(jì)顯示技術(shù)的主流,其產(chǎn)業(yè)和市場(chǎng)在不斷擴(kuò)增之中</p><p> 經(jīng)過二十多年的研究、競(jìng)爭(zhēng)、發(fā)展,平板顯示器已進(jìn)入角色,成為新世紀(jì)顯示器的主流產(chǎn)品,目前競(jìng)爭(zhēng)最激烈的平板顯示器有四個(gè)品種: </p><p> 1.場(chǎng)致發(fā)射平板顯示器(FED) </p><p> 2.等離子體平
18、板顯示器(PDP)</p><p> 3.有機(jī)薄膜電致發(fā)光器(OLED) </p><p> 4.薄膜晶體管液晶平板顯示器(TFT-LCD) </p><p><b> 2 方案論證</b></p><p> 2.1 功能與設(shè)計(jì)要求</p><p> 這套TFT屏幕控制系統(tǒng)可以方便地實(shí)現(xiàn)
19、圖片與文字的顯示等功能,并通過單片機(jī)連接調(diào)節(jié)亮度等,還可以連接相應(yīng)的外圍電路,實(shí)現(xiàn)多種功能。</p><p> 1、單片機(jī)控制。對(duì)TFT屏幕控制而言,最基本的功能是實(shí)現(xiàn)單個(gè)漢字的顯示。復(fù)雜一點(diǎn)的是對(duì)圖片進(jìn)行處理。</p><p> 2、屏幕控制。要求,基本控制屏幕,讓其顯示指定漢字或代碼,并控制調(diào)節(jié)亮度等。</p><p> 3、采用7805系列芯片對(duì)電源進(jìn)行
20、控制,對(duì)電源要求,無強(qiáng)干擾波,沒有電壓突變等。 </p><p><b> 2.2 方案論證</b></p><p> 2.2.1 TFT屏幕的選擇</p><p><b> TFT屏幕</b></p><p> TFT(Thin Film Transistor)即薄膜場(chǎng)效應(yīng)晶體管,屬于有源
21、矩陣液晶顯示器中的一種。它可以“主動(dòng)地”對(duì)屏幕上的各個(gè)獨(dú)立的像素進(jìn)行控制,這樣可以大大提高反應(yīng)時(shí)間。一般TFT的反應(yīng)時(shí)間比較快,約80毫秒,而且可視角度大,一般可達(dá)到130度左右,主要運(yùn)用在高端產(chǎn)品。所謂薄膜場(chǎng)效應(yīng)晶體管,是指液晶顯示器上的每一液晶象素點(diǎn)都是由集成在其后的薄膜晶體管來驅(qū)動(dòng)。從而可以做到高速度、高亮度、高對(duì)比度顯示屏幕信息。TFT屬于有源矩陣液晶顯示器,在技術(shù)上采用了“主動(dòng)式矩陣”的方式來驅(qū)動(dòng),方法是利用薄膜技術(shù)所作成的電
22、晶體電極,利用掃描的方法“主動(dòng)拉”控制任意一個(gè)顯示點(diǎn)的開與關(guān),光源照射時(shí)先通過下偏光板向上透出,借助液晶分子傳導(dǎo)光線,通過遮光和透光來達(dá)到顯示的目的。</p><p> TFT-LCD液晶顯示屏是薄膜晶體管型液晶顯示屏,也就是“真彩”(TFT)。TFT液晶為每個(gè)像素都設(shè)有一個(gè)半導(dǎo)體開關(guān),每個(gè)像素都可以通過點(diǎn)脈沖直接控制,因而每個(gè)節(jié)點(diǎn)都相對(duì)獨(dú)立,并可以連續(xù)控制,不僅提高了顯示屏的反應(yīng)速度,同時(shí)可以精確控制顯示色階
23、,所以TFT液晶的色彩更真。TFT液晶顯示屏的特點(diǎn)是亮度好、對(duì)比度高、層次感強(qiáng)、顏色鮮艷,但也存在著比較耗電和成本較高的不足。TFT液晶技術(shù)加快了手機(jī)彩屏的發(fā)展。新一代的彩屏手機(jī)中很多都支持65536色顯示,有的甚至支持16萬色顯示,這時(shí)TFT的高對(duì)比度,色彩豐富的優(yōu)勢(shì)就非常重要了。</p><p> TFT型的液晶顯示器主要的構(gòu)成包括:螢光管、導(dǎo)光板、偏光板、濾光板、玻璃基板、配向膜、液晶材料、薄模式晶體管等
24、等。</p><p> TFT的亮度好,對(duì)比度高,層次感強(qiáng),顏色鮮艷。缺點(diǎn)是比較耗電,成本較高。</p><p> 2.2.2 控制芯片的選擇</p><p> AVR單片機(jī)硬件結(jié)構(gòu)采取8位機(jī)與16位機(jī),即采用局部寄存器存堆(32個(gè)寄存器文件)和單體高速輸入/輸出的方案(即輸入捕獲寄存器、輸出比較匹配寄存器及相應(yīng)控制邏輯)。提高了指令執(zhí)行速度(1Mips/MH
25、z),克服了瓶頸現(xiàn)象,增強(qiáng)了功能;同時(shí)又減少了對(duì)外設(shè)管理的開銷,相對(duì)簡(jiǎn)化了硬件結(jié)構(gòu),降低了成本。故AVR單片機(jī)在軟/硬件開銷、速度、性能和成本諸多方面取得了優(yōu)化平衡,是高性價(jià)比的單片機(jī)。 </p><p> AVR單片機(jī)內(nèi)嵌高質(zhì)量的Flash程序存儲(chǔ)器,擦寫方便,支持ISP和IAP,便于產(chǎn)品的調(diào)試、開發(fā)、生產(chǎn)、更新。內(nèi)嵌長(zhǎng)壽命的EEProm可長(zhǎng)期保存關(guān)鍵數(shù)據(jù),避免斷電丟失。片內(nèi)大容量的RAM不僅能滿足一般場(chǎng)合的
26、使用,同時(shí)也更有效的支持使用高級(jí)語言開發(fā)系統(tǒng)程序,并可像MCS-51單片機(jī)那樣擴(kuò)展外部 RAM。 </p><p> AVR單片機(jī)的I/O線全部帶可設(shè)置的上拉電阻、可單獨(dú)設(shè)定為輸入/輸出、可設(shè)定(初始)高阻輸入、驅(qū)動(dòng)能力強(qiáng)(可省去功率驅(qū)動(dòng)器件)等特性,使的得I/O口資源靈活、功能強(qiáng)大、可充分利用。 </p><p> AVR單片機(jī)片內(nèi)具備多種獨(dú)立的時(shí)鐘分頻器,分別供UART、I2C、S
27、PI使用。其中與8/16位定時(shí)器配合的具有多達(dá)10 位的預(yù)分頻器,可通過軟件設(shè)定分頻系數(shù)提供多種檔次的定時(shí)時(shí)間。AVR單片機(jī)獨(dú)有的“以定時(shí)器/計(jì)數(shù)器(單)雙向計(jì)數(shù)形成三角波,再與輸出比較匹配寄存器配合,生成占空比可變、頻率可變、相位可變方波的設(shè)計(jì)方法(即脈寬調(diào)制輸出PWM)”更是令人耳目一新。 </p><p> 增強(qiáng)性的高速同/異步串口,具有硬件產(chǎn)生校驗(yàn)碼、硬件檢測(cè)和校驗(yàn)偵錯(cuò)、兩級(jí)接收緩沖、波特率自動(dòng)調(diào)整定位
28、(接收時(shí))、屏蔽數(shù)據(jù)幀等功能,提高了通信的可靠性,方便程序編寫,更便于組成分布式網(wǎng)絡(luò)和實(shí)現(xiàn)多機(jī)通信系統(tǒng)的復(fù)雜應(yīng)用,串口功能大大超過MCS-51/96單片機(jī)的串口,加之AVR單片機(jī)高速,中斷服務(wù)時(shí)間短,故可實(shí)現(xiàn)高波特率通訊。 </p><p> 面向字節(jié)的高速硬件串行接口TWI、SPI。TWI與I2C接口兼容,具備ACK信號(hào)硬件發(fā)送與識(shí)別、地址識(shí)別、總線仲裁等功能,能實(shí)現(xiàn)主/從機(jī)的收/發(fā)全部4種組合的多機(jī)通信。S
29、PI支持主/從機(jī)等4種組合的多機(jī)通信。 </p><p> AVR單片機(jī)有自動(dòng)上電復(fù)位電路、獨(dú)立的看門狗電路、低電壓檢測(cè)電路BOD,多個(gè)復(fù)位源(自動(dòng)上下電復(fù)位、外部復(fù)位、看門狗復(fù)位、BOD復(fù)位),可設(shè)置的啟動(dòng)后延時(shí)運(yùn)行程序,增強(qiáng)了嵌入式系統(tǒng)的可靠性。 </p><p> AVR單片機(jī)具有多種省電休眠模式,且可寬電壓運(yùn)行(5-1.8V),抗干擾能力強(qiáng),可降低一般8位機(jī)中的軟件抗干擾設(shè)計(jì)工
30、作量和硬件的使用量。 </p><p> AVR單片機(jī)技術(shù)體現(xiàn)了單片機(jī)集多種器件(包括FLASH程序存儲(chǔ)器、看門狗、EEPROM、同/異步串行口、TWI、SPI、A/D模數(shù)轉(zhuǎn)換器、定時(shí)器/計(jì)數(shù)器等和多種功能增強(qiáng)可靠性的復(fù)位系統(tǒng)、降低功耗抗干擾的休眠模式、品種多門類全的中斷系統(tǒng)、具輸入捕獲和比較匹配輸出等多樣化功能的定時(shí)器/計(jì)數(shù)器、具替換功能的I/O端口。</p><p> 3 彩屏控制
31、系統(tǒng)的硬件設(shè)計(jì)</p><p> 3.1 ATmega128單片機(jī)簡(jiǎn)介</p><p> ATmega128高性能、低功耗的 AVR 8 位微處理器,它擁有133 條指令 – 大多數(shù)可以在一個(gè)時(shí)鐘周期內(nèi)完成32 x 8 通用工作寄存器 + 外設(shè)控制寄存器全靜態(tài)工作,工作于16 MHz時(shí)性能高達(dá)16 MIPS只需兩個(gè)時(shí)鐘周期的硬件乘法器。 </p><p> 非
32、易失性的程序和數(shù)據(jù)存儲(chǔ)器,128K 字節(jié)的系統(tǒng)內(nèi)可編程Flash壽命: 10,000 次寫/ 擦除周期;具有獨(dú)立鎖定位、可選擇的啟動(dòng)代碼區(qū)通過片內(nèi)的啟動(dòng)程序?qū)崿F(xiàn)系統(tǒng)內(nèi)編程真正的讀- 修改- 寫操作;4K字節(jié)的EEPROM壽命: 100,000 次寫/ 擦除周期,4K 字節(jié)的內(nèi)部SRAM,多達(dá)64K 字節(jié)的優(yōu)化的外部存儲(chǔ)器空間可以對(duì)鎖定位進(jìn)行編程以實(shí)現(xiàn)軟件加密可以通過ISP實(shí)現(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 接口實(shí)現(xiàn)對(duì)Flash, EEPROM, 熔絲位和鎖定位的編程。</p><p> 3.11端口功能簡(jiǎn)介</p><p><b> 3.12外設(shè)特點(diǎn)</b></p><p> 兩個(gè)具有獨(dú)立的預(yù)分頻器和比較器功能的8 位定時(shí)器
34、/ 計(jì)數(shù)器 </p><p> – 兩個(gè)具有預(yù)分頻器、比較功能和捕捉功能的16 位定時(shí)器/ 計(jì)數(shù)器 </p><p> – 具有獨(dú)立預(yù)分頻器的實(shí)時(shí)時(shí)鐘計(jì)數(shù)器 </p><p> – 兩路8 位PWM </p><p> – 6路分辨率可編程(2 到16 位)的PWM </p><p> – 輸出比較調(diào)制器 &
35、lt;/p><p> – 8路10 位ADC 8 個(gè)單端通道 7 個(gè)差分通道 </p><p> -2 個(gè)具有可編程增益(1x, 10x, 或200x)的差分通道 </p><p> – 面向字節(jié)的兩線接口 </p><p> – 兩個(gè)可編程的串行USART </p><p> – 可工作于主機(jī)/ 從機(jī)模式的
36、SPI 串行接口 </p><p> – 具有獨(dú)立片內(nèi)振蕩器的可編程看門狗定時(shí)器 </p><p><b> – 片內(nèi)模擬比較器</b></p><p> 3.13特殊功能寄存器特點(diǎn)</p><p> – 上電復(fù)位以及可編程的掉電檢測(cè)</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擴(kuò)展的Standby 模式</p><p> – 可以通過軟件進(jìn)行選擇的時(shí)鐘頻率</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è)計(jì)</p><p> 彩屏系統(tǒng)的主控電路主要涉及單片機(jī)的最小電路、復(fù)位電路和電源控制電路組成。</p><p> 4.1 ATmega128最小電路</p><p> ATmega128的時(shí)鐘電路是采用的是設(shè)置熔絲位啟用內(nèi)部晶振。下圖為ATmega128的最小系統(tǒng)。其中包括復(fù)
40、位電路以及仿真口電路等。</p><p><b> 下圖為總電路圖:</b></p><p> 4.2 帶SD卡的TFT屏幕使用方法</p><p> 2.4 寸彩屏分辨率 320x240,樣例程序使用 16bit 表示一個(gè)點(diǎn)顏色,格式 565。</p><p> 320x240x2=153600 字節(jié),即 15
41、0K,所以如果完整寫一幅圖片,需要 150KROM 容量,顯然</p><p> 51 系列單片機(jī)是不夠的(最大內(nèi)部 ROM 64K),所以需要 SD 存儲(chǔ)圖片。</p><p> 程序樣例中使用簡(jiǎn)單的讀 SD 方式,由于 51 系列單片機(jī)速度較低,所以顯示圖片需要較長(zhǎng)時(shí)間,程序中做簡(jiǎn)易處理,只做基礎(chǔ)功能。</p><p> SD 卡使用如下,2G 以下 SD
42、 卡,格式化成 FAT16 格式。然后把需要顯示的圖片,大小 320x240像素,bmp 格式,通過轉(zhuǎn)換軟件處理成 bin 格式,并通過讀卡器存儲(chǔ)到 SD 卡,</p><p> 處理軟件使用 Image2LCD 軟件。</p><p> SD 卡中不含有任何其他文件,之前必須先格式化 SD 卡。</p><p> 存儲(chǔ)到 SD 卡截圖如下:</p>
43、;<p> 我們用 winhex 軟件查看,能得到如下圖信息</p><p> 如上圖,點(diǎn)擊“車 1.bin”文件,可以看到右端第 1 扇區(qū)地址是 520,這個(gè)是數(shù)據(jù)區(qū)最小的地址,</p><p> 我們把圖片依次存放,讀圖片也是從這個(gè)圖片開始,然后看左下角圈起來的 2 個(gè)數(shù)字,一個(gè)是</p><p> 物理扇區(qū)編號(hào),一個(gè)是邏輯扇區(qū)編號(hào),配套的
44、程序中由于沒有使用完整的 FAT 格式(可以自行</p><p> 研究),所以這里我們選擇物理編號(hào) 769,那么對(duì)應(yīng)的地址就是 769x512=393728,這個(gè)是 1G 卡</p><p> FAT16 格式化后的初始數(shù)據(jù),2G 以下不同容量的的初始地址不同,請(qǐng)使用 winhex 軟件查看對(duì)</p><p> 應(yīng)的物理扇區(qū)編號(hào),并計(jì)算出對(duì)應(yīng)的地址,然后在樣
45、例程序中更改。</p><p><b> 5 電源電路的設(shè)計(jì)</b></p><p> 本系統(tǒng)中+5v電壓,采用最簡(jiǎn)單的7805標(biāo)準(zhǔn)+5V電源作為單片機(jī)以及彩屏的供電系統(tǒng)。下圖為7805的典型電路</p><p> 圖4-8 電源電路圖</p><p> 還應(yīng)當(dāng)說明的是,盡管有很多型號(hào)的78系列三端穩(wěn)壓集成芯片,
46、其標(biāo)稱最大輸出電流均為1.5A,但在實(shí)際應(yīng)用中,該最大輸出電流值往往取決于兩個(gè)方面:第一,足夠的散熱面積;第二,不同的生產(chǎn)廠家。按照很多開發(fā)者的經(jīng)驗(yàn),ST公司的78系列三端穩(wěn)壓芯片能接近標(biāo)稱值。另外電源設(shè)計(jì)中,必須保證、7809、7812等的輸入電壓Vi和輸出電壓Vo的壓差大于2.5V,即Vi-Vo>2.5V,否則失去穩(wěn)壓能力,同時(shí)考慮到功耗問題,此壓差又不宜太,太大則增加功率消耗,增加芯片的溫升,不利于安全。</p>
47、<p><b> 6 軟件系統(tǒng)設(shè)計(jì)</b></p><p> 單片機(jī)程序采用模塊化程序設(shè)計(jì),主要模塊包括:數(shù)據(jù)采集模塊、數(shù)據(jù)處理和監(jiān)控模塊。模塊化設(shè)計(jì)的優(yōu)點(diǎn)是可靠性高、可讀性好、升級(jí)簡(jiǎn)單。主循環(huán)和中斷服務(wù)程序之間的數(shù)據(jù)交換可通過事件標(biāo)志和數(shù)據(jù)緩沖實(shí)現(xiàn)。中斷引發(fā)中斷請(qǐng)求,中斷服務(wù)程序根據(jù)中斷請(qǐng)求類型操作,設(shè)置事件和填充數(shù)據(jù)緩沖區(qū)再傳輸給主循環(huán)。本系統(tǒng)軟件設(shè)計(jì)的重點(diǎn)在于溫度信號(hào)
48、的運(yùn)算處理、顯示及按鍵的處理等方面。</p><p> 6.1 軟件系統(tǒng)中的主模塊設(shè)計(jì)</p><p> 主模塊是系統(tǒng)軟件的主框架。結(jié)構(gòu)化程序設(shè)計(jì)一般有“自上而下”和“自下而上”兩種方式,“自上而下”法的核心是主框架的構(gòu)建。它的合理與否關(guān)系到程序最終功能的多少和性能的好壞。本系統(tǒng)的主模塊的程序框圖可用下圖來表示。其具體代碼實(shí)現(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、置液晶屏為四級(jí)亮度 ----</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); //延時(shí)24毫秒,讓清屏操作完畢</p><p> Write_CMD(0x01);//指針沿x軸方向移動(dòng),8點(diǎn)寫模式</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軸方向移動(dòng),8點(diǎn)寫模式</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軸方向移動(dòng),8點(diǎn)
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軸方向移動(dòng),8點(diǎn)寫模式 -----</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軸方向移動(dòng),8點(diǎn)寫模式 -----</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軸方向移動(dòng),8點(diǎn)寫模式 -----</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軸方向移動(dòng),8點(diǎn)寫模式 -
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軸方向移動(dòng),8點(diǎn)寫模式 -----</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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文--基于單片機(jī)的溫度控制
- 基于單片機(jī)的步進(jìn)電機(jī)控制-畢業(yè)論文
- 基于單片機(jī)控制的步進(jìn)電機(jī)畢業(yè)論文
- 畢業(yè)論文——基于單片機(jī)的舵機(jī)控制裝置
- 基于單片機(jī)的步進(jìn)電機(jī)控制-畢業(yè)論文
- 基于單片機(jī)的步進(jìn)電機(jī)控制畢業(yè)論文
- 基于單片機(jī)的智能小車控制畢業(yè)論文
- 51單片機(jī)畢業(yè)論文---基于單片機(jī)的進(jìn)制換算
- 基于單片機(jī)控制的步進(jìn)電機(jī)的畢業(yè)論文
- 【畢業(yè)論文】基于單片機(jī)控制智能窗簾設(shè)計(jì)
- 基于單片機(jī)控制電子琴畢業(yè)論文
- 基于單片機(jī)控制電子琴畢業(yè)論文
- 基于單片機(jī)的溫度控制系統(tǒng)畢業(yè)論文
- 畢業(yè)論文---基于單片機(jī)控制的電梯控制器
- 畢業(yè)論文--基于單片機(jī)的溫度控制系統(tǒng)
- 基于單片機(jī)的電梯控制系統(tǒng)畢業(yè)論文
- 基于單片機(jī)控制的紅外烘手器畢業(yè)論文
- 基于單片機(jī)的溫度控制系統(tǒng)畢業(yè)論文
- 畢業(yè)論文基于單片機(jī)的繼電器控制設(shè)計(jì)
- 基于單片機(jī)的交通控制系統(tǒng)畢業(yè)論文
評(píng)論
0/150
提交評(píng)論