娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32學習筆記——TFT2.4彩屏顯示圖片

發布者:shengju最新更新時間:2020-10-28 來源: eefocus關鍵字:STM32  TFT2  4彩屏  顯示圖片 手機看文章 掃描二維碼
隨時隨地手機看文章

利用彩屏顯示圖片需要先完成彩屏的驅動程序,然后在驅動程序的基礎上再編寫應用程序。


彩屏的驅動程序如果寫好的話,就可以一直使用了,精力主要集中在應用程序的編寫就可以了,但是移植的話,要移植驅動程序。其實移植也只是改變那些很底層的靠近處理器的那部分代碼。


因為STM32F103C8的片上只有64K的FLASH,所以不能存儲太多的圖片數據,也就不能顯示太大的圖片。


一下的程序注釋的比較詳細,看懂了基本上就可以用了。


彩屏驅動程序的頭文件lcd.h如下:


#define uchar unsigned char 


#define uint unsigned int


#define Bus_16        //16位數據模式,如果使用8位模式,請注釋此語句,如果使用16位模式,請打開此句


#define  LCD_DataPortH P1     //高8位數據口,8位模式下只使用高8位 


#define  LCD_DataPortL P0     //低8位數據口 ,8位模式下低8位可以不接線


#define LCD_WR    GPIO_Pin_2  //WR  引腳定義 P2^5


#define LCD_RS    GPIO_Pin_1  //RS  引腳定義 P2^6


#define LCD_CS    GPIO_Pin_0  //CS  引腳定義 P2^7


#define LCD_RST   GPIO_Pin_11     //RST 引腳定義 P3^3


#define LCD_RD    GPIO_Pin_8  //RD  引腳定義 P3^2


#define  LCD_SIZE_X 240


#define  LCD_SIZE_Y 320


extern  uint colors[];


extern  void  pic_play(uint xStart, uint xEnd, uint yStart, uint yEnd); //顯示圖片函數


void delayms(int count) ;


//void LCD_Writ_Bus(char VH,char VL);


void LCD_Init(void);


void LCD_Writ_Bus( uint VH, uint VL);


void LCD_Write_COM(char VH,char VL);


void LCD_Write_DATA(char VH,char VL);


void Pant(char VH,char VL);


void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2);


驅動程序lcd.c文件如下:


#include "stm32f10x_lib.h"


#include "Lcd.h"


//存儲圖片數據的頭文件


//#include "picture.h"


#include "picture_sara.h"


#include "xiaoqian.h"


#include "yang.h"


#define    LCD_rest(x) x ? GPIO_SetBits(GPIOA, LCD_RST):   GPIO_ResetBits(GPIOA, LCD_RST) //自己定義位操作函數


#define    LCD_rd(x)   x ? GPIO_SetBits(GPIOA, LCD_RD) :   GPIO_ResetBits(GPIOA, LCD_RD)


#define    LCD_rs(x)   x ? GPIO_SetBits(GPIOB, LCD_RS) :   GPIO_ResetBits(GPIOB, LCD_RS)


#define    LCD_wr(x)   x ? GPIO_SetBits(GPIOB, LCD_WR) :   GPIO_ResetBits(GPIOB, LCD_WR)


#define    LCD_cs(x)   x ? GPIO_SetBits(GPIOB, LCD_CS) :   GPIO_ResetBits(GPIOB, LCD_CS)


uint colors[]=


{


  0xf800,0x07e0,0x001f,0xffe0,0x0000,0x07ff,0xf81f,0xffff  //顏色數據


};


void LCD_Init(void) //初始化LCD


