溫度測量及濕度檢測_第1頁
溫度測量及濕度檢測_第2頁
溫度測量及濕度檢測_第3頁
溫度測量及濕度檢測_第4頁
溫度測量及濕度檢測_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 智能測控系統(tǒng)課程大作業(yè)作業(yè)題目 : 環(huán)境溫度測量及濕度檢測 學院名稱 : 電氣工程學院 專業(yè)班級 : 測控1303班 學生姓名 : 杜棟梁 學 號 : 201323030320 完成時間: 2016-6 任課教師 : 王威 目錄1 課程大作業(yè)內(nèi)容21.1 課題設計背景21.2 課題設計的意義31.3 設計目標32 系統(tǒng)設計方案32.1 溫濕度傳感器選型與論證42.2 顯示屏的選擇與論證42.2 信號采集電路52.3 供電電源的選擇63 硬件設計63.1 結構框圖73.2 溫度信號采集電路73.2.1傳感器簡介73.3單片機的最小電路圖84 軟件設計94.1 程序模塊94.2 軟件設計流程圖1

2、05調(diào)試106總結11參考文獻11附件12程序12 1 課程大作業(yè)內(nèi)容1.1 課題設計背景隨著科技的發(fā)展對對檢測技術要求的不斷增高,迫使新材料的開發(fā)及尋找檢測能力的不斷提升。傳感器的種類與測量精度以及測量穩(wěn)定性也發(fā)生了巨大的變化,從最初的接觸式測溫到非接觸式測溫,膨脹式、熱電阻式以及熱電偶式測溫,使溫度檢測領域得到了快速發(fā)展。再加上單片機技術的不斷發(fā)展,測量檢測變得更加方便。溫濕度傳感器除電阻式、電容式濕敏元件之外,還有電解質(zhì)離子型濕敏元件、重量型濕敏元件(利用感濕膜重量的變化來改變振蕩頻率)、光強型濕敏元件、聲表面波濕敏元件等。濕敏元件的線性度及抗污染性差,在檢測環(huán)境濕度時,濕敏元件要長期暴

3、露在待測環(huán)境中,很容易被污染而影響其測量精度及長期穩(wěn)定性。在公共工作場所為了達到讓人感到舒適的環(huán)境溫度及濕度,往往需要對溫度、濕度進行檢測已達到最佳的效果。本課題以ds18b20溫度傳感器為溫度檢測器件,設計了一個對單點溫度實時檢測的單片機溫度檢測系統(tǒng)。以bsp_dht11濕度傳感器為濕度檢測器件。1.2 課題設計的意義(1)、該設計具有以下優(yōu)點:制作簡單,便于使用,價格便宜,穩(wěn)定可靠,功耗低省電。(2)通過設計與制作可以達到這些目的:熟悉MSP430單片機技術的應用范圍;掌握MSP430單片機編程的特點,提高實踐操作能力能夠在制作過程中發(fā)現(xiàn)并改正錯誤。達到一定的解決問題的能力。提高了動手的能

4、力。1.3 設計目標使用ds18b20溫度傳感器測量環(huán)境溫度并完成A/D轉(zhuǎn)換。bsp_dht11濕度傳感器測量濕度,把數(shù)據(jù)發(fā)送到MSP430中進行轉(zhuǎn)換用LCD進行顯示。2 系統(tǒng)設計方案系統(tǒng)設計方案的選擇是決定設計作品完整度與精度的重要前提,一個好的作品的完成需要選擇比較多種方案,從多種方案中選擇最優(yōu)方案,才能使設計作品精度更高。本次設計主要從實用性,穩(wěn)定性,精度等級,可靠性,經(jīng)濟性等方面進行考慮。在完成本次課程設計要求、目的的情況下盡可能的準確和經(jīng)濟的條件下進行選擇。2.1 溫濕度傳感器選型與論證本設計采用測量精度高,性能穩(wěn)定可靠的ds18b20溫度傳感器作為溫度檢測器件和bsp_dht11溫

