在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++;
}
}
运行效果: