找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6134|回复: 5
收起左侧

ssd1289 STM32F103 LCD驱动程序

[复制链接]
ID:164327 发表于 2017-11-7 10:55 | 显示全部楼层 |阅读模式
STM32F103单片机下的 LCD驱动
0.png

单片机源程序如下:
  1. /*
  2. *********************************************************************************************************
  3. *
  4. *        模块名称 : TFT液晶显示器驱动模块
  5. *        文件名称 : LCD_tft_lcd.c
  6. *        版    本 : V1.0
  7. *        说    明 : 安富莱开发板标配的TFT显示器分辨率为240x400,3.0寸宽屏,带PWM背光调节功能。
  8. *                                支持的LCD内部驱动芯片型号有:SPFD5420A、OTM4001A、R61509V
  9. *                                驱动芯片的访问地址为:  0x60000000
  10. *        修改记录 :
  11. *                版本号  日期       作者    说明
  12. *                v1.0    2011-08-21 armfly  ST固件库版本 V3.5.0版本。
  13. *                                        a) 取消访问寄存器的结构体,直接定义
  14. *                V2.0    2011-10-16 armfly  增加R61509V驱动,实现图标显示函数
  15. *
  16. *
  17. *********************************************************************************************************
  18. */

  19. /*
  20.         友情提示:
  21.         TFT控制器和一般的12864点阵显示器的控制器最大的区别在于引入了窗口绘图的机制,这个机制对于绘制局部图形
  22.         是非常有效的。TFT可以先指定一个绘图窗口,然后所有的读写显存的操作均在这个窗口之内,因此它不需要CPU在
  23.         内存中保存整个屏幕的像素数据。
  24. */

  25. #include "stm32f10x.h"
  26. #include <stdio.h>
  27. #include <string.h>
  28. #include "bsp_tft_lcd.h"
  29. #include "bsp_timer.h"
  30. #include "fonts.h"

  31. /* 定义LCD驱动器的访问地址
  32.         TFT接口中的RS引脚连接FSMC_A0引脚,由于是16bit模式,RS对应A1地址线,因此
  33.         LCD_RAM的地址是+2
  34. */
  35. #define LCD_BASE        ((uint32_t)(0x60000000 | 0x0C000000))
  36. #define LCD_REG                        *(__IO uint16_t *)(LCD_BASE)
  37. #define LCD_RAM                        *(__IO uint16_t *)(LCD_BASE + 2)

  38. static __IO uint8_t s_RGBChgEn = 0;                /* RGB转换使能, 4001屏写显存后读会的RGB格式和写入的不同 */
  39. static __IO uint8_t s_AddrAutoInc = 0;        /* 读回一个像素后,显存地址是否自动增1 */

  40. void LCD_DrawCircle(uint16_t _usX, uint16_t _usY, uint16_t _usRadius, uint16_t _usColor);
  41. void LCD_WriteReg(__IO uint16_t _usAddr, uint16_t _usValue);
  42. uint16_t LCD_ReadReg(__IO uint16_t _usAddr);
  43. static void LCD_SetDispWin(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth);
  44. static void LCD_QuitWinMode(void);
  45. static void LCD_SetCursor(uint16_t _usX, uint16_t _usY);
  46. static void LCD_CtrlLinesConfig(void);
  47. static void LCD_FSMCConfig(void);
  48. static void LCD_Init_ssd1289(void);
  49. //static void LCD_Init_61509(void);
  50. static uint16_t LCD_BGR2RGB(uint16_t _usRGB);

  51. /*
  52. *********************************************************************************************************
  53. *        函 数 名: LCD_InitHard
  54. *        功能说明: 初始化LCD
  55. *        形    参:无
  56. *        返 回 值: 无
  57. *********************************************************************************************************
  58. */
  59. void LCD_InitHard(void)
  60. {
  61.         uint16_t id;;

  62.         /* 配置LCD控制口线GPIO */
  63.         LCD_CtrlLinesConfig();

  64.         /* 配置FSMC接口,数据总线 */
  65.         LCD_FSMCConfig();

  66.         /* FSMC重置后必须加延迟才能访问总线设备  */
  67.         //bsp_DelayMS(10);
  68.        
  69.        
  70.         id = LCD_GetID();          /* 读取LCD驱动芯片ID */
  71.        
  72.        
  73.         if (id == 0x8989)        /* 4001屏和5420相同,4001屏读回显存RGB时,需要进行转换,5420无需 */
  74.         {
  75. //                GPIO_ResetBits(GPIOE, GPIO_Pin_2);        /* 点亮LED1 */
  76. //                bsp_DelayMS(100);
  77. //                GPIO_SetBits(GPIOE, GPIO_Pin_2);        /* 关闭LED1 */
  78. //                bsp_DelayMS(100);
  79. //               
  80. //                GPIO_ResetBits(GPIOE, GPIO_Pin_2);        /* 点亮LED1 */
  81. //                bsp_DelayMS(100);
  82. //                GPIO_SetBits(GPIOE, GPIO_Pin_2);        /* 关闭LED1 */
  83. //                bsp_DelayMS(100);               
  84.                
  85.                 LCD_Init_ssd1289();       
  86.         }

  87.         /* 清除显存 */
  88.         LCD_ClrScr(CL_BLACK);        /* 黑色 */
  89. }



  90. /*
  91. *********************************************************************************************************
  92. *        函 数 名: LCD_WriteReg
  93. *        功能说明: 修改LCD控制器的寄存器的值。
  94. *        形    参:
  95. *                        LCD_Reg :寄存器地址;
  96. *                        LCD_RegValue : 寄存器值
  97. *        返 回 值: 无
  98. *********************************************************************************************************
  99. */
  100. void LCD_WriteReg(__IO uint16_t _usAddr, uint16_t _usValue)
  101. {
  102.         /* Write 16-bit Index, then Write Reg */
  103.         LCD_REG = _usAddr;
  104.         /* Write 16-bit Reg */
  105.         LCD_RAM = _usValue;
  106. }


  107. /*
  108. *********************************************************************************************************
  109. *        函 数 名: LCD_ReadReg
  110. *        功能说明: 读取LCD控制器的寄存器的值。
  111. *        形    参:
  112. *                        LCD_Reg :寄存器地址;
  113. *                        LCD_RegValue : 寄存器值
  114. *        返 回 值: 无
  115. *********************************************************************************************************
  116. */
  117. uint16_t LCD_ReadReg(__IO uint16_t _usAddr)
  118. {
  119.         /* Write 16-bit Index (then Read Reg) */
  120.         LCD_REG = _usAddr;
  121.         /* Read 16-bit Reg */
  122.         return (LCD_RAM);
  123. }


  124. /*
  125. *********************************************************************************************************
  126. *        函 数 名: LCD_CtrlLinesConfig
  127. *        功能说明: 配置LCD控制口线,FSMC管脚设置为复用功能
  128. *        形    参:无
  129. *        返 回 值: 无
  130. *********************************************************************************************************
  131. */
  132. static void LCD_CtrlLinesConfig(void)
  133. {
  134.         GPIO_InitTypeDef GPIO_InitStructure;

  135.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);        //使能FSMC时钟
  136.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);//使能PORTB,D,E,G以及AFIO复用功能时钟

  137.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                 //PA8 推挽输出 背光
  138.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  139.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  140.         GPIO_Init(GPIOA, &GPIO_InitStructure);       
  141.        
  142.         //PORTD复用推挽输出  
  143.         /*  
  144.         PD0  ->  D2
  145.         PD1  ->  D3       
  146.         PD4  ->  RD(FSMC_NOE)
  147.         PD5  ->  WR(FSMC_NWE)       
  148.         PD8  ->  D13
  149.         PD9  ->  D14       
  150.         PD10 ->  D15
  151.         PD14 ->  D0               
  152.         PD15 ->  D1

  153. */

  154.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15;                                 //        //PORTD复用推挽输出  
  155.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出   
  156.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  157.         GPIO_Init(GPIOD, &GPIO_InitStructure);
  158.                 
  159.         //PORTE复用推挽输出
  160.         /*  
  161.         PE7  ->  D4
  162.         PE8  ->  D5       
  163.         PE9  ->  D6
  164.         PE10 ->  D7
  165.         PE11 ->  D8
  166.         PE12 ->  D9       
  167.         PE13 ->  D10
  168.         PE14 ->  D11               
  169.         PE15 ->  D12

  170. */       
  171.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;                                 //        //PORTD复用推挽输出  
  172.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出   
  173.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  174.         GPIO_Init(GPIOE, &GPIO_InitStructure);        


  175.   //PORTG12复用推挽输出                
  176.         /*  
  177.         PG12 ->  CS(FSCM_NE4)       
  178.         */        
  179.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;         //        //PORTD复用推挽输出  
  180.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出   
  181.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  182.         GPIO_Init(GPIOG, &GPIO_InitStructure);                
  183.        
  184.         /* 设置 PF0(A0 (RS))  为复用推挽输出 */
  185.         /*  
  186.         PF0 ->  RS(FSCM_A0)       
  187.         */                                
  188.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         //        //PORTF复用推挽输出  
  189.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出   
  190.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  191.         GPIO_Init(GPIOF, &GPIO_InitStructure);

  192. }



  193. /*
  194. *********************************************************************************************************
  195. *        函 数 名: LCD_FSMCConfig
  196. *        功能说明: 配置FSMC并口访问时序
  197. *        形    参:无
  198. *        返 回 值: 无
  199. *********************************************************************************************************
  200. */
  201. static void LCD_FSMCConfig(void)
  202. {
  203.         //两种不同的初始化
  204. //        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  205. //        FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
  206. //        FSMC_NORSRAMTimingInitTypeDef  writeTiming;
  207. //       
  208. //               
  209. //        readWriteTiming.FSMC_AddressSetupTime = 0x01;         //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
  210. //        readWriteTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(ADDHLD)模式A未用到       
  211. //        readWriteTiming.FSMC_DataSetupTime = 0x0f;                 // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
  212. //        readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
  213. //        readWriteTiming.FSMC_CLKDivision = 0x00;
  214. //        readWriteTiming.FSMC_DataLatency = 0x00;
  215. //        readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A

  216. //        writeTiming.FSMC_AddressSetupTime = 0x00;         //0x01 地址建立时间(ADDSET)为1个HCLK  
  217. //        writeTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(A               
  218. //        writeTiming.FSMC_DataSetupTime = 0x03;                 ////0x03 数据保存时间为4个HCLK       
  219. //        writeTiming.FSMC_BusTurnAroundDuration = 0x00;
  220. //        writeTiming.FSMC_CLKDivision = 0x00;
  221. //        writeTiming.FSMC_DataLatency = 0x00;
  222. //        writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A        
  223. //               
  224. //        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;//  这里我们使用NE4 ,也就对应BTCR[6],[7]。
  225. //        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
  226. //        FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
  227. //        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit   
  228. //        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;
  229. //        FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  230. //        FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
  231. //        FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;       
  232. //        FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
  233. //        FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;        //  存储器写使能
  234. //        FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
  235. //        FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
  236. //        FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  237. //        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
  238. //        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序

  239. //        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置

  240. //        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);  // 使能BANK1
  241. //       
  242.        
  243.        
  244.        
  245.         FSMC_NORSRAMInitTypeDef  init;
  246.         FSMC_NORSRAMTimingInitTypeDef  timing;

  247.         /*-- FSMC Configuration ------------------------------------------------------*/
  248.         /*----------------------- SRAM Bank 4 ----------------------------------------*/
  249.         /* FSMC_Bank1_NORSRAM4 configuration */
  250.         timing.FSMC_AddressSetupTime = 1;
  251.         timing.FSMC_AddressHoldTime = 0;
  252.         timing.FSMC_DataSetupTime = 0x3;   //必须大于2
  253.         timing.FSMC_BusTurnAroundDuration = 0;
  254.         timing.FSMC_CLKDivision = 0;
  255.         timing.FSMC_DataLatency = 0;
  256.         timing.FSMC_AccessMode = FSMC_AccessMode_A;
  257.         //timing.FSMC_AccessMode = FSMC_AccessMode_B;

  258.         /*
  259.          LCD configured as follow:
  260.             - Data/Address MUX = Disable
  261.             - Memory Type = SRAM
  262.             - Data Width = 16bit
  263.             - Write Operation = Enable
  264.             - Extended Mode = Enable
  265.             - Asynchronous Wait = Disable
  266.         */
  267.         init.FSMC_Bank = FSMC_Bank1_NORSRAM4;
  268.         init.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  269.         init.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  270.         //init.FSMC_MemoryType = FSMC_MemoryType_NOR;
  271.         init.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  272.         init.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;       
  273.         init.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  274.         init.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  275.         init.FSMC_WrapMode = FSMC_WrapMode_Disable;
  276.         init.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  277.         init.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  278.         init.FSMC_WaitSignal = FSMC_WaitSignal_Disable;       
  279.         init.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;       
  280.         init.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  281.         init.FSMC_ReadWriteTimingStruct = &timing;
  282.         init.FSMC_WriteTimingStruct = &timing;
  283.         FSMC_NORSRAMInit(&init);

  284.         /* - BANK 3 (of NOR/SRAM Bank 1~4) is enabled */
  285.         FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
  286. }


  287. /*
  288. *********************************************************************************************************
  289. *        函 数 名: LCD_GetID
  290. *        功能说明: 读取LCD的器件ID
  291. *        形    参:无
  292. *        返 回 值: 无
  293. *********************************************************************************************************
  294. */
  295. uint16_t LCD_GetID(void)
  296. {
  297.         return LCD_ReadReg(0x0000);
  298. }

  299. /*
  300. *********************************************************************************************************
  301. *        函 数 名: LCD_Init_ssd1289
  302. *        功能说明: 初始化ssd1289屏
  303. *        形    参:无
  304. *        返 回 值: 无
  305. *********************************************************************************************************
  306. */
  307. static void LCD_Init_ssd1289(void)
  308. {
  309.         /* 初始化LCD,写LCD寄存器进行配置 */

  310.         /*
  311.                 R003H 寄存器很关键, Entry Mode ,决定了扫描方向
  312.                 参见:SPFD5420A.pdf 第15页

  313.                 240x400屏幕物理坐标(px,py)如下:
  314.                     R003 = 0x1018                  R003 = 0x1008
  315.                   -------------------          -------------------
  316.                  |(0,0)              |        |(0,0)              |
  317.                  |                   |        |                                          |
  318.                  |  ^           ^    |        |   ^           ^   |
  319.                  |  |           |    |        |   |           |   |
  320.                  |  |           |    |        |   |           |   |
  321.                  |  |           |    |        |   |           |   |
  322.                  |  |  ------>  |    |        |   | <------   |   |
  323.                  |  |           |    |        |   |           |   |
  324.                  |  |           |    |        |   |           |   |
  325.                  |  |           |    |        |   |           |   |
  326.                  |  |           |    |        |   |           |   |
  327.                  |                   |        |                                          |
  328.                  |                   |        |                   |
  329.                  |      (x=239,y=399)|        |      (x=239,y=399)|
  330.                  |-------------------|        |-------------------|
  331.                  |                   |        |                   |
  332.                   -------------------          -------------------

  333.                 按照安富莱开发板LCD的方向,我们期望的虚拟坐标和扫描方向如下:(和上图第1个吻合)
  334.                  --------------------------------
  335.                 |  |(0,0)                        |
  336.                 |  |     --------->              |
  337.                 |  |         |                   |
  338.                 |  |         |                   |
  339.                 |  |         |                   |
  340.                 |  |         V                   |
  341.                 |  |     --------->              |
  342.                 |  |                    (399,239)|
  343.                  --------------------------------

  344.                 虚拟坐标(x,y) 和物理坐标的转换关系
  345.                 x = 399 - py;
  346.                 y = px;

  347.                 py = 399 - x;
  348.                 px = y;

  349.         */
  350.                 //************* Start Initial Sequence **********//               
  351.         //for 3.2_37Pin_SSD1289
  352.         LCD_WriteReg(0x0000,0x0001);//打开晶振
  353.         LCD_WriteReg(0x0003,0xA8A4);//0xA8A4
  354.         LCD_WriteReg(0x000C,0x0000);   
  355.         LCD_WriteReg(0x000D,0x080C);   
  356.         LCD_WriteReg(0x000E,0x2B00);   
  357.         LCD_WriteReg(0x001E,0x00B0);   
  358.         LCD_WriteReg(0x0001,0x2B3F);//驱动输出控制320*240  0x6B3F
  359.         LCD_WriteReg(0x0002,0x0600);
  360.         LCD_WriteReg(0x0010,0x0000);  
  361.         LCD_WriteReg(0x0011,0x6070); //定义数据格式  16位色                 横屏 0x6058
  362.         LCD_WriteReg(0x0005,0x0000);  
  363.         LCD_WriteReg(0x0006,0x0000);  
  364.         LCD_WriteReg(0x0016,0xEF1C);  
  365.         LCD_WriteReg(0x0017,0x0003);  
  366.         LCD_WriteReg(0x0007,0x0233); //0x0233      
  367.         LCD_WriteReg(0x000B,0x0000);  
  368.         LCD_WriteReg(0x000F,0x0000); //扫描开始地址
  369.         LCD_WriteReg(0x0041,0x0000);  
  370.         LCD_WriteReg(0x0042,0x0000);  
  371.         LCD_WriteReg(0x0048,0x0000);  
  372.         LCD_WriteReg(0x0049,0x013F);  
  373.         LCD_WriteReg(0x004A,0x0000);  
  374.         LCD_WriteReg(0x004B,0x0000);  
  375.         LCD_WriteReg(0x0044,0xEF00);  
  376.         LCD_WriteReg(0x0045,0x0000);  
  377.         LCD_WriteReg(0x0046,0x013F);  
  378.         LCD_WriteReg(0x0030,0x0707);  
  379.         LCD_WriteReg(0x0031,0x0204);  
  380.         LCD_WriteReg(0x0032,0x0204);  
  381.         LCD_WriteReg(0x0033,0x0502);  
  382.         LCD_WriteReg(0x0034,0x0507);  
  383.         LCD_WriteReg(0x0035,0x0204);  
  384.         LCD_WriteReg(0x0036,0x0204);  
  385.         LCD_WriteReg(0x0037,0x0502);  
  386.         LCD_WriteReg(0x003A,0x0302);  
  387.         LCD_WriteReg(0x003B,0x0302);  
  388.         LCD_WriteReg(0x0023,0x0000);  
  389.         LCD_WriteReg(0x0024,0x0000);  
  390.         LCD_WriteReg(0x0025,0x8000);  
  391.         LCD_WriteReg(0x004f,0);        //行首址0
  392.         LCD_WriteReg(0x004e,0);        //列首址0

  393. }


  394. /*
  395. *********************************************************************************************************
  396. *        函 数 名: LCD_DispOn
  397. *        功能说明: 打开显示
  398. *        形    参:无
  399. *        返 回 值: 无
  400. *********************************************************************************************************
  401. */
  402. void LCD_DispOn(void)
  403. {
  404.         LCD_WriteReg(0x0007, 0x0033); /* 打开显示 */
  405. }

  406. /*
  407. *********************************************************************************************************
  408. *        函 数 名: LCD_DispOff
  409. *        功能说明: 关闭显示
  410. *        形    参:无
  411. *        返 回 值: 无
  412. *********************************************************************************************************
  413. */
  414. void LCD_DispOff(void)
  415. {
  416.         LCD_WriteReg(0x0007, 0x0000);        /* 关闭显示*/
  417. }

  418. /*
  419. *********************************************************************************************************
  420. *        函 数 名: LCD_ClrScr
  421. *        功能说明: 根据输入的颜色值清屏
  422. *        形    参:_usColor : 背景色
  423. *        返 回 值: 无
  424. *********************************************************************************************************
  425. */
  426. void LCD_ClrScr(uint16_t _usColor)
  427. {
  428.         uint32_t i;

  429.         LCD_SetCursor(0, 0);                /* 设置光标位置 */

  430.         LCD_REG = LR_GRAM;                         /* 准备读写显存 */

  431.         for (i = 0; i < LCD_HEIGHT * LCD_WIDTH; i++)
  432.         {
  433.                 LCD_RAM = _usColor;
  434.         }
  435. }
  436. ……………………

  437. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
ssd1289.rar (10.49 KB, 下载次数: 92)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:381274 发表于 2018-12-6 14:22 | 显示全部楼层
只有文件,没有整个工程,不能直接跑起来的
回复

使用道具 举报

ID:211606 发表于 2019-5-14 22:04 | 显示全部楼层
头回学习图形
回复

使用道具 举报

ID:568114 发表于 2019-9-23 09:25 | 显示全部楼层

能用吗?
回复

使用道具 举报

ID:631261 发表于 2019-10-28 21:46 | 显示全部楼层
PS[3:0]怎么接?
回复

使用道具 举报

ID:776367 发表于 2020-6-11 16:31 | 显示全部楼层
老板 想要资料
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表