5、濕度傳感器作為濕度監(jiān)測器件。盡管bsp_dht11也能夠檢測出環(huán)境溫度,但該傳感器的測溫范圍窄,精度不夠,和要求測量的環(huán)境較為苛刻。因此選用較為精確的ds18b20來測量溫度。該傳感器具有適應性強檢測迅速,受環(huán)境影響較小。且對溫度可以接觸和非接觸測量均可。而其他傳感器價格和測量條件較為苛刻因此不建議選取。2.2 顯示屏的選擇與論證方案一:采用LCD1602顯示。LCD1602是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,能夠同時顯示16x02即32個字符。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間

6、距和行間距的作用。由于它不能顯示漢字,而溫度濕度的顯示需要顯示漢字,所以此方案不可行。方案二:采用LCD5110顯示。LCD5110采用串行接口與主處理器進行通信,接口信號線數(shù)量大幅度減少,支持多種串行通信協(xié)議,傳輸速率高達4Mbps,可全速寫入顯示數(shù)據(jù),無等待時間。它由84x48的點陣LCD組成,可顯示漢字和字符。LCD5110工作電壓3.3V,正常顯示時工作電流200uA以下,而且接口簡單,體積小便于安裝攜帶,速度快,價格便宜。所以采用此方案,顯示模塊選擇用LCD 5110。但屏幕色彩較暗,在光線較強的地方無法清晰的辨別。方案三:采用TFT彩屏顯示。TFT-LCD采用低壓應用,低驅(qū)動電壓,

7、固體化使用安全性和可靠性提高;平板化,又輕薄,節(jié)省了大量原材料和使用空間;低功耗,它的功耗約為CRT顯示器的十分之一,反射式TFT-LCD甚至只有CRT的百分之一左右,節(jié)省了大量的能源;高亮度,高對比度,高響應速度。無輻射、無閃爍,對使用者的健康無損害。適用范圍寬,從-20到+50的溫度范圍內(nèi)都可以正常使用,壽命超過3萬小時,且價格便宜因此本次設計采用TFT-LCD作為顯示屏。2.2 信號采集電路ds18b20是一種64 位只讀存儲器儲存器件的唯一片序列號。高速暫存器含有兩個字節(jié)的溫度寄存器,這兩個寄存器用來存儲溫度傳感器輸出的數(shù)據(jù)。除此之外,高速暫存器提供一個直接的溫度報警值寄存器(TH和T

8、L),和一個字節(jié)的配置寄存器。配置寄存器允許用戶將溫度的精度設定為9,10,11 或12 位。TH,TL 和配置寄存器是非易失性的可擦除程序寄存器(EEPROM),所以存儲的數(shù)據(jù)在器件掉電時不會消失。ds18b20通過達拉斯公司獨有的單總線協(xié)議依靠一個單線端口通訊。當全部器件經(jīng)由一個3態(tài)端口或者漏極開路端口(DQ引腳在ds18b20上的情況下)與總線連接的時候,控制線需要連接一個上拉電阻。在這個總線系統(tǒng)中,微控制器(主器件)依靠每個器件獨有的64位片序列號辨認總線上的器件和記錄總線上的器件地址。由于每個裝置有一個獨特的片序列碼,總線可以連接的器件數(shù)目事實上是無限的。ds18b20的另一個功能是

9、可以在沒有外部電源供電的情況下工作。當總線處于高電平狀態(tài),DQ與上拉電阻連接通過單總線對器件供電。同時處于高電平狀態(tài)的總線信號對內(nèi)部電容(Cpp)充電,在總線處于低電平狀態(tài)時,該電容提供能量給器件。這種提供能量的形式被稱為“寄生電源”。作為替代選擇,ds18b20同樣可以通過VDD引腳連接外部電源供電。如下圖2.1s18b20的工作原理圖2.1用戶單片機發(fā)送一次開始信號后,DHT11 從低功耗模式轉(zhuǎn)換到高速模式,待主機開始信號結束后,DHT11 發(fā)送響應信號,送出 40bit 的數(shù)據(jù),并觸發(fā)一次信采集。信號發(fā)送如圖所示。數(shù)據(jù)時序圖2.2bsp_dht11時序原理圖2.22.3 供電電源的選擇本

