你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【年度庆典二】+祝ST社区越来越红火

[复制链接]
jinglixixi 发布时间:2020-12-21 21:16
前段时间为参加RT-Thread x STM32 全连接创意创客大赛特意购置一个2.8寸的触摸屏,这次也让它露个脸儿,社区献上一份祝福!

r.jpg

v.jpg

为了便于移植,驱动采用I/O口模拟SPI接口通讯。
显示屏与MCU的连接关系如下:
SCK---PC7
SDI--- PB6
D/C---PA7
RST--- PA6
CS ---PA5
LED--- PA9


输出高低电平的语句定义为:
#define LCD_CS_High()       HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET)    // PA5
#define LCD_CS_Low()        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET)

#define LCD_REST_High()     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET)    // PA6
#define LCD_REST_Low()      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET)

#define LCD_DC_High()       HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET)    // PA7
#define LCD_DC_Low()        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET)

#define LCD_SDI_High()      HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET)   // PB6
#define LCD_SDI_Low()       HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET)

#define LCD_SCK_High()      HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET)   // PC7
#define LCD_SCK_Low()      HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET)

#define LCD_LED_High()      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET)     // PA9


相关的辅助函数为:
  1. void LCD_Writ_Bus(unsigned char com)   
  2. {        
  3.   unsigned char uci;
  4.   for(uci=0;uci<8;uci++)
  5.   {
  6.                 if(com & 0x80)
  7.                 {
  8.                         LCD_SDI_High();
  9.                  }
  10.                 else
  11.                 {
  12.                         LCD_SDI_Low();
  13.                 }
  14.                 com = com << 1;
  15.                 LCD_SCK_Low();
  16.                 LCD_SCK_High();
  17.    }         
  18. }

  19. void LCD_WR_DATA8(char da)
  20. {
  21.     LCD_DC_High();
  22.     LCD_Writ_Bus(da);
  23. }
  24.   
  25. void LCD_WR_DATA(int da)
  26. {
  27.     LCD_DC_High();
  28.     LCD_Writ_Bus(da>>8);
  29.     LCD_Writ_Bus(da);
  30. }
  31.          
  32. void LCD_WR_REG(char da)         
  33. {
  34.    LCD_DC_Low();
  35.    LCD_Writ_Bus(da);
  36. }

  37. void LCD_WR_REG_DATA(int reg,int da)
  38. {
  39.    LCD_WR_REG(reg);
  40.    LCD_WR_DATA(da);
  41. }
