一、简介


1.1 硬件规格

SSD1306规格书:
链接:https://pan.baidu.com/s/1BtCtp87fTB7VXBG-20czWQ 提取码:vtqv

OLED尺寸: 0.96寸
OLED像素: 128 * 64
OLED驱动IC: SSD1306
接口类型: 4线SPI、3线SPI、IIC接口,可通过配置模块上的电阻等元件切换

1.2 接口定义

引脚 功能说明
GND 电源地
VCC 电源正 3.3~5V
D0 SPI接口时为SPI时钟线,IIC接口时为IIC时钟线
D1 SPI接口时为SPI数据线,IIC接口时为IIC数据线
RST OLED复位,OLED在上电后需做一次复位
DC SPI接口时SPI数据/命令选择脚,IIC接口时用来设置IIC地址

二、OLED控制流程

2.1 硬件连接

OLED引脚 香瓜CC2640R2F开发板引脚
GND GND
VCC VCC
D0 IOID_9
D1 IOID_10
D0 IOID_9
RST IOID_4
DC IOID_26

2.2 总线协议

IO口软件模拟SPI

2.3 软件控制流程

①IO初始化。

②根据时序初始化LCD。

③显示。

三、移植文件

链接:https://pan.baidu.com/s/1FT7PMZoV8jUgoB6WUEkAEw 提取码:wifz
board_oled.cboard_oled.h 两个文件拖拽至CCS工程的Application文件夹下

添加文件过程中,选项选择如下

3.1 board_oled.c