10、設計采用標準USB數(shù)據(jù)線5V為該設計供電。3 硬件設計硬件電路的設計是該系統(tǒng)重要的部分,是系統(tǒng)運行的前提,如果硬件設計的科學合理就能大大增加該系統(tǒng)功能的穩(wěn)定性,可靠性。系統(tǒng)軟件的設計是以硬件設計為前提,硬件設計是單片機高效工作的前提與重要保障,但是只有軟件和硬件都正確,并且軟件與硬件能夠相互兼容、協(xié)調(diào)工作才能使系統(tǒng)工作達到我們想要的效果。本系統(tǒng)的硬件設計部分主要包括傳感器電橋電路設計、運算放大電路的設計、單片機最小系統(tǒng)設計下面進行詳細介紹。3.1 結構框圖 本設計采用均采用3.3V電源供電,溫度傳感器和溫濕度傳感器采集到數(shù)據(jù)后發(fā)送到單片機,單片機根據(jù)接收到的數(shù)據(jù)進行處理后再LCD屏幕上顯示。如

11、圖3.1位系統(tǒng)結構框圖。圖3.1 系統(tǒng)結構框圖3.2 溫度信號采集電路溫度信號的獲取關系到后續(xù)電路設計的難度,因此溫度信號是獲取是本設計的關鍵。3.2.1傳感器簡介ds18b20的簡介:獨特的單線接口僅需一個端口引腳進行通訊每個器件有唯一的64 位的序列號存儲在內(nèi)部存儲器中簡單的多點分布式測溫應用無需外部器件可通過數(shù)據(jù)線供電。供電范圍為3.0V到5.5V測溫范圍為-55125(67257)在1085范圍內(nèi)精確度為±5溫度計分辨率可以被使用者選擇為912位最多在750ms 內(nèi)將溫度轉(zhuǎn)換為12 位數(shù)字用戶可定義的非易失性溫度報警設置報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的

12、器件與ds1822兼容的軟件應用包括溫度控制、工業(yè)系統(tǒng)、消費品、溫度計或任何熱感測系統(tǒng)bsp_dht11的簡介:DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,當前小數(shù)部分用于以后擴展,現(xiàn)讀出為零.操作流程如下:一次完整的數(shù)據(jù)傳輸為40bit,高位先出。數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù) +8bit校驗和數(shù)據(jù)傳送正確時校驗和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)”所得結果的末8位。實際使用時發(fā)現(xiàn)小數(shù)位都是

13、0,這一步忽略對結果也不造成影響。3.3單片機的最小電路圖MSP430g2553簡介:MSP430G2553性能參數(shù)(DIP-20) 工作電壓范圍:1.83.6V。5種低功耗模式。16位的RISC結構,62.5ns指令周期。超低功耗運行模式-230µA;待機模式-0.5µA;關閉模式-0.1µA;可以在不到1µs的時間里超快速地從待機模式喚醒?;緯r鐘模塊配置:具有四種校準頻率并高達16MHz的內(nèi)部頻率;內(nèi)部超低功耗LF振蕩器;32.768KHz晶體;外部數(shù)字時鐘源。兩個16 位Timer_A,分別具有三個捕獲比較寄存器。用于模擬信號比較功能或者斜率模數(shù)

14、(A/D)轉(zhuǎn)換的片載比較器。帶內(nèi)部基準、采樣與保持以及自動掃描功能的10位200-ksps 模數(shù)(A/D)轉(zhuǎn)換器。16KB閃存,512B的RAM。16個I/O口。這里給出了本次實驗的最小電路圖3.1最小電路圖3.14 軟件設計4.1 程序模塊本裝置主要用到MSP430g2553單片機的IO功能程序設計中主要包括:1. 單片機對溫度傳感器的數(shù)據(jù)接收模塊。2. 單片機對溫濕度傳感器的數(shù)據(jù)接收模塊。3. 對LCD屏的顯示模塊。4.2 軟件設計流程圖圖4.1軟件流程圖5調(diào)試本次設計最主要的工作之一就是對系統(tǒng)的調(diào)試部分,因為一個測量顯示軟件的主要功能就是顯示正確的結果。開始顯示的數(shù)據(jù)會因為采集的不準確和