复制代码
相应的初始化函数为:
  1. void LCDv_Init(void)
  2. {         
  3.                 LCD_REST_Low();
  4.                 HAL_Delay(50);
  5.                 LCD_REST_High();
  6.                 HAL_Delay(50);
  7.         
  8.                 LCD_WR_REG(0xCF);  
  9.                 LCD_WR_DATA8(0x00);
  10.                 LCD_WR_DATA8(0xD9);
  11.                 LCD_WR_DATA8(0X30);
  12.         
  13.                 LCD_WR_REG(0xED);  
  14.                 LCD_WR_DATA8(0x64);
  15.                 LCD_WR_DATA8(0x03);
  16.                 LCD_WR_DATA8(0X12);
  17.                 LCD_WR_DATA8(0X81);
  18.         
  19.                 LCD_WR_REG(0xE8);  
  20.                 LCD_WR_DATA8(0x85);
  21.                 LCD_WR_DATA8(0x10);
  22.                 LCD_WR_DATA8(0x78);
  23.                
  24.                 LCD_WR_REG(0xCB);  
  25.                 LCD_WR_DATA8(0x39);
  26.                 LCD_WR_DATA8(0x2C);
  27.                 LCD_WR_DATA8(0x00);
  28.                 LCD_WR_DATA8(0x34);
  29.                 LCD_WR_DATA8(0x02);
  30.                
  31.                 LCD_WR_REG(0xF7);  
  32.                 LCD_WR_DATA8(0x20);
  33.                
  34.                 LCD_WR_REG(0xEA);
  35.                 LCD_WR_DATA8(0x00);
  36.                 LCD_WR_DATA8(0x00);
  37.                
  38.                 LCD_WR_REG(0xC0);     //Power control
  39.                 LCD_WR_DATA8(0x21);   //VRH[5:0]
  40.                
  41.                 LCD_WR_REG(0xC1);     //Power control
  42.                 LCD_WR_DATA8(0x12);   //SAP[2:0];BT[3:0]
  43.                
  44.                 LCD_WR_REG(0xC5);      //VCM control
  45.                 LCD_WR_DATA8(0x32);          //3F
  46.                 LCD_WR_DATA8(0x3C);          //3C
  47.                
  48.                 LCD_WR_REG(0xC7);     //VCM control2
  49.                 LCD_WR_DATA8(0xC1);
  50.                
  51.                 LCD_WR_REG(0x36);     // Memory Access Control
  52.                 LCD_WR_DATA8(0x08);
  53.                
  54.                 LCD_WR_REG(0x3A);   
  55.                 LCD_WR_DATA8(0x55);
  56.                
  57.                 LCD_WR_REG(0xB1);     //Ö¡ËÙÂÊ¿ØÖÆ
  58.                 LCD_WR_DATA8(0x00);
  59.                 LCD_WR_DATA8(0x18);
  60.                
  61.                 LCD_WR_REG(0xB6);    // Display Function Control
  62.                 LCD_WR_DATA8(0x0A);
  63.                 LCD_WR_DATA8(0xA2);
  64.                
  65.                 LCD_WR_REG(0xF2);    // 3Gamma Function Disable
  66.                 LCD_WR_DATA8(0x00);
  67.                
  68.                 LCD_WR_REG(0x26);    //Gamma curve selected
  69.                 LCD_WR_DATA8(0x01);
  70.                
  71.                 LCD_WR_REG(0xE0);    //Set Gamma
  72.                 LCD_WR_DATA8(0x0F);
  73.                 LCD_WR_DATA8(0x20);
  74.                 LCD_WR_DATA8(0x1E);
  75.                 LCD_WR_DATA8(0x09);
  76.                 LCD_WR_DATA8(0x12);
  77.                 LCD_WR_DATA8(0x0B);
  78.                 LCD_WR_DATA8(0x50);
  79.                 LCD_WR_DATA8(0xBA);
  80.                 LCD_WR_DATA8(0x44);
  81.                 LCD_WR_DATA8(0x09);
  82.                 LCD_WR_DATA8(0x14);
  83.                 LCD_WR_DATA8(0x05);
  84.                 LCD_WR_DATA8(0x23);
  85.                 LCD_WR_DATA8(0x21);
  86.                 LCD_WR_DATA8(0x00);

  87.                 LCD_WR_REG(0xE1);    //Set Gamma
  88.                 LCD_WR_DATA8(0x00);
  89.                 LCD_WR_DATA8(0x19);
  90.                 LCD_WR_DATA8(0x19);
  91.                 LCD_WR_DATA8(0x00);
  92.                 LCD_WR_DATA8(0x12);
  93.                 LCD_WR_DATA8(0x07);
  94.                 LCD_WR_DATA8(0x2D);
  95.                 LCD_WR_DATA8(0x28);
  96.                 LCD_WR_DATA8(0x3F);
  97.                 LCD_WR_DATA8(0x02);
  98.                 LCD_WR_DATA8(0x0A);
  99.                 LCD_WR_DATA8(0x08);
  100.                 LCD_WR_DATA8(0x25);
  101.                 LCD_WR_DATA8(0x2D);
  102.                 LCD_WR_DATA8(0x0F);
  103.                 LCD_WR_REG(0x11); //Exit Sleep
  104.                 HAL_Delay(120);
  105.                 LCD_WR_REG(0x29); //display on        
  106.                 LCD_Clear(WHITE);
  107. }
复制代码
相应的图片显示函数为:
  1. void show_pic(const unsigned char *p)
  2. {
  3.         int i,j;
  4.         unsigned char picH,picL;
  5.         Address_set(0,0,LCD_W-1,LCD_H-1);
  6.         for(i=0;i<240;i++)
  7.         {
  8.                 for(j=0;j<320;j++)
  9.                {
  10.                         picH=*p++;
  11.                         picL=*p++;
  12.                         LCD_WR_DATA8(picH);
  13.                         LCD_WR_DATA8(picL);
  14.                }
  15.         }
  16. }
复制代码
实现显示效果的主程序为:
  1. int main(void)              //  2.8' TFT  OK
  2. {
  3.       HAL_Init();
  4.       /* Configure the system clock to 80 MHz */
  5.       SystemClock_Config();
  6.       APP_TFT_init();
  7.       LCDv_Init();
  8.       show_pic(gImage_a);
  9.       while (1);
  10. }
复制代码


收藏 评论2 发布时间:2020-12-21 21:16

举报

2个回答
STMCU-管管 回答时间:2020-12-22 13:39:05
上代码,老铁
jinglixixi 回答时间:2020-12-22 15:12:16

好的

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版