在RT-Thread Studio中下载了必要的设备包后,建立一个测试工程,程序中会默认追加LED闪烁的代码:

  1. #include <rtthread.h>
  2. #include <rtdevice.h>

  3. #include "drv_gpio.h"

  4. #define LED_PIN     GET_PIN(0, 1)

  5. int main(void)
  6. {
  7.     rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);

  8.     for (;;)
  9.     {
  10.         rt_pin_write(LED_PIN, PIN_HIGH);
  11.         rt_thread_mdelay(500);
  12.         rt_pin_write(LED_PIN, PIN_LOW);
  13.         rt_thread_mdelay(500);
  14.     }
  15. }

编译、下载都很容易。下载完成后,按Reset按钮后,如果看到有绿色LED以1秒的周期闪烁,说明下载的程序已经正常运转了。

我在这个程序的基础上,把OLED的移植过来,在工程中加入以下几个文件:

gui.h

gui.c     :封装OLED上的显示函数

oled.h

oled.c    :以模拟I2C的方式和OLED通讯

font.h    :  封装了点阵数据

主程序改为:


OLED的SCL和SDA,就利用板子上提供的SCL和SDA输出口就从,不过在代码中是以模拟的方式控制的,没有直接利用I2C外设操作。

/*
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date           Author       Notes
* 2022-06-29     Rbb666       first version
*/

#include <rtthread.h>
#include <rtdevice.h>

#include "drv_gpio.h"
#include "oled.h"

int main(void) {
    uint8_t cnt=0;

    // 初始化OLED
    OLED_Init();

    printf("Start main ...\r\n");
    rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);

    // 清除屏幕
    OLED_Clear(0);

    // 测试:显示信息
    GUI_ShowString(0, 0, (uint8_t*)"Test PSoc62", 8, 1);
    GUI_ShowString(0, 60, cnt, 8, 8, 1);

    while (1) {
        rt_pin_write(LED_PIN, PIN_HIGH);
        rt_pin_write(LED1_PIN, PIN_LOW);
        rt_thread_mdelay(500);
        rt_pin_write(LED_PIN, PIN_LOW);
        rt_pin_write(LED1_PIN, PIN_HIGH);
        rt_thread_mdelay(500);
        GUI_ShowNum(0, 8, cnt, 3, 8, 1);
        cnt++;
    }
}

运行效果:

demo_1.gif