15、其他方面的誤差導致接收到的數(shù)據(jù)不能正確表示想要的得到的數(shù)據(jù),也可能會因為采集過程出現(xiàn)頻繁的錯誤等問題。因此調(diào)試的工作極其重要,在溫度傳感器的采集過程中經(jīng)過和標準的溫度值的校準,測出了誤差的范圍和誤差的大致規(guī)律最后在現(xiàn)實過程中消除了這種誤差讓溫度測量更加準確穩(wěn)定。在濕度傳感器的調(diào)試過程中的工作更是復雜,濕度傳感器可以返回溫度和濕度值,但經(jīng)過檢測返回的溫度值與實際的溫度值偏差較大,而濕度的計算方法是在該溫度條件下的空氣中水含量的多少,這就使得測得的溫度不準導致濕度不準確,最后查閱資料找到了濕度的測量計算方法。將返回的濕度值加權后再顯示出來。這些工作很復雜濕度傳感器的工作要求的時序很高就導致在時序配

16、置上要花很大功夫一點不對就不能返回正確的結果屢屢出錯??傊{(diào)試工作發(fā)雜多變。6總結本次設計的東西看起來很簡單,好像沒有什么技術含量。但當實際操作時想要完美的運行卻遇到了重重的困難。因為MSP430是開始接觸的單片機,之前也一直沒有做過關于它的太多試驗。修改驅(qū)動顯示屏程序也花費了很長時間才將原來51單片機的程序移植過來,結果刷屏與顯示與想要顯示的位置不符,后來請教同學計算了LCD的顯示位置才更改過來。接下來的濕度調(diào)試,因為開始找不到bsp_dht11溫濕度傳感器的原理圖就在網(wǎng)上找了關于它的程序結果發(fā)現(xiàn)不能用不管怎么更改總是無法返回正確的數(shù)值,最后終于找到了關于該傳感器的詳細資料。發(fā)現(xiàn)該傳感器的工

17、作要求對時序的要求特別嚴格,最后精確計算了延時時間并且進行了延時時間的修改才能返回結果。但得到的濕度值與正常的濕度值存在較大的偏差,但沒有標準濕度值可以進行比較于是選取了天氣預報軟件上面公布的濕度值進行校準。 因為這次作業(yè)選用的是模塊化的傳感器且傳感器對電壓的要求不太嚴格3.0V5.0V均可以,為了降低設計設計的復雜度就選取了給單片機供電的3.3V電壓作為傳感器和顯示屏的供電電壓。本次對單片機的實際制作成東西才感到動手的重要性,和一些看起來簡單的東西也許不那么簡單。在以后的學習中要增加動手的能力。參考文獻1 楊家成單片機原理與應用及C51程序設計北京:清華大學出版社,20072 夏路易 石宗義

18、Protel 99se電路原理圖與電路板設計教程北京:北京希望電子出版社,20043 李林功單片機原理與應用基于實例驅(qū)動和Proteus仿真北京:科學出版社,20114 皮大能等. 單片機課程設計指導書. 北京:北京理工大學出版社,20105 MSP430單片機C語言應用程序設計實例精講 電子工業(yè)出版社 2006.05附件程序主程序#include <msp430g2553.h>#include "font.h"#include "sys.h"#include "lcd.h"#include "ds18b20.h

19、"#include "dht11.h"void CLK_Init(void) /時鐘配置 if (CALBC1_16MHZ =0xFF | CALDCO_16MHZ = 0xFF) while(1); / If calibration constants erased / do not load, trap CPU! DCOCTL=0; BCSCTL1 = CALBC1_16MHZ; / Set range DCOCTL = CALDCO_16MHZ; / Set DCO step + modulation */ BCSCTL2 |= 0X06; /SMCLK為D

20、CO的8分頻,2Mvoid showjiemian() /界面顯示LCD_Fill(0,0,128,40,WHITE);/在指定區(qū)域填充顏色showhanzi(0,4,0);showhanzi(32,4,1);showhanzi(64,4,2);showhanzi(96,4,3);/環(huán)境監(jiān)測LCD_ShowString(100,68,"%");/%:showhanzi1(14,42,0,RED,YELLOW);showhanzi1(34,42,1,RED,YELLOW);/溫度showhanzi1(100,42,2,BLUE,YELLOW);/showhanzi1(14,6

21、8,3,RED,YELLOW);showhanzi1(34,68,4,RED,YELLOW);/濕 度LCD_ShowString(56,42,""); /溫度顯示LCD_ShowChar(72,42,'.',0);LCD_ShowString(70,68,""); /濕度顯示int main(void) WDTCTL = WDTPW | WDTHOLD;/ Stop watchdog timer unsigned int temp=0,temp1,temp2,temp3; /ucharRH_data_H = 0; P2DIR |= 0x

22、1f;/設置P2為輸出方式輸出方式 P2OUT |= 0X1f; BACK_COLOR=YELLOW; POINT_COLOR=BLUE; /背景色,畫筆色 CLK_Init(); Lcd_Init(); LCD_Clear(YELLOW); DHT11_IO_Init(); showjiemian(); while(1) temp=Read_Temp(); temp1=temp/100; temp2=temp%100/10; temp3=temp%10;LCD_ShowNum(56,42,temp1,2);/顯示數(shù)字LCD_ShowNum(80,42,temp2,1);/顯示數(shù)字LCD_Sh

23、owNum(88,42,temp3,1);/顯示數(shù)字DHT11();LCD_ShowNum(88,68, ucharRH_data_H,3);delay_ms(1000);溫度采集#include <msp430g2553.h>#include "ds18b20.h"#include "sys.h"void DS18B20_Init(void) /DS18B20初始化函數(shù) DQ_OUT; DQ_L; /拉低總線 delay_us(480); /精確延時 大于 480us DQ_H; /釋放總線 delay_us(48); DQ_IN; DQ_

24、OUT; DQ_H; delay_us(360);void DS18B20_WriteData(u8 dat)/寫一個字節(jié) u8 i; for(i=0;i<8;i+)/位計數(shù)值 DQ_L; /拉低總線產(chǎn)生寫信號 delay_us(5); if(dat&0x01) DQ_H;/此位數(shù)據(jù)是否為高,是高則將單總線拉高 else DQ_L;/是低則將單總線拉低 dat>>=1; /準備下一位數(shù)據(jù)的傳送 delay_us(50); DQ_H; /釋放總線,等待總線恢復 delay_us(8); u8 DS18B20_ReadData(void) /讀一個字節(jié)u8 i;u8 da

25、t=0;for(i=0;i<8;i+)/位計數(shù)值dat>>=1;/右移,準備接受新的數(shù)據(jù)位DQ_L; /拉低總線產(chǎn)生讀信號delay_us(5);DQ_H; /釋放總線準備讀數(shù)據(jù)delay_us(5);/等待5微秒DQ_IN;/配置為輸入,開始讀取數(shù)據(jù)位_NOP();if(READ_DQ)/該位是否為高dat|=0x80;/是就將此位置高delay_us(50);/等待50微秒DQ_OUT;DQ_H;delay_us(5);return(dat);/將讀到的一個字節(jié)返回u16 Read_Temp(void) /讀取溫度u16 temp_low,temp_high,d;floa

26、t c;DS18B20_Init();/初始化,每次寫命令都從初始化開始DS18B20_WriteData(0xcc); /跳過ROM命令DS18B20_WriteData(0x44); /溫度轉(zhuǎn)換命令DS18B20_Init();/初始化,每次寫命令都從初始化開始DS18B20_WriteData(0xcc); /跳過ROM命令DS18B20_WriteData(0xbe); /temp_low=DS18B20_ReadData();/讀溫度低字節(jié)temp_high=DS18B20_ReadData();/讀溫度高字節(jié)temp_high<<=8;d=temp_high|temp_

27、low;c=d*0.0625;d=(u16)(c*100);return(d); /返回16位變量濕度采集#include"dht11.h"#include "sys.h"#include <msp430g2553.h>unsigned int uchartemp;unsigned char ucharT_data_H,ucharT_data_L,ucharRH_data_H,ucharRH_data_L,ucharcheckdata;unsigned char ucharT_data_H_temp,ucharT_data_L_temp,uc

28、harRH_data_H_temp,ucharRH_data_L_temp,ucharcheckdata_temp;void DHT11_IO_Init() P1SEL &= BIT0;void COM(void)unsigned char i; unsigned char ucharFLAG; uchartemp=0; P1DIR &= BIT0; for(i=0;i<8;i+) ucharFLAG=2; while(!(P1IN&0x01)&&ucharFLAG+); delay_us(30); uchartemp=uchartemp<&

29、lt;1; if(P1IN&0x01) uchartemp |= 1; ucharFLAG=1; while(P1IN&0x01)&&ucharFLAG+); void DHT11(void) unsigned char ucharFLAG; P1DIR |= BIT0;/設置P1.0為輸出口 DATA_L; delay_ms(20); />18MS DATA_H; delay_us(30); P1DIR &= BIT0; if(!(P1IN&0x01) ucharFLAG=1; while(!(P1IN&0x01)&&am

30、p;ucharFLAG+); ucharFLAG=1; while(P1IN&0x01)&&ucharFLAG+); COM(); ucharRH_data_H_temp=uchartemp; COM(); ucharRH_data_L_temp=uchartemp; COM(); ucharT_data_H_temp=uchartemp; COM(); ucharT_data_L_temp=uchartemp; COM(); ucharcheckdata_temp=uchartemp; uchartemp=(ucharT_data_H_temp+ucharT_data

31、_L_temp+ucharRH_data_H_temp+ucharRH_data_L_temp); if(uchartemp=ucharcheckdata_temp) ucharRH_data_H=ucharRH_data_H_temp; ucharRH_data_L=ucharRH_data_L_temp; ucharT_data_H=ucharT_data_H_temp; ucharT_data_L=ucharT_data_L_temp; ucharcheckdata=ucharcheckdata_temp; else ucharRH_data_H=12; ucharT_data_H=23

