找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2541|回复: 0
收起左侧

STM32 TFT3.5寸源程序,驱动芯片IL9488

[复制链接]
ID:596446 发表于 2022-3-22 15:43 | 显示全部楼层 |阅读模式
  1. #include "stm32f10x.h"
  2. #include "ili9325.h"


  3. void DataToWrite(u16 data)
  4. {
  5.     GPIOB->ODR=((GPIOB->ODR&0x00ff)|(data&0xff00));   
  6.     Clr_nWr;
  7.     Set_nWr;
  8.     GPIOB->ODR=((GPIOB->ODR&0x00ff)|(data<<8));
  9. }

  10. /*
  11. * 函数名:LCD_GPIO_Config
  12. * 描述  :根据FSMC配置LCD的I/O
  13. * 输入  :无
  14. * 输出  :无
  15. * 调用  :内部调用        
  16. */
  17. static void LCD_GPIO_Config(void)
  18. {
  19.     GPIO_InitTypeDef GPIO_InitStructure;
  20.    
  21.     /* Enable the FSMC Clock */
  22.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  23.    
  24.     /* config lcd gpio clock base on FSMC */
  25.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
  26.    
  27.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  28.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  29.    
  30.     /* config tft back_light gpio base on the PT4101 */
  31.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;        
  32.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  33.    
  34.     /* config tft BL gpio */
  35.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;      
  36.     GPIO_Init(GPIOA, &GPIO_InitStructure);            
  37.    
  38.     /* config tft data lines base on FSMC
  39.      * data lines,FSMC-D0~D15: PD 14 15 0 1,PE 7 8 9 10 11 12 13 14 15,PD 8 9 10
  40.      */   
  41.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  42.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  43.    
  44.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
  45.                                   GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
  46.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  47.    
  48.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
  49.                                   GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
  50.                                   GPIO_Pin_15;
  51.     GPIO_Init(GPIOE, &GPIO_InitStructure);
  52.    
  53.     /* config tft control lines base on FSMC
  54.      * PD4-FSMC_NOE  :LCD-RD
  55.    * PD5-FSMC_NWE  :LCD-WR
  56.      * PD7-FSMC_NE1  :LCD-CS
  57.    * PD11-FSMC_A16 :LCD-DC
  58.      */
  59.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  60.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  61.    
  62.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  63.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  64.    
  65.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  66.     GPIO_Init(GPIOD, &GPIO_InitStructure);  
  67.    
  68.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ;
  69.     GPIO_Init(GPIOD, &GPIO_InitStructure);  
  70.    
  71.     /* tft control gpio init */     
  72.     GPIO_SetBits(GPIOD, GPIO_Pin_13);         // RST               
  73.     GPIO_SetBits(GPIOD, GPIO_Pin_4);         // RD = 1  
  74.     GPIO_SetBits(GPIOD, GPIO_Pin_5);         // WR = 1
  75.         GPIO_SetBits(GPIOD, GPIO_Pin_11);         // RS
  76.     GPIO_SetBits(GPIOD, GPIO_Pin_7);         //    CS = 1

  77.         GPIO_SetBits(GPIOC, GPIO_Pin_5);          //    BL = 1
  78.         
  79.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  80.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  81.         
  82.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;    //按键 OK
  83.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  84.                                                             // right          up           left        down
  85.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_6;        
  86.         GPIO_Init(GPIOE, &GPIO_InitStructure);

  87. }

  88. /*
  89. * 函数名:LCD_FSMC_Config
  90. * 描述  :LCD  FSMC 模式配置
  91. * 输入  :无
  92. * 输出  :无
  93. * 调用  :内部调用        
  94. */

  95. static void LCD_FSMC_Config(void)
  96. {
  97.     FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  98.     FSMC_NORSRAMTimingInitTypeDef  p;
  99.    
  100.    
  101.     p.FSMC_AddressSetupTime = 0x02;     //地址建立时间
  102.     p.FSMC_AddressHoldTime = 0x00;     //地址保持时间
  103.     p.FSMC_DataSetupTime = 0x05;         //数据建立时间
  104.     p.FSMC_BusTurnAroundDuration = 0x00;
  105.     p.FSMC_CLKDivision = 0x00;
  106.     p.FSMC_DataLatency = 0x00;

  107.     p.FSMC_AccessMode = FSMC_AccessMode_B;     // 一般使用模式B来控制LCD
  108.    
  109.     FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  110.     FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  111.     FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  112.     FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  113.     FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  114.     FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  115.     FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  116.     FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  117.     FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  118.     FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  119.     FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  120.     FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  121.     FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  122.     FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
  123.    
  124.     FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
  125.    
  126.     /* Enable FSMC Bank1_SRAM Bank */
  127.     FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  
  128. }

  129. volatile void LCD_delay(char j)
  130. {
  131. volatile u16 i;   
  132.     while(j--)
  133. for(i=7200;i>0;i--);
  134. }
  135. static void LCD_Rst(void)
  136. {            
  137.     GPIO_ResetBits(GPIOD, GPIO_Pin_13);
  138.     LCD_delay(10);                       
  139.     GPIO_SetBits(GPIOD, GPIO_Pin_13 );              
  140.     LCD_delay(10);   
  141. }
  142. static void WriteComm(u16 CMD)
  143. {            
  144.     *(__IO u16 *) (Bank1_LCD_C) = CMD;
  145. }
  146. static void WriteData(u16 tem_data)
  147. {            
  148.     *(__IO u16 *) (Bank1_LCD_D) = tem_data;
  149. }


  150. /**********************************************
  151. Lcd初始化函数
  152. ***********************************************/
  153. void Lcd_Initialize(void)
  154. {   
  155. LCD_GPIO_Config();
  156. LCD_FSMC_Config();
  157. LCD_delay(20);
  158. LCD_Rst();
  159.    
  160. WriteComm(0x11);
  161.         LCD_delay(20);
  162.         WriteComm(0xD0);
  163.         WriteData(0x07);
  164.         WriteData(0x42);
  165.         WriteData(0x18);
  166.         
  167.         WriteComm(0xD1);
  168.         WriteData(0x00);
  169.         WriteData(0x07);//07
  170.         WriteData(0x10);
  171.         
  172.         WriteComm(0xD2);
  173.         WriteData(0x01);
  174.         WriteData(0x02);
  175.         
  176.         WriteComm(0xC0);
  177.         WriteData(0x10);
  178.         WriteData(0x3B);
  179.         WriteData(0x00);
  180.         WriteData(0x02);
  181.         WriteData(0x11);
  182.         
  183.         WriteComm(0xC5);
  184.         WriteData(0x03);

  185.     WriteComm(0x00C8);//Gamma Setting,有12个参数,P114
  186.     WriteData(0x0000);//P114
  187.     WriteData(0x0014);//P114
  188.     WriteData(0x0033);//P114
  189.     WriteData(0x0010);//P114
  190.     WriteData(0x0000);//P114
  191.     WriteData(0x0016);//P114
  192.     WriteData(0x0044);//P114
  193.     WriteData(0x0036);//P114
  194.     WriteData(0x0077);//P114
  195.     WriteData(0x0000);//P114
  196.     WriteData(0x000F);//P114
  197.     WriteData(0x0000);//P114
  198.         
  199.         WriteComm(0x3A);
  200.         WriteData(0x55);
  201.         
  202.         WriteComm(0x2A);
  203.         WriteData(0x00);
  204.         WriteData(0x00);
  205.         WriteData(0x01);
  206.         WriteData(0x3F);
  207.         
  208.         WriteComm(0x2B);
  209.         WriteData(0x00);
  210.         WriteData(0x00);
  211.         WriteData(0x01);
  212.         WriteData(0xE0);
  213.         LCD_delay(120);
  214.         WriteComm(0x29);
  215.         WriteComm(0x2c);
  216.         
  217.         WriteComm(0x36); //Set_address_mode
  218.         WriteData(0x28); //横屏,从左下角开始,从左到右,从下到上
  219.     Lcd_Light_ON;
  220.    
  221. //         Lcd_ColorBox(0,0,320,480,Yellow);Delay(5000000);
  222. //         Lcd_ColorBox(0,0,320,480,Blue);Delay(5000000);
  223. //         Lcd_ColorBox(0,0,320,480,Red);Delay(5000000);
  224. //         Lcd_ColorBox(0,0,320,480,Green);Delay(5000000);
  225. //         Lcd_ColorBox(0,0,320,480,Magenta);Delay(5000000);
  226. //         Lcd_ColorBox(0,0,320,480,Cyan);Delay(5000000);
  227. //         Lcd_ColorBox(0,0,320,480,White);Delay(5000000);

  228. }
  229. /******************************************
  230. 函数名:Lcd写命令函数
  231. 功能:向Lcd指定位置写入应有命令或数据
  232. 入口参数:Index 要寻址的寄存器地址
  233.           ConfigTemp 写入的数据或命令值
  234. ******************************************/
  235. void LCD_WR_REG(u16 Index,u16 CongfigTemp)
  236. {
  237.     *(__IO u16 *) (Bank1_LCD_C) = Index;   
  238.     *(__IO u16 *) (Bank1_LCD_D) = CongfigTemp;
  239. }
  240. /************************************************
  241. 函数名:Lcd写开始函数
  242. 功能:控制Lcd控制引脚 执行写操作
  243. ************************************************/
  244. void Lcd_WR_Start(void)
  245. {
  246. *(__IO u16 *) (Bank1_LCD_C) = 0x2C;
  247. }
  248. void BlockWrite(unsigned int Xstart,unsigned int Xend,unsigned int Ystart,unsigned int Yend)
  249. {
  250.     //ILI9481

  251.     Ystart += 24;
  252.     Yend   += 24;
  253.    
  254.     WriteComm(0x2a);   
  255.     WriteData(Xstart>>8);
  256.     WriteData(Xstart&0xff);
  257.     WriteData(Xend>>8);
  258.     WriteData(Xend&0xff);

  259.     WriteComm(0x2b);   
  260.     WriteData(Ystart>>8);
  261.     WriteData(Ystart&0xff);
  262.     WriteData(Yend>>8);
  263.     WriteData(Yend&0xff);
  264.    
  265.     WriteComm(0x2c);
  266. }
  267. u16 GetPoint(u16 x,u16 y)
  268. {
  269. volatile u16 a;
  270.    
  271.     WriteComm(0x2a);   
  272.     WriteData(x>>8);
  273.     WriteData(x&0xff);

  274.     WriteComm(0x2b);   
  275.     WriteData(y>>8);
  276.     WriteData(y&0xff);
  277.     a=0;a=0;a=0;a=0;a=0;
  278.     WriteComm(0x2E);
  279.     a=0;a=0;a=0;a=0;a=0;a=0;
  280.     a = *(__IO u16 *) (Bank1_LCD_D);
  281.     a=0;a=0;a=0;a=0;a=0;
  282.     a = *(__IO u16 *) (Bank1_LCD_D);
  283.     return a;
  284. //      return (a&0xf800)|((a&0x03f0)<<1)|((a&0x3)<<3)|(b>>13);  
  285. }
  286. /**********************************************
  287. 函数名:Lcd块选函数
  288. 功能:选定Lcd上指定的矩形区域

  289. 注意:xStart和 yStart随着屏幕的旋转而改变,位置是矩形框的四个角

  290. 入口参数:xStart x方向的起始点
  291.           ySrart y方向的终止点
  292.           xLong 要选定矩形的x方向长度
  293.           yLong  要选定矩形的y方向长度
  294. 返回值:无
  295. ***********************************************/
  296. void Lcd_ColorBox(u16 xStart,u16 yStart,u16 xLong,u16 yLong,u16 Color)
  297. {
  298.     u32 temp;

  299.     BlockWrite(xStart,xStart+xLong-1,yStart,yStart+yLong-1);
  300.     for (temp=0; temp<xLong*yLong; temp++)
  301.     {
  302.         *(__IO u16 *) (Bank1_LCD_D) = Color>>8;
  303.         *(__IO u16 *) (Bank1_LCD_D) = Color;
  304.     }
  305. }




  306. /************************************************
  307. 函数名:Lcd写开始函数
  308. 功能:控制Lcd控制引脚 执行写操作
  309. 入口参数:无
  310. 返回值:无
  311. ************************************************/
  312. void Lcd_CMD_WR_Start(void)
  313. {
  314.     Clr_Cs;
  315.     Clr_Rs;
  316.     DataToWrite(0x0000);
  317.     Clr_nWr;
  318.     Set_nWr;
  319.     Set_Rs;
  320. }



  321. /**********************************************
  322. 函数名:Lcd全屏擦除函数
  323. 功能:将Lcd整屏擦为指定颜色
  324. 入口参数:color 指定Lcd全屏颜色 RGB(5-6-5)
  325. 返回值:无
  326. ***********************************************/
  327. void Lcd_Clear(u16 Color)
  328. {
  329.     u32 temp;
  330.    
  331.     Lcd_Start();
  332.     if((Color>>8)==(Color&0x00ff))
  333.     {
  334.         DataToWrite(Color);
  335.         for (temp = 0; temp < 76800*2-1; temp++)
  336.         {
  337.             Clr_nWr;
  338.             Set_nWr;
  339.         }
  340.     }   
  341.     else
  342.     {
  343.         for (temp = 0; temp < 76800; temp++)
  344.         {
  345.             DataToWrite(Color);
  346.             Clr_nWr;
  347.             Set_nWr;
  348.         }
  349.     }

  350. }
  351. /*************************************************
  352. 函数名:Lcd光标起点定位函数
  353. 功能:指定320240液晶上的一点作为写数据的起始点
  354. 入口参数:x 坐标 0~239
  355.           y 坐标 0~319
  356. 返回值:无
  357. *************************************************/
  358. void Lcd_SetCursor(u16 x,u16 y)
  359. {
  360.     //坐标调转
  361.     LCD_WR_REG(0x20,y);//水平坐标
  362.     LCD_WR_REG(0x21,x);//垂直坐标  
  363. }
  364. /**********************************************
  365. 函数名:Lcd块选函数
  366. 功能:选定Lcd上指定的矩形区域

  367. 注意:xStart和 yStart随着屏幕的旋转而改变,位置是矩形框的四个角

  368. 入口参数:xStart x方向的起始点
  369.           ySrart y方向的终止点
  370.           xLong 要选定矩形的x方向长度
  371.           yLong  要选定矩形的y方向长度
  372. 返回值:无
  373. ***********************************************/


  374. void Lcd_SetBox(u16 xStart,u16 yStart,u16 xLong,u16 yLong,u16 x_offset,u16 y_offset)
  375. {
  376.     Lcd_SetCursor(xStart+x_offset,yStart+y_offset);
  377.     LCD_WR_REG(0x0050,yStart+y_offset);//水平GRAM起始位置
  378.     LCD_WR_REG(0x0051,yStart+yLong-1+y_offset);//水平GRAM终止位置

  379.     //x,y坐标对调
  380.     LCD_WR_REG(0x0052,xStart+x_offset);//垂直 GRAM起始位置
  381.     LCD_WR_REG(0x0053,xStart+xLong-1+x_offset);//垂直GRAM终止位置

  382.    
  383. }

  384. void Lcd_ClearCharBox(u16 x,u16 y,u16 Color)
  385. {
  386.     u32 temp;
  387.   
  388.     Lcd_SetBox(x*8,y*16,8,16,0,0);
  389.     Lcd_WR_Start();
  390.     Set_Rs;
  391.   
  392.     for (temp=0; temp < 128; temp++)
  393.     {
  394.         DataToWrite(Color);
  395.         Clr_nWr;
  396.         Set_nWr;
  397.     }
  398. }

  399. ////////////////////////////////////////////////////////////////////////////////
  400. void DrawPixel(u16 x, u16 y, int Color)
  401. {
  402.     BlockWrite(x,x,y,y);
  403.     *(__IO u16 *) (Bank1_LCD_D) = Color>>8;
  404.     *(__IO u16 *) (Bank1_LCD_D) = Color;   
  405. }
  406. /******************************************
  407. 函数名:Lcd图像填充100*100
  408. 功能:向Lcd指定位置填充图像
  409. 入口参数:Index 要寻址的寄存器地址
  410.           ConfigTemp 写入的数据或命令值
  411. ******************************************/
  412. void LCD_Fill_Pic(u16 x, u16 y,u16 pic_H, u16 pic_V, const unsigned char* pic)
  413. {
  414.   unsigned long i;
  415.     unsigned int j;

  416. //     WriteComm(0x36); //Set_address_mode
  417. //     WriteData(0x08); //横屏,从左下角开始,从左到右,从下到上
  418.     BlockWrite(x,x+pic_H-1,y,y+pic_V-1);
  419.     for (i = 0; i < pic_H*pic_V*2; i++)
  420.     {
  421. //         j=pic[i];
  422. //         j=j<<8;
  423. //         j=j+pic[i+1];
  424.         *(__IO u16 *) (Bank1_LCD_D) = pic[i];
  425.     }
  426. //     WriteComm(0x36); //Set_address_mode
  427. //     WriteData(0x68);
  428. }
  429. //开始全屏写,设置地址
  430. void Lcd_Start(void)
  431. {  
  432.     Lcd_SetCursor(0,239);     
  433.     LCD_WR_REG(0x0050,0x00);//垂直 GRAM起始位置
  434.     LCD_WR_REG(0x0051,239);//垂直GRAM终止位置
  435.     LCD_WR_REG(0x0052,0x00);//水平GRAM起始位置
  436.     LCD_WR_REG(0x0053,319);//水平GRAM终止位置   
  437.     Lcd_WR_Start();
  438. }


  439. /****************************************************************************
  440. * 名    称:void Put32_32HZ(u16 x,u16 y,const unsigned char *c,u16 charColor,u16 bkColor,u8 flag)
  441. * 功    能:在指定座标显示一个点阵的汉字
  442. * 入口参数:x          行座标
  443. *           y          列座标
  444. *           charColor  字符的颜色
  445. *           bkColor    字符背景颜色
  446. * 出口参数:无
  447. * 说    明:显示范围限定为可显示的ascii码
  448. * 调用方法:ssd1289_PutChar(10,10,'a',0x0000,0xffff, 1);
  449. ****************************************************************************/
  450. // void Put32_32HZ(u16 x,u16 y,const unsigned char *c,u16 charColor,u16 bkColor,u8 flag)
  451. // {
  452. //   u8 i,j,k;
  453. //   u8 tmp_char=0;

  454. //   Lcd_SetBox(x,y,32,32,0,0);
  455. //   Lcd_WR_Start();
  456. //   Set_Rs;

  457. //   for (i=31;i>=0;i--)//32行
  458. //   {
  459. //     for (j=3;j>=0;j--)//每行4字节
  460. //     {
  461. //       tmp_char=c[4*i+j];
  462. //       for (k=0;k<8;k++)//每字节8位
  463. //       {
  464. //         if (((tmp_char << k) & 0x80) == 0x80)
  465. //         {
  466. //           DataToWrite(charColor);
  467. //           Clr_nWr;
  468. //             Set_nWr;
  469. //         }
  470. //         else
  471. //         {
  472. //            if(flag){
  473. //              DataToWrite(bkColor);
  474. //              Clr_nWr;
  475. //                Set_nWr;
  476. //            }
  477. //         }
  478. //       }
  479. //     }
  480. //   }

  481. //   Set_Cs;

  482. // }

  483. /****************************************************************************
  484. * 名    称:void Put16_16HZ(u16 x,u16 y,const unsigned char *c,u16 charColor,u16 bkColor,u8 flag)
  485. * 功    能:在指定座标显示一个点阵的汉字
  486. * 入口参数:x          行座标
  487. *           y          列座标
  488. *           charColor  字符的颜色
  489. *           bkColor    字符背景颜色
  490. * 出口参数:无
  491. * 说    明:显示范围限定为可显示的ascii码
  492. * 调用方法:ssd1289_PutChar(10,10,'a',0x0000,0xffff, 1);
  493. ****************************************************************************/
  494. void Put16_16HZ(u16 x,u16 y,const unsigned char *c,u16 charColor,u16 bkColor,u8 flag)
  495. {
  496.   char i,j,k;
  497.   
  498.   u8 tmp_char=0;

  499.   Lcd_SetBox(x,y,16,16,0,0);
  500.   Lcd_SetCursor(x,y+15);
  501.   Lcd_WR_Start();
  502.   Set_Rs;

  503.   for (i=0;i<16;i++)//16行
  504.   {
  505.     for (j=0;j<2;j++)//每行2字节
  506.     {
  507.       tmp_char=c[2*(15-i)+j];
  508.       for (k=0;k<8;k++)//每字节8位
  509.       {
  510.         if (((tmp_char << k) & 0x80) == 0x80)
  511.         {
  512.           DataToWrite(charColor);
  513.           Clr_nWr;
  514.           Set_nWr;
  515.         }
  516.         else
  517.         {
  518.              DataToWrite(bkColor);
  519.              Clr_nWr;
  520.              Set_nWr;
  521.         }
  522.       }
  523.     }
  524.   }
  525.   Set_Cs;

  526. }


  527. void Put8_16Char(u16 x,u16 y,const unsigned char *ascii_8x16,u8 ch,u16 charColor,u16 bkColor,u8 flag)
  528. {
  529.   char i=0,j=0;
  530.   u8 tmp_char=0;

  531.   Lcd_SetBox(x,y,8,16,0,0);
  532.   Lcd_SetCursor(x,y+15);
  533.   Lcd_WR_Start();
  534.   Set_Rs;

  535.   for (i=0;i<16;i++)
  536.   {
  537.     tmp_char=ascii_8x16[((ch-0x20)*16)+(15-i)];
  538.     for (j=0;j<8;j++)
  539.     {
  540.         if(((tmp_char<<j) & 0x80) == 0x80)
  541.         {
  542.           DataToWrite(charColor);
  543.           Clr_nWr;
  544.           Set_nWr;
  545.         }
  546.         else
  547.         {
  548.                 DataToWrite(bkColor);  //0x7BEF
  549.              Clr_nWr;
  550.              Set_nWr;
  551.         }
  552.     }
  553.   }
  554.   Set_Cs;
  555. }



  556. void Put16x32Num(u16 x,u16 y,const unsigned char *num_16x32,u8 ch,u16 charColor,u16 bkColor,u8 flag)
  557. {
  558.   char i=0,j=0,k=0;
  559.   u8 tmp_char=0;

  560.   Lcd_SetBox(x,y,16,32,0,0);
  561.   Lcd_SetCursor(x,y+31);
  562.   Lcd_WR_Start();
  563.   for (i=0;i<32;i++)
  564.   {
  565.     for (k=0;k<2;k++)
  566.     {
  567.       tmp_char=num_16x32[ch*32*2+(31-i)*2+k];
  568.       for (j=0;j<8;j++)
  569.       {
  570.         if(((tmp_char<<j) & 0x80) == 0x80)
  571.         {
  572.           DataToWrite(charColor);
  573.           Clr_nWr;
  574.           Set_nWr;
  575.         }
  576.         else
  577.         {
  578.                 DataToWrite(bkColor);  //0x7BEF
  579.              Clr_nWr;
  580.              Set_nWr;

  581.         }
  582.       }
  583.     }
  584.   }
  585. }

  586. void LCD_Scan_Set(char i)
  587. {
  588.    
  589.   if(i==0)    {LCD_WR_REG(0x0003,0x1038);Lcd_SetCursor(0,239);}//
  590.     if(i==1)    {LCD_WR_REG(0x0003,0x1028);Lcd_SetCursor(0,239);}//
  591.   if(i==2)    {LCD_WR_REG(0x0003,0x1008);Lcd_SetCursor(319,0);}//
  592.     if(i==3)    {LCD_WR_REG(0x0001,0x0100);return;}//
  593.     LCD_WR_REG(0x0050,0x00);//垂直GRAM起始位置
  594.     LCD_WR_REG(0x0051,239);//垂直GRAM终止位置
  595.     LCD_WR_REG(0x0052,0x00);//水平GRAM起始位置
  596.     LCD_WR_REG(0x0053,319);//水平GRAM终止位置   
  597.     Lcd_WR_Start();
  598. }
  599. /*---------------------------------------------------------------------------
  600. 功能:    竖直滚屏
  601. 入口参数:line_num  滚动行数
  602. ---------------------------------------------------------------------------*/
  603. void lcd_scrol_screen(unsigned int line_num)
  604. {
  605.      LCD_WR_REG(0x006a, line_num);// set scrolling line   
  606.      LCD_WR_REG(0x0061, 0x0003);//enable scrol

  607. //     LCD_WR_REG(0x006a, line_num);// set scrolling line   
  608. //     LCD_WR_REG(0x0061, 0x0001);////disable scrol
  609. }

  610. /*---------------------------------------------------------------------------
  611. 功能:    禁止竖直滚屏
  612. ---------------------------------------------------------------------------*/
  613. void lcd_scrol_disable(void)
  614. {
  615.      LCD_WR_REG(0x006a, 0x0000);// set scrolling line   
  616.      LCD_WR_REG(0x0061, 0x0001);//disable scrol
  617. }

复制代码


Keil代码下载: uc_gui_4.63_IL9488.7z (2.37 MB, 下载次数: 28)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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