/********************************************************************** INCLUDES*/
/* BIOS Header files */
#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Semaphore.h>
#include <ti/sysbios/knl/Queue.h>/* Board Header files */
#include "Board.h"#include "util.h"
#include "board_oled.h"#include <string.h>
#include <stdio.h>/******************************************************************************* DEFINITIONS*/
#define OLED_SCL            IOID_9      //SCLK  时钟 D0(SCLK)
#define OLED_SDA            IOID_10     //SDA   D1(MOSI) 数据
#define OLED_RST            IOID_4      //_RES  hardware reset   复位
#define OLED_DC             IOID_26     //A0  H/L 命令数据选通端,H:数据,L:命令#define X_WIDTH             128
#define Y_WIDTH             64#define HAL_OLED_MAX_CHARS    16
#define HAL_OLED_MAX_BUF    25#define OLED_SCL_1()      PIN_setOutputValue(OLEDPinHandle, OLED_SCL, 1)
#define OLED_SCL_0()        PIN_setOutputValue(OLEDPinHandle, OLED_SCL, 0)
#define OLED_SDA_1()        PIN_setOutputValue(OLEDPinHandle, OLED_SDA, 1)
#define OLED_SDA_0()        PIN_setOutputValue(OLEDPinHandle, OLED_SDA, 0)
#define OLED_RST_1()        PIN_setOutputValue(OLEDPinHandle, OLED_RST, 1)
#define OLED_RST_0()        PIN_setOutputValue(OLEDPinHandle, OLED_RST, 0)
#define OLED_DC_1()         PIN_setOutputValue(OLEDPinHandle, OLED_DC, 1)
#define OLED_DC_0()         PIN_setOutputValue(OLEDPinHandle, OLED_DC, 0)#define LCD_SUPPORT            0/********************************************************************** LOCAL VARIABLES*/
/* Application OLED pin configuration table */
static PIN_Config OLEDPinTable[] = {OLED_SCL | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,OLED_SDA | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,OLED_RST | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,OLED_DC  | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,PIN_TERMINATE      // Terminate list
};/* Pin driver handle */
static PIN_Handle OLEDPinHandle = NULL;
static PIN_State OLEDPinState;/********************************************************************** LOCAL FUNCTIONS*/
#if LCD_SUPPORT
//16*16的点阵字体取模方式:共阴——列行式——逆向输出
static const unsigned char F16x16[] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*--  文字:  深  --*//*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/0x10,0x61,0x06,0xE0,0x00,0x26,0x22,0x1A,0x02,0xC2,0x0A,0x12,0x32,0x06,0x02,0x00,0x04,0xFC,0x03,0x20,0x20,0x11,0x11,0x09,0x05,0xFF,0x05,0x09,0x19,0x31,0x10,0x00,/*--  文字:  圳  --*//*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/0x10,0x10,0x10,0xFE,0x10,0x10,0xFE,0x00,0x00,0xFC,0x00,0x00,0x00,0xFE,0x00,0x00,0x08,0x08,0x04,0x47,0x24,0x18,0x07,0x00,0x00,0x1F,0x00,0x00,0x00,0x7F,0x00,0x00,/*--  文字:  市  --*//*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/0x04,0x04,0x04,0xE4,0x24,0x24,0x25,0xFE,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x00,0x00,0x10,0x20,0x1F,0x00,0x00,0x00,
};//8*16的点阵
static const unsigned char F8X16[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 00x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 10x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 20x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 30x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 40xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 50x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 60x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 70x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 80x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 90x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 100x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 110x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 120x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 130x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 140x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 150x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 160x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 170x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 180x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 190x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 200x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 210x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 220x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 230x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 240x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 250x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 260x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 270x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 280x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 290x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 300x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 310xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 320x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 330x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 340xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 350x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 360x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 370x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 380xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 390x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 400x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 410x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 420x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 430x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 440x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 450x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 460xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 470x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 480xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 490x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 500x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 510x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 520x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 530x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 540xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 550x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 560x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 570x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 580x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 590x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 600x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 610x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 620x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 630x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 640x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 650x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 660x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 670x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 680x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 690x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 700x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 710x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 720x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 730x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 740x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 750x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 760x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 770x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 780x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 790x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 800x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 810x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 820x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 830x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 840x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 850x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 860x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 870x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 880x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 890x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 900x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 910x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 920x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 930x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};
#endif//6*8的点阵
static const unsigned char F6x8[92][6] =
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 00x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 10x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 20x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 30x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 40x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 50x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 60x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 70x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 80x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 90x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 550x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};//字转数组
static void _itoa(unsigned int uiNum, unsigned char *buf, unsigned char uiRadix)
{unsigned char c, i;unsigned char *p, rst[32];p = rst;for (i = 0; i < 32; i++, p++){/* Isolate a digit */c = uiNum % uiRadix;/* Convert to Ascii */*p = c + ((c < 10) ? '0' : '7');uiNum /= uiRadix;if (!uiNum)break;}for (c = 0; c <= i; c++){/* Reverse character order */*buf++ = *p--;}*buf = '\0';
}//字转数组
static unsigned char * _ltoa(unsigned long l, unsigned char *buf, unsigned char radix)
{#if defined (__TI_COMPILER_VERSION)return ( (unsigned char*)ltoa( l, (char *)buf ) );
#elif defined( __GNUC__ )return ( (char*)ltoa( l, buf, radix ) );
#elseunsigned char tmp1[10] = "", tmp2[10] = "", tmp3[10] = "";unsigned short num1, num2, num3;unsigned char i;buf[0] = '\0';if ( radix == 10 ){num1 = l % 10000;num2 = (l / 10000) % 10000;num3 = (unsigned short)(l / 100000000);if (num3) _itoa(num3, tmp3, 10);if (num2) _itoa(num2, tmp2, 10);if (num1) _itoa(num1, tmp1, 10);if (num3){strcpy((char*)buf, (char const*)tmp3);for (i = 0; i < 4 - strlen((char const*)tmp2); i++)strcat((char*)buf, "0");}strcat((char*)buf, (char const*)tmp2);if (num3 || num2){for (i = 0; i < 4 - strlen((char const*)tmp1); i++)strcat((char*)buf, "0");}strcat((char*)buf, (char const*)tmp1);if (!num3 && !num2 && !num1)strcpy((char*)buf, "0");}else if ( radix == 16 ){num1 = l & 0x0000FFFF;num2 = l >> 16;if (num2) _itoa(num2, tmp2, 16);if (num1) _itoa(num1, tmp1, 16);if (num2){strcpy((char*)buf,(char const*)tmp2);for (i = 0; i < 4 - strlen((char const*)tmp1); i++)strcat((char*)buf, "0");}strcat((char*)buf, (char const*)tmp1);if (!num2 && !num1)strcpy((char*)buf, "0");}elsereturn NULL;return buf;
#endif
}/*********************OLED 延时1ms************************************/
static void OLED_DLY_Ms(unsigned int ms)
{                         unsigned int a;while(ms){a=1800;while(a--);ms--;}return;
}/*********************OLED 写数据************************************/
static void OLED_WrDat(unsigned char dat)
{unsigned char i=8, temp=0;OLED_DC_1();  for(i=0;i<8;i++) //鍙戦�佷竴涓叓浣嶆暟鎹�{OLED_SCL_0();  temp = dat&0x80;if (temp == 0){OLED_SDA_0();}else{OLED_SDA_1();}OLED_SCL_1();       dat<<=1;    }
} /*********************OLED 写命令************************************/
static void OLED_WrCmd(unsigned char cmd)
{unsigned char i=8, temp=0;OLED_DC_0();  for(i=0;i<8;i++) //鍙戦�佷竴涓叓浣嶆暟鎹�{ OLED_SCL_0(); temp = cmd&0x80;if (temp == 0){OLED_SDA_0();}else{OLED_SDA_1();}OLED_SCL_1();  cmd<<=1;;        }
}/*********************OLED 设置坐标************************************/
static void OLED_Set_Pos(unsigned char x, unsigned char y)
{ OLED_WrCmd(0xb0+y);OLED_WrCmd(((x&0xf0)>>4)|0x10);OLED_WrCmd((x&0x0f)|0x01);
} /*********************OLED 全屏************************************/
static void OLED_Fill(unsigned char bmp_dat)
{unsigned char y,x;for(y=0;y<8;y++){OLED_WrCmd(0xb0+y);OLED_WrCmd(0x01);OLED_WrCmd(0x10);for(x=0;x<X_WIDTH;x++)OLED_WrDat(bmp_dat);}
}/***************功能描述:行填充, y为页范围0~7****************/
static void OLED_FillLine(unsigned char y,unsigned char ch)
{unsigned char x;    OLED_WrCmd(0xb0+y);OLED_WrCmd(0x01);OLED_WrCmd(0x10); for(x=0;x<X_WIDTH;x++)OLED_WrDat(ch);
}/*********************OLED 复位************************************/
static void OLED_CLS(void)
{unsigned char y,x;    for(y=0;y<8;y++){OLED_WrCmd(0xb0+y);OLED_WrCmd(0x01);OLED_WrCmd(0x10); for(x=0;x<X_WIDTH;x++)OLED_WrDat(0);}
}/***************功能描述:显示6*8一组标准ASCII字符串    显示的坐标(x,y),y为页范围0~7****************/
static void OLED_P6x8Str(unsigned char x, unsigned char y,unsigned char ch[])
{unsigned char c=0,i=0,j=0;      while (ch[j]!='\0'){    c =ch[j]-32;if(x>126){x=0;y++;}OLED_Set_Pos(x,y);  if(c > 0 && c < 92){for(i=0;i<6;i++)     OLED_WrDat(F6x8[c][i]);  }x+=6;j++;}
}/***********功能描述:显示一行ascii 码?无显示的点阵显示黑色,     y为页的范围0~7*****************/
static void OLED_WriteLine(unsigned char line, const char *pText)
{OLED_FillLine(line, 0);                            //鍏堟妸杩欎竴琛屾樉绀烘垚榛戣壊OLED_P6x8Str(0, line, (unsigned char *)pText);
}#if LCD_SUPPORT
/*******************功能描述:显示8*16一组标准ASCII字符串     显示的坐标(x,y),y为页范围0~7****************/
static void OLED_P8x16Str(unsigned char x, unsigned char y,unsigned char ch[])
{unsigned char c=0,i=0,j=0;while (ch[j]!='\0'){    c =ch[j]-32;if(x>120){x=0;y++;}OLED_Set_Pos(x,y);    for(i=0;i<8;i++)     OLED_WrDat(F8X16[c*16+i]);OLED_Set_Pos(x,y+1);    for(i=0;i<8;i++)     OLED_WrDat(F8X16[c*16+i+8]);  x+=8;j++;}
}/*****************功能描述:显示16*16点阵  显示的坐标(x,y),y为页范围0~7****************************/
static void OLED_P16x16Ch(unsigned char x, unsigned char y, unsigned char N)
{unsigned char wm=0;unsigned int adder=32*N;  //      OLED_Set_Pos(x , y);for(wm = 0;wm < 16;wm++)  //             {OLED_WrDat(F16x16[adder]);    adder += 1;}      OLED_Set_Pos(x,y + 1); for(wm = 0;wm < 16;wm++) //         {OLED_WrDat(F16x16[adder]);adder += 1;}
}
#endif/********************************************************************** PUBLIC FUNCTIONS*/
/********************************************************************** @fn      Board_initOLED** @brief   Initialize OLED pins.** @param   none** @return  none*/
void Board_initOLED(void)
{/* Open LED pins */if(OLEDPinHandle == NULL){OLEDPinHandle = PIN_open(&OLEDPinState, OLEDPinTable);}//初始化OLED_SCL_1();OLED_RST_0();OLED_DLY_Ms(250);OLED_RST_1();   //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕  OLED_WrCmd(0xae);//--turn off oled panelOLED_WrCmd(0x00);//---set low column addressOLED_WrCmd(0x10);//---set high column addressOLED_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)OLED_WrCmd(0x81);//--set contrast control registerOLED_WrCmd(0xcf);// Set SEG Output Current BrightnessOLED_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常OLED_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常OLED_WrCmd(0xa6);//--set normal displayOLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)OLED_WrCmd(0x3f);//--1/64 dutyOLED_WrCmd(0xd3);//-set display offset    Shift Mapping RAM Counter (0x00~0x3F)OLED_WrCmd(0x00);//-not offsetOLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequencyOLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/SecOLED_WrCmd(0xd9);//--set pre-charge periodOLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 ClockOLED_WrCmd(0xda);//--set com pins hardware configurationOLED_WrCmd(0x12);OLED_WrCmd(0xdb);//--set vcomhOLED_WrCmd(0x40);//Set VCOM Deselect LevelOLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)OLED_WrCmd(0x02);//OLED_WrCmd(0x8d);//--set Charge Pump enable/disableOLED_WrCmd(0x14);//--set(0x10) disableOLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)OLED_WrCmd(0xaf);//--turn on oled panelOLED_Fill(0x00); //初始成黑屏//设置偏移值OLED_Set_Pos(0,0);
}/********************************************************************** @fn      OLED_writeValue** @brief   Write a value to the OLED.** @param   value  - value that will be displayed* @param   radix  - 8, 10, 16* @param   line - display options** @return  none*/
void OLED_writeValue(unsigned int value, const unsigned char radix, unsigned char line)
{unsigned char buf[HAL_OLED_MAX_BUF];_ltoa(value, &buf[0], radix);OLED_WriteLine(line, (char*)buf);
}/********************************************************************** @fn      OLED_writeString** @brief   Write a string on the OLED display.** @param   str - string to print* @param   line - line (page) to write (0-7)** @return  void*/
void OLED_writeString(char *str, unsigned char line)
{OLED_WriteLine(line, (char*)str);
}/********************************************************************** @fn      OLED_writeStringValue** @brief   Write a string and value on the OLED display.** @param   str - string to print* @param   value - value to print* @param   format - base of the value to print (2,8,16 etc)* @param   line - line (page) to write (0-7)** @return  none*/
void OLED_writeStringValue(char *str, unsigned int value, unsigned char format, unsigned char line)
{unsigned char tmpLen;unsigned char buf[HAL_OLED_MAX_BUF] = {0};tmpLen = (unsigned char)strlen((char*)str);memcpy(buf, str, tmpLen);buf[tmpLen] = ' ';_ltoa(value, &buf[tmpLen+1], format );OLED_WriteLine(line, (char*)buf);
}/********************************************************************** @fn      OLED_clearLine** @brief   Clear  lines if the OLED is on.** @param   line - line (page) to write (0-7)** @return  none*/
void OLED_clearLine(unsigned char line)
{OLED_FillLine(line, 0);
}

