找回密码
 立即注册

QQ登录

只需一步,快速开始

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

AutoChips 7801驱动TFT2.4寸彩屏 源程序

[复制链接]
ID:776997 发表于 2020-6-28 09:43 | 显示全部楼层 |阅读模式
TFT2.4寸彩屏是一款基于SPI接口的显示屏,使用AutoChips 7801开发板完全可以驱动TFT2.4寸彩屏。
TFT屏与MCU的连接关系为:
LCD_ SCK ——PB11
LCD_ SDI ——PB12
LCD_LED ——3.3V
LCD_CS  ——GND
LCD_DC  ——PB5
LCD_ REST ——PB4
其余的两个引脚则接3.3V工作电源

定义GPIO口输出高低电平的语句为:
#define LCD_CS_High()    GPIO_SetPinLevel(GPIOA, GPIO_PIN8,GPIO_LEVEL_HIGH   // PA8
#define LCD_CS_Low()  GPIO_SetPinLevel(GPIOA, GPIO_PIN8,GPIO_LEVEL_LOW);

#define LCD_SCK_High()GPIO_SetPinLevel(GPIOB, GPIO_PIN11, GPIO_LEVEL_HIGH);  // PB11
#define LCD_SCK_Low()    GPIO_SetPinLevel(GPIOB, GPIO_PIN11,GPIO_LEVEL_LOW);

#define LCD_SDI_High()   GPIO_SetPinLevel(GPIOB, GPIO_PIN12,GPIO_LEVEL_HIGH);  // PB12
#define LCD_SDI_Low()   GPIO_SetPinLevel(GPIOB, GPIO_PIN12,GPIO_LEVEL_LOW);

#define LCD_DC_High()   GPIO_SetPinLevel(GPIOB, GPIO_PIN5,GPIO_LEVEL_HIGH);   // PB5
#define LCD_DC_Low()    GPIO_SetPinLevel(GPIOB, GPIO_PIN5,GPIO_LEVEL_LOW);

#define LCD_REST_High()  GPIO_SetPinLevel(GPIOB, GPIO_PIN4,GPIO_LEVEL_HIGH);   // PB4
#define LCD_REST_Low()   GPIO_SetPinLevel(GPIOB, GPIO_PIN4,GPIO_LEVEL_LOW);


