效果:
总结:
(1)网上没好用的源码;
(2)SSD1306地址是0X3C,7位地址模式。
(3)G2553手册确实介绍得很好。
(4)SSD1306写入命令顺序:开始信号-->等待UCB0TXIFG-->写入0X3C地址-->等待UCB0TXIFG->写入0X00控制字-->等待UCB0TXIFG-->写入命令字符-->等待UCB0TXIFG-->发送停止信号。
(5)SSD1306写入数据顺序:开始信号-->等待UCB0TXIFG-->写入0X3C地址-->等待UCB0TXIFG->写入0X40控制字-->等待UCB0TXIFG-->写入数据字符-->等待UCB0TXIFG-->发送停止信号。
(6)USCI模块支持的东西不一样:
IIC通信的细节:
(1)是7位地址,最后一个表示读写,0是主机写入从机,很多器件地址都得考虑一下了。这和软件IIC有很大的区别。
(2)不需要停止信号,数据线就可以重定义数据流方向。只需要在中途重新发开始信号,然后给的地址最后一位R/W决定一下,数据可以任意方向流动。搞完后还是发停止信号。
(3)IIC操作模式分为四种:从机发送者角色、从机接受者角色、主机发送者角色、主机接受者角色。
下图中,UCA10 Own addressing mode select是决定7位地址还是10位地址。UCMST Master是决定是从机还是主机。UCMODEx给11是IIC模式。
下图中UCTR是决定发送者还是接受者的。
(4)网上程序都使用了中断,好处就是中断处理利于程序健壮性,坏处就是看着有点跳跃,各有各的好吧。
(5)IIC说是能达到100K HZ时钟,但也是做好PCB,走线的线粗+线短,最好加个1K的上拉电阻。我做这个实验用的杜邦线,杜邦线搞的,时钟高了就直接无响应了。
(6)
滚动
http://www.51hei.com/bbs/dpj-180145-1.html
向右滚动显示
c#include <msp430.h>
#include "oled.h"
#include "bmp.h"
// MSP430G2xx3
// -----------------
//OLED | | --|RST XOUT|-
//--- | | | |
//SDA|<-|---+---->|P1.7/UCB0SDA |
// | | | |
// | | | |
//SCL|<-+---------|P1.6/UCB0SCL |
// | | |
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
OLED_Init();
delay_ms(100);
OLED_DrawBMP(0, 0, 128, 64, BMP1);
OLED_WrCmd(0x2e);//停止滚动
OLED_WrCmd(0x26);//0x26向右 0x27向左
OLED_WrCmd(0x00);//虚拟字节
OLED_WrCmd(0x00);//起始页
OLED_WrCmd(0x07);//速度
OLED_WrCmd(0x07);//中止页
OLED_WrCmd(0x00);//虚拟字节
OLED_WrCmd(0xff);//虚拟字节
OLED_WrCmd(0x2f);//开启滚动
while (1)
{
}
}
(7)控制像素点显示。unsigned char OLED_GRAM[128][8];
导致G2553内存瘫痪了,这一点需要使用别的单片机实现,比如MSP430F5529。好像也可以依靠读取SSD1302中的数据,但只有8080接口或者6800接口,详见下面的图,有R/W选择的。
SSD1306通信方式靠硬件选择:
csharphttps://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!