3.2 board_oled.h

#ifndef BOARD_OLED_H
#define BOARD_OLED_H#ifdef __cplusplus
extern "C" {#endif/********************************************************************** INCLUDES*//********************************************************************** EXTERNAL VARIABLES*//********************************************************************** CONSTANTS*//********************************************************************** TYPEDEFS*/
//LCD的可写行
typedef enum
{OLED_LINE0 = 0,OLED_LINE1,OLED_LINE2,OLED_LINE3,OLED_LINE4,OLED_LINE5,OLED_LINE6,OLED_LINE7,OLED_LINE_COUNT
}OLED_LINE;/********************************************************************** MACROS*//********************************************************************** API FUNCTIONS*//********************************************************************** @fn      Board_initOLED** @brief   Initialize OLED pins.** @param   none** @return  none*/
void Board_initOLED(void);/********************************************************************** @fn      OLED_writeValue** @brief   Write a value to the OLED.** @param   value  - value that will be displayed* @param   radix  - 8, 10, 16* @param   line - display options** @return  none*/
void OLED_writeValue(unsigned int value, const unsigned char radix, unsigned char line);/********************************************************************** @fn      OLED_writeString** @brief   Write a string on the OLED display.** @param   str - string to print* @param   line - line (page) to write (0-7)** @return  void*/
void OLED_writeString(char *str, unsigned char line);/********************************************************************** @fn      OLED_writeStringValue** @brief   Write a string and value on the OLED display.** @param   str - string to print* @param   value - value to print* @param   format - base of the value to print (2,8,16 etc)* @param   line - line (page) to write (0-7)** @return  none*/
void OLED_writeStringValue(char *str, unsigned int value, unsigned char format, unsigned char line);/********************************************************************** @fn      OLED_clearLine** @brief   Clear  lines if the OLED is on.** @param   line - line (page) to write (0-7)** @return  none*/
void OLED_clearLine(unsigned char line);/*********************************************************************
*********************************************************************/#ifdef __cplusplus
}
#endif#endif /* BOARD_OLED_H */