32、; /P2DIR |= BIT0;顯示#include <msp430g2553.h>#include "font.h"#include "sys.h"#include "lcd.h"u16 BACK_COLOR, POINT_COLOR; /背景色,畫筆色 void LCD_Writ_Bus(char da) /串行數(shù)據(jù)寫入u8 i;for(i=0; i<8; i+)if(da & 0x80)SDA_H;elseSDA_L;SCK_L;da <<= 1;SCK_H; void LCD_WR_DA

33、TA8(char da) /發(fā)送數(shù)據(jù)-8位參數(shù) AO_H;LCD_Writ_Bus(da); void LCD_WR_DATA(int da) AO_H;LCD_Writ_Bus(da>>8);LCD_Writ_Bus(da); void LCD_WR_REG(char da) AO_L;LCD_Writ_Bus(da); void LCD_WR_REG_DATA(int reg,int da) LCD_WR_REG(reg);LCD_WR_DATA(da);void Address_set(unsigned int x1,unsigned int y1,unsigned int

34、x2,unsigned int y2) LCD_WR_REG(0x2a); LCD_WR_DATA8(x1>>8); LCD_WR_DATA8(x1); LCD_WR_DATA8(x2>>8); LCD_WR_DATA8(x2); LCD_WR_REG(0x2b); LCD_WR_DATA8(y1>>8); LCD_WR_DATA8(y1+32); LCD_WR_DATA8(y2>>8); LCD_WR_DATA8(y2+32); LCD_WR_REG(0x2C);void Lcd_Init(void)/調(diào)用一次這些函數(shù),免得編譯的時候提示警告

