3138|4

1万

帖子

16

TA的资源

版主

楼主
 

MM32F031开发板评测8:模拟SPI驱动2.2寸SPI屏 [复制链接]

有的人看到模拟SPI会不屑一顾,有些甚至看都不看,我确高兴的很,原因何在???
我是个看结果的人,也就是说一但我哪一天开发SPI的东东开发不出来了。也不会象《春天里》那首歌唱的,死在春天里。我应百折不挠地用模拟串口实现。

       费话不说了,上图:
       以下的是清红色的屏,那叫一个红。
      

那么怎么搞定的呢?很简单只要有这个屏的资料。下面是这个SPI屏的资料一并传上:
2.2寸天马SPI串口模块资料9341_240X320_Rev2.0.zip (15.33 MB, 下载次数: 35)
把里边的STMF103例程里边的驱动及H文件考到点灯那个程序目录里。然后添加,然后编译。

至于,线怎么连其实H文件里边有,其顺序如下;

B12-----CS
A4----RES
B1----DC
B13----CLK
B15-----DIN

以下是主函数:
  1. int main(void)   
  2. {
  3.     delay_init();
  4.     LED_Init();
  5.           LCD_GPIO_Init();
  6.           Lcd_Init();
  7.           Lcd_Clear(RED);
  8.            while(1)              //ÎTÏTÑ-»·
  9.     {
  10.         LED1_TOGGLE();
  11.         LED2_TOGGLE();
  12.         LED3_TOGGLE();
  13.         LED4_TOGGLE();
  14.         delay_ms(1000);
  15.     }
  16. }

复制代码



