LP-MSPM0L1306开发板试用体验 驱动OLED屏

[复制链接]
 楼主| lulugl 发表于 2023-10-17 20:44 | 显示全部楼层 |阅读模式
本帖最后由 lulugl 于 2023-10-17 20:45 编辑

#有奖活动# #申请原创#  @21小跑堂 @21ic小喇叭 @21ic小可爱 @21ic小可爱
OLED为常用的外设,主要用于显示功能,常用接口为I2C、SPI。而I2C只需要2线就可以实现,更为常见。I2C可以用软件模拟I2C以及硬件的I2C驱动。软件I2C可以灵活选择GPIO来实现,在不同的单片机中移方便,但是速度相比硬件i2c慢,占用资源多。而硬件I2C速度快,占用资源小,但是硬件I2C需要指的IO,而且在有些单片机硬件i2c的兼容性不是很好,移植性差。IO的选取,这次移植为硬件i2c驱动OLED屏。SDA选取PA10,SCL选取PA1。
【开发环境】
这次选用的开发环境为ccs 12.5为开发环境。
1b654c6c80fbf3d8c31b7f8a45b7f730
原先我开发的环境为keil版本,但是由于例程进入低功耗后,用keil下载会出现连接不上,为此我还发了一篇帖子: HYPERLINK "https://bbs.21ic.com/icview-3333184-1-1.html" 。
后面还是安装好ccs12.5后才起死回生,所以顺便就转移到ccs12.5的开发环境里面来。使用了两天后,感觉如果开发ti还是用ccs比较方便,他集成的sysconfig相比keil要方便,保存配置什么的也比keil+sysconfig来得方便。但是安装ccs需要一些耐心,一是下载安装包比较麻烦,在国内下载速度相当的慢。还有就是安装路径不能有中文等等。
【I2C驱动的配置与初始化】
配置I2C的驱动IO,MSPM0L1306这款芯片,配置i2cIO在sysconfi环境下特别的方便。我在这里是在adc12_sigle_conversion例程下添加的I2C的驱动。具体实现方便如下:
打开例程,后双击adc12_single_conversion_syscfg,打开sysconfig配置界面:
025af800a8ddbfbd08c0c94cb0b25bbc
添加i2c,按如下配置速度:
c79da6a79d94a948ba47a06bb1237b28
选择I2c的IO,SCL为PA1/2,SDA为PA10/14:
0c87410945763d71d24b2f74651cdcfa
保存后退出sysconfig,sysconfig自动更新了ti-msp-dl-config.h生成了I2C的宏定义:
80ab85337d2c9d26c4ed40d16354e1b9
在tim-msp-dl-config.c中初始化了i2c:
b7a576fbee72c13cab216157589f69ba
【移植OLED驱动】
在上面的初始化好I2C后我们就可以移植OLED的驱动到开发板上面,具体实现步骤如下:
在工程目录下面新建oled.h、oled.c、codetab.h三个空白文件。三个文件分别为oled.h为ssd1306驱动的头文件,oled.c为ssd1306的驱动c源文件,codetab.h为字库文件。
首先复制字库文件进来,代码如下:
  1. #ifndef __CODETAB_H__
  2. #define __CODETAB_H__

  3. unsigned char F16X16[] =
  4. {
  5.     0x00,0xFC,0x04,0x04,0xFC,0x00,0x10,0xD8,0x14,0x13,0xF0,0x14,0x18,0x30,0x00,0x00,
  6.     0x00,0x0F,0x04,0x04,0x0F,0x08,0x0A,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x08,0x00,//"哞",0

  7.     0x00,0xFC,0x04,0x04,0xFC,0x00,0x10,0xD8,0x14,0x13,0xF0,0x14,0x18,0x30,0x00,0x00,
  8.     0x00,0x0F,0x04,0x04,0x0F,0x08,0x0A,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x08,0x00,//"哞",1
  9. };

  10. const unsigned char F6x8[][6] =
  11. {
  12.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
  13.     0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
  14.     0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
  15.     0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
  16.     0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
  17.     0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
  18.     0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
  19.     0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
  20.     0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
  21.     0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
  22.     0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
  23.     0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
  24.     0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
  25.     0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
  26.     0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
  27.     0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
  28.     0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
  29.     0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
  30.     0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
  31.     0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
  32.     0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
  33.     0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
  34.     0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
  35.     0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
  36.     0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
  37.     0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
  38.     0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
  39.     0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
  40.     0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
  41.     0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
  42.     0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
  43.     0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
  44.     0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
  45.     0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
  46.     0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
  47.     0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
  48.     0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
  49.     0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
  50.     0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
  51.     0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
  52.     0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
  53.     0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
  54.     0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
  55.     0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
  56.     0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
  57.     0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
  58.     0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
  59.     0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
  60.     0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
  61.     0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
  62.     0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
  63.     0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
  64.     0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
  65.     0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
  66.     0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
  67.     0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
  68.     0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
  69.     0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
  70.     0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
  71.     0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
  72.     0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
  73.     0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
  74.     0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
  75.     0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
  76.     0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
  77.     0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
  78.     0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
  79.     0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
  80.     0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
  81.     0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
  82.     0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
  83.     0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
  84.     0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
  85.     0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
  86.     0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
  87.     0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
  88.     0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
  89.     0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
  90.     0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
  91.     0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
  92.     0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
  93.     0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
  94.     0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
  95.     0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
  96.     0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
  97.     0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
  98.     0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
  99.     0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
  100.     0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
  101.     0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
  102.     0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
  103.     0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
  104. };
  105. const unsigned char F8X16[]=
  106. {
  107.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
  108.   0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
  109.   0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
  110.   0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
  111.   0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
  112.   0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
  113.   0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
  114.   0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
  115.   0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
  116.   0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
  117.   0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
  118.   0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
  119.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
  120.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
  121.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
  122.   0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
  123.   0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
  124.   0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
  125.   0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
  126.   0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
  127.   0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
  128.   0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
  129.   0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
  130.   0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
  131.   0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
  132.   0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
  133.   0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
  134.   0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
  135.   0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
  136.   0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
  137.   0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
  138.   0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
  139.   0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//[url=home.php?mod=space&uid=72445]@[/url] 32
  140.   0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  141.   0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  142.   0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  143.   0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  144.   0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  145.   0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  146.   0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  147.   0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  148.   0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  149.   0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  150.   0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  151.   0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  152.   0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  153.   0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  154.   0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  155.   0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  156.   0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  157.   0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  158.   0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  159.   0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  160.   0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  161.   0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  162.   0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  163.   0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  164.   0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  165.   0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
  166.   0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
  167.   0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
  168.   0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
  169.   0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
  170.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
  171.   0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
  172.   0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
  173.   0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
  174.   0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
  175.   0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
  176.   0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
  177.   0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
  178.   0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
  179.   0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
  180.   0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
  181.   0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
  182.   0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
  183.   0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
  184.   0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
  185.   0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
  186.   0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
  187.   0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
  188.   0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
  189.   0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
  190.   0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
  191.   0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
  192.   0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
  193.   0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
  194.   0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
  195.   0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
  196.   0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
  197.   0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
  198.   0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
  199.   0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
  200.   0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
  201.   0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
  202. };

  203. unsigned char BMP1[] =
  204. {
  205.      0X22,0X01,0X80,0X00,0X2F,0X00,
  206. 0XFE,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  207. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  208. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  209. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  210. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  211. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  212. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  213. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFE,
  214. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  215. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFB,0X7B,0X9B,0XF7,0XF7,
  216. 0XFF,0XFF,0XEF,0XEF,0XF7,0XD7,0XFF,0XBF,0X6F,0XFF,0XFF,0XDF,0XFF,0XBF,0XFF,0XFF,
  217. 0XBF,0XFF,0XBF,0XBF,0XBF,0XFF,0XDF,0XDF,0XDF,0X9F,0XAF,0XBF,0XB7,0XBF,0XFF,0XEF,
  218. 0X2F,0XF7,0XFB,0XFF,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  219. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  220. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  221. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  222. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  223. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XC1,0XBF,0XFF,0X7F,0XFF,
  224. 0XFF,0X7F,0X7F,0XEF,0XD7,0XAF,0XD7,0XF3,0XF3,0XF6,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,
  225. 0XFF,0XFE,0XFC,0XFE,0XFF,0XFF,0XFD,0XF8,0X0C,0XF6,0XFE,0XFE,0XF5,0XED,0XDF,0XE7,
  226. 0XF7,0XFB,0XF6,0XFF,0XD9,0XED,0XE9,0X1B,0X6F,0X9F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  227. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7F,0X7F,0XFF,0XFF,
  228. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  229. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  230. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  231. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF3,0XF5,0XF7,0XF7,
  232. 0XF7,0XF7,0XFF,0XEF,0XEF,0XFF,0XFF,0XDF,0XBF,0XBF,0X7F,0XFF,0XFF,0XC7,0X7B,0XFB,
  233. 0XFB,0XF6,0XF6,0X0F,0X87,0X85,0X07,0X11,0X1A,0X3B,0X3F,0X79,0X7A,0XFB,0XFC,0XF7,
  234. 0XA7,0XA7,0X6B,0XAF,0XEB,0XFA,0X94,0XE3,0XF6,0XB7,0XC7,0XD7,0X57,0X77,0XFF,0X7F,
  235. 0XFF,0XBF,0X7F,0XF7,0X27,0XF3,0X17,0XD5,0X8F,0XCF,0X9A,0X3C,0XFE,0XFF,0XFE,0XF7,
  236. 0XFF,0XFF,0XDF,0XDD,0XED,0XED,0XFB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  237. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  238. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  239. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  240. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFF,0XFD,0XFC,
  241. 0XFD,0XFF,0XFB,0XFB,0XFE,0XFD,0XF5,0XF7,0XF7,0XF4,0XFA,0XFB,0XFF,0XFD,0XFD,0XFF,
  242. 0XFE,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFE,0XD7,0XFF,0XFF,
  243. 0XF0,0XF6,0XFF,0XFF,0XFE,0XFE,0XF9,0XFF,0XFB,0XF9,0XF1,0XE2,0XFD,0XFF,0XF7,0XFF,
  244. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  245. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  246. 0X3F,0X3F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,
  247. 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,
  248. 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,
  249. 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,
  250. 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,
  251. 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,
  252. 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,
  253. 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X3F,0X3F,
  254. };

  255. #endif