35、CS_H;/*if(LCD_CS=0) LCD_WR_REG_DATA(0,0); LCD_ShowString(0,0," "); LCD_ShowNum(0,0,0,0); LCD_Show2Num(0,0,0,0); LCD_DrawPoint_big(0,0); LCD_DrawRectangle(0,0,0,0); Draw_Circle(0,0,0); */ REST_H; delayms(5);REST_L;delayms(5);REST_H;CS_H;delayms(5);CS_L; /打開片選使能LCD_WR_REG(0x11); /Sleep outde

36、layms(120); /Delay 120ms/-ST7735S Frame Rate-/LCD_WR_REG(0xB1);LCD_WR_DATA8(0x05);LCD_WR_REG(0x11);/Sleep exit delayms (120); /ST7735R Frame RateLCD_WR_REG(0xB1); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x2D); LCD_WR_REG(0xB2); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x2D);

37、 LCD_WR_REG(0xB3); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x2D); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x2D); LCD_WR_REG(0xB4); /Column inversion LCD_WR_DATA8(0x07); /ST7735R Power SequenceLCD_WR_REG(0xC0); LCD_WR_DATA8(0xA2); LCD_WR_DATA8(0x02); LCD_WR_DATA8(0x84); LCD_

38、WR_REG(0xC1); LCD_WR_DATA8(0xC5); LCD_WR_REG(0xC2); LCD_WR_DATA8(0x0A); LCD_WR_DATA8(0x00); LCD_WR_REG(0xC3); LCD_WR_DATA8(0x8A); LCD_WR_DATA8(0x2A); LCD_WR_REG(0xC4); LCD_WR_DATA8(0x8A); LCD_WR_DATA8(0xEE); LCD_WR_REG(0xC5); /VCOM LCD_WR_DATA8(0x0E); LCD_WR_REG(0x36); /MX, MY, RGB mode LCD_WR_DATA8

