7回答

1收藏

[原创] PSoC4实验:IIC点亮OLED

英飞凌 英飞凌 8013 人阅读 | 7 人回复 | 2013-09-11

本帖最后由 leonard 于 2013-9-11 12:59 编辑

话说楼主的OLED终于到了,简单调试了一下之前准备好的代码就发上来了。
楼主的OLED是0.96的128*64,主控SSD1306,买来时已经是IIC的连接方式了,改SPI有点麻烦,就用IIC了。
先上图:

桌子上还有一块IIC通信的MPU6050,在写完OLED的代码后,楼主的1602就可以退休了。

先是硬件连线:


请无视楼主的其他连线,要用是只有SCL和SDA两条线。

OLED2864 硬件连线
请注意oled是3.3v的电源,所以要把PSoC4的板上电源选择为3.3v
SCL--SCL;
SDA--SDA;
D/C为地址末尾,楼主选择接地。(D/C=0,Address=0x3c);
RES接低复位,正常操作接高(RES=1);
CS=0;
GND=0;
VCC=3.3v;

代码部分
楼主目前完成的是基础的驱动部分,并没有写完绘图语句。目前能做到的是初始化(OLED_Init())和清屏(clearDisplay())和
绘制点(drawpixel()),其他如绘制直线、圆等API将很快完成。

由于楼主工程很大一部分与本题无关,就没打算上传工程,一下是楼主自用的API:
1.按照I2C-bus data format写命令
ssd1306 I2C-bus data format:


#define CONTROL   0x00 //写入命令
#define DATA          0x40 //写入数据
#define OLED_ADDR  0x3c
int status=0                     //保存IIC_BUS状态
/**************************************************************/
void writeCommand(uint8 command)             //SSD1306命令操作函数
{
I2C_Start();                                                    //启动I2Cstatus=I2C_I2CMasterClearStatus();               //清除之前状态
status=I2C_I2CMasterSendStart(OLED_ADDR,I2C_I2C_WRITE_XFER_MODE);   //校验地址+写入模式
while(status!=I2C_I2C_MSTR_NO_ERROR)      
{printline(1,"Error");}                                      //校验status状态,请大家自定义函数
status=I2C_I2CMasterWriteByte(CONTROL);  //进入命令模式
status=I2C_I2CMasterWriteByte(command);  //写入命令         
I2C_Stop();
}
/**************************************************************/
void writeData(uint8 dat)                                //SSD1306数据操作函数
{
I2C_Start();                                                    //启动I2Cstatus=I2C_I2CMasterClearStatus();               //清除之前状态
status=I2C_I2CMasterSendStart(OLED_ADDR,I2C_I2C_WRITE_XFER_MODE);   //校验地址+写入模式
while(status!=I2C_I2C_MSTR_NO_ERROR)      
{printline(1,"Error");}                                      //校验status状态,请大家自定义函数
status=I2C_I2CMasterWriteByte(DATA);         //进入数据模式
status=I2C_I2CMasterWriteByte(dat);            //写入数据         
I2C_Stop();
}
/**************************************************************/
void OLED_Init()                                            //这里的command()就是上文的writeCommand()函数,楼主懒的改了
{
        command(0xAE); //关闭显示
        command(0xD5); //设置时钟分频因子,震荡频率
        command(0x80); //[3:0],分频因子;[7:4],震荡频率
        command(0xA8); //设置驱动路数
        command(0X3F); //默认0X3F(1/64)
        command(0xD3); //设置显示偏移
        command(0X00); //默认为0
        command(0x40); //设置显示开始行 [5:0],行数.                                                                                                         
        command(0x8D); //电荷泵设置
        command(0x14); //bit2,开启/关闭
        command(0xd8); //设置内存地址模式
        command(0x05); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
        command(0xA1); //段重定义设置,bit0:0,0->0;1,0->127;
        command(0xC8); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数
        command(0xDA); //设置COM硬件引脚配置
        command(0x12); //[5:4]配置
        command(0x81); //对比度设置
        command(0x7F); //1~255;默认0X7F (亮度设置,越大越亮)
        command(0xD9); //设置预充电周期
        command(0xf1); //[3:0],PHASE 1;[7:4],PHASE 2;
        command(0xDB); //设置VCOMH 电压倍率
        command(0x40); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;
        command(0xA4); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
        command(0xA6); //设置显示方式;bit0:1,反相显示;0,正常显示        
        command(0xAF); //开启显示   
}

以上是一些关键性的代码,其他可见楼主上传的OLED.h文件。

附件
OLED2864.zip (4.02 KB, 下载次数: 92)

SSD1306.pdf (1.79 MB, 下载次数: 194)




分享到:
回复

使用道具 举报

回答|共 7 个

倒序浏览

沙发

sacq12

发表于 2013-9-11 08:36:41 | 只看该作者

好样的~~~
板凳

七夕入网

发表于 2013-9-11 08:49:29 | 只看该作者

顶你!!!!1
地板

bowei181

发表于 2013-9-11 09:00:07 | 只看该作者

好详细呀,这就是传说中的源代码吗?
5#

dushanwu

发表于 2013-9-11 09:06:31 | 只看该作者

OLED显示效果很好呀
MMA7660加速度传感器,不错,可以读取啦,哈哈,很有意思呀!
6#

fj1161

发表于 2013-9-11 09:51:08 | 只看该作者

给力啊~~~~~~~~~~~
第五年了,这次一定要坚持到底,不留遗憾!!!
7#

leonard

发表于 2013-9-11 10:45:05 | 只看该作者

dushanwu 发表于 2013-9-11 09:06
OLED显示效果很好呀

那当然,又小有细腻,很适合在飞控板上绘制飞行姿态!
8#

leonard

发表于 2013-9-11 11:12:00 | 只看该作者

powerdruy 发表于 2013-9-11 11:09
OLED哪里买的,多少钱

TB上搜oled模块会有很多,包括飞思卡尔和一些其他厂商的,参考价30~40,1.3略贵
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条