MSP430G2553驱动0.96英寸OLED(硬件iic)

1.前言

最近需要用MSP430单片机做一个大作业,需要用到OLED模块,在这里记录一下

本篇文章主要讲解MSP430硬件iic的配置和OLED函数的调用,不会详细讲解OLED显示原理(其实就是江科大的OLED模块如何移植到msp430上).OLED显示原理以及底层函数讲解请参考其他文章

2.MSP430硬件iic

MSP430G2553的硬件iic是由USI模块提供的。USI 模块提供支持同步串行通信的基本功能性。在其最简单的形式中, 它是一个可被用于输出数据帧的 8 位或16位移位寄存器, 或者当与最少软件组合使用时, 它可执行串行通信。此外, USI 包括简化 SPI 和 I2C 通信的内置硬件功能性。 USI 模块还包括中断来进一步减少针对串行通信和保持 MSP430 超低功耗功能所需软件开销。MSP430G2553上有USCI_A 和 USCI_B,其中IIC通信部分是USCI_B模块支持的

3.寄存器介绍

我们以USCI_B0为例,介绍一下我们所用的寄存器

(1)UCBxCTL0和UCBxCTL1

这两个寄存器主要用于工作模式的配置

对于UCBxCTL0,我们需要配置的有UCSLA10(从设备的地址位数设置为7位),UCMST(配置为主器件模式)UCMODEX(配置为IIC模式),UCSYNC(配置为同步模式)