四、API调用

需包含头文件 board_oled.h

Board_initOLED

功能 初始化OLED引脚
函数定义 void Board_initOLED(void)
参数
返回

OLED_writeValue

功能 对OLED写入数值
函数定义 void OLED_writeValue(unsigned int value, const unsigned char radix, unsigned char line)
参数1 value:被显示的数值
参数2 radix:8, 10, 16进制
参数3 line:数值被显示所在的行数
返回

OLED_writeString

功能 对OLED写入字符串
函数定义 void OLED_writeString(char *str, unsigned char line)
参数1 str:被显示的字符串
参数2 line:数值被显示所在的行数
返回

OLED_writeStringValue

功能 对OLED写入字符串和值
函数定义 void OLED_writeStringValue(char *str, unsigned int value, unsigned char format, unsigned char line)
参数1 str:被显示的字符串
参数2 value:被显示的数值
参数3 format:8, 10, 16进制
参数4 line:数值被显示所在的行数
返回

OLED_clearLine

功能 清除所在行
函数定义 void OLED_clearLine(unsigned char line)
参数
返回

五、使用例子

1)添加头文件(例 multi_role.c 中)

#include "board_oled.h"

2)添加初始化代码(multi_role.c 的 multi_role_init 函数末尾中)

// 初始化OLED屏
Board_initOLED();

