使用英飞凌PSoC 62 with CAPSENSE evaluation kit 驱动OLED,程序下载以及初步的显示效果。

  1、硬件连接: 确保OLED显示屏的SCL和SDA引脚正确连接到PSoC 62开发板的对应引脚(SCL-P8.0, SDA-P8.1)。

image.png

2、代码引脚定义:

  1. #define SCL     GET_PIN(8, 0)
  2. #define SDA     GET_PIN(8, 1)

显示相关的代码:
  1. // 该函数用于在OLED显示屏上绘制位图(BMP),但注意这里的BMP[]可能不完全是标准的BMP文件格式,  
  2. // 而是简化后的位图数据,通常只包含像素数据。  
  3. // 参数:  
  4. // x0, y0: 绘制位图的起始坐标(左上角)。  
  5. // x1, y1: 绘制位图的结束坐标(右下角,但不包括此点)。  
  6. // BMP[]: 位图数据数组,通常包含每个像素的颜色或亮度信息。  
  7.   
  8. void Draw_BMP(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1, unsigned char BMP[])  
  9. {  
  10.     unsigned int j = 0; // 用于遍历BMP[]数组的索引。  
  11.     unsigned char x, y; // 用于遍历OLED屏幕的坐标。  
  12.   
  13.     // 计算y方向的起始页码(注意:这里假设OLED的显示是以8像素高为一页进行操作的)。  
  14.     // 如果y1能被8整除,则y方向上的最后一页完整,否则需要多算一页。  
  15.     // 但注意,下面的实现中,这个计算被后续的for循环条件覆盖了,所以这里可能是多余的或用于特定条件的预处理。  
  16.     if (y1 % 8 == 0) y = y1 / 8;        
  17.     else y = y1 / 8 + 1; // 但由于for循环的初始化,这里的y值会被y0覆盖,所以实际上这行是无效的。  
  18.   
  19.     // 遍历y方向上的每一行(页),从y0到y1-1(因为y1是结束坐标,不包括)  
  20.     for (y = y0; y < y1; y++)  
  21.     {  
  22.         // 设置OLED的当前绘制位置为(x0, y)。注意,这里的OLED_Set_Pos函数需要具体实现。  
  23.         OLED_Set_Pos(x0, y);  
  24.   
  25.         // 遍历x方向上的每一个像素,从x0到x1-1(因为x1是结束坐标,不包括)  
  26.         for (x = x0; x < x1; x++)  
  27.         {  
  28.             // 从BMP[]数组中读取一个字节的数据,并写入到OLED的当前位置。  
  29.             // 这里假设BMP[]中的每个字节代表OLED上的一个像素(或一组像素,具体取决于OLED的分辨率和BMP数据的组织方式)。  
  30.             // Write_I2C_Data函数负责通过I2C接口向OLED写入数据,这个函数也需要具体实现。  
  31.             Write_I2C_Data(BMP[j++]);  
  32.   
  33.             // 注意:如果BMP数据不是每个字节对应一个像素,或者OLED的分辨率不是1:1,  
  34.             // 这里可能需要更复杂的逻辑来处理像素映射和数据转换。  
  35.         }  
  36.     }  
  37.   
  38.     // 注意:这个函数没有处理OLED的页面(Page)和列(Column)地址的自动换页问题。  
  39.     // 如果OLED显示屏需要分页显示,并且每页的高度不是8像素,那么OLED_Set_Pos函数和这里的循环逻辑可能需要调整。  
  40. }

3、视频,输出结果: