X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
微控制器 MCU
[原创] 【TI首届低功耗设计大赛】+ 初试 SPI 驱动的 OLED
azhiking
2014-11-18 21:08
楼主
使用MSP430FR5969 驱动SPI接口的OLED。OLED采用SSD1603的驱动芯片。 先上图:
显示了中文字符和ASCII码
初步测试了一下,OLED的功耗与其亮度,显示的字符数量等关系比较大, 当全部关闭的时候,有uA级别的电流消耗。 到目前为止还有画点的驱动尚未完成。下一步还需要完成菜单的制作。
本帖最后由 azhiking 于 2014-11-18 21:08 编辑
点赞
回复评论 (4)
沙发
azhiking
static VOID DRV_SSD1306_SendCmd(UBYTE ucCmd)
{
/* 选择指令通道 */
SSD1306_SelectCmd();
/* 选通LCD模块 */
SSD1306_ActiveLcdSpiCS();
/* 发送命令 */
SSD1306_Send(ucCmd);
/* 封锁LCD模块 */
SSD1306_InactiveLcdSpiCS();
SSD1306_SelectData();
}
static VOID DRV_SSD1306_SendData(UBYTE ucData)
{
/* 选择数据通道 */
SSD1306_SelectData();
/* 选通LCD模块 */
SSD1306_ActiveLcdSpiCS();
/* 发送命令 */
SSD1306_Send(ucData);
/* 封锁LCD模块 */
SSD1306_InactiveLcdSpiCS();
SSD1306_SelectData();
}
static VOID DRV_SSD1306_SetContrast(UBYTE ucData)
{
DRV_SSD1306_SendCmd(0x81); // Set Contrast Control
DRV_SSD1306_SendCmd(ucData); // Default => 0x7F
}
static VOID DRV_SSD1306_SetStartPage(UBYTE ucData)
{
DRV_SSD1306_SendCmd(0xB0 | ucData); // Default => 0xB0 (0x00)
}
static VOID DRV_SSD1306_SetStartLine(UBYTE ucData)
{
DRV_SSD1306_SendCmd(0x40 | ucData); // Set Display Start Line
// Default => 0x40 (0x00)
}
static VOID DRV_SSD1306_SetStartColumn(UBYTE ucData)
{
// Set Lower Column Start Address for Page Addressing Mode
DRV_SSD1306_SendCmd(0x00 + (ucData % 16)); // Default => 0x00
// Set Higher Column Start Address for Page Addressing Mode
DRV_SSD1306_SendCmd(0x10 + (ucData / 16)); // Default => 0x00
}
static VOID DRV_SSD1306_SetDisplayOnOff(UBYTE ucData)
{
DRV_SSD1306_SendCmd(0xAE | ucData); // Set Display On/Off
// Default => 0xAE
// 0xAE (0x00) => Display Off
// 0xAF (0x01) => Display On
}
static VOID DRV_SSD1306_SetEntireDisplay(UBYTE ucData)
{
DRV_SSD1306_SendCmd(0xA4 | ucData); // Set Entire Display On / Off
// Default => 0xA4
// 0xA4 (0x00) => Normal Display
// 0xA5 (0x01) => Entire Display On
}
static VOID DRV_SSD1306_SetInverseDisplay(UBYTE ucData)
{
DRV_SSD1306_SendCmd(0xA6 | ucData); // Set Inverse Display On/Off
// Default => 0xA6
// 0xA6 (0x00) => Normal Display
// 0xA7 (0x01) => Inverse Display On
}
static VOID DRV_SSD1306_FillRam(UBYTE ucData)
{
UBYTE ucLoopi,ucLoopj;
for(ucLoopi = 0; ucLoopi < 8; ucLoopi++)
{
DRV_SSD1306_SetStartPage(ucLoopi);
DRV_SSD1306_SetStartColumn(0x00);
for(ucLoopj = 0; ucLoopj < 128; ucLoopj++)
{
DRV_SSD1306_SendData(ucData);
}
}
}
void DRV_SSD1306_FillBlock(UBYTE ucData, UBYTE a, UBYTE b, UBYTE c, UBYTE d)
{
UBYTE ucLoopi,ucLoopj;
for(ucLoopi = a; ucLoopi <(b+1) ; ucLoopi++)
{
DRV_SSD1306_SetStartPage(ucLoopi);
DRV_SSD1306_SetStartColumn(c);
for(ucLoopj = 0;ucLoopj < d; ucLoopj++)
{
DRV_SSD1306_SendData(ucData);
}
}
}
点赞
2015-1-6 00:10
板凳
azhiking
void DRV_SSD1306_Sleep(UBYTE a)
{
switch(a)
{
case 0:
DRV_SSD1306_SetDisplayOnOff(0x00);
DRV_SSD1306_SetEntireDisplay(0x01);
break;
case 1:
DRV_SSD1306_SetEntireDisplay(0x00);
DRV_SSD1306_SetDisplayOnOff(0x01);
break;
}
}
UWORD DRV_SSD1306_Init(VOID)
{
/* 拉低复位脚 */
BSP_ActiveLcdRst();
BSP_UsDelay(100);
BSP_InactiveLcdRst();
DRV_SSD1306_SetDisplayOnOff(0x00); // Display Off (0x00/0x01)
DRV_SSD1306_SendCmd(0xD5); // Set Clock as 100 Frames/Sec
DRV_SSD1306_SendCmd(0x80);
DRV_SSD1306_SendCmd(0xA8); // 1/64 Duty (0x0F~0x3F)
DRV_SSD1306_SendCmd(0x3F);
DRV_SSD1306_SendCmd(0xD3);// Shift Mapping RAM Counter (0x00~0x3F)
DRV_SSD1306_SendCmd(0x00);
DRV_SSD1306_SendCmd(0x40 | 0x00);// Set Mapping RAM Display Start Line (0x00~0x3F)
DRV_SSD1306_SendCmd(0x8D);// Enable Embedded DC/DC Converter (0x00/0x04)
DRV_SSD1306_SendCmd(0x10 | 0x04);
DRV_SSD1306_SendCmd(0x20);// Set Page Addressing Mode (0x00/0x01/0x02)
DRV_SSD1306_SendCmd(0x02);
DRV_SSD1306_SendCmd(0xA0 | 0x01);// Set SEG/Column Mapping (0x00/0x01)
DRV_SSD1306_SendCmd(0xC0 | 0x08);// Set COM/Row Scan Direction (0x00/0x08)
DRV_SSD1306_SendCmd(0xDA);
DRV_SSD1306_SendCmd(0x02 | 0x10);// Set Sequential Configuration (0x00/0x10)
DRV_SSD1306_SetContrast(0xCF); // Set SEG Output Current
DRV_SSD1306_SendCmd(0xD9); // Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
DRV_SSD1306_SendCmd(0xF1);
DRV_SSD1306_SendCmd(0xDB); // Set VCOM Deselect Level
DRV_SSD1306_SendCmd(0x40);
DRV_SSD1306_SetEntireDisplay(0x00); // Disable Entire Display On (0x00/0x01)
DRV_SSD1306_SetInverseDisplay(0x00); // Disable Inverse Display On (0x00/0x01)
/* set contrast */
DRV_SSD1306_SetContrast(Brightness);
/* 清除显示缓冲区 */
DRV_SSD1306_FillRam(0x00);
DRV_SSD1306_SetDisplayOnOff(0x01); // Display On (0x00/0x01)
//DRV_SSD1306_FillRam(0xFF);
return SYS_NO_ERROR;
}
点赞
2015-1-6 00:12
4楼
yengfang
工作电流多大?
点赞
2015-1-30 12:46
5楼
azhiking
全开的话大概十几个mA
点赞
2015-1-30 14:39
最新活动
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
TI 有奖直播 | 使用基于 Arm 的 AM6xA 处理器设计智能化楼宇
Follow me第二季第3期来啦!与得捷一起解锁高性能开发板【EK-RA6M5】超能力!
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
随便看看
Wince6.0 中文模拟器
让你的LED跟随MUSIC HIGH起来!
请教大家下面IC的型号和厂商?
电源专用高压固态电容22UF/160V
【沁恒CH582】5显示CPU温度
论坛资料重复太多了,有办法解决吗?
源程序--我用逻辑分析仪测试时隙,调试出的18b20
MSP430(F5529有关UCS配置解释
如何设计基于DS18B20温度计
CC1310 两线 Serial Bootloader 方案
有没有输入15V-40V ,输出5V的稳压IC。
【笔记】2.0 MSP430的IO配置
Atmel有线下的培训吗?
gpio输出
低版本IAR简易开发LaunchPad的歪道
视频系列斯坦福:编程方法论
Stm32之寄存器汇总
为什么我的 INA CMRR 不随增益变化?
70年之天空重器
模数转换器中的混叠:并不是所有的信号都像其看上去那样
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复