版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
嵌入式系統(tǒng)原理及應用
項目化教程項目7模數轉換設計與實現(xiàn)學習目標1.了解STM32的ADC主要特點和結構;2.了解STM32與ADC編程相關的寄存器和庫函數;3.會使用STM32的ADC寄存器和庫函數,完成A/D轉換程序設計;4.會利用STM32的ADC,實現(xiàn)模擬電壓的采集并在串口上打印出來。目錄7.1ADC介紹7.2任務12基于庫函數的STM32F1ADC控制設計7.3任務13DS18B20溫度傳感器控制ADCADCAnalog-to-DigitalConverter的縮寫。指模/數轉換器或者模擬/數字轉換器。是指將連續(xù)變量的模擬信號轉換為離散的數字信號的器件。典型的模擬數字轉換器將模擬信號轉換為表示一定比例電壓值的數字信號。7.1ADC介紹ADCSTM32F10xADC特點12位逐次逼近型的模擬數字轉換器。最多帶3個ADC控制器最多支持18個通道,可最多測量16個外部和2個內部信號源。支持單次和連續(xù)轉換模式
轉換結束,注入轉換結束,和發(fā)生模擬看門狗事件時產生中斷。
通道0到通道n的自動掃描模式
自動校準
采樣間隔可以按通道編程
規(guī)則通道和注入通道均有外部觸發(fā)選項
轉換結果支持左對齊或右對齊方式存儲在16位數據寄存器ADC轉換時間:最大轉換速率1us。(最大轉換速度為1MHz,在ADCCLK=14M,采樣周期為1.5個ADC時鐘下得到。)ADC供電要求:2.4V-3.6VADC輸入范圍:VREF-≤VIN≤VREF+7.1ADC介紹ADCSTM32F10x大容量芯片帶3個ADC控制器其中144腳芯片因為帶PF腳,所以多5個通道,為21個外部通道。小于144腳芯片只有16個外部通道。7.1ADC介紹ADCSTM32F10x系列芯片ADC通道和引腳對應關系7.1ADC介紹ADCADC引腳7.1ADC介紹ADCADC框圖7.1ADC介紹ADC7.1ADC介紹ADCSTM32通道組規(guī)則通道組:相當正常運行的程序。最多16個通道。
規(guī)則通道和它的轉換順序在ADC_SQRx寄存器中選擇,規(guī)則
組轉換的總數應寫入ADC_SQR1寄存器的L[3:0]中②注入通道組:相當于中斷。最多4個通道。
注入組和它的轉換順序在ADC_JSQR寄存器中選擇。注入組
里轉化的總數應寫入ADC_JSQR寄存器的L[1:0]中7.1ADC介紹ADC規(guī)則通道1規(guī)則通道2規(guī)則通道N注入通道1注入通道1規(guī)則通道1規(guī)則通道2規(guī)則通道N注入通道N7.1ADC介紹ADCSTM32F1的ADC的各通道可以單次,連續(xù),掃描或者間斷模式執(zhí)行。7.1ADC介紹ADC單次轉化VS連續(xù)轉換7.1ADC介紹ADC單次轉化VS連續(xù)轉換7.1ADC介紹ADC掃描模式7.1ADC介紹ADCADC中斷7.1ADC介紹ADCADC時鐘配置不要讓ADC時鐘超過14MHz,否則可能不準。RCC_ADCCLKConfig(RCC_PCLK2_Div6);7.1ADC介紹ADCADC_CR1寄存器在掃描模式下,由ADC_SQRx或者ADC_JSQRx寄存器選中的通道被轉換。如果設置了EOCIE或者JEOCIE,在最后一個通道轉換完畢后才會產生EOC或者JEOC中斷。7.1ADC介紹ADCADC_CR1寄存器7.1ADC介紹ADCADC_CR2寄存器7.1ADC介紹ADC數據對齊方式7.1ADC介紹ADCADC_CR2寄存器7.1ADC介紹ADCADC_SMPR1寄存器7.1ADC介紹ADCADC_SMPR2寄存器7.1ADC介紹ADCADC的采樣時間最小采樣時間1us(ADC時鐘=14MHz,采樣周期為1.5周期下得到)7.1ADC介紹ADCADC_SQR1/SQR2/SQR3規(guī)則序列寄存器7.1ADC介紹ADCADC_JSQR注入系列寄存器7.1ADC介紹ADCADC_DR規(guī)則通道數據寄存器7.1ADC介紹ADCADC_JDR注入通道數據寄存器7.1ADC介紹ADCADC_SR狀態(tài)寄存器7.1ADC介紹ADC常用庫函數voidADC_Init(ADC_TypeDef*ADCx,ADC_InitTypeDef*ADC_InitStruct);voidADC_DeInit(ADC_TypeDef*ADCx)voidADC_Cmd(ADC_TypeDef*ADCx,FunctionalStateNewState);voidADC_ITConfig(ADC_TypeDef*ADCx,uint16_tADC_IT,FunctionalStateNewState);voidADC_SoftwareStartConvCmd(ADC_TypeDef*ADCx,FunctionalStateNewState);voidADC_RegularChannelConfig(ADC_TypeDef*ADCx,uint8_tADC_Channel,uint8_tRank,uint8_tADC_SampleTime);uint16_tADC_GetConversionValue(ADC_TypeDef*ADCx);voidADC_ResetCalibration(ADC_TypeDef*ADCx);FlagStatusADC_GetResetCalibrationStatus(ADC_TypeDef*ADCx);voidADC_StartCalibration(ADC_TypeDef*ADCx);FlagStatusADC_GetCalibrationStatus(ADC_TypeDef*ADCx);7.1ADC介紹ADCADC初始化函數ADC_Init
voidADC_Init(ADC_TypeDef*ADCx,ADC_InitTypeDef*ADC_InitStruct);typedefstruct{uint32_tADC_Mode;//ADC模式:配置ADC_CR1寄存器的位[19:16]:DUALMODE[3:0]位FunctionalStateADC_ScanConvMode;//是否使用掃描模式。ADC_CR1位8:SCAN位
FunctionalStateADC_ContinuousConvMode;//單次轉換OR連續(xù)轉換:ADC_CR2的位1:CONTuint32_tADC_ExternalTrigConv;//觸發(fā)方式:ADC_CR2的位[19:17]:EXTSEL[2:0]uint32_tADC_DataAlign;//對齊方式:左對齊還是右對齊:ADC_CR2的位11:ALIGNuint8_tADC_NbrOfChannel;//規(guī)則通道序列長度:ADC_SQR1的位[23:20]:L[3:0]}ADC_InitTypeDef;7.1ADC介紹ADC
voidADC_Init(ADC_TypeDef*ADCx,ADC_InitTypeDef*ADC_InitStruct);ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//獨立模式ADC_InitStructure.ADC_ScanConvMode=DISABLE; //不開啟掃描ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//單次轉換模式ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//觸發(fā)軟件ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC數據右對齊ADC_InitStructure.ADC_NbrOfChannel=1;//順序進行規(guī)則轉換的ADC通道的數目ADC_Init(ADC1,&ADC_InitStructure); 7.1ADC介紹ADCADC使能函數
ADC_Cmd();
voidADC_Cmd(ADC_TypeDef*ADCx,FunctionalState
NewState);ADC_Cmd(ADC1,ENABLE); //使能指定的ADC1ADC使能軟件轉換函數ADC_SoftwareStartConvCmdvoidADC_SoftwareStartConvCmd(ADC_TypeDef*ADCx,FunctionalStateNewState)ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能ADC1的軟件轉換啟動7.1ADC介紹ADCADC規(guī)則通道配置函數ADC_RegularChannelConfigADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);ADC獲取轉換結果函數ADC_GetConversionValueuint16_tADC_GetConversionValue(ADC_TypeDef*ADCx);ADC_GetConversionValue(ADC1);//獲取ADC1轉換結果
voidADC_RegularChannelConfig(ADC_TypeDef*ADCx,uint8_tADC_Channel,uint8_tRank,uint8_tADC_SampleTime);7.1ADC介紹7.2任務12基于庫函數的STM32F1ADC控制設計ADC1對應芯片的PA1引腳,將該引腳直接外部連接到電位器上,調節(jié)電位器即可改變電壓,通過ADC轉換即可檢測此電壓值。
7.2任務12基于庫函數的STM32F1ADC控制設計DS18B20介紹DS18B20技術性能特征①、獨特的單總線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實
現(xiàn)微處理器與DS18B20的雙向通訊。大大提高了系統(tǒng)的抗干擾性。②、測溫范圍-55℃~+125℃,精度為±0.5℃。③、支持多點組網功能,多個DS18B20可以并聯(lián)在唯一的三線上,最多只能并聯(lián)8個,
實現(xiàn)多點測溫,如果數量過多,會使供電電源電壓過低,從而造成信號傳輸的
不穩(wěn)定。④、工作電源:3.0~5.5V/DC(可以數據線寄生電源)。⑤、在使用中不需要任何外圍元件。⑥、測量結果以9~12位數字量方式串行傳送。7.3任務13DS18B20溫度傳感器控制DS18B20封裝7.3DS18B20介紹連接方式7.3DS18B20介紹單總線是一種半雙工通信方式DS18B20共有6種信號類型:復位脈沖、應答脈沖、寫0、寫1、讀0和讀1。所有這些信號,除了應答脈沖以外,都由主機發(fā)出同步信號。并且發(fā)送所有的命令和數據都是字節(jié)的低位在前。7.3DS18B20介紹復位脈沖單總線上的所有通信都是以初始化序列開始。主機輸出低電平,保持低電平時間至少480us,,以產生復位脈沖。接著主機釋放總線,4.7K的上拉電阻將單總線拉高,延時15~60us,并進入接收模式(Rx)。接著DS18B20拉低總線60~240us,以產生低電平應答脈沖。
//復位DS18B20voidDS18B20_Rst(void) {DS18B20_IO_OUT();//設置為輸出模式DS18B20_DQ_OUT=0;//拉低DQ
delay_us(750);//拉低750us(至少480us)DS18B20_DQ_OUT=1;//DQ=1拉高釋放總線
delay_us(15);//15US//進入接受模式,等待應答信號。}7.3DS18B20介紹②應答信號//等待DS18B20的回應//返回1:未檢測到DS18B20的存在返回0:存在u8DS18B20_Check(void) {u8retry=0;DS18B20_IO_IN();//SETPA0INPUT while(DS18B20_DQ_IN&&retry<200){retry++;
delay_us(1);}; if(retry>=200)return1;elseretry=0;while(!DS18B20_DQ_IN&&retry<240){retry++;
delay_us(1);};if(retry>=240)return1; return0;}7.3DS18B20介紹③寫時序寫時序包括寫0時序和寫1時序。所有寫時序至少需要60us,且在2次獨立的寫時序之間至少需要1us的恢復時間,兩種寫時序均起始于主機拉低總線。寫1時序:主機輸出低電平,延時2us,然后釋放總線,延時60us。寫0時序:主機輸出低電平,延時60us,然后釋放總線,延時2us。7.3DS18B20介紹//寫一個字節(jié)到DS18B20//dat:要寫入的字節(jié)voidDS18B20_Write_Byte(u8dat){u8j;u8testb;DS18B20_IO_OUT();//設置PA0為輸出for(j=1;j<=8;j++){
testb=dat&0x01;
dat=dat>>1;if(testb)//輸出高{DS18B20_DQ_OUT=0;//主機輸出低電平
delay_us(2);//延時2usDS18B20_DQ_OUT=1;//釋放總線
delay_us(60);//延時60us}else//輸出低{DS18B20_DQ_OUT=0;//主機輸出低電平
delay_us(60);//延時60usDS18B20_DQ_OUT=1;//釋放總線
delay_us(2);//延時2us}}}7.3DS18B20介紹④讀時序單總線器件僅在主機發(fā)出讀時序時,才向主機傳輸數據,所以,在主機發(fā)出讀數據命令后,必須馬上產生讀時序,以便從機能夠傳輸數據。所有讀時序至少需要60us,且在2次獨立的讀時序之間至少需要1us的恢復時間。每個讀時序都由主機發(fā)起,至少拉低總線1us。主機在讀時序期間必須釋放總線,并且在時序起始后的15us之內采樣總線狀態(tài)。典型的讀時序過程為:主機輸出低電平延時2us,然后主機轉入輸入模式延時12us,然后讀取單總線當前的電平,然后延時50us。7.3DS18B20介紹//從DS18B20讀取一個位//返回值:1/0u8DS18B20_Read_Bit(void) //readonebit{u8data;DS18B20_IO_OUT();//設置為輸出DS18B20_DQ_OUT=0;//輸出低電平2us
delay_us(2);DS18B20_DQ_OUT=1;//拉高釋放總線DS18B20_IO_IN();//設置為輸入
delay_us(12);//延時12usif(DS18B20_DQ_IN)data=1;//讀取總線數據elsedata=0;
delay_us(50);//延時50usreturndata;}典型的讀時序過程為:主機輸出低電平延時2us,然后主機轉入輸入模式延時12us,然后讀取單總線當前的電平,然后延時50us。7.3DS18B20介紹//從DS18B20讀取一個字節(jié)//返回值:讀到的數據u8DS18B20_Read_Byte(void)//readonebyte{u8i,j,dat;
dat=0;for(i=1;i<=8;i++){j=DS18B20_Read_Bit();
dat=(j<<7)|(dat>>1);} returndat;}讀取一個字節(jié)數據7.3DS18B20介紹我們來看看DS18B20的典型溫度讀取過程,DS18B20的典型溫度讀取過程為:復位
發(fā)SKIPROM命令(0XCC)
發(fā)開始轉換命令(0X44)
延時
復位
發(fā)送SKIPROM命令(0XCC)
發(fā)讀存儲器命令(0XBE)
連續(xù)讀出兩個字節(jié)數據(即溫度)
結束。7.3DS18B20介紹//從ds18b20得到溫度值//精度:0.1C//返回值:溫度值(-550~1250)shortDS18B20_Get_Temp(void){u8temp;u8TL,TH;shorttem;DS18B20_Start();//ds1820startconvertDS18B20_Rst();復位DS18B20_Check(); DS18B20_Write_Byte(0xcc);//skipromDS18B20_Write_Byte(0xbe);//convert TL=DS18B20_Read_Byte();TH=DS18B20_Read_Byte(); if(TH>7){TH=~TH;TL=~TL;temp=0;//溫度為負
}elsetemp=1;//溫度為正
tem=TH;//獲得高八位
tem<<=8;tem+=TL;//獲得底八位
tem=(float)tem*0.625;//轉換if(temp)returntem;//返回溫度值
elsereturn-tem;}//開始溫度轉換voidDS18B20_Start(void)//ds1820startconvert{ DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);//skipromDS18B20_Write_Byte(0x44);//convert}轉化后得到的12位數據,存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際溫度。例如+125℃的數字輸出為07D0H,,-25.0625℃的數字輸出為FE6FH。7.3DS18B20介紹7.3任務13DS18B20溫度傳感器控制舉一反三(1)使用ADC實現(xiàn)多個通道的AD采集。(溫馨提示:參考ADC初始化步驟,修改相應的一些參數,注意ADC轉換通道引腳不要被其他芯片或電路占用,防止干擾,ADC輸入電壓不能超過3.3V,否則可能燒壞芯片)。(2)利用DS18B20設計一個智能溫度控制系統(tǒng),具有溫度上下限值設定,當溫度高于上限值加熱指示燈LED2熄滅同時報警,當溫度低于下限值時加熱指示燈LED2點亮同時報警,當溫度處于上下限間正常工作,指示燈LED2閃爍。(溫馨提示:把本章實驗結合按鍵控制實驗)。嵌入式系統(tǒng)原理及應用
項目化教程項目8顯示屏控制設計與實現(xiàn)學習目標1.掌握TFT-LCD顯示原理;2.利用TFT-LCD實現(xiàn)漢字和彩色的顯示方法;3.掌握OLED顯示原理;4.利用OLED實現(xiàn)ASCII字符的顯示。目錄8.1任務14TFT-LCD顯示8.2任務15OLED顯示1、TFTLCD驅動原理-TFTLCD簡介TFTLCD即薄膜晶體管液晶顯示器。它與無源TN-LCD、STN-LCD的簡單矩陣不同,它在液晶顯示屏的每一個象素上都設置有一個薄膜晶體管(TFT),可有效地克服非選通時的串擾,使顯示液晶屏的靜態(tài)特性與掃描線數無關,因此大大提高了圖像質量。TFTLCD具有:亮度好、對比度高、層次感強、顏色鮮艷等特點。是目前最主流的LCD顯示器。廣泛應用于電視、手機、電腦、平板等各種電子產品。8.1任務14TFT-LCD顯示TFTLCD驅動原理1、TFTLCD驅動原理-模塊簡介ALINETEKTFTLCD模塊介紹ALIENTEK提供豐富的TFTLCD模塊型號,供大家選擇,目前有以下型號可選:1,ATK-2.8寸TFTLCD模塊
分辨率:240*320,驅動IC:ILI9341,電阻觸摸屏,16位并口驅動2,ATK-3.5寸TFTLCD模塊分辨率:320*480,驅動IC:NT35310,電阻觸摸屏,16位并口驅動3,ATK-4.3寸TFTLCD模塊分辨率:480*800,驅動IC:NT35510,電容觸摸屏,16位并口驅動4,ATK-7寸TFTLCD模塊(V1版本)
分辨率:480*800,驅動IC:CPLD+SDRAM,電容觸摸屏,16位并口驅動5,ATK-7寸TFTLCD模塊(V2版本)分辨率:480*800,驅動IC:SSD1963,電容觸摸屏,8/9/12/16位并口驅動8.1任務14TFT-LCD顯示TFTLCD驅動原理1、TFTLCD驅動原理-模塊簡介ALINETEK2.8寸TFTLCD模塊特點240*320分辨率16位真彩顯示(65536色)自帶電阻觸摸屏自帶背光電路注意:模塊是3.3V供電的,不支持5V電壓的MCU,如果是5VMCU,必須在信號線串接120R電阻使用。8.1任務14TFT-LCD顯示TFTLCD驅動原理1、TFTLCD驅動原理-模塊簡介ALINETEK2.8寸TFTLCD模塊原理圖8.1任務14TFT-LCD顯示TFTLCD驅動原理1、TFTLCD驅動原理-模塊簡介ALINETEK2.8寸TFTLCD接口說明(16位80并口)注意:DB1~DB8,DB10~DB17,總是按順序連接MCU的D0~D15LCD_CS:LCD片選信號LCD_WR:LCD寫信號LCD_RD:LCD讀信號DB[17:1]:16位雙向數據線。LCD_RST:硬復位LCD信號LCD_RS:命令/數據標志(0:命令,1:數據)BL_CTR:背光控制信號T_MISO/T_MOSI/T_PEN/T_CS/T_CLK,觸摸屏接口信號8.1任務14TFT-LCD顯示TFTLCD驅動原理1、TFTLCD驅動原理-模塊簡介ALINETEK2.8寸TFTLCD
16位80并口驅動簡介并口寫時序圖并口讀時序圖模塊的8080并口讀/寫的過程為:先根據要寫入/讀取的數據的類型,設置RS為高(數據)/低(命令),然后拉低片選,選中ILI9341,接著我們根據是讀數據,還是要寫數據置RD/WR為低,然后:1.讀數據:在RD的上升沿,讀取數據線上的數據(D[15:0]);2.寫數據:在WR的上升沿,使數據寫入到ILI9341里面8.1任務14TFT-LCD顯示TFTLCD驅動原理1、TFTLCD驅動原理-模塊簡介ILI9341驅動時序重點時序:讀ID低電平脈寬(trdl)讀ID高電平脈寬(trdh)讀FM低電平脈寬(trdlfm)讀FM高電平脈寬(trdhfm)寫控制低電平脈寬(twrl)寫控制高電平脈寬(twrh)注意:ID指LCD的ID號FM指幀緩存,即:GRAM右圖為:ILI93418080并口時序,詳見:ILI9341_DS.pdf,232頁8.1任務14TFT-LCD顯示TFTLCD驅動原理1、TFTLCD驅動原理-驅動流程8.1任務14TFT-LCD顯示TFTLCD驅動原理
RGB565格式說明模塊對外接口采用16位并口,顏色深度為16位,格式為RGB565,關系如下圖:1、TFTLCD驅動原理-指令簡介ILI9341指令格式說明ILI9341所有的指令都是8位的(高8位無效),且參數除了讀寫GRAM的時候是16位,其他操作參數,都是8位的。ILI9341的指令很多,這里不一一介紹,僅介紹幾個重要的指令,他們是:0XD3,0X36,0X2A,0X2B,0X2C,0X2E等6條指令。8.1任務14TFT-LCD顯示TFTLCD驅動原理
0XD3指令該指令為讀ID4指令,用于讀取LCD控制器的ID。因此,同一個代碼,可以根據ID的不同,執(zhí)行不同的LCD驅動初始化,以兼容不同的LCD屏幕。1、TFTLCD驅動原理-指令簡介8.1任務14TFT-LCD顯示TFTLCD驅動原理
0X36指令該指令為存儲訪問控制指令,可以控制ILI9341存儲器的讀寫方向,簡單的說,就是在連續(xù)寫GRAM的時候,可以控制GRAM指針的增長方向,從而控制顯示方式(讀GRAM也是一樣)。1、TFTLCD驅動原理-指令簡介8.1任務14TFT-LCD顯示TFTLCD驅動原理
0X2A指令該指令是列地址設置指令,在從左到右,從上到下的掃描方式(默認)下面,該指令用于設置橫坐標(x坐標)1、TFTLCD驅動原理-指令簡介在默認掃描方式時,該指令用于設置x坐標,該指令帶有4個參數,實際上是2個坐標值:SC和EC,即列地址的起始值和結束值,SC必須小于等于EC,且0≤SC/EC≤239。一般在設置x坐標的時候,我們只需要帶2個參數即可,也就是設置SC即可,因為如果EC沒有變化,我們只需要設置一次即可(在初始化ILI9341的時候設置),從而提高速度。8.1任務14TFT-LCD顯示TFTLCD驅動原理
0X2B指令該指令是頁地址設置指令,在從左到右,從上到下的掃描方式(默認)下面,該指令用于設置縱坐標(y坐標)1、TFTLCD驅動原理-指令簡介在默認掃描方式時,該指令用于設置y坐標,該指令帶有4個參數,實際上是2個坐標值:SP和EP,即頁地址的起始值和結束值,SP必須小于等于EP,且0≤SP/EP≤319。一般在設置y坐標的時候,我們只需要帶2個參數即可,也就是設置SP即可,因為如果EP沒有變化,我們只需要設置一次即可(在初始化ILI9341的時候設置),從而提高速度。8.1任務14TFT-LCD顯示TFTLCD驅動原理
0X2C指令該指令是寫GRAM指令,在發(fā)送該指令之后,我們便可以往LCD的GRAM里面寫入顏色數據了,該指令支持連續(xù)寫(地址自動遞增)1、TFTLCD驅動原理-指令簡介在收到指令0X2C之后,數據有效位寬變?yōu)?6位,我們可以連續(xù)寫入LCDGRAM值,而GRAM的地址將根據MY/MX/MV設置的掃描方向進行自增。例如:假設設置的是從左到右,從上到下的掃描方式,那么設置好起始坐標(通過SC,SP設置)后,每寫入一個顏色值,GRAM地址將會自動自增1(SC++),如果碰到EC,則回到SC,同時SP++,一直到坐標:EC,EP結束,其間無需再次設置的坐標,從而大大提高寫入速度。8.1任務14TFT-LCD顯示TFTLCD驅動原理
0X2E指令該指令是讀GRAM指令,用于讀取ILI9341的顯存(GRAM),同0X2C指令,該指令支持連續(xù)讀(地址自動遞增)1、TFTLCD驅動原理-指令簡介ILI9341在收到該指令后,第一次輸出的是dummy數據(無效),第二次開始,讀取到的才是有效的GRAM數據(從坐標:SC,SP開始),輸出規(guī)律為:每個顏色分量占8個位,一次輸出2個顏色分量。比如:第一次輸出是R1G1,隨后的規(guī)律為:B1R2
G2B2
R3G3
B3R4
G4B4
R5G5...以此類推8.1任務14TFT-LCD顯示TFTLCD驅動原理3、源碼講解-LCD坐標設置函數//設置光標位置//Xpos:橫坐標//Ypos:縱坐標voidLCD_SetCursor(u16Xpos,u16Ypos){ if(lcddev.id==0X9341||lcddev.id==0X5310){ LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(Ypos>>8); LCD_WR_DATA(Ypos&0XFF);}elseif(lcddev.id==XXXX) //根據不同的LCD型號,執(zhí)行不同的代碼{ ……//省略部分代碼}}
8.1任務14TFT-LCD顯示TFTLCD源碼3、源碼講解-LCD畫點函數//畫點//x,y:坐標//POINT_COLOR:此點的顏色voidLCD_DrawPoint(u16x,u16y){LCD_SetCursor(x,y); //設置光標位置
LCD_WriteRAM_Prepare(); //開始寫入GRAMLCD->LCD_RAM=POINT_COLOR; //非Mini板的操作方式
}LCD_WR_DATA(POINT_COLOR);MiniSTM32;8.1任務14TFT-LCD顯示TFTLCD源碼3、源碼講解-LCD讀點函數LCD讀點函數:u16LCD_ReadPoint(u16x,u16y)1,非Mini板的讀點函數代碼(FSMC方式,適合戰(zhàn)艦、精英、探索者F4板)2,Mini板的讀點函數代碼(GPIO方式,適合Mini板)8.1任務14TFT-LCD顯示TFTLCD源碼3、源碼講解-LCD字符顯示函數//在指定位置顯示一個字符//x,y:起始坐標//num:要顯示的字符:""--->"~"http://size:字體大小12/16/24//mode:疊加方式(1)還是非疊加方式(0)voidLCD_ShowChar(u16x,u16y,u8num,u8size,u8mode){
u8temp,t1,t;u16y0=y;u8csize=(size/8+((size%8)?1:0))*(size/2); //得到字體一個字符對應點陣集所占的字節(jié)數
num=num-''; //得到偏移后的值(ASCII字庫是從空格開始取模,所以-''就是對應字符的字庫)
for(t=0;t<csize;t++){if(size==12)temp=asc2_1206[num][t]; //調用1206字體
elseif(size==16)temp=asc2_1608[num][t]; //調用1608字體
elseif(size==24)temp=asc2_2412[num][t]; //調用2412字體
elsereturn; //沒有的字庫
for(t1=0;t1<8;t1++){
if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
elseif(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);temp<<=1;y++;
if(y>=lcddev.height)return; //超區(qū)域了
if((y-y0)==size){
y=y0;
x++; if(x>=lcddev.width)return; //超區(qū)域了
break;}}
}
}8.1任務14TFT-LCD顯示TFTLCD源碼3、源碼講解-LCD字符顯示函數constunsignedcharoled_asc2_1206[95][12]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",0*/{0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/……{0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00},/*"~",94*/};字符碼表constunsignedcharoled_asc2_1608[95][16]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",0*/{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/……{0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/}constunsignedcharoled_asc2_2412[95][36]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",0*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0x0F,0xFE,0x38,0x0F,0x80,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/……{0x00,0x00,0x00,0x18,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x0C,0x00,0x00,0x10,0x00,0x00},/*"~",94*/}8.1任務14TFT-LCD顯示TFTLCD源碼3、源碼講解-LCD字符顯示函數淘寶店鋪:
技術論壇:8.1任務14TFT-LCD顯示TFTLCD源碼8.1任務14TFT-LCD顯示OLEDOLED,即有機發(fā)光二極管(OrganicLight-EmittingDiode),又稱為有機電激光顯示(OrganicElectroluminesenceDisplay,OELD)。OLED由于同時具備自發(fā)光,不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優(yōu)異之特性,被認為是下一代的平面顯示器新興應用技術。OLED顯示技術具有自發(fā)光的特性,采用非常薄的有機材料涂層和玻璃基板,當有電流通過時,這些有機材料就會發(fā)光,而且OLED顯示屏幕可視角度大,并且能夠節(jié)省電能,從2003年開始這種顯示設備在MP3播放器上得到了應用。LCD都需要背光,而OLED不需要,因為它是自發(fā)光的。這樣同樣的顯示,OLED效果要來得好一些。以目前的技術,OLED的尺寸還難以大型化,但是分辨率確可以做到很高。8.2任務15OLED顯示ALINETEK0.96寸OLED模塊1)模塊有單色和雙色兩種可選,單色為純藍色,而雙色則為黃藍雙色。
單色模塊每個像素點只有亮與不亮兩種情況,沒有顏色區(qū)分。2)尺寸小,顯示尺寸為0.96寸,而模塊的尺寸僅為27mm*26mm大小。3)高分辨率,該模塊的分辨率為128*64。4)多種接口方式,該模塊提供了總共4種接口包括:6800、8080兩種并行接口方式、4線的穿行SPI接口方式,、IIC接口方式(只需要2根線就可以控制OLED了!)。5)不需要高壓,直接接3.3V就可以工作了。這里要提醒大家的是,該模塊不和5.0V接口兼容,所以請大家在使用的時候一定要小心,別直接接到5V的系統(tǒng)上去,否則可能燒壞模塊8.2任務15OLED顯示OLED模塊工作模式選擇4種模式通過模塊的BS1/BS2設置,BS1/BS2的設置與模塊接口模式的關系如表所示:8.2任務15OLED顯示OLED模塊原理圖8.2任務15OLED顯示OLED8080并行接口信號線說明CS:OLED片選信號。WR:向OLED寫入數據。RD:從OLED讀取數據。D[7:0]:8位雙向數據線。RST(RES):硬復位OLED。DC:命令/數據標志(0,讀寫命令;1,讀寫數據)。OLED控制器為SSD13068.2任務15OLED顯示OLED8080并口讀寫過程模塊的8080并口讀/寫的過程為:先根據要寫入/讀取的數據的類型,設置DC為高(數據)/低(命令),然后拉低片選,選中SSD1306,接著我們根據是讀數據,還是要寫數據置RD/WR為低,然后:1.讀數據:在RD的上升沿,使數據鎖存到數據線(D[7:0])上;2.寫數據:在WR的上升沿,使數據寫入到SSD1306里面;并口寫時序圖并口讀時序圖8.2任務15OLED顯示OLED模塊顯存SSD1306的顯存總共為128*64bit大小,SSD1306將這些顯存分為了8頁。每頁包含了128個字節(jié),總共8頁,這樣剛好是128*64的點陣大小。8.2任務15OLED顯示程序顯示原理在STM32的內部建立一個
緩存(共128*8個字節(jié)),在每次修改的時候,只是修改STM32上的緩存(實際上就是SRAM),在修改完了之后,一次性把STM32上的緩存數據寫入到OLED的GRAM。當然這個方法也有壞處,就是對于那些SRAM很小的單片機(比如51系列)就比較麻煩了。8.2任務15OLED顯示SSD1306的命令命令0X81:設置對比度。包含兩個字節(jié),第一個0X81為命令,隨后發(fā)送的一個字節(jié)為要設置的對比度的值。這個值設置得越大屏幕就越亮。命令0XAE/0XAF:0XAE為關閉顯示命令;0XAF為開啟顯示命令。命令0X8D:包含2個字節(jié),第一個為命令字,第二個為設置值,第二個字節(jié)的BIT2表示電荷泵的開關狀態(tài),該位為1,則開啟電荷泵,為0則關閉。在模塊初始化的時候,這個必須要開啟,否則是看不到屏幕顯示的。命令0XB0~B7:用于設置頁地址,其低三位的值對應著GRAM的頁地址。命令0X00~0X0F:用于設置顯示時的起始列地址低四位。命令0X10~0X1F:用于設置顯示時的起始列地址高四位。8.2任務15OLED顯示OLED初始化過程8.2任務15OLED顯示OLED初始化//初始化SSD1306 voidOLED_Init(void){…//設置IO口模式,所有用到的io口設置為推挽模式。GPIO_Init();…//初始化代碼,寫相關寄存器OLED_WR_Byte(0xAE,OLED_CMD);//關閉顯示OLED_WR_Byte(0xD5,OLED_CMD);//設置時鐘分頻因子,震蕩頻率OLED_WR_Byte(80,OLED_CMD);//[3:0],分頻因子;[7:4],震蕩頻率OLED_WR_Byte(0xA8,OLED_CMD);//設置驅動路數OLED_WR_Byte(0X3F,OLED_CMD);//默認0X3F(1/64)OLED_WR_Byte(0xD3,OLED_CMD);//設置顯示偏移OLED_WR_Byte(0X00,OLED_CMD);//默認為0……OLED_Clear();}8.2任務15OLED顯示OLED寫一個字節(jié)//向SSD1306寫入一個字節(jié)。//dat:要寫入的數據/命令//cmd:數據/命令標志0,表示命令;1,表示數據;voidOLED_WR_Byte(u8dat,u8cmd){DATAOUT(dat); if(cmd)
OLED_RS_Set();else
OLED_RS_Clr();
OLED_CS_Clr();
OLED_WR_Clr();
OLED_WR_Set();
OLED_CS_Set();
OLED_RS_Set(); } 8.2任務15OLED顯示OLED更新緩存,顯示內容。u8OLED_GRAM[128][8]; voidOLED_Refresh_Gram(void){u8i,n; for(i=0;i<8;i++){
OLED_WR_Byte(0xb0+i,OLED_CMD);//設置頁地址(0~7)
OLED_WR_Byte(0x00,OLED_CMD);//設置顯示位置—列低地址
OLED_WR_Byte(0x10,OLED_CMD);//設置顯示位置—列高地址
for(n=0;n<128;n++)
OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);}}8.2任務15OLED顯示OLED畫點函數voidOLED_DrawPoint(u8x,u8y,u8t){u8pos,bx,temp=0;if(x>127||y>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度汽車銷售公司銷售顧問勞動合同3篇
- 2025年環(huán)保型?;穫}儲安全協(xié)議書3篇
- 2025年度蝦塘承包經營權租賃合同示例3篇
- 二零二五年度礦產資源合作開發(fā)合同標準文本3篇
- 2025年樹木種植基地合作與生態(tài)環(huán)境保護合同范本3篇
- 2025年影視制作委托代理合同范本3篇
- 二零二五年度環(huán)境衛(wèi)生治理與生物多樣性保護合同3篇
- 二零二五年度餐館轉讓合同范本:包含客戶數據保護條款3篇
- 2025版二手汽車買賣協(xié)議范本詳解3篇
- 二零二五年汽車租賃服務協(xié)議(個人租給婚紗攝影)2篇
- 第二章 運營管理戰(zhàn)略
- 《三本白皮書》全文內容及應知應會知識點
- 專題14 思想方法專題:線段與角計算中的思想方法壓軸題四種模型全攻略(解析版)
- 醫(yī)院外來器械及植入物管理制度(4篇)
- 圖像識別領域自適應技術-洞察分析
- 新概念英語第二冊考評試卷含答案(第49-56課)
- 商業(yè)倫理與企業(yè)社會責任(山東財經大學)智慧樹知到期末考試答案章節(jié)答案2024年山東財經大學
- 【奧運會獎牌榜預測建模實證探析12000字(論文)】
- (完整版)譯林版英語詞匯表(四年級下)
- 支票票樣-樣版
- 標準活動板房設計說明(共7頁)
評論
0/150
提交評論