39、(0xC8); /ST7735R Gamma SequenceLCD_WR_REG(0xe0); LCD_WR_DATA8(0x0f); LCD_WR_DATA8(0x1a); LCD_WR_DATA8(0x0f); LCD_WR_DATA8(0x18); LCD_WR_DATA8(0x2f); LCD_WR_DATA8(0x28); LCD_WR_DATA8(0x20); LCD_WR_DATA8(0x22); LCD_WR_DATA8(0x1f); LCD_WR_DATA8(0x1b); LCD_WR_DATA8(0x23); LCD_WR_DATA8(0x37); LCD_WR_DATA

40、8(0x00); LCD_WR_DATA8(0x07); LCD_WR_DATA8(0x02); LCD_WR_DATA8(0x10); LCD_WR_REG(0xe1); LCD_WR_DATA8(0x0f); LCD_WR_DATA8(0x1b); LCD_WR_DATA8(0x0f); LCD_WR_DATA8(0x17); LCD_WR_DATA8(0x33); LCD_WR_DATA8(0x2c); LCD_WR_DATA8(0x29); LCD_WR_DATA8(0x2e); LCD_WR_DATA8(0x30); LCD_WR_DATA8(0x30); LCD_WR_DATA8(

41、0x39); LCD_WR_DATA8(0x3f); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x07); LCD_WR_DATA8(0x03); LCD_WR_DATA8(0x10); LCD_WR_REG(0x2a);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x7f);LCD_WR_REG(0x2b);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x7f);LCD_WR_

42、REG(0xF0); /Enable test command LCD_WR_DATA8(0x01); LCD_WR_REG(0xF6); /Disable ram power save mode LCD_WR_DATA8(0x00); LCD_WR_REG(0x3A); /65k mode LCD_WR_DATA8(0x05); LCD_WR_REG(0x29); /Display on LCD_WR_REG(0x2C);/清屏函數(shù)/Color:要清屏的填充色void LCD_Clear(u16 Color)u8 VH,VL;u16 i,j;VH=Color>>8;VL=Colo