创建oled.h头文件,在头文件中我们需要先引用ti_msp_dl_config.h这个文件,然后声明oled.c的相关功能软件,其内容如下:
  1. #ifndef __OLED_H__

  2. #define __OLED_H__

  3. #include"ti_msp_dl_config.h"

  4. voidOLED_I2C_Init(void);

  5. intI2C_WriteByte(uint8_t addr,uint8_t data);

  6. voidWriteCmd(unsignedchar I2C_Command);

  7. voidWriteData(unsignedchar I2C_Data);

  8. voidOLED_Init(void);

  9. voidOLED_SetPos(unsignedchar x,unsignedchar y);

  10. voidOLED_Fill(unsignedchar Fill_Data);

  11. voidOLED_CLS(void);

  12. voidOLED_ON(void);

  13. voidOLED_OFF(void);

  14. voidOLED_ShowStr(unsignedchar x,unsignedchar y,unsignedchar ch[],unsignedchar TextSize);

  15. voidOLED_ShowCN(unsignedchar x,unsignedchar y,unsignedchar N);

  16. voidOLED_ShowBMP(unsignedchar x0,unsignedchar y0,unsignedchar x1,unsignedchar y1,unsignedchar BMP[]);

  17. #endif

现在到了最关键的ssd1306的向寄存器写入一个byte的功能,首先我们声明I2C从机(oled)地址,特别注意的是,这里我们要声明为0x3C(有些单片机,他send7bitaddress 时需要定义为0x78),这次我移植时先定义了0x78结果发出的地址信息为0xF0后面调整为0x3c才正常。
  1. #define OLED_ADDR 0x3C