TFT屏的初始化函数为:
  1. void Lcd_Init(void)
  2. {
  3.     LCD_REST_Low();
  4.     mdelay(20);
  5.     LCD_REST_High();
  6.     mdelay(20);
  7.     LCD_CS_Low();  
  8.     LCD_WR_REG(0xCB);  
  9.     LCD_WR_DATA8(0x39);
  10.     LCD_WR_DATA8(0x2C);
  11.     LCD_WR_DATA8(0x00);
  12.     LCD_WR_DATA8(0x34);
  13.     LCD_WR_DATA8(0x02);
  14.     LCD_WR_REG(0xCF);  
  15.     LCD_WR_DATA8(0x00);
  16.     LCD_WR_DATA8(0XC1);
  17.     LCD_WR_DATA8(0X30);
  18.     LCD_WR_REG(0xE8);  
  19.     LCD_WR_DATA8(0x85);
  20.     LCD_WR_DATA8(0x00);
  21.     LCD_WR_DATA8(0x78);
  22.     LCD_WR_REG(0xEA);  
  23.     LCD_WR_DATA8(0x00);
  24.     LCD_WR_DATA8(0x00);
  25.     LCD_WR_REG(0xED);  
  26.     LCD_WR_DATA8(0x64);
  27.     LCD_WR_DATA8(0x03);
  28.     LCD_WR_DATA8(0X12);
  29.     LCD_WR_DATA8(0X81);
  30.     LCD_WR_REG(0xF7);  
  31.     LCD_WR_DATA8(0x20);
  32.     LCD_WR_REG(0xC0);     //Power control
  33.     LCD_WR_DATA8(0x23);   //VRH[5:0]
  34.     LCD_WR_REG(0xC1);     //Power control
  35.     LCD_WR_DATA8(0x10);   //SAP[2:0];BT[3:0]
  36.     LCD_WR_REG(0xC5);     //VCM control
  37.     LCD_WR_DATA8(0x3e);
  38.     LCD_WR_DATA8(0x28);
  39.     LCD_WR_REG(0xC7);     // VCM control2
  40.     LCD_WR_DATA8(0x86);   // --
  41.     LCD_WR_REG(0x36);     // Memory Access Control
  42.     LCD_WR_DATA8(0x48);   // C8
  43.     LCD_WR_REG(0x3A);   
  44.     LCD_WR_DATA8(0x55);
  45.     LCD_WR_REG(0xB1);   
  46.     LCD_WR_DATA8(0x00);  
  47.     LCD_WR_DATA8(0x18);
  48.     LCD_WR_REG(0xB6);    // Display Function Control
  49.     LCD_WR_DATA8(0x08);
  50.     LCD_WR_DATA8(0x82);
  51.     LCD_WR_DATA8(0x27);  
  52.     LCD_WR_REG(0xF2);    // 3Gamma Function Disable
  53.     LCD_WR_DATA8(0x00);
  54.     LCD_WR_REG(0x26);    // Gamma curve selected
  55.     LCD_WR_DATA8(0x01);
  56.     LCD_WR_REG(0xE0);    // Set Gamma
  57.     LCD_WR_DATA8(0x0F);
  58.     LCD_WR_DATA8(0x31);
  59.     LCD_WR_DATA8(0x2B);
  60.     LCD_WR_DATA8(0x0C);
  61.     LCD_WR_DATA8(0x0E);
  62.     LCD_WR_DATA8(0x08);
  63.     LCD_WR_DATA8(0x4E);
  64.     LCD_WR_DATA8(0xF1);
  65.     LCD_WR_DATA8(0x37);
  66.     LCD_WR_DATA8(0x07);
  67.     LCD_WR_DATA8(0x10);
  68.     LCD_WR_DATA8(0x03);
  69.     LCD_WR_DATA8(0x0E);
  70.     LCD_WR_DATA8(0x09);
  71.     LCD_WR_DATA8(0x00);
  72.     LCD_WR_REG(0XE1);    //Set Gamma
  73.     LCD_WR_DATA8(0x00);
  74.     LCD_WR_DATA8(0x0E);
  75.     LCD_WR_DATA8(0x14);
  76.     LCD_WR_DATA8(0x03);
  77.     LCD_WR_DATA8(0x11);
  78.     LCD_WR_DATA8(0x07);
  79.     LCD_WR_DATA8(0x31);
  80.     LCD_WR_DATA8(0xC1);
  81.     LCD_WR_DATA8(0x48);
  82.     LCD_WR_DATA8(0x08);
  83.     LCD_WR_DATA8(0x0F);
  84.     LCD_WR_DATA8(0x0C);
  85.     LCD_WR_DATA8(0x31);
  86.     LCD_WR_DATA8(0x36);
  87.     LCD_WR_DATA8(0x0F);
  88.     LCD_WR_REG(0x11);    //Exit Sleep
  89.     mdelay(120);
  90.     LCD_WR_REG(0x29);    //Display on
  91.     LCD_WR_REG(0x2c);
  92. }
复制代码

清屏处理函数为:
  1. void LCD_Clear(uint16_t Color)
  2. {
  3.         char VH,VL;
  4.         uint16_t i,j;
  5.         VH=Color>>8;
  6.         VL=Color;        
  7.         Address_set(0,0,LCD_W-1,LCD_H-1);
  8.         for(i=0;i<LCD_W;i++)
  9.         {
  10.             for (j=0;j<LCD_H;j++)
  11.             {
  12.                     LCD_WR_DATA8(VH);
  13.                     LCD_WR_DATA8(VL);        
  14.             }
  15.         }
  16. }
复制代码

实现图1和图2显示效果的主程序为:
  1. int main(void)
  2. {
  3.         InitDelay();
  4.         mdelay(200);
  5.         GPIO_Configuration();
  6.         Lcd_Init();
  7.         LCD_Clear(RED);  
  8.         BACK_COLOR=RED;
  9.         POINT_COLOR=WHITE;
  10.         LCD_ShowString(20,80,160,16,16,"AC8701 TEST");
  11.         LCD_ShowString(20,100,200,16,16,"SPI_TFT 2.4'  240*320");
  12.         LCD_ShowString(20,120,160,16,16,"jinglxixi ");
  13.         mdelay(1000);
  14.         LCD_Clear(WHITE);  
  15.         show_imageh(10,300,1);
  16.         while(1);
  17. }
复制代码

1.png
1  文字显示效果


2的显示函数为:
  1. void show_imageh(unsigned int x,unsigned int y,unsigned int n) //200*200
  2. {
  3.         unsigned int i,j,k;
  4.         unsigned int da;
  5.         k=0;
  6.         for(i=0;i<200;i++)
  7.         {        
  8.                 for(j=0;j<200;j++)
  9.                 {
  10.                         if(n==1) da=gImage_zs[k*2];
  11.                         da<<=8;
  12.                         if(n==1) da|=gImage_zs[k*2+1];
  13.                         POINT_COLOR=da;        
  14.                         LCD_DrawPoint(x+i,y-j);
  15.                         k++;  
  16.                 }
  17.         }
  18. }
复制代码

2.png
2  图片显示效果

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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