43、r;Address_set(0,0,LCD_W-1,160); for(i=0;i<LCD_W;i+) for (j=0;j<LCD_H;j+) LCD_WR_DATA8(VH); LCD_WR_DATA8(VL); /在指定位置顯示一個漢字(32*33大小)/dcolor為內(nèi)容顏色,gbcolor為背靜顏色void showhanzi(unsigned int x,unsigned int y,unsigned char index) unsigned char i,j;const unsigned char *temp=hanzi; Address_set(x,y,x+31,y

44、+31); /設置區(qū)域 temp+=index*128;for(j=0;j<128;j+)for(i=0;i<8;i+) if(*temp&(1<<i)!=0)LCD_WR_DATA(POINT_COLOR); elseLCD_WR_DATA(BACK_COLOR); temp+; /在指定位置顯示一個漢字(16*16大小)/dcolor為內(nèi)容顏色,gbcolor為背靜顏色void showhanzi1(unsigned int x,unsigned int y,unsigned char index,u16 p_color,u16 b_color)unsign

45、ed char i,j;const unsigned char *temp=hanzi1;BACK_COLOR = b_color;POINT_COLOR = p_color; Address_set(x,y,x+15,y+15); /設置區(qū)域temp+=index*32;for(j=0;j<32;j+)for(i=0;i<8;i+) if(*temp&(1<<i)!=0)LCD_WR_DATA(POINT_COLOR);elseLCD_WR_DATA(BACK_COLOR);temp+; /畫點/POINT_COLOR:此點的顏色void LCD_DrawPo

46、int(u16 x,u16 y)Address_set(x,y,x,y);/設置光標位置 LCD_WR_DATA(POINT_COLOR); /畫一個大點/POINT_COLOR:此點的顏色void LCD_DrawPoint_big(u16 x,u16 y)LCD_Fill(x-4,y-4,x+4,y+4,POINT_COLOR); /在指定區(qū)域內(nèi)填充指定顏色/區(qū)域大小:/ (xend-xsta)*(yend-ysta)void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color) u16 i,j; Address_set(xsta,

47、ysta,xend,yend); /設置光標位置 for(i=ysta;i<=yend;i+) for(j=xsta;j<=xend;j+)LCD_WR_DATA(color);/設置光標位置 /畫線/x1,y1:起點坐標/x2,y2:終點坐標 void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)u16 t; int xerr=0,yerr=0,delta_x,delta_y,distance; int incx,incy,uRow,uCol; delta_x=x2-x1; /計算坐標增量 delta_y=y2-y1; uRow=x1;

48、 uCol=y1; if(delta_x>0)incx=1; /設置單步方向 else if(delta_x=0)incx=0;/垂直線 else incx=-1;delta_x=-delta_x; if(delta_y>0)incy=1; else if(delta_y=0)incy=0;/水平線 elseincy=-1;delta_y=-delta_y; if( delta_x>delta_y)distance=delta_x; /選取基本增量坐標軸 else distance=delta_y; for(t=0;t<=distance+1;t+ )/畫線輸出 LCD

49、_DrawPoint(uRow,uCol);/畫點 xerr+=delta_x ; yerr+=delta_y ; if(xerr>distance) xerr-=distance; uRow+=incx; if(yerr>distance) yerr-=distance; uCol+=incy; /畫矩形void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)LCD_DrawLine(x1,y1,x2,y1);LCD_DrawLine(x1,y1,x1,y2);LCD_DrawLine(x1,y2,x2,y2);LCD_DrawLine(x2,y1,x2,y2);/在指定位置畫一個指定大小的圓/(x,y):中心點/r :半徑void Draw_Circle(u16 x0,u16 y0,u8 r)int a,b;int di;a=0;b=r; di=3-(r<<1); /判斷下個點位置的標志while(a<=b)LCD_DrawPoint(x0-b,y0-a); /3 LCD_DrawPoint(x0

溫馨提示

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

評論

0/150

提交評論