然后我们构建writeByte函数。我们使用的i2c传输函数为fifo发送,其函数原型为:
  1. uint16_t DL_I2C_fillControllerTXFIFO(

  2. I2C_Regs *i2c, uint8_t *buffer, uint16_t count);

所以我们在向ssd1306写入一个byte的函数中首先要组建一个数组buff用于组装fifo。
  1. uint8_t buff[2] = {0};

  2. buff[0] = addr;

  3. buff[1] = data;

然后发送时,先判断I2C是否为空闲状态:
  1. /* Wait for I2C to be Idle */

  2. while (!(

  3. DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE))

  4. ;

然后我们向总线发送从机地址:
  1. /* Send the packet to the controller.

  2. * This function will send Start + Stop automatically.

  3. */

  4. DL_I2C_startControllerTransfer(I2C_0_INST, OLED_ADDR,

  5. DL_I2C_CONTROLLER_DIRECTION_TX, 2);

再次我们发送一个数组:
  1. DL_I2C_fillControllerTXFIFO(I2C_0_INST, &buff[0], 2);

然后等待发送完成:
  1. /* Poll until the Controller writes all bytes */

  2. while (DL_I2C_getControllerStatus(I2C_0_INST) &

  3. DL_I2C_CONTROLLER_STATUS_BUSY_BUS)

  4. ;

