×
单片机 > 单片机程序设计 > 详情

TFT显示图片的驱动函数

发布时间:2020-06-22 发布时间:
|
以下是TFT的驱动函数用来显示图片,之前要将图片进行取模并保存在一下数组中:

const unsigned  char code Image_pic[7128] = { };

然后只需修改程序中的红色字体的文字!

一定记住:使用TFT显示图片只需修改红黑色字体的文字,知道如何用即可,没有太大的必要亲自去写驱动函数!!!除非你有足够的精力逐句去理解,这对你也有好处.

 

#include
#include

#include "LCD.h"

#define  NOP()   _nop_()  

#define  TYPE_LCD_DATA  1
#define  TYPE_LCD_COMMAND 0

char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节

#define  DATA   P0   //定义数据输入端口并行

sbit LCD_RST  = P2^7;
sbit LCD_RD   = P3^2;
sbit LCD_WR   = P3^3;
sbit LCD_RS   = P2^5;
sbit LCD_CS   = P2^6;

//以上红色字体是必须要针对实际的TFT接口连接情况进行修改的,此为应用的关键之处

uint colors[]=
{
  0xf800,0x07e0,0x001f,0xffe0,0x0000,0x07ff,0xf81f,0xffff
};


void delay_ms(uint ms)
{
  unsigned char k;

  while (ms--)
  {
    for (k = 0; k < 228; k++)
      ;
  }
}


void LCD_Write(uchar type, uint value) 
{
 LCD_CS = 0;
 LCD_RS  = type;      // 0: command    1: data
 
 LCD_WR  = 0;
 DATA  = (uchar)value;
 LCD_WR  = 1;
 LCD_CS = 1;
}


void LCD_Write_Data8(uchar value)    // color data
{
 LCD_CS = 0;
 LCD_RS  = 1;
 LCD_WR  = 0;
 DATA  = value;
 LCD_WR  = 1;
    LCD_CS = 1;
}

 


void LCD_Wirte_Data16(uint value)    // color data
{
 LCD_CS = 0;
    LCD_RS  = 1;
 LCD_WR  = 0;
 DATA  = (uchar)value;
 LCD_WR  = 1;
 LCD_WR  = 0;
 DATA  = (uchar)(value>>8) ;
 LCD_WR  = 1;
 LCD_CS = 1;
}



void Reg_Write(uint reg,uint value)
{
   LCD_Write(TYPE_LCD_COMMAND,reg);
   LCD_Write(TYPE_LCD_DATA,value);
}



void LCD_SetRamAddr(uint xStart, uint xEnd, uint yStart, uint yEnd)
{
   uint VerPos,HorPos,StartAddr;

   HorPos    = (uint)(xStart | (xEnd<<8));
   VerPos    = (uint)(yStart | (yEnd<<8));
   StartAddr = (uint)(xStart | (yStart<<8));
 
   Reg_Write(0x09, xStart);
   Reg_Write(0x10,yStart);
   Reg_Write(0x11,xEnd);
   Reg_Write(0x12,yEnd);
 
   Reg_Write(0x18, xStart);
   Reg_Write(0x19, yStart);
  
   LCD_Write(TYPE_LCD_COMMAND,0x22);  // 0x22
}

 



void LCD_init(void)
  uint num;
  
 Reg_Write(0x0001,0x0002);  //MODE_SEL1
 Reg_Write(0x0002,0x0012);   //MODE_SEL2
 Reg_Write(0x0003,0x0000);   //MODE_SEL3
 Reg_Write(0x0004,0x0010); //MODE_SEL3
 LCD_SetRamAddr(0,127, 0,159);
 for(num=20480;num>0;num--)
    LCD_Wirte_Data16(0xffff);
  
 Reg_Write(0x0005,0x0008);   //VCO_MODE 
 Reg_Write(0x0007,0x007f); //VCOMHT_CTRL
 Reg_Write(0x0008,0x0017);   //VCOMLT_CTRL     
 Reg_Write(0x0009,0x0000);   //write SRAM window start X point
 Reg_Write(0x0010,0x0000);   //write SRAM window start y point
 Reg_Write(0x0011,0x0083);   //write SRAM window end x point
 Reg_Write(0x0012,0x009f);   //write SRAM window end y point
 Reg_Write(0x0017,0x0000);   //SRAM contrl
 Reg_Write(0x0018,0x0000);   //SRAM x position
 Reg_Write(0x0019,0x0000);   //SRAM y position
 Reg_Write(0x0006,0x00c5);   //DAC_OP_CTRL2
 delay_ms(10); //延时

}


void  pic_play(uint Start_X, uint End_X,uint Start_Y,uint End_Y)
{
   uint num,m;
   uint dx,dy;

   dx = (End_X+1)-Start_X;                  //计算写入数据的总数
   dy = (End_Y+1)-Start_Y;
   num = dx*dy<<1;

   LCD_CS = 0;
   LCD_SetRamAddr(Start_X,End_X-1,Start_Y,End_Y-1) ;
   LCD_RS  = 1;


   for(m=0; m<7128; m++) 
   {  
      LCD_Write_Data8(Image_pic[m]);

   }
   LCD_CS = 1;

}



void  LCD_clear(uchar n)
{
   uint num;
  
   LCD_SetRamAddr(0,127, 0,159);//清屏函数

   for(num=20480;num>0;num--)          //160*128=20480
   {
     LCD_Wirte_Data16(colors[n]);//其实质是对每一个点进行设置!
   }
}

void main(void)

   P2 = 0xff;
   P0 = 0xff;//端口的初始化
    
    LCD_init();//屏幕初始化
    LCD_clear(6);//清屏

    pic_play(7,61,8,74);
    pic_play(68,122,8,74);
    pic_play(7,61,82,148);
    pic_play(68,122,82,148);

//设置显示图片的位置 
   while(1) ;
}

关键字:TFT  显示图片  驱动函数 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向