微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 低分辨率OLED驱动讨论

低分辨率OLED驱动讨论

时间:10-02 整理:3721RD 点击:
附上一段驱动代码,

  1. void LCD_BlockWrite_ST7789S(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
  2. {
  3.         kal_uint16 x, y;
  4.     kal_uint32 addr, frame_buff_ptr;
  5.     kal_uint64 temp;
  6.    
  7.   //__WFD_lcd_RollbackPortIFSetting(0);
  8.   DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,MAIN_LCD_CMD_ADDR);
  9.   DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,MAIN_LCD_DATA_ADDR);

  10.   ASSERT(lcd_assert_fail==KAL_FALSE);
  11.   lcd_assert_fail = KAL_TRUE;
  12.   #if defined(MAIN_LCD_16BIT_MODE_RGB888)
  13.     SET_LCD_SEND_RES_MODE(1);
  14.   #endif
  15.   
  16.         if(endx >= LCD_SSD1306_WIDTH)
  17.         {
  18.                 endx = LCD_SSD1306_WIDTH-1;
  19.         }
  20.         if(endy >= LCD_SSD1306_HEIGHT)
  21.         {
  22.                 endy = LCD_SSD1306_HEIGHT-1;
  23.         }
  24.         #if defined(__mtk_TARGET__)
  25.         addr= REG_LCD_LAYER0_BUFF_ADDR;//get_lcd_frame_buffer_address();
  26.         //addr= get_lcd_frame_buffer_address();
  27.         #endif
  28.         for(y=starty;y<endy;++y)
  29.         {
  30.                 for(x=startx; x<endx;x++)
  31.                 {
  32.                         DRV_MAINLCD_GET_BUFFER_PIXEL_TMP(addr,LCD_SSD1306_WIDTH,x, y,temp_pixel);
  33.                         GD_PUT_BUF_PIXEL_1(showd_bufer,LCD_SSD1306_WIDTH,x,y,temp_pixel);
  34.                 }
  35.         }        
  36.         addr=(kal_uint32)(showd_bufer);
  37.         for(y = 0; y<LCD_SSD1306_ROW; y++)
  38.         {
  39.                 for(x= startx; x<endx; x++)   
  40.                 {
  41.                         frame_buff_ptr = addr+(y)*LCD_SSD1306_WIDTH+x;
  42.                         temp = (*((kal_uint8 *)frame_buff_ptr));
  43.                         LCD_GotoXY_SSD1306(x, y); //this line should to adjust by LCD module
  44.                         SERIAL_LCD_DataWrite(temp);
  45.                 }
  46.         }
  47.   
  48.   ENABLE_LCD_TRANSFER_COMPLETE_INT;
  49.   DISABLE_LCD_ROI_CTRL_CMD_FIRST;
  50.   START_LCD_TRANSFER;
  51.   
  52.   lcd_assert_fail = KAL_FALSE;

  53. }

复制代码

  1. const unsigned char LCDSetArray[]=
  2. {
  3.     0x01,   // 0000 0001
  4.     0x02,   // 0000 0010
  5.     0x04,   // 0000 0100
  6.     0x08,   // 0000 1000
  7.     0x10,   // 0001 0000
  8.     0X20,   // 0010 0000
  9.     0x40,   // 0100 0000
  10.     0x80    // 1000 0000
  11. };
  12. const unsigned char LCDReSetArray[]=
  13. {
  14.     0xFE,   // 1111 1110
  15.     0xFD,   // 1111 1101
  16.     0xFB,   // 1111 1011
  17.     0xF7,   // 1111 0111
  18.     0xEF,   // 1110 1111
  19.     0xDF,   // 1101 1111
  20.     0xBF,   // 1011 1111
  21.     0x7F    // 0111 1111
  22. };

  23. #define LCD_DRV_HW_TO_RGB_R(VALUE)  ((kal_uint8)(((VALUE)&0Xf800)>>8))
  24. #define LCD_DRV_HW_TO_RGB_G(VALUE)  ((kal_uint8)(((VALUE)&0X07e0)>>3))
  25. #define LCD_DRV_HW_TO_RGB_B(VALUE)  ((kal_uint8)(((VALUE)&0X001f)>>3))
  26. #define LCD_DRV_RGB_TO_BW(R,G,B)  (((unsigned short)(((int)(R)+(int)(G)+(int)(B))/(int)3)>=0x80)?1:0)
  27. #define GD_PUT_BUF_PIXEL_1(BUF,PITCH,X,Y,VALUE)  (((VALUE)<=0)?((*((kal_uint8*)BUF+(((Y)/8)*PITCH+X)))|= LCDSetArray[(Y)%8]): ((*((kal_uint8*)BUF+(((Y)/8)*PITCH+X))) &= LCDReSetArray[(Y)%8]));
  28. #define DRV_MAINLCD_GET_BUFFER_PIXEL_TMP(BUF,PITCH,X,Y,VALUE)                (VALUE=(!(*((kal_uint16*)BUF+((Y)*(PITCH)+(X))))))

复制代码


那么问题来了,  如何显示数据转换成8bit数据可以直接写到ssd1306里面去?

这的确是个问题,我也想不明白,帮顶

以前功能机好像有一个什么宏吧,配了后黑白屏的,就是8bit的吧,不过太久了,也记不清楚了。

对于MTK驱动模式是搞不定了,用自己方法实现了

好同志,,不错,哈哈

多谢,老大帮顶

上一篇:tp做距感
下一篇:mtk imei 写号问题 求救

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top