3)添加显示内容

OLED_writeString("Leung", OLED_LINE0); // 写字符串
OLED_writeValue(557278427, 10, OLED_LINE1); // 写数据
OLED_writeStringValue("day:", 31, 10, OLED_LINE2);// 写字符串+数据
OLED_clearLine(OLED_LINE3); // 清除该行

• 由 Leung 写于 2018 年 12 月 26 日

• 参考:【CC2640R2F】香瓜CC2640R2F之LCD

CC2640R2F学习笔记(2)——OLED屏使用相关推荐

  1. STM32学习笔记之OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  2. CC2640R2F学习笔记(一.开发环境)

    文章目录 前言 一.硬件 二.操作系统 三.SDK 四.CCS 前言 以下列出CC2640R2F学习笔记所基于的软.硬件平台,笔记的所有实验.代码都是在这些平台上来进行的. 一.硬件 开发板LAUNC ...

  3. CC2640R2F学习笔记(九.总结)

    文章目录 前言 正文 总结 前言 注意:本文章仅代表作者对开发CC2640的一些理解,并非权威,仅供参考,如有错误欢迎指正. 正文 本想用CC2640R2F开发一个小产品,看重它的是价格便宜,尤其是几 ...

  4. 51单片机学习笔记-12LCD1602液晶屏

    12 LCD1602液晶屏 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的G ...

  5. Android安全学习笔记1——锁屏密码方式

    前言 在Android安全学习中,我接触到第一个例子是锁屏密码.我们日常使用手机的时候使用最多的锁屏密码是怎么构成的?下面分享一下我接触到的知识. 锁屏密码的思考 为了安全,Android设备在解锁屏 ...

  6. CC2640R2F学习笔记(1)——搭建环境、编译烧写

    一.搭建环境 1.1 安装BLE5.0 协议栈 SDK 官网下载:http://www.ti.com/tool/download/SIMPLELINK-CC2640R2-SDK 百度网盘:https: ...

  7. CC2640R2F学习笔记(五.第一个程序:GPIO点灯)

    文章目录 前言 一.生成配置文件 二.导入工程"empty" 三.代码改动 四.实现点灯 前言 点灯似乎是所有MCU开发编写的第一个程序,使用CUBEMX来配置STM32初始化程序 ...

  8. CC2640R2F学习笔记(27)——ADC使用

    一.简介 CC2640R2F 的 ADC 是几位的.几个通道的? 12 位模数转换器 (ADC).200MSPS.8 通道模拟多路复用器. 使用的是什么参考源? 参考源有两种,一种是内部的固定 4.3 ...

  9. CC2640R2F学习笔记(二.gpiointerrupt例程解析)

    文章目录 前言 一.导入gpiointerrupt工程 二.主要文件功能 三.代码解析 1.main_tirtos.c 2.gpiointerrupt.c 四.实验现象 总结 参考 前言 gpioin ...

  10. CC2640R2F学习笔记(6)——UART串口使用

    一.硬件连接 串口 引脚 TXD DIO_2 RXD DIO_3 二.移植文件 链接:https://pan.baidu.com/s/1fE8XWgvdzYiF1bdUzTDxUg 提取码:r5s2 ...