以下是H文件

  1. #ifndef _LCD_DRIVER_H_
  2. #define _LCD_DRIVER_H_
  3. #include "HAL_conf.h"

  4. /////////////////////////////////////óû§ÅäÖÃÇø///////////////////////////////////         
  5. //Ö§3ÖoáêúÆá¿ìËù¶¨òåÇD»»
  6. #define USE_HORIZONTAL                  0        //¶¨òåêÇ·ñê1óÃoáÆá                 0,2»ê1óÃ.1,ê1óÃ.

  7. //-----------------------------SPI ×üÏßÅäÖÃ--------------------------------------//
  8. #define USE_HARDWARE_SPI     1  //1:Enable Hardware SPI;0:USE Soft SPI

  9. //-------------------------ÆáÄ»ÎïàíÏñËØéèÖÃ--------------------------------------//
  10. #define LCD_X_SIZE                240
  11. #define LCD_Y_SIZE                320

  12. #if USE_HORIZONTAL//èç1û¶¨òåáËoáÆá
  13. #define X_MAX_PIXEL                LCD_Y_SIZE
  14. #define Y_MAX_PIXEL                LCD_X_SIZE
  15. #else
  16. #define X_MAX_PIXEL                LCD_X_SIZE
  17. #define Y_MAX_PIXEL                LCD_Y_SIZE
  18. #endif
  19. //////////////////////////////////////////////////////////////////////////////////
  20.          






  21. #define RED          0xf800
  22. #define GREEN        0x07e0
  23. #define BLUE         0x001f
  24. #define WHITE        0xffff
  25. #define BLACK        0x0000
  26. #define YELLOW  0xFFE0
  27. #define GRAY0   0xEF7D           //»òé«0 3165 00110 001011 00101
  28. #define GRAY1   0x8410              //»òé«1      00000 000000 00000
  29. #define GRAY2   0x4208              //»òé«2  1111111111011111



  30. //±¾2aêÔ3ìDòê1óÃμÄêÇÄ£ÄaSPI½ó¿úÇy¶ˉ
  31. //¿é×Ôóé¸ü¸Ä½ó¿úIOÅäÖã¬ê1óÃèÎòa×îéù4 IO¼′¿éíê3é±¾¿îòo¾§Çy¶ˉÏÔê¾
  32. /******************************************************************************
  33. ½ó¿ú¶¨òåÔúLcd_Driver.hÄú¶¨ò壬Çë¸ù¾Y½óÏßDT¸Ä2¢DT¸ÄÏàó|IO3õê¼»ˉLCD_GPIO_Init()
  34. #define LCD_CTRL                     GPIOB                //¶¨òåTFTêy¾Y¶Ë¿ú
  35. #define LCD_LED                GPIO_Pin_9  //PB9 ᬽóÖáTFT -LED
  36. #define LCD_RS                 GPIO_Pin_10        //PB10ᬽóÖáTFT --RS
  37. #define LCD_CS                GPIO_Pin_11 //PB11 ᬽóÖáTFT --CS
  38. #define LCD_RST               GPIO_Pin_12        //PB12ᬽóÖáTFT --RST
  39. #define LCD_SCL                GPIO_Pin_13        //PB13ᬽóÖáTFT -- CLK
  40. #define LCD_SDA                GPIO_Pin_15        //PB15ᬽóÖáTFT - SDI
  41. *******************************************************************************/
  42. #define LCD_CTRL                     GPIOB                //¶¨òåTFTêy¾Y¶Ë¿ú
  43. #define LCD_LED                GPIO_Pin_9  //MCU_PB9--->>TFT --BL
  44. #define LCD_RS                 GPIO_Pin_10        //PB11--->>TFT --RS/DC
  45. #define LCD_CS                GPIO_Pin_11 //MCU_PB11--->>TFT --CS/CE
  46. #define LCD_RST                     GPIO_Pin_12        //PB10--->>TFT --RST
  47. #define LCD_SCL                GPIO_Pin_13        //PB13--->>TFT --SCL/SCK
  48. #define LCD_SDA                GPIO_Pin_15        //PB15 MOSI--->>TFT --SDA/DIN


  49. //#define LCD_CS_SET(x) LCD_CTRL->ODR=(LCD_CTRL->ODR&~LCD_CS)|(x ? LCD_CS:0)

  50. //òo¾§¿ØÖÆ¿úÖÃ12ù×÷óï¾äo궨òå
  51. #define        LCD_CS_SET          LCD_CTRL->BSRR=LCD_CS   
  52. #define        LCD_RS_SET          LCD_CTRL->BSRR=LCD_RS   
  53. #define        LCD_SDA_SET          LCD_CTRL->BSRR=LCD_SDA   
  54. #define        LCD_SCL_SET          LCD_CTRL->BSRR=LCD_SCL   
  55. #define        LCD_RST_SET          LCD_CTRL->BSRR=LCD_RST   
  56. #define        LCD_LED_SET          LCD_CTRL->BSRR=LCD_LED   

  57. //òo¾§¿ØÖÆ¿úÖÃ02ù×÷óï¾äo궨òå
  58. #define        LCD_CS_CLR          LCD_CTRL->BRR=LCD_CS   
  59. #define        LCD_RS_CLR          LCD_CTRL->BRR=LCD_RS   
  60. #define        LCD_SDA_CLR          LCD_CTRL->BRR=LCD_SDA   
  61. #define        LCD_SCL_CLR          LCD_CTRL->BRR=LCD_SCL   
  62. #define        LCD_RST_CLR          LCD_CTRL->BRR=LCD_RST   
  63. #define        LCD_LED_CLR          LCD_CTRL->BRR=LCD_LED


  64. #define LCD_DATAOUT(x) LCD_DATA->ODR=x; //êy¾Yêä3ö
  65. #define LCD_DATAIN     LCD_DATA->IDR;   //êy¾Yêäèë

  66. #define LCD_WR_DATA(data){\
  67. LCD_RS_SET;\
  68. LCD_CS_CLR;\
  69. LCD_DATAOUT(data);\
  70. LCD_WR_CLR;\
  71. LCD_WR_SET;\
  72. LCD_CS_SET;\
  73. }



  74. void LCD_GPIO_Init(void);
  75. void Lcd_WriteIndex(u8 Index);
  76. void Lcd_WriteData(u8 Data);
  77. void Lcd_WriteReg(u8 Index,u8 Data);
  78. u16 Lcd_ReadReg(u8 LCD_Reg);
  79. void Lcd_Reset(void);
  80. void Lcd_Init(void);
  81. void Lcd_Clear(u16 Color);
  82. void Lcd_SetXY(u16 x,u16 y);
  83. void Gui_DrawPoint(u16 x,u16 y,u16 Data);
  84. unsigned int Lcd_ReadPoint(u16 x,u16 y);
  85. void Lcd_SetRegion(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd);
  86. void Lcd_WriteData_16Bit(u16 Data);

  87. #endif
复制代码

以下是C文件:


  1. /***************************************************************************************
  2. STM322aêÔƽ쨽ééü:
  3. ¿a·¢°å£oÕyμãÔ-×óMiniSTM32¿a·¢°å
  4. MCU £oSTM32_F103_RBT6
  5. ¾§Õñ £o12MHZ
  6. Ö÷Æμ £o72MHZ
  7. ½óÏßËμÃ÷:
  8. //-------------------------------------------------------------------------------------
  9. #define LCD_CTRL                     GPIOB                //¶¨òåTFTêy¾Y¶Ë¿ú
  10. #define LCD_LED                GPIO_Pin_9  //PB9 ᬽóÖáTFT -LED
  11. #define LCD_RS                 GPIO_Pin_10        //PB10ᬽóÖáTFT --RS
  12. #define LCD_CS                GPIO_Pin_11 //PB11 ᬽóÖáTFT --CS
  13. #define LCD_RST               GPIO_Pin_12        //PB12ᬽóÖáTFT --RST
  14. #define LCD_SCL                GPIO_Pin_13        //PB13ᬽóÖáTFT -- CLK
  15. #define LCD_SDA                GPIO_Pin_15        //PB15ᬽóÖáTFT - SDI
  16. //VCC:¿éòÔ½ó5Vò2¿éòÔ½ó3.3V
  17. //LED:¿éòÔ½ó5Vò2¿éòÔ½ó3.3V»òÕßê1óÃèÎòa¿ÕÏDIO¿ØÖÆ(¸ßμçƽê1Äü)
  18. //GND£o½óμçÔ′μØ
  19. //ËμÃ÷£oèçDèòa¾¡¿éÄüéùÕ¼óÃIO£¬¿éòÔ½«LCD_CS½óμØ£¬LCD_LED½ó3.3V£¬LCD_RST½óÖáμ¥Ƭ»ú¸′λ¶Ë£¬
  20. //½«¿éòÔêí·Å3¸ö¿éóÃIO
  21. //½ó¿ú¶¨òåÔúLcd_Driver.hÄú¶¨ò壬
  22. //èçDè±ä¸üIO½ó·¨£¬Çë¸ù¾YÄúμÄêμ¼ê½óÏßDT¸ÄÏàó|IO3õê¼»ˉLCD_GPIO_Init()
  23. //-----------------------------------------------------------------------------------------
  24. ày3ì1|ÄüËμÃ÷£o
  25. 1.        ¼òμ¥Ë¢Æá2aêÔ
  26. 2.        ó¢ÎÄÏÔê¾2aêÔê¾ày
  27. 3.        ÖDÎÄÏÔê¾2aêÔê¾ày
  28. 4.        êyÂë1ü×ÖìåÏÔê¾ê¾ày
  29. 5.        í¼Æ¬ÏÔê¾ê¾ày
  30. 6.        2D°′¼ü2Ëμ¥ê¾ày
  31. 7.        ±¾ày3ìÖ§3ÖoáÆá/êúÆáÇD»»(¿aÆôoêUSE_HORIZONTAL,Ïê¼ûLcd_Driver.h)
  32. 8.        ±¾ày3ìÖ§3Öèí¼tÄ£ÄaSPI/ó2¼tSPIÇD»»(¿aÆôoêUSE_HARDWARE_SPI,Ïê¼ûLcd_Driver.h)
  33. **********************************************************************************************/


  34. //---------------------------------function----------------------------------------------------//

  35. /****************************************************************************
  36. * Ãû    3Æ£ovoid LCD_GPIO_Init(void)
  37. * 1|    Äü£oSTM32_Ä£ÄaSPIËùóÃμ½μÄGPIO3õê¼»ˉ
  38. * èë¿ú2Îêy£oÎT
  39. * 3ö¿ú2Îêy£oÎT
  40. * Ëμ    Ã÷£o3õê¼»ˉÄ£ÄaSPIËùóÃμÄGPIO
  41. ****************************************************************************/
  42. void LCD_GPIO_Init(void)
  43. {

  44.         GPIO_InitTypeDef  GPIO_InitStructure;
  45.              
  46.         RCC_APB2PeriphClockCmd( RCC_AHBPeriph_GPIOB ,ENABLE);
  47.        
  48.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15;
  49.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  50.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  51.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  52.       
  53. }
  54. /****************************************************************************
  55. * Ãû    3Æ£ovoid  SPIv_WriteData(u8 Data)
  56. * 1|    Äü£oSTM32_Ä£ÄaSPID′ò»¸ö×Ö½úêy¾Yμ×2ãoˉêy
  57. * èë¿ú2Îêy£oData
  58. * 3ö¿ú2Îêy£oÎT
  59. * Ëμ    Ã÷£oSTM32_Ä£ÄaSPI¶áD′ò»¸ö×Ö½úêy¾Yμ×2ãoˉêy
  60. ****************************************************************************/
  61. void  SPIv_WriteData(u8 Data)
  62. {
  63.         unsigned char i=0;
  64.         for(i=8;i>0;i--)
  65.         {
  66.                 if(Data&0x80)       
  67.           LCD_SDA_SET; //êä3öêy¾Y
  68.       else LCD_SDA_CLR;
  69.           
  70.       LCD_SCL_CLR;      
  71.       LCD_SCL_SET;
  72.       Data<<=1;
  73.         }
  74. }

  75. ///****************************************************************************
  76. //* Ãû    3Æ£ou8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
  77. //* 1|    Äü£oSTM32_ó2¼tSPI¶áD′ò»¸ö×Ö½úêy¾Yμ×2ãoˉêy
  78. //* èë¿ú2Îêy£oSPIx,Byte
  79. //* 3ö¿ú2Îêy£o·μ»Ø×üÏßêÕμ½μÄêy¾Y
  80. //* Ëμ    Ã÷£oSTM32_ó2¼tSPI¶áD′ò»¸ö×Ö½úêy¾Yμ×2ãoˉêy
  81. //****************************************************************************/
  82. //u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
  83. //{
  84. //        while((SPIx->SR&SPI_I2S_FLAG_TXE)==RESET);                //μè′y·¢ËíÇø¿Õ          
  85. //        SPIx->DR=Byte;                 //·¢Ëíò»¸öbyte   
  86. //        while((SPIx->SR&SPI_I2S_FLAG_RXNE)==RESET);//μè′y½óêÕíêò»¸öbyte  
  87. //        return SPIx->DR;                       //·μ»ØêÕμ½μÄêy¾Y                       
  88. //}

  89. ///****************************************************************************
  90. //* Ãû    3Æ£ovoid SPI_SetSpeed(SPI_TypeDef* SPIx,u8 SpeedSet)
  91. //* 1|    Äü£oéèÖÃSPIμÄËù¶è
  92. //* èë¿ú2Îêy£oSPIx,SpeedSet
  93. //* 3ö¿ú2Îêy£oÎT
  94. //* Ëμ    Ã÷£oSpeedSet:1,¸ßËù;0,μíËù;
  95. //****************************************************************************/
  96. //void SPI_SetSpeed(SPI_TypeDef* SPIx,u8 SpeedSet)
  97. //{
  98. //        SPIx->CR1&=0XFFC7;
  99. //        if(SpeedSet==1)//¸ßËù
  100. //        {
  101. //                SPIx->CR1|=SPI_BaudRatePrescaler_2;//Fsck=Fpclk/2       
  102. //        }
  103. //        else//μíËù
  104. //        {
  105. //                SPIx->CR1|=SPI_BaudRatePrescaler_32; //Fsck=Fpclk/32
  106. //        }
  107. //        SPIx->CR1|=1<<6; //SPIé豸ê1Äü
  108. //}

  109. ///****************************************************************************
  110. //* Ãû    3Æ£oSPI2_Init(void)
  111. //* 1|    Äü£oSTM32_SPI2ó2¼tÅäÖÃ3õê¼»ˉ
  112. //* èë¿ú2Îêy£oÎT
  113. //* 3ö¿ú2Îêy£oÎT
  114. //* Ëμ    Ã÷£oSTM32_SPI2ó2¼tÅäÖÃ3õê¼»ˉ
  115. //****************************************************************************/
  116. //void SPI2_Init(void)       
  117. //{
  118. //        SPI_InitTypeDef  SPI_InitStructure;
  119. //        GPIO_InitTypeDef GPIO_InitStructure;
  120. //         
  121. //        //ÅäÖÃSPI21ü½Å
  122. //        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);
  123. //        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
  124. //        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  125. //        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  126. //        GPIO_Init(GPIOB, &GPIO_InitStructure);

  127. //        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14;   
  128. //        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  129. //        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  130. //        GPIO_Init(GPIOB, &GPIO_InitStructure);  

  131. //        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12;
  132. //        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  133. //        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  134. //        GPIO_Init(GPIOB, &GPIO_InitStructure);
  135. //       
  136. //        //SPI2ÅäÖÃÑ¡Ïî
  137. //        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ,ENABLE);
  138. //          
  139. //        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  140. //        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  141. //        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  142. //        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  143. //        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  144. //        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  145. //        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
  146. //        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  147. //        SPI_InitStructure.SPI_CRCPolynomial = 7;
  148. //        SPI_Init(SPI2, &SPI_InitStructure);

  149. //        //ê1ÄüSPI2
  150. //        SPI_Cmd(SPI2, ENABLE);   
  151. //}

  152. /****************************************************************************
  153. * Ãû    3Æ£oLcd_WriteIndex(u8 Index)
  154. * 1|    Äü£oÏòòo¾§ÆáD′ò»¸ö8λָáî
  155. * èë¿ú2Îêy£oIndex   ¼Ä′æÆ÷μØÖ·
  156. * 3ö¿ú2Îêy£oÎT
  157. * Ëμ    Ã÷£oμ÷óÃÇ°DèÏèÑ¡ÖD¿ØÖÆÆ÷£¬Äú2¿oˉêy
  158. ****************************************************************************/
  159. void Lcd_WriteIndex(u8 Index)
  160. {
  161.    LCD_CS_CLR;
  162.    LCD_RS_CLR;

  163.    SPIv_WriteData(Index);

  164.    LCD_CS_SET;
  165. }

  166. /****************************************************************************
  167. * Ãû    3Æ£oLcd_WriteData(u8 Data)
  168. * 1|    Äü£oÏòòo¾§ÆáD′ò»¸ö8λêy¾Y
  169. * èë¿ú2Îêy£odat     ¼Ä′æÆ÷êy¾Y
  170. * 3ö¿ú2Îêy£oÎT
  171. * Ëμ    Ã÷£oÏò¿ØÖÆÆ÷Ö¸¶¨μØÖ·D′èëêy¾Y£¬Äú2¿oˉêy
  172. ****************************************************************************/
  173. void Lcd_WriteData(u8 Data)
  174. {
  175.    LCD_CS_CLR;
  176.    LCD_RS_SET;

  177.    SPIv_WriteData(Data);

  178.    LCD_CS_SET;
  179. }

  180. /****************************************************************************
  181. * Ãû    3Æ£ovoid LCD_WriteReg(u8 Index,u16 Data)
  182. * 1|    Äü£oD′¼Ä′æÆ÷êy¾Y
  183. * èë¿ú2Îêy£oIndex,Data
  184. * 3ö¿ú2Îêy£oÎT
  185. * Ëμ    Ã÷£o±¾oˉêyÎa×éoÏoˉêy£¬ÏòIndexμØÖ·μļÄ′æÆ÷D′èëDataÖμ
  186. ****************************************************************************/
  187. void LCD_WriteReg(u8 Index,u16 Data)
  188. {
  189.         Lcd_WriteIndex(Index);
  190.           Lcd_WriteData_16Bit(Data);
  191. }

  192. /****************************************************************************
  193. * Ãû    3Æ£ovoid Lcd_WriteData_16Bit(u16 Data)
  194. * 1|    Äü£oÏòòo¾§ÆáD′ò»¸ö16λêy¾Y
  195. * èë¿ú2Îêy£oData
  196. * 3ö¿ú2Îêy£oÎT
  197. * Ëμ    Ã÷£oÏò¿ØÖÆÆ÷Ö¸¶¨μØÖ·D′èëò»¸ö16λêy¾Y
  198. ****************************************************************************/
  199. void Lcd_WriteData_16Bit(u16 Data)
  200. {       
  201.         Lcd_WriteData(Data>>8);
  202.         Lcd_WriteData(Data);       
  203. }

  204. /****************************************************************************
  205. * Ãû    3Æ£ovoid Lcd_Reset(void)
  206. * 1|    Äü£oòo¾§ó2¸′λoˉêy
  207. * èë¿ú2Îêy£oÎT
  208. * 3ö¿ú2Îêy£oÎT
  209. * Ëμ    Ã÷£oòo¾§3õê¼»ˉÇ°DèÖ′DDò»′θ′λ2ù×÷
  210. ****************************************************************************/
  211. void Lcd_Reset(void)
  212. {
  213.         LCD_RST_CLR;
  214.         delay_ms(100);
  215.         LCD_RST_SET;
  216.         delay_ms(50);
  217. }
  218. /****************************************************************************
  219. * Ãû    3Æ£ovoid Lcd_Init(void)
  220. * 1|    Äü£oòo¾§3õê¼»ˉoˉêy
  221. * èë¿ú2Îêy£oÎT
  222. * 3ö¿ú2Îêy£oÎT
  223. * Ëμ    Ã÷£oòo¾§3õê¼»ˉ_ILI9225_176X220
  224. ****************************************************************************/
  225. void Lcd_Init(void)
  226. {       

  227.         LCD_GPIO_Init();//ê1óÃÄ£ÄaSPI

  228.         Lcd_Reset(); //Reset before LCD Init.

  229.         //2.2inch TM2.2-G2.2 Init 20171020
  230.         Lcd_WriteIndex(0x11);  
  231.         Lcd_WriteData(0x00);

  232.         Lcd_WriteIndex(0xCF);  
  233.         Lcd_WriteData(0X00);
  234.         Lcd_WriteData(0XC1);
  235.         Lcd_WriteData(0X30);

  236.         Lcd_WriteIndex(0xED);  
  237.         Lcd_WriteData(0X64);
  238.         Lcd_WriteData(0X03);
  239.         Lcd_WriteData(0X12);
  240.         Lcd_WriteData(0X81);

  241.         Lcd_WriteIndex(0xE8);  
  242.         Lcd_WriteData(0X85);
  243.         Lcd_WriteData(0X11);
  244.         Lcd_WriteData(0X78);

  245.         Lcd_WriteIndex(0xF6);  
  246.         Lcd_WriteData(0X01);
  247.         Lcd_WriteData(0X30);
  248.         Lcd_WriteData(0X00);

  249.         Lcd_WriteIndex(0xCB);  
  250.         Lcd_WriteData(0X39);
  251.         Lcd_WriteData(0X2C);
  252.         Lcd_WriteData(0X00);
  253.         Lcd_WriteData(0X34);
  254.         Lcd_WriteData(0X05);

  255.         Lcd_WriteIndex(0xF7);  
  256.         Lcd_WriteData(0X20);

  257.         Lcd_WriteIndex(0xEA);  
  258.         Lcd_WriteData(0X00);
  259.         Lcd_WriteData(0X00);

  260.         Lcd_WriteIndex(0xC0);  
  261.         Lcd_WriteData(0X20);

  262.         Lcd_WriteIndex(0xC1);  
  263.         Lcd_WriteData(0X11);

  264.         Lcd_WriteIndex(0xC5);  
  265.         Lcd_WriteData(0X31);
  266.         Lcd_WriteData(0X3C);

  267.         Lcd_WriteIndex(0xC7);  
  268.         Lcd_WriteData(0XA9);

  269.         Lcd_WriteIndex(0x3A);  
  270.         Lcd_WriteData(0X55);
  271.        
  272.   Lcd_WriteIndex(0x36);  
  273.         #if USE_HORIZONTAL
  274.                  Lcd_WriteData(0xE8);//oáÆá2Îêy
  275.         #else
  276.                  Lcd_WriteData(0x48);//êúÆá2Îêy
  277.         #endif

  278.         Lcd_WriteIndex(0xB1);  
  279.         Lcd_WriteData(0X00);
  280.         Lcd_WriteData(0X18);

  281.         Lcd_WriteIndex(0xB4);  
  282.         Lcd_WriteData(0X00);
  283.         Lcd_WriteData(0X00);

  284.         Lcd_WriteIndex(0xF2);  
  285.         Lcd_WriteData(0X00);

  286.         Lcd_WriteIndex(0x26);  
  287.         Lcd_WriteData(0X01);

  288.         Lcd_WriteIndex(0xE0);  
  289.         Lcd_WriteData(0X0F);
  290.         Lcd_WriteData(0X17);
  291.         Lcd_WriteData(0X14);
  292.         Lcd_WriteData(0X09);
  293.         Lcd_WriteData(0X0C);
  294.         Lcd_WriteData(0X06);
  295.         Lcd_WriteData(0X43);
  296.         Lcd_WriteData(0X75);
  297.         Lcd_WriteData(0X36);
  298.         Lcd_WriteData(0X08);
  299.         Lcd_WriteData(0X13);
  300.         Lcd_WriteData(0X05);
  301.         Lcd_WriteData(0X10);
  302.         Lcd_WriteData(0X0B);
  303.         Lcd_WriteData(0X08);


  304.         Lcd_WriteIndex(0xE1);  
  305.         Lcd_WriteData(0X00);
  306.         Lcd_WriteData(0X1F);
  307.         Lcd_WriteData(0X23);
  308.         Lcd_WriteData(0X03);
  309.         Lcd_WriteData(0X0E);
  310.         Lcd_WriteData(0X04);
  311.         Lcd_WriteData(0X39);
  312.         Lcd_WriteData(0X25);
  313.         Lcd_WriteData(0X4D);
  314.         Lcd_WriteData(0X06);
  315.         Lcd_WriteData(0X0D);
  316.         Lcd_WriteData(0X0B);
  317.         Lcd_WriteData(0X33);
  318.         Lcd_WriteData(0X37);
  319.         Lcd_WriteData(0X0F);

  320.         Lcd_WriteIndex(0x29);         
  321. }



  322. /*************************************************
  323. oˉêyÃû£oLCD_Set_XY
  324. 1|Äü£oéèÖÃlcdÏÔê¾Æeê¼μã
  325. èë¿ú2Îêy£oxy×ø±ê
  326. ·μ»ØÖμ£oÎT
  327. *************************************************/
  328. void Lcd_SetXY(u16 Xpos, u16 Ypos)
  329. {       
  330.         Lcd_WriteIndex(0x2A);
  331.         Lcd_WriteData_16Bit(Xpos);
  332.         Lcd_WriteIndex(0x2B);
  333.         Lcd_WriteData_16Bit(Ypos);
  334.         Lcd_WriteIndex(0x2c);       
  335. }
  336. /*************************************************
  337. oˉêyÃû£oLCD_Set_Region
  338. 1|Äü£oéèÖÃlcdÏÔê¾Çøóò£¬Ôú′ËÇøóòD′μãêy¾Y×Ô¶ˉ»»DD
  339. èë¿ú2Îêy£oxyÆeμãoíÖÕμã
  340. ·μ»ØÖμ£oÎT
  341. *************************************************/
  342. //éèÖÃÏÔê¾′°¿ú
  343. void Lcd_SetRegion(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)
  344. {
  345.         Lcd_WriteIndex(0x2A);
  346.         Lcd_WriteData_16Bit(xStar);
  347.         Lcd_WriteData_16Bit(xEnd);
  348.         Lcd_WriteIndex(0x2B);
  349.         Lcd_WriteData_16Bit(yStar);
  350.         Lcd_WriteData_16Bit(yEnd);
  351.         Lcd_WriteIndex(0x2c);
  352. }

  353.        
  354. /*************************************************
  355. oˉêyÃû£oLCD_DrawPoint
  356. 1|Äü£o»-ò»¸öμã
  357. èë¿ú2Îêy£oxy×ø±êoíÑÕé«êy¾Y
  358. ·μ»ØÖμ£oÎT
  359. *************************************************/
  360. void Gui_DrawPoint(u16 x,u16 y,u16 Data)
  361. {
  362.         Lcd_SetXY(x,y);
  363.         Lcd_WriteData_16Bit(Data);

  364. }   

  365. /*************************************************
  366. oˉêyÃû£oLcd_Clear
  367. 1|Äü£oè«ÆáÇåÆáoˉêy
  368. èë¿ú2Îêy£oìî3äÑÕé«COLOR
  369. ·μ»ØÖμ£oÎT
  370. *************************************************/
  371. void Lcd_Clear(u16 Color)               
  372. {       
  373.    unsigned int i;
  374.    Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
  375.          LCD_CS_CLR;
  376.    LCD_RS_SET;       
  377.    for(i=0;i<X_MAX_PIXEL*Y_MAX_PIXEL;i++)
  378.    {       
  379.                   //Lcd_WriteData_16Bit(Color);

  380.                 SPIv_WriteData(Color>>8);
  381.                 SPIv_WriteData(Color);

  382.    }   
  383.                 LCD_CS_SET;
  384. }

