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

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

  • #include "drv_gpio.h"

  • #define LED_PIN     GET_PIN(0, 1)

  • int main(void)
  • {
  •     rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);

  •     for (;;)
  •     {
  •         rt_pin_write(LED_PIN, PIN_HIGH);
  •         rt_thread_mdelay(500);
  •         rt_pin_write(LED_PIN, PIN_LOW);
  •         rt_thread_mdelay(500);
  •     }
  • }
  • 复制代码

    编译、下载都很容易。下载完成后,按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