对于UCBxCTL1,则主要关注UCSSELX(选择合适的时钟源,我这里选择SMCLK,UCSWRST(复位USCL模块)

(2)UCBXBR0和UCBXBR1

这个两个寄存器主要是对输入时钟频率进行分屏,从而获得合适的传输速率,我在这里SMCLK选择1MHZ,所以获得100KHZ的标准速率,设置UCBXBR0=10,UCBXBR1=0即可

(3)UCBxRXBUF和UCBxTXBUF

这两个寄存器用于存放我们需要发送和接受的数据。

(4)UCBxI2CSA

这个寄存器用于选择从设备地址,我们在发送数据前,需要向这个寄存器写入地址来选择从设备

(5)IFG2

我们常用这个寄存器来检测发送和接收的情况

4.端口配置以及数据收发

(1)端口初始化

我们先看初始化函数,首先手册上有这么一段备注

这段备注的大致意思时,我们在对模块进行配置时,需要先对UCSWRST寄存器置位,配置完成后再通过软件清除。这样我们就可以编写IIC的初始化代码

在mian函数中,我们先设置SMCLK也就是DCO的时钟频率(我没有接外部晶振)

cpp 复制代码
BCSCTL1 = CALBC1_1MHZ;   // 设置 DCO 范围为 1MHz(需从芯片信息段加载校准值)
DCOCTL = CALDCO_1MHZ;     // 设置 DCO 频率为 1MHz
cpp 复制代码
void I2C_Init()
{
    P1SEL|=(BIT6+BIT7);              
    P1SEL2|=(BIT6+BIT7);                //配置硬件为第三功能(USI)
    UCB0CTL1|=UCSWRST;                   //置位UCSWRST,进行端口配置
    UCB0CTL0=UCMST+UCMODE_3+UCSYNC;    //选择IIC 主器件,同步模式
    UCB0CTL1|=UCSSEL_2+UCSWRST;      // 保持复位状态
    UCB0BR0 = 10;             // 分频系数整数部分 (100kHZ)
    UCB0BR1 = 0;             // 分频系数高位(未使用)
    UCB0CTL0 &= ~UCSLA10; // 7位地址模式
    UCB0I2CSA = (0x78>>1);        // 设置从机地址(后续通信时需修改)
    UCB0CTL1&=~UCSWRST;    // 退出复位模式,启用 I2C 模块
}

碎碎念:IIC从设备地址需要写入七位地址,但是江科大OLED的地址其实是留出读写位的8位地址,所以我们再设置的时候需要右移位

(2)发送命令

在手册中有这样的信息

所以我这里再发送起始信号后 先检测一下CBXTXIFG是否被置位

cpp 复制代码
void OLED_WriteCommand(unsigned char dat)
{
    while(UCB0CTL1&UCTXSTP);        //等待上一个数据发送完成
    UCB0I2CSA = 0x78>>1;            //设置从设备地址
    UCB0CTL1|=UCTR;                 //选择发送模式
    UCB0CTL1|=UCTXSTT;              //发出起始条件
    while(!(IFG2&UCB0TXIFG));
    UCB0TXBUF=0x00;                //发送写命令
    while((IFG2&UCB0TXIFG)==0);    //等待数据发送完成
    UCB0TXBUF=dat;                 //传输命令
    while((IFG2&UCB0TXIFG)==0);
    UCB0CTL1 |= UCTXSTP;           // 发送停止信号
    while(UCB0CTL1&UCTXSTP);       // 等待发送完成

}

(3)发送数据

其实和发送命令方法一样就是0x00改为0x40

cpp 复制代码
void OLED_WriteCommand(unsigned char dat)
{
    while(UCB0CTL1&UCTXSTP);        //等待上一个数据发送完成
    UCB0I2CSA = 0x78>>1;            //设置从设备地址
    UCB0CTL1|=UCTR;                 //选择发送模式
    UCB0CTL1|=UCTXSTT;              //发出起始条件
    while(!(IFG2&UCB0TXIFG));
    UCB0TXBUF=0x40;                //发送写命令
    while((IFG2&UCB0TXIFG)==0);    //等待数据发送完成
    UCB0TXBUF=dat;                 //传输命令
    while((IFG2&UCB0TXIFG)==0);
    UCB0CTL1 |= UCTXSTP;           // 发送停止信号
    while(UCB0CTL1&UCTXSTP);       // 等待发送完成

}

5.完整代码

我们端口配置到这里就结束了 接下来的任务就是将江科大OLED代码中发送命令和数据的函数替换位上述函数即可。我这里采用非缓冲区的方式(MSP430G2553没有那么大的RAM来使用缓冲区)

这里就选择几个函数,如果有需要的话,将江科大的代码直接拉过来就行

OLED.c

cpp 复制代码
/*
 * oled.c
 *
 *  Created on: 2025年4月30日
 *      Author: 19594
 */
#include <msp430.h>
#include "OLED.h"
#include "OLED_Data.h"
#include "stdint.h"
void I2C_Init()
{
    P1SEL|=(BIT6+BIT7);
    P1SEL2|=(BIT6+BIT7);
    UCB0CTL1|=UCSWRST;
    UCB0CTL0=UCMST+UCMODE_3+UCSYNC;
    UCB0CTL1|=UCSSEL_2+UCSWRST;      // 保持复位状态
    UCB0BR0 = 10;             // 分频系数整数部分
    UCB0BR1 = 0;             // 分频系数高位(未使用)
    UCB0CTL0 &= ~UCSLA10; // 7位地址模式
    UCB0I2CSA = (0x78>>1);        // 设置从机地址(后续通信时需修改)
    UCB0CTL1&=~UCSWRST;    // 退出复位模式,启用 I2C 模块
}

void OLED_WriteData(unsigned char dat)
{
    while(UCB0CTL1&UCTXSTP);
    UCB0I2CSA = 0x78>>1;
    UCB0CTL1|=UCTR;
    UCB0CTL1|=UCTXSTT;
    while(!(IFG2&UCB0TXIFG));
    UCB0TXBUF=0x40;
    while((IFG2&UCB0TXIFG)==0);
    UCB0TXBUF=dat;
    while((IFG2&UCB0TXIFG)==0);
    UCB0CTL1 |= UCTXSTP;
    while(UCB0CTL1&UCTXSTP);       // 等待发送完成
}

unsigned char OLED_WriteCommand(unsigned char dat)
{
    while(UCB0CTL1&UCTXSTP);
    UCB0I2CSA = 0x78>>1;
    UCB0CTL1|=UCTR;
    UCB0CTL1|=UCTXSTT;
    while(!(IFG2&UCB0TXIFG));
    UCB0TXBUF=0x00;
    while((IFG2&UCB0TXIFG)==0);
    UCB0TXBUF=dat;
    while((IFG2&UCB0TXIFG)==0);
    UCB0CTL1 |= UCTXSTP;
    while(UCB0CTL1&UCTXSTP);       // 等待发送完成
    return 0;
}
void OLED_Init()
{
    OLED_WriteCommand(0xAE);    //设置显示开启/关闭,0xAE关闭,0xAF开启

    OLED_WriteCommand(0xD5);    //设置显示时钟分频比/振荡器频率
    OLED_WriteCommand(0x80);    //0x00~0xFF

    OLED_WriteCommand(0xA8);    //设置多路复用率
    OLED_WriteCommand(0x3F);    //0x0E~0x3F

    OLED_WriteCommand(0xD3);    //设置显示偏移
    OLED_WriteCommand(0x00);    //0x00~0x7F

    OLED_WriteCommand(0x40);    //设置显示开始行,0x40~0x7F

    OLED_WriteCommand(0xA1);    //设置左右方向,0xA1正常,0xA0左右反置

    OLED_WriteCommand(0xC8);    //设置上下方向,0xC8正常,0xC0上下反置

    OLED_WriteCommand(0xDA);    //设置COM引脚硬件配置
    OLED_WriteCommand(0x12);

    OLED_WriteCommand(0x81);    //设置对比度
    OLED_WriteCommand(0xCF);    //0x00~0xFF

    OLED_WriteCommand(0xD9);    //设置预充电周期
    OLED_WriteCommand(0xF1);

    OLED_WriteCommand(0xDB);    //设置VCOMH取消选择级别
    OLED_WriteCommand(0x30);

    OLED_WriteCommand(0xA4);    //设置整个显示打开/关闭

    OLED_WriteCommand(0xA6);    //设置正常/反色显示,0xA6正常,0xA7反色

    OLED_WriteCommand(0x8D);    //设置充电泵
    OLED_WriteCommand(0x14);

    OLED_WriteCommand(0xAF);    //开启显示
}
void OLED_SetCursor(uint8_t page,uint8_t x)
{
    OLED_WriteCommand(0xB0 | page);
    OLED_WriteCommand(0x10 | ((x & 0xF0) >> 4));
    OLED_WriteCommand(0x00 | (x & 0x0F));
}
void OLED_Clear()
{
    unsigned char i,j;
    for(i=0;i<8;i++)
    {
        for(j=0;j<128;j++)
        {
            OLED_SetCursor(i,j);
            OLED_WriteData(0x00);
        }
    }
}
void OLED_ShowChar(unsigned char x,unsigned char y,char Char,unsigned char FontSize)
{
    unsigned char i;
    if(FontSize==6)
    {
        OLED_SetCursor(y, x);
        for(i=0;i<6;i++)
        {
            OLED_WriteData(OLED_F6x8[Char-' '][i]);
        }
    }
    if(FontSize)
    {
        OLED_SetCursor(y, x);
        for(i=0;i<8;i++)
        {
            OLED_WriteData(OLED_F8x16[Char-' '][i]);
        }
        OLED_SetCursor(y+1, x);
        for(i=0;i<8;i++)
        {
            OLED_WriteData(OLED_F8x16[Char-' '][i+8]);
        }
    }
}
void OLED_ShowString(unsigned char x,unsigned char y,char *String,unsigned char FontSize)
{
    unsigned char i;
    for(i=0;String[i]!='\0';i++)
    {
        OLED_ShowChar(x+FontSize*i,y,String[i],FontSize);
    }
}
uint32_t OLED_Pow(unsigned char x,unsigned char y)
{
    uint32_t result=1;
    while(y--)
    {
        result*=x;
    }
    return result;
}
void OLED_ShowNum(uint8_t X, uint8_t Y, uint32_t Number, uint8_t Length, uint8_t FontSize)
{
    uint8_t i;
    for (i = 0; i < Length; i++)
    {
        OLED_ShowChar(X + i * FontSize, Y, Number / OLED_Pow(10, Length - i - 1) % 10 + '0', FontSize);
    }
}
void OLED_ShowHexNum(uint8_t X, uint8_t Y, uint32_t Number, uint8_t Length, uint8_t FontSize)
{
    uint8_t i, SingleNumber;
    for (i = 0; i < Length; i++)        //遍历数字的每一位
    {
        SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16;

        if (SingleNumber < 10)          //单个数字小于10
        {

            OLED_ShowChar(X + i * FontSize, Y, SingleNumber + '0', FontSize);
        }
        else                            //单个数字大于10
        {
            OLED_ShowChar(X + i * FontSize, Y, SingleNumber - 10 + 'A', FontSize);
        }
    }
}

OLED.h

cpp 复制代码
/*
 * oled.h
 *
 *  Created on: 2025年4月30日
 *      Author: 19594
 */

#ifndef OLED_H_
#define OLED_H_
#include "stdint.h"

#define OLED_8X16               8
#define OLED_6X8                6

void OLED_Init();
void OLED_SetCursor(uint8_t page,uint8_t x);
void I2C_Init();
void OLED_Clear();
void OLED_ShowChar(unsigned char x,unsigned char y,char Char,unsigned char FontSize);
void OLED_ShowString(unsigned char x,unsigned char y,char *String,unsigned char FontSize);
void OLED_ShowNum(uint8_t X, uint8_t Y, uint32_t Number, uint8_t Length, uint8_t FontSize);
void OLED_ShowHexNum(unsigned char X, unsigned char Y, uint32_t Number, uint8_t Length, uint8_t FontSize);

#endif /* OLED_H_ */

OLED_Data.c

cpp 复制代码
/*
 * OLED_Data.c
 *
 *  Created on: 2025年5月2日
 *      Author: 19594
 */
const unsigned char OLED_F8x16[][16] =
{
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//   0
    0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,// ! 1
    0x00,0x16,0x0E,0x00,0x16,0x0E,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// " 2
    0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,
    0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,// # 3
    0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,
    0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,// $ 4
    0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,
    0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,// % 5
    0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,
    0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,// & 6
    0x00,0x00,0x00,0x16,0x0E,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ' 7
    0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,
    0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,// ( 8
    0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,
    0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,// ) 9
    0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,
    0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,// * 10
    0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,
    0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,// + 11
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,// , 12
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,// - 13
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,// . 14
    0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,
    0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,// / 15
    0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
    0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,// 0 16
    0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
    0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// 1 17
    0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
    0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,// 2 18
    0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
    0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,// 3 19
    0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
    0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,// 4 20
    0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
    0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,// 5 21
    0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
    0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,// 6 22
    0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
    0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,// 7 23
    0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
    0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,// 8 24
    0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
    0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,// 9 25
    0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
    0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,// : 26
    0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
    0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,// ; 27
    0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,
    0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,// < 28
    0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
    0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,// = 29
    0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,
    0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,// > 30
    0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,
    0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,// ? 31
    0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,
    0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,// @ 32
    0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,
    0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,// A 33
    0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,
    0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,// B 34
    0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,
    0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,// C 35
    0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,
    0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,// D 36
    0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
    0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,// E 37
    0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
    0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,// F 38
    0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,
    0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,// G 39
    0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
    0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,// H 40
    0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,
    0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// I 41
    0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,
    0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,// J 42
    0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,
    0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,// K 43
    0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,
    0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,// L 44
    0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,
    0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,// M 45
    0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,
    0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,// N 46
    0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
    0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,// O 47
    0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,
    0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,// P 48
    0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
    0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,// Q 49
    0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,
    0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,// R 50
    0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,
    0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,// S 51
    0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,
    0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,// T 52
    0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
    0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,// U 53
    0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,
    0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,// V 54
    0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,
    0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,// W 55
    0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,
    0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,// X 56
    0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,
    0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,// Y 57
    0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,
    0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,// Z 58
    0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,
    0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,// [ 59
    0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,// \ 60
    0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
    0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,// ] 61
    0x00,0x20,0x10,0x08,0x04,0x08,0x10,0x20,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ^ 62
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,// _ 63
    0x00,0x02,0x04,0x08,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ` 64
    0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
    0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,// a 65
    0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,
    0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,// b 66
    0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,
    0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,// c 67
    0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,
    0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,// d 68
    0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
    0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,// e 69
    0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,
    0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// f 70
    0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,// g 71
    0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,
    0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,// h 72
    0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,
    0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// i 73
    0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,
    0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,// j 74
    0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,
    0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,// k 75
    0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,
    0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// l 76
    0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
    0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,// m 77
    0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x00,
    0x00,0x20,0x3F,0x21,0x00,0x20,0x3F,0x20,// n 78
    0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
    0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,// o 79
    0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,
    0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,// p 80
    0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,
    0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,// q 81
    0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
    0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,// r 82
    0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,// s 83
    0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,
    0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,// t 84
    0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,
    0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,// u 85
    0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
    0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,// v 86
    0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,
    0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,// w 87
    0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
    0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,// x 88
    0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
    0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,// y 89
    0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
    0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,// z 90
    0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,
    0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,// { 91
    0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,// | 92
    0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,
    0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,// } 93
    0x00,0x80,0x40,0x40,0x80,0x00,0x00,0x80,
    0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,// ~ 94
};

/*宽6像素,高8像素*/
const unsigned char OLED_F6x8[][6] =
{
    0x00,0x00,0x00,0x00,0x00,0x00,//   0
    0x00,0x00,0x00,0x2F,0x00,0x00,// ! 1
    0x00,0x00,0x07,0x00,0x07,0x00,// " 2
    0x00,0x14,0x7F,0x14,0x7F,0x14,// # 3
    0x00,0x24,0x2A,0x7F,0x2A,0x12,// $ 4
    0x00,0x23,0x13,0x08,0x64,0x62,// % 5
    0x00,0x36,0x49,0x55,0x22,0x50,// & 6
    0x00,0x00,0x00,0x07,0x00,0x00,// ' 7
    0x00,0x00,0x1C,0x22,0x41,0x00,// ( 8
    0x00,0x00,0x41,0x22,0x1C,0x00,// ) 9
    0x00,0x14,0x08,0x3E,0x08,0x14,// * 10
    0x00,0x08,0x08,0x3E,0x08,0x08,// + 11
    0x00,0x00,0x00,0xA0,0x60,0x00,// , 12
    0x00,0x08,0x08,0x08,0x08,0x08,// - 13
    0x00,0x00,0x60,0x60,0x00,0x00,// . 14
    0x00,0x20,0x10,0x08,0x04,0x02,// / 15
    0x00,0x3E,0x51,0x49,0x45,0x3E,// 0 16
    0x00,0x00,0x42,0x7F,0x40,0x00,// 1 17
    0x00,0x42,0x61,0x51,0x49,0x46,// 2 18
    0x00,0x21,0x41,0x45,0x4B,0x31,// 3 19
    0x00,0x18,0x14,0x12,0x7F,0x10,// 4 20
    0x00,0x27,0x45,0x45,0x45,0x39,// 5 21
    0x00,0x3C,0x4A,0x49,0x49,0x30,// 6 22
    0x00,0x01,0x71,0x09,0x05,0x03,// 7 23
    0x00,0x36,0x49,0x49,0x49,0x36,// 8 24
    0x00,0x06,0x49,0x49,0x29,0x1E,// 9 25
    0x00,0x00,0x36,0x36,0x00,0x00,// : 26
    0x00,0x00,0x56,0x36,0x00,0x00,// ; 27
    0x00,0x08,0x14,0x22,0x41,0x00,// < 28
    0x00,0x14,0x14,0x14,0x14,0x14,// = 29
    0x00,0x00,0x41,0x22,0x14,0x08,// > 30
    0x00,0x02,0x01,0x51,0x09,0x06,// ? 31
    0x00,0x3E,0x49,0x55,0x59,0x2E,// @ 32
    0x00,0x7C,0x12,0x11,0x12,0x7C,// A 33
    0x00,0x7F,0x49,0x49,0x49,0x36,// B 34
    0x00,0x3E,0x41,0x41,0x41,0x22,// C 35
    0x00,0x7F,0x41,0x41,0x22,0x1C,// D 36
    0x00,0x7F,0x49,0x49,0x49,0x41,// E 37
    0x00,0x7F,0x09,0x09,0x09,0x01,// F 38
    0x00,0x3E,0x41,0x49,0x49,0x7A,// G 39
    0x00,0x7F,0x08,0x08,0x08,0x7F,// H 40
    0x00,0x00,0x41,0x7F,0x41,0x00,// I 41
    0x00,0x20,0x40,0x41,0x3F,0x01,// J 42
    0x00,0x7F,0x08,0x14,0x22,0x41,// K 43
    0x00,0x7F,0x40,0x40,0x40,0x40,// L 44
    0x00,0x7F,0x02,0x0C,0x02,0x7F,// M 45
    0x00,0x7F,0x04,0x08,0x10,0x7F,// N 46
    0x00,0x3E,0x41,0x41,0x41,0x3E,// O 47
    0x00,0x7F,0x09,0x09,0x09,0x06,// P 48
    0x00,0x3E,0x41,0x51,0x21,0x5E,// Q 49
    0x00,0x7F,0x09,0x19,0x29,0x46,// R 50
    0x00,0x46,0x49,0x49,0x49,0x31,// S 51
    0x00,0x01,0x01,0x7F,0x01,0x01,// T 52
    0x00,0x3F,0x40,0x40,0x40,0x3F,// U 53
    0x00,0x1F,0x20,0x40,0x20,0x1F,// V 54
    0x00,0x3F,0x40,0x38,0x40,0x3F,// W 55
    0x00,0x63,0x14,0x08,0x14,0x63,// X 56
    0x00,0x07,0x08,0x70,0x08,0x07,// Y 57
    0x00,0x61,0x51,0x49,0x45,0x43,// Z 58
    0x00,0x00,0x7F,0x41,0x41,0x00,// [ 59
    0x00,0x02,0x04,0x08,0x10,0x20,// \ 60
    0x00,0x00,0x41,0x41,0x7F,0x00,// ] 61
    0x00,0x04,0x02,0x01,0x02,0x04,// ^ 62
    0x00,0x40,0x40,0x40,0x40,0x40,// _ 63
    0x00,0x00,0x01,0x02,0x04,0x00,// ` 64
    0x00,0x20,0x54,0x54,0x54,0x78,// a 65
    0x00,0x7F,0x48,0x44,0x44,0x38,// b 66
    0x00,0x38,0x44,0x44,0x44,0x20,// c 67
    0x00,0x38,0x44,0x44,0x48,0x7F,// d 68
    0x00,0x38,0x54,0x54,0x54,0x18,// e 69
    0x00,0x08,0x7E,0x09,0x01,0x02,// f 70
    0x00,0x18,0xA4,0xA4,0xA4,0x7C,// g 71
    0x00,0x7F,0x08,0x04,0x04,0x78,// h 72
    0x00,0x00,0x44,0x7D,0x40,0x00,// i 73
    0x00,0x40,0x80,0x84,0x7D,0x00,// j 74
    0x00,0x7F,0x10,0x28,0x44,0x00,// k 75
    0x00,0x00,0x41,0x7F,0x40,0x00,// l 76
    0x00,0x7C,0x04,0x18,0x04,0x78,// m 77
    0x00,0x7C,0x08,0x04,0x04,0x78,// n 78
    0x00,0x38,0x44,0x44,0x44,0x38,// o 79
    0x00,0xFC,0x24,0x24,0x24,0x18,// p 80
    0x00,0x18,0x24,0x24,0x18,0xFC,// q 81
    0x00,0x7C,0x08,0x04,0x04,0x08,// r 82
    0x00,0x48,0x54,0x54,0x54,0x20,// s 83
    0x00,0x04,0x3F,0x44,0x40,0x20,// t 84
    0x00,0x3C,0x40,0x40,0x20,0x7C,// u 85
    0x00,0x1C,0x20,0x40,0x20,0x1C,// v 86
    0x00,0x3C,0x40,0x30,0x40,0x3C,// w 87
    0x00,0x44,0x28,0x10,0x28,0x44,// x 88
    0x00,0x1C,0xA0,0xA0,0xA0,0x7C,// y 89
    0x00,0x44,0x64,0x54,0x4C,0x44,// z 90
    0x00,0x00,0x08,0x7F,0x41,0x00,// { 91
    0x00,0x00,0x00,0x7F,0x00,0x00,// | 92
    0x00,0x00,0x41,0x7F,0x08,0x00,// } 93
    0x00,0x08,0x04,0x08,0x10,0x08,// ~ 94
};

OLED_Data.h

cpp 复制代码
/*
 * OLED_Data.h
 *
 *  Created on: 2025年5月2日
 *      Author: 19594
 */

#ifndef OLED_DATA_H_
#define OLED_DATA_H_

extern const uint8_t OLED_F8x16[][16];
extern const uint8_t OLED_F6x8[][6];


#endif /* OLED_DATA_H_ */

main.c

cpp 复制代码
#include <msp430.h> 
#include "OLED.h"
/**
 * main.c
 */

int main(void)
{
 	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
	BCSCTL1 = CALBC1_1MHZ;   // 设置 DCO 范围为 1MHz(需从芯片信息段加载校准值)
	DCOCTL = CALDCO_1MHZ;     // 设置 DCO 频率为 1MHz
	I2C_Init();
	OLED_Init();
	OLED_Clear();
	OLED_ShowString(0, 0, "hello world",8);
	while(1);
	return 0;
}

相关推荐
小智学长 | 嵌入式25 分钟前
单片机-STM32部分:0、学习资料汇总
stm32·单片机·嵌入式硬件
2401_872990536 小时前
stm32 HAI库 SPI(一)原理
stm32·单片机·嵌入式硬件
小智学长 | 嵌入式7 小时前
单片机-89C51部分:12 pwm 呼吸灯 直流电机
单片机·嵌入式硬件
佛大第一深情12 小时前
ESP32 在Platform Arduino平台驱动外部PSAM,进行内存管理
c语言·单片机·嵌入式硬件
hallo-ooo12 小时前
【STM32】定时器的外部时钟模式
stm32·单片机
hallo-ooo13 小时前
【STM32】定时器输入捕获
stm32·单片机
小智学长 | 嵌入式14 小时前
单片机-STM32部分:1、STM32介绍
stm32·单片机·嵌入式硬件
zhbi9814 小时前
STM32移植U8G2
stm32·单片机·嵌入式硬件·u8g2
爱奥尼欧15 小时前
【STM32】ADC的认识和使用——以STM32F407为例
stm32·单片机·嵌入式硬件