{

    LCD_rest(1);


    delayms(5);


LCD_rest(0);


delayms(5);


LCD_rest(1);


delayms(5);


 


LCD_cs(0);  //打開片選使能


//


LCD_Write_COM(0x00,0xE5); LCD_Write_DATA(0x78,0xF0); // set SRAM internal timing


LCD_Write_COM(0x00,0x01); LCD_Write_DATA(0x01,0x00); // set SS and SM bit


LCD_Write_COM(0x00,0x02); LCD_Write_DATA(0x07,0x00); // set 1 line inversion


LCD_Write_COM(0x00,0x03); LCD_Write_DATA(0x10,0x30); // set GRAM write direction and BGR=1.


LCD_Write_COM(0x00,0x04); LCD_Write_DATA(0x00,0x00); // Resize register


LCD_Write_COM(0x00,0x08); LCD_Write_DATA(0x02,0x07); // set the back porch and front porch


LCD_Write_COM(0x00,0x09); LCD_Write_DATA(0x00,0x00); // set non-display area refresh cycle ISC[3:0]


LCD_Write_COM(0x00,0x0A); LCD_Write_DATA(0x00,0x00); // FMARK function


LCD_Write_COM(0x00,0x0C); LCD_Write_DATA(0x00,0x00); // RGB interface setting


LCD_Write_COM(0x00,0x0D); LCD_Write_DATA(0x00,0x00); // Frame marker Position


LCD_Write_COM(0x00,0x0F); LCD_Write_DATA(0x00,0x00); // RGB interface polarity


//


LCD_Write_COM(0x00,0x10); LCD_Write_DATA(0x00,0x00); // SAP, BT[3:0], AP, DSTB, SLP, STB


LCD_Write_COM(0x00,0x11); LCD_Write_DATA(0x00,0x07); // DC1[2:0], DC0[2:0], VC[2:0]


LCD_Write_COM(0x00,0x12); LCD_Write_DATA(0x00,0x00); // VREG1OUT voltage


LCD_Write_COM(0x00,0x13); LCD_Write_DATA(0x00,0x00); // VDV[4:0] for VCOM amplitude


LCD_Write_COM(0x00,0x07); LCD_Write_DATA(0x00,0x01);


delayms(50); // Dis-charge capacitor power voltage


LCD_Write_COM(0x00,0x10); LCD_Write_DATA(0x10,0x90); // 1490//SAP, BT[3:0], AP, DSTB, SLP, STB


LCD_Write_COM(0x00,0x11); LCD_Write_DATA(0x02,0x27); // DC1[2:0], DC0[2:0], VC[2:0]


delayms(50); // Delay 50ms


LCD_Write_COM(0x00,0x12); LCD_Write_DATA(0x00,0x1F); //001C// Internal reference voltage= Vci;


delayms(50); // Delay 50ms


LCD_Write_COM(0x00,0x13); LCD_Write_DATA(0x15,0x00); //0x1000//1400   Set VDV[4:0] for VCOM amplitude  1A00


LCD_Write_COM(0x00,0x29); LCD_Write_DATA(0x00,0x27); //0x0012 //001a  Set VCM[5:0] for VCOMH  //0x0025  0034


LCD_Write_COM(0x00,0x2B); LCD_Write_DATA(0x00,0x0D); // Set Frame Rate   000C


delayms(50); // Delay 50ms


LCD_Write_COM(0x00,0x20); LCD_Write_DATA(0x00,0x00); // GRAM horizontal Address


LCD_Write_COM(0x00,0x21); LCD_Write_DATA(0x00,0x00); // GRAM Vertical Address


// ----------- Adjust the Gamma Curve ----------//


LCD_Write_COM(0x00,0x30); LCD_Write_DATA(0x00,0x00);


LCD_Write_COM(0x00,0x31); LCD_Write_DATA(0x07,0x07);


LCD_Write_COM(0x00,0x32); LCD_Write_DATA(0x03,0x07);


LCD_Write_COM(0x00,0x35); LCD_Write_DATA(0x02,0x00);


LCD_Write_COM(0x00,0x36); LCD_Write_DATA(0x00,0x08);//0207


LCD_Write_COM(0x00,0x37); LCD_Write_DATA(0x00,0x04);//0306


LCD_Write_COM(0x00,0x38); LCD_Write_DATA(0x00,0x00);//0102


LCD_Write_COM(0x00,0x39); LCD_Write_DATA(0x07,0x07);//0707


LCD_Write_COM(0x00,0x3C); LCD_Write_DATA(0x00,0x02);//0702


LCD_Write_COM(0x00,0x3D); LCD_Write_DATA(0x1D,0x04);//1604


//------------------ Set GRAM area ---------------//


LCD_Write_COM(0x00,0x50); LCD_Write_DATA(0x00,0x00); // Horizontal GRAM Start Address


LCD_Write_COM(0x00,0x51); LCD_Write_DATA(0x00,0xEF); // Horizontal GRAM End Address


LCD_Write_COM(0x00,0x52); LCD_Write_DATA(0x00,0x00); // Vertical GRAM Start Address


LCD_Write_COM(0x00,0x53); LCD_Write_DATA(0x01,0x3F); // Vertical GRAM Start Address


LCD_Write_COM(0x00,0x60); LCD_Write_DATA(0xA7,0x00); // Gate Scan Line


LCD_Write_COM(0x00,0x61); LCD_Write_DATA(0x00,0x01); // NDL,VLE, REV


LCD_Write_COM(0x00,0x6A); LCD_Write_DATA(0x00,0x00); // set scrolling line


//-------------- Partial Display Control ---------//


LCD_Write_COM(0x00,0x80); LCD_Write_DATA(0x00,0x00);


LCD_Write_COM(0x00,0x81); LCD_Write_DATA(0x00,0x00);


LCD_Write_COM(0x00,0x82); LCD_Write_DATA(0x00,0x00);


LCD_Write_COM(0x00,0x83); LCD_Write_DATA(0x00,0x00);


LCD_Write_COM(0x00,0x84); LCD_Write_DATA(0x00,0x00);


LCD_Write_COM(0x00,0x85); LCD_Write_DATA(0x00,0x00);


//-------------- Panel Control -------------------//


LCD_Write_COM(0x00,0x90); LCD_Write_DATA(0x00,0x10);


LCD_Write_COM(0x00,0x92); LCD_Write_DATA(0x06,0x00);


LCD_Write_COM(0x00,0x07); LCD_Write_DATA(0x01,0x33); // 262K color and display ON


LCD_cs(1);  //關閉片選使能



void delayms(int count)  // 


{


        int i,j;


        for(i=0;i

                for(j=0;j<100;j++);


}


#ifdef  Bus_16    //條件編譯-16位數據模式   


void LCD_Writ_Bus(uint VH , uint VL)   //并行數據寫入函數


{


  //LCD_DataPortH=VH;   //高位P1口


//屏蔽高8位  將數據送到PA0-PA7


GPIOA->BSRR = VH & 0x00ff;   


    GPIOA->BRR  = (~VH) & 0x00ff;


   //GPIO_SetBits(GPIOA,  VH & 0x00ff);


   //GPIO_ResetBits(GPIOA, (~ VH & 0x00ff));


 


    //LCD_DataPortL=VL;   //低位P0口


//屏蔽低8位  將數據送到PB8-PB15


GPIOB->BSRR = (VL)<<8 & 0xff00;   


    GPIOB->BRR  = ((~VL)<<8) & 0xff00;


LCD_wr(0);


LCD_wr(1);


}


#else //條件編譯-8位數據模式 


void LCD_Writ_Bus(char VH,char VL)   //并行數據寫入函數


{


     //LCD_DataPortH=VH;  //八位模式都用P0口送數據


     //LCD_wr(0);


//LCD_wr(1);


//LCD_DataPortH=VL; //八位模式都用P0口送數據


//LCD_wr(0);


//LCD_wr(1);


}


#endif


void LCD_Write_COM(char VH,char VL)  //發送命令


{


    LCD_rs(0);


LCD_Writ_Bus(VH,VL);


}


void LCD_Write_DATA(char VH,char VL) //發送數據


{


    LCD_rs(1);


LCD_Writ_Bus(VH,VL);


}


void Pant(char VH,char VL)    //涂滿全屏函數


{


int i,j;


LCD_cs(0);  //打開片選使能


Address_set(0,0,239,319);


    for(i=0;i<320;i++)


 {


  for (j=0;j<240;j++)


    {


          LCD_Write_DATA(VH,VL);


    }



  }


     LCD_cs(1);  //關閉片選使能


}


void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2) //設置地址范圍函數


{


LCD_Write_COM(0x00,0x20);LCD_Write_DATA(x1>>8,x1);   //設置X坐標位置


    LCD_Write_COM(0x00,0x21);LCD_Write_DATA(y1>>8,y1);   //設置Y坐標位置


    LCD_Write_COM(0x00,0x50);LCD_Write_DATA(x1>>8,x1);   //開始X


LCD_Write_COM(0x00,0x52);LCD_Write_DATA(y1>>8,y1);   //開始Y


    LCD_Write_COM(0x00,0x51);LCD_Write_DATA(x2>>8,x2);   //結束X


LCD_Write_COM(0x00,0x53);LCD_Write_DATA(y2>>8,y2);   //結束Y


    LCD_Write_COM(0x00,0x22);  


}


void  pic_play(uint Start_X, uint End_X,uint Start_Y,uint End_Y)


{


   uint m;


   //LCD_CS = 0;


   GPIO_ResetBits(GPIOB,LCD_CS);  //打開片選


   Address_set(Start_X,Start_Y,End_X,End_Y) ; //指定圖片顯示的范圍


  // LCD_RS  = 1; 


   GPIO_SetBits(GPIOB, LCD_RS);   //關閉片選


   //循環把圖片的所有數據依次寫入


   Address_set(0,0,141,79);    //用彩屏顯示圖片時,一定要注意圖片長寬比例,如果長寬比例不對的話,顯示的圖片就會變形


   //例如本幅圖片取模軟件輸出的長寬為(177,100),所以在這里圖片的顯示范圍必須設為(0,0,176,99),即x范圍為0~176,y的范圍為


   //0~99.這樣圖片才能正常顯示,否則圖片就會變形。


   for(m=0;m<22728/2;m++)   //這里的35400這個數字指定顯示圖片的范圍,因為該圖的數據總共只有35400個,所以這里指定


   //整幅圖都顯示出來。如果這個數比35400小,則只顯示該圖的一部分。


   {


       LCD_Write_DATA(gImage_sara[m*2+1],gImage_sara[m*2]);


   }


Address_set(0,90,65,189);  //一定要注意保持比例


for(m=0;m<13200/2;m++)


{


    LCD_Write_DATA(gImage_xiaoqian[m*2+1],gImage_xiaoqian[m*2]);


}


    Address_set(75,90,137,189); //一定要注意保持比例


for(m=0;m<12600/2;m++)


{


    LCD_Write_DATA(gImage_yang[m*2+1],gImage_yang[m*2]);


}


  


   //LCD_CS = 1;


   GPIO_SetBits(GPIOB, LCD_CS);  //關閉片選


 


}


主程序main.c


在主程序中完成對系統的初始化配置,利用彩屏的驅動程序完成圖片的顯示等功能,程序如下:


#include "stm32f10x_lib.h"


#include "lcd.h"


GPIO_InitTypeDef GPIO_InitStructure;   //定義GPIO初始化的結構體變量

[1] [2]
關鍵字:STM32  TFT2  4彩屏  顯示圖片 引用地址:STM32學習筆記——TFT2.4彩屏顯示圖片

上一篇:STM32F10x芯片GPIO/AFIO端口配置總結
下一篇:STM32實現DAC輸出的相關設置

推薦閱讀最新更新時間:2025-05-31 01:19

STM32一文通(1) -SWD調試 新建工程
一. SWD方法調試 SWD方法需要:1. SWD接口 2.ST-LINK V2連接器 首先將STLINK驅動裝好 按照如下方式連接STLINK SWD接線 打開keil5 然后進入settings 當我們調試程序時: 就可以下載程序啦! 二. 新建工程(寄存器版) 然后,我們打開工程目錄,新建下圖中的最后三個文件. 第一個是一個啟動文件,到處都能找到 第二個第三個暫時是空文件 然后添加這些文件到工程中 如何選擇啟動文件, 我們可以根據下面的原則 在main文件中,我們寫一個main函數 這里注意,我們要先寫一個空的SystemInit函數來騙過編譯器不報錯
[單片機]
STM32電源框圖解析(VDD、VSS、VDDA、VSSA、VREF+、VREF-、VBAT等的區別)
STM32的工作電壓(VDD )為2.0~3.6V,通過內置的電壓調節器提供所需的1.8V電源,當主電源VDD 掉電后,通過VBAT 腳為實時時鐘(RTC)和備份寄存器提供電源(下圖為STM32F1**系列電源框架圖,STM32基本大同小異)。 1、名詞解析 可以看到上圖有VDD、VSS、VDDA、VSSA、VREF+等標識,這些是什么意思呢?有什么特點呢?如何看懂STM32系統的電源框架圖呢? 首先對名詞進行解析,如下所示: VCC電路的供電正電壓VDDD芯片的工作數字正電壓 GND電路的供電負電壓VSSD芯片的工作數字正電壓 VDD芯片的工作正電壓VREF+ADC基準參考正電壓 VSS芯片的工作負電壓VREF-ADC基
[單片機]
STM32學習筆記5】EXTI外部中斷
前言 本系列文章統一圍繞STM32F103C8T6最小系統開發板進行記錄,如涉及其他開發板將會特別說明。 中斷 系統停止當前正在運行的程序轉到其他的服務,可能是程序接收了比自身高優先級的請求,或者是人為設置中斷,中斷是屬于正常現象。 硬中斷 由硬件產生的,比如像磁盤,網卡,鍵盤,時鐘等。每個設備或設備集都有它自己的IRQ(中斷請求)?;贗RQ,CPU可以將相應的請求分發到對應的硬件驅動上。 軟中斷 軟中斷是由當前正在運行的進程所產生。 中斷處理過程 當異常中斷發生時,系統執行完當前指令后,將跳轉到相應的異常中斷處理程序處執行。 在異常中斷處理程序執行完成后,程序返回到發生中斷的指令的下一條指令處執行。 在進入異常中斷
[單片機]
【調試記錄】STM32 HAL庫硬件I2C從機Seq DMA方式不定長接收和發送
序言 久聞STM32硬件I2C坑多,之前做的項目淺嘗主機通信就偶爾遇到總線鎖死的bug,網上解決方案也很多,用著也還行。然而作為從機就是另一個大坑了,官方例程少,網上資料少,api也說的不明不白。本文整合各位博主分享的資料,記錄和分享調試linux主機與STM32的I2C通信過程中遇到的問題和解決方案,最終在STM32L051C8T單片機實現DMA方式的I2C從機。 單片機資源緊張,性能低但是實時性高。要充分發揮單片機實時特性,在處理低速IO時應該盡量用硬件方式實現,盡可能利用硬件處理數據。DMA就是解放CPU負載的利器。 HAL庫API分析 一般來說HAL庫的通信io類API分為polling阻塞,IT和DMA方式。而I2C分
[單片機]
STM32單片機基礎知識
STMicroelectronics的STM32系列是一系列廣受歡迎的32位ARM Cortex-M微控制器(MCU)。這些單片機被廣泛應用于嵌入式系統,因為它們具有高性能、低功耗、豐富的外設和豐富的開發工具生態系統。 1、處理器核心 STM32系列單片機采用不同版本的ARM Cortex-M處理器核心,可根據應用的性能和功耗需求進行選擇。從低功耗的Cortex-M0到高性能的Cortex-M7,這些核心提供了廣泛的選擇,適用于各種嵌入式應用。選型時需要考慮處理器性能、成本、功耗以及應用的實際需求。 Cortex-M0: 特點:Cortex-M0是Cortex-M系列中的低功耗、低成本核心,適用于對功耗有嚴格要求的應用。它是一種精
[單片機]
STM32中ucos的編寫程序
* Includes ------------------------------------------------------------------*/ #include config.h /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ //定義 堆棧大小 //#define TASK_STK_SIZE 128 #define TASK_STK_SIZ
[單片機]
STM32學習筆記之 DS18B20 SEARCH ROM
使用說明,根據MCU不同 用戶只需修改4函數 //單總線復位函數 int OWReset(); 單線總線的復位函數,注意這個要做相應修改,如果期間存在要返回1,期間不存在返回0, 直接從總線上讀取的是期間存在返回0,不存在返回1 //向總線發送一個字節 void OWWriteByte(unsigned char dat); //向總線發送一位 void OWWriteBit(unsigned char bit_value); //讀取總線一位 unsigned char OWReadBit(); 使用時用 int OWFirst();發現第一個單線器件 如果期間存在返回1,并且把ID存在 unsigned char
[單片機]
stm32之can總線過濾器研究
stm32的can總線的配置如下: CAN_InitStructure.CAN_TTCM=DISABLE;//禁止時間觸發通信模式 CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE;//CAN報文只被發送1次,不管發送的結果如何(成功、出錯或仲裁丟失) CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

隨便看看

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 银川市| 娱乐| 观塘区| 陆川县| 永德县| 宁远县| 克拉玛依市| 静宁县| 德化县| 鹤岗市| 平舆县| 阳山县| 敦煌市| 英德市| 东阿县| 河源市| 东台市| 上饶县| 湘乡市| 三台县| 巴塘县| 疏勒县| 大厂| 阿勒泰市| 昂仁县| 宜君县| 江川县| 永善县| 南靖县| 连南| 石河子市| 丰原市| 平凉市| 定远县| 乌拉特前旗| 云和县| 乌拉特中旗| 哈密市| 长顺县| 永顺县| 涟水县|