最后我们判断是否有错误发生:
  1. /* Trap if there was an error */

  2. if (DL_I2C_getControllerStatus(I2C_0_INST) &

  3. DL_I2C_CONTROLLER_STATUS_ERROR) {

  4. /* LED will remain high if there is an error */

  5. __BKPT(0);

  6. }

至此我们完成了向ssd1306指定寄存器地址发送一个byte的功能,后面的函数就不需要修改,其完整代码如下:
  1. #include "oled.h"
  2. #include "ti_msp_dl_config.h"
  3. #include "codetab.h"

  4. #define OLED_ADDR   0x3C

  5. void OLED_I2C_Init(void)
  6. {

  7. }

  8. //向OLED寄存器地址写一个byte的数据
  9. int I2C_WriteByte(uint8_t addr,uint8_t data)
  10. {
  11.   uint8_t buff[2] = {0};
  12.   buff[0] = addr;
  13.   buff[1] = data;
  14.   /* Wait for I2C to be Idle */
  15.   while (!(
  16.             DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE))
  17.             ;

  18.         /* Send the packet to the controller.
  19.          * This function will send Start + Stop automatically.
  20.          */
  21.         DL_I2C_startControllerTransfer(I2C_0_INST, OLED_ADDR,
  22.             DL_I2C_CONTROLLER_DIRECTION_TX, 2);
  23.         DL_I2C_fillControllerTXFIFO(I2C_0_INST, &buff[0], 2);
  24.       /* Poll until the Controller writes all bytes */
  25.       while (DL_I2C_getControllerStatus(I2C_0_INST) &
  26.                      DL_I2C_CONTROLLER_STATUS_BUSY_BUS)
  27.                   ;

  28.       /* Trap if there was an error */
  29.       if (DL_I2C_getControllerStatus(I2C_0_INST) &
  30.           DL_I2C_CONTROLLER_STATUS_ERROR) {
  31.           /* LED will remain high if there is an error */
  32.           __BKPT(0);
  33.       }
  34.     return 0;
  35. }



  36. //写指令
  37. void WriteCmd(unsigned char I2C_Command)
  38. {
  39.         I2C_WriteByte(0x00,I2C_Command);
  40. }

  41. //写数据
  42. void WriteData(unsigned char I2C_Data)
  43. {
  44.         I2C_WriteByte(0x40,I2C_Data);
  45. }

  46. //厂家初始化代码
  47. void OLED_Init(void)
  48. {
  49.     OLED_I2C_Init();
  50.         delay_cycles(16000000);
  51.         WriteCmd(0xAE); //display off
  52.         WriteCmd(0x20); //Set Memory Addressing Mode
  53.         WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
  54.         WriteCmd(0xb0); //Set Page Start Address for Page Addressing Mode,0-7
  55.         WriteCmd(0xc8); //Set COM Output Scan Direction
  56.         WriteCmd(0x00); //---set low column address
  57.         WriteCmd(0x10); //---set high column address
  58.         WriteCmd(0x40); //--set start line address
  59.         WriteCmd(0x81); //--set contrast control register
  60.         WriteCmd(0xff); //áá?èμ÷?ú 0x00~0xff
  61.         WriteCmd(0xa1); //--set segment re-map 0 to 127
  62.         WriteCmd(0xa6); //--set normal display
  63.         WriteCmd(0xa8); //--set multiplex ratio(1 to 64)
  64.         WriteCmd(0x3F); //
  65.         WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
  66.         WriteCmd(0xd3); //-set display offset
  67.         WriteCmd(0x00); //-not offset
  68.         WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency
  69.         WriteCmd(0xf0); //--set divide ratio
  70.         WriteCmd(0xd9); //--set pre-charge period
  71.         WriteCmd(0x22); //
  72.         WriteCmd(0xda); //--set com pins hardware configuration
  73.         WriteCmd(0x12);
  74.         WriteCmd(0xdb); //--set vcomh
  75.         WriteCmd(0x20); //0x20,0.77xVcc
  76.         WriteCmd(0x8d); //--set DC-DC enable
  77.         WriteCmd(0x14); //
  78.         WriteCmd(0xaf); //--turn on oled panel

  79. }

  80. //设置光标起始坐标(x,y)
  81. void OLED_SetPos(unsigned char x,unsigned char y)
  82. {
  83.         WriteCmd(0xb0+y);
  84.         WriteCmd( (x & 0xf0) >> 4 | 0x10 );
  85.         WriteCmd( (x & 0x0f) | 0x01 );
  86. }

  87. //填充整个屏幕
  88. void OLED_Fill(unsigned char Fill_Data)
  89. {
  90.         unsigned char m,n;

  91.         for(m=0;m<8;m++)
  92.         {
  93.                 WriteCmd(0xb0+m);
  94.                 WriteCmd(0x00);
  95.                 WriteCmd(0x10);

  96.                 for(n=0;n<128;n++)
  97.                 {
  98.                         WriteData(Fill_Data);
  99.                 }
  100.         }
  101. }

  102. //清屏
  103. void OLED_CLS(void)
  104. {
  105.         OLED_Fill(0x00);
  106. }

  107. //将OLED从休眠中唤醒
  108. void OLED_ON(void)
  109. {
  110.         WriteCmd(0xAF);
  111.         WriteCmd(0x8D);
  112.         WriteCmd(0x14);
  113. }

  114. //让OLED休眠 -- 休眠模式下,OLED功耗不到10uA
  115. void OLED_OFF(void)
  116. {
  117.         WriteCmd(0xAE);
  118.         WriteCmd(0x8D);
  119.         WriteCmd(0x10);
  120. }

  121. void OLED_ShowStr(unsigned char x,unsigned char y,unsigned char ch[],unsigned char TextSize)
  122. {
  123.         unsigned char c = 0,i = 0,j = 0;

  124.         switch(TextSize)
  125.         {
  126.             case 1:
  127.             {
  128.                     while(ch[j] != '\0')
  129.                     {
  130.                             c = ch[j] - 32;
  131.                             if(x>126)
  132.                             {
  133.                                     x = 0;
  134.                                     y++;
  135.                             }

  136.                             OLED_SetPos(x,y);

  137.                             for(i=0;i<6;i++)
  138.                             {
  139.                                     WriteData(F6x8[c][i]);
  140.                             }
  141.                             x+=6;
  142.                             j++;
  143.                     }
  144.             }
  145.             break;

  146.             case 2:
  147.             {
  148.                     while(ch[j] != '\0')
  149.                     {
  150.                             c = ch[j] - 32;

  151.                             if(x>120)
  152.                             {
  153.                                     x = 0;
  154.                                     y++;
  155.                             }

  156.                             OLED_SetPos(x,y);

  157.                             for(i=0;i<8;i++)
  158.                             {
  159.                                     WriteData(F8X16[c*16+i]);
  160.                             }

  161.                             OLED_SetPos(x,y+1);

  162.                             for(i=0;i<8;i++)
  163.                             {
  164.                                     WriteData(F8X16[c*16+i+8]);
  165.                             }
  166.                             x+=8;
  167.                             j++;
  168.                     }
  169.             }
  170.             break;
  171.         }
  172. }

  173. void OLED_ShowCN(unsigned char x,unsigned char y,unsigned char N)
  174. {
  175.         unsigned char i = 0;
  176.         unsigned char addr = 32*N;

  177.         OLED_SetPos(x,y);

  178.         for(i=0;i<16;i++)
  179.         {
  180.                 WriteData(F16X16[addr]);
  181.                 addr += 1;
  182.         }

  183.         OLED_SetPos(x,y+1);

  184.         for(i=0;i<16;i++)
  185.         {
  186.                 WriteData(F16X16[addr]);
  187.                 addr += 1;
  188.         }
  189. }

  190. void OLED_ShowBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
  191. {
  192.         unsigned char x,y;
  193.         unsigned int j = 0;

  194.         if(y1 % 8 == 0)
  195.         {
  196.                 y = y1 / 8;
  197.         }
  198.         else
  199.         {
  200.                 y = y1 / 8+1;
  201.         }

  202.         for(y=y0;y<y1;y++)
  203.         {
  204.                 OLED_SetPos(x0,y);

  205.                 for(x=x0;x<x1;x++)
  206.                 {
  207.                         WriteData(BMP1[j++]);
  208.                 }
  209.         }
  210. }