复制代码



下一下是挑战硬件的SPI,欲知后事如何且看下次分享

IMG_20181106_191645.jpg (2.52 MB, 下载次数: 0)

IMG_20181106_191645.jpg
此帖出自电机控制论坛

最新回复

看不懂,感觉好高级  详情 回复 发表于 2018-12-4 14:09
点赞 关注(1)
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复
举报

122

帖子

2

TA的资源

一粒金砂(中级)

沙发
 
之前有个项目STM32F107也是用的模拟SPI操作FLASH,原因是硬件工程师没把线布在硬件SPI的IO口,那速度真的是慢,新版改成硬件SPI就快多了。
此帖出自电机控制论坛

点评

历害啊,我总觉得硬件比较难点,有时调不出来  详情 回复 发表于 2018-11-7 12:10
 
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 
lcn1992 发表于 2018-11-7 11:39
之前有个项目STM32F107也是用的模拟SPI操作FLASH,原因是硬件工程师没把线布在硬件SPI的IO口,那 ...

历害啊,我总觉得硬件比较难点,有时调不出来
此帖出自电机控制论坛

点评

用固件库基本差不多。  详情 回复 发表于 2018-11-7 13:34
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 
 

回复

122

帖子

2

TA的资源

一粒金砂(中级)

4
 
ddllxxrr 发表于 2018-11-7 12:10
历害啊,我总觉得硬件比较难点,有时调不出来

用固件库基本差不多。
此帖出自电机控制论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

5
 
看不懂,感觉好高级
此帖出自电机控制论坛
个人签名无锡SMT样板和小批量贴片加工18552199980
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表