请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2253 初始化后、我尝试简单地点亮整个显示屏、但我的代码似乎不起作用。 是否有关于调试该问题的建议? (尚未配备逻辑分析仪或示波器)
/*********
// MSP430 I2C OLED 模块
//
////
////
////
/////////////
/#include
// SSD1306参数
#define SSD1306_LCDWIDTH 128
#define SSD1306_LCDHEIGHT 64
#define SSD1306_MAXROWS 7
#define SSD1306_MAXCONVST 0xFF
//命令表
#define SSD1306_SETCONVRAME 0x08#define
SSD1306_DISLAY6
#define
0xLAY6
#define RSDARRAME 0xARSEARRAME 0x1306_RESPLOR #define 0_CLADDRY #define 0x1306_CLA #define #define #define #define SSDARSEARSEARRAME 0x1306_CLA #define 0x1306_CLADY6 #define #define #define #define #define #define SSDARSEARRAME 0xARSEARRAME 0xARRAME 0xARRAME 0x1306_CLA #define 0x1306_
0x29
#define SSD1306_SCROL_LEFT_LEFT 0x2A
#define SSD1306_SET_STREVERT 0xA3
//地址设置
#define SSD1306_SETHIGHCOLUMN
0x10
#define SSD1306_SETSCLUMADDRESS 0x20
#define SSD1306_SELESSSDTR0x06
#define 0x20_SECURLTMASK 0x20_SECURSSDTRL012_CLADDRA #define 0x306_SECURS
0x306_SECURLTMASK
0x306_SECURLTMASK 0x306_CLADDR_SECURS #define 0x306_SECURS 0x20_SECURLTMASK 0x306_SECURLTMASK 0x306_SECURS #define 0x20#define 0x306_SECURLTMASK 0x306_SECURS 0x20_SECURS 0x20_SECURLTMASK 0x306_SECURS 0x
SSD1306_COMSCANDEC 0xC8
#define SSD1306_SETDSISPLAYOFFSET 0xD3
#define SSD1306_SETCOMPINS 0xDA
//时序和驱动
#define SSD1306_SETDSISPLAYCLOCKDIV 0xD5
#define SSD1306_SETCOMPREG 0x06
#define SSDTRUCC_CONSTUCC_0x1306_SETRE
0xFFR 0x0320_CONSTUCC_CONSTUCC_CONSTUCC_CONTOP= 0x13012_COND
#define 0x13012_CONSTUCC_CONSTUARTRD #define 0x03_CONSTUCC_CONSTUCC_CONSTUCC_CONSTUARTRUCC#define
0x06 #define 0x1306_CONSTUTRUTRD #define 0x03
//将显示设置为关闭
0xD5,//设置显示时钟分频比/OSC 频率
0x80,//显示时钟分频比/OSC 频率
0xA8,//设置多路复用比
0x3F,//设置128x64 (64-1)
的多路复用比0xD3,//设置显示偏移
0x00,//显示偏移
0x40, //设置显示起始行
0x8D,//设置电荷泵
0x14,//电荷泵(0x10外部,0x14内部 DC/DC)
0x20,//设置存储器寻址模式
0x02,//水平寻址模式
0xA1,//设置段重映射,列地址127映射到 SEG0
0xC8,//设置 COM 输出扫描方向
0xDA, //设置 COM 硬件配置
0x12,// COM 硬件配置
0x81,//设置对比度
0xCF,//对比度
0xD9,//设置预充电周期
0xF1,//设置预充电周期(0x22外部,0xF1内部)
0xDB,//设置 VCOMH 取消选择电平
0x40,// VCOMH 取消选择
电平0xA4,/取消选择
所有像素/设置0xA6 //设置显示未反转
0xAF,//在
0xA5上设置显示,//所有像素
位于};*/
char SSD1306_init[]={
SSD1306_DISPLAYOFF,
SSD1306_SETLOWCOLUMN,
SSD1306_SETHIGHCOLUMN,
SSD1306_SETSTARTLINE,
SSD1306_SETTRAST_ST_ST_ST_ST_ST_ST_ST_ST_ST_ST_ST_ST_ST_
0xCF、
SSD1306_SEGREMAP、
SSD1306_NORMALDISPLAY、
SSD1306_SETMULTIPLEX、
0x3f、
SSD1306_SETDSISPLAYOFFSET、
0x00、
SSD1306_SETDSISPLAYCLOCKDIV、
0x80、
SSD1306_SETPRECHARGE、
0xF1、
SSD1306_SETCOMPINS、
0x12、
SSD1306_SETVCOMDETECT、
0x40、
SSD1306_CHARGEPUMP、
0x14、
SSD1306_DISPLAYON
};
const unsigned int length = sizeof (init_array_SSD1306)/sizeof (init_array_SSD1306[0]);
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
/*为 I2C 配置 P1.6和 P1.7 */
P1SEL |= BIT6 + BIT7;
P1SEL2 |= BIT6 + BIT7;
UCB0CTL1 |= UCSWRST; //启用 SW 复位
UCB0CTL0 = UCMST+UCMODE_3+UCSYNC; // I2C 主设备,同步模式
UCB0CTL1 = UCSSEL_2+UCSWRST; //使用 SMCLK、保持软件复位
UCB0BR0 = 12; // fSCL = SMCLK/12 =~100kHz
UCB0BR1 = 0;
UCB0I2CSA = SSD1306_address;
UCB0CTL1 &=~UCSWRST; //清除 SW 复位,恢复操作
UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX、启动条件
unsigned char byte_CNT = 0;
__disable_interrupt ();
while (byte_CNT < length)
{
while (!(IFG2 & UCB0TXIFG));
UCB0TXBUF = init_array_SSD1306[byte_CNT++];
}
while (UCB0STAT 和 UCBUSY);//等待全部完成
UCB0RXBUF;//清除 IFG 和溢出
while (1);
}
BTW、这两个初始化的数组是不同的。 一个评论是我的原始评论、我是通过谷歌搜索其他人的代码来寻找的。 未注释的一个是来自 MSP430 booster 代码示例。