最新文章

  1. 分布式K/V存储方案
  2. vue + element ui 的后台管理系统框架_从零开始搭建 VUE + Element UI后台管理系统框架...
  3. oracle创建表语句_利用FME去拼接SQL语句并创建表
  4. android多接口请求参数,okhttp3 使用json参数post方式请求接口数据(android)
  5. java简单单向链表_用java简单的实现单链表的基本操作
  6. 类型的取值范围_Java基础类型取值范围,从基础的理解加深记忆
  7. 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法
  8. TFS小记(3):建立团队项目
  9. 用于无人驾驶技术的车道线_自动驾驶汽车可用于查找车道的4种技术
  10. iOS关于上传iTunes store一直卡住终极解决方案
  11. PS制作一寸带白框的证件照
  12. 处理器核(core)、处理器(cpu)区别
  13. 【大厂直通车】哔哩哔哩日常实习_测开面经
  14. matlab求球的体积,【matlab计算不规则物体体积资讯】matlab计算不规则物体体积足球知识与常识 - 足球百科 - 599比分...
  15. PAT乙级--1033 旧键盘打字(测试点2,测试点4解决)
  16. Excel区间数据拆分
  17. android广告平台介绍
  18. 江苏省计算机高一考试试题,江苏省计算机等级考试试题参考
  19. 国产操作系统逐步强大,Linux操作系统成为主流
  20. PHP操作期数,期号的常用方法

热门文章

  1. 新浪OAuth客户端登陆另辟蹊径
  2. 对游戏编程开发的一点思考
  3. 东大22春领导科学与决策X《领导科学与决策》在线平时作业2题目非答案
  4. 使用FastReport进行基于富盛SBO程序开发框架的报表开发
  5. 小米电视联网后显示无法解析小米电视服务器,小米电视机功能详解 教你轻松使用...
  6. 使用AppNode部署IT资产管理平台(Chemex 3.2.0版本)- 肥仔Sam
  7. 推箱子游戏的java设计思路_基于Java推箱子游戏的设计与实现
  8. CodeForces 128A Statues 简单搜索
  9. 替换WIN键和Ctrl键
  10. 精彩回顾 | NDBC 2021华为参会回顾