在主函数主我们先添加oled.h的引用然后初始化OLED,清屏后向OLED写入helloworld的字符串。
  1. intmain(void)

  2. {

  3. SYSCFG_DL_init();

  4. OLED_Init();

  5. OLED_CLS();

  6. OLED_ShowStr(10,0,(unsignedchar*) "HELLO WORLD",2);

  7. OLED_ShowStr(4,2,(unsignedchar*) "LP-MSPM0L1306",2);

  8. OLED_ShowStr(0,4,(unsignedchar*) "21IC 2023-10-17",2);

实验效果:
2cb4bf10907824964f17ff717af2e84f
【心得体会】
Ti 在开发资料上可以说是非常的丰富,提供的开发环境也是非常多,比如keil、IAR、vscode,特别是他们的家ccs,结合起来是非常的好用。
【建议】
在keil上的有些例程下载后会出现再次下载就报错的问题,这方面Ti没有在例程中提醒用户,如果遇到经验不丰富的客户会认会是器件的问题。**在例程中提醒客户,在开发调试可增加条件编译,加入一定时长的延时,避免上电就进入睡眠,而造成keil环境下载固件出错的BUG。


xyz549040622 发表于 2023-10-31 21:35 | 显示全部楼层
在开发调试可增加条件编译,加入一定时长的延时,避免上电就进入睡眠,而造成keil环境下载固件出错的BUG。
是的,MDK下下载出错就是这个问题导致的,换CCS下载就方便很多了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

180

主题

830

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部