4762|4

1944

帖子

32

TA的资源

纯净的硅(高级)

楼主
 

【TI首届低功耗设计大赛】+ 初试 SPI 驱动的 OLED [复制链接]

本帖最后由 azhiking 于 2014-11-18 21:08 编辑

使用MSP430FR5969 驱动SPI接口的OLED。OLED采用SSD1603的驱动芯片。
先上图:


显示了中文字符和ASCII码

初步测试了一下,OLED的功耗与其亮度,显示的字符数量等关系比较大,
当全部关闭的时候,有uA级别的电流消耗。

到目前为止还有画点的驱动尚未完成。下一步还需要完成菜单的制作。

最新回复

工作电流多大?  详情 回复 发表于 2015-1-30 12:46
 
点赞 关注(1)

回复
举报

1944

帖子

32

TA的资源

纯净的硅(高级)

沙发
 
  1. static VOID DRV_SSD1306_SendCmd(UBYTE ucCmd)
  2. {
  3.         /* 选择指令通道 */
  4.         SSD1306_SelectCmd();
  5.         /* 选通LCD模块 */
  6.         SSD1306_ActiveLcdSpiCS();
  7.         /* 发送命令 */
  8.         SSD1306_Send(ucCmd);
  9.         /* 封锁LCD模块 */
  10.         SSD1306_InactiveLcdSpiCS();
  11.         SSD1306_SelectData();
  12. }
复制代码
  1. static VOID DRV_SSD1306_SendData(UBYTE ucData)
  2. {
  3.         /* 选择数据通道 */
  4.         SSD1306_SelectData();
  5.         /* 选通LCD模块 */
  6.         SSD1306_ActiveLcdSpiCS();
  7.         /* 发送命令 */
  8.         SSD1306_Send(ucData);
  9.         /* 封锁LCD模块 */
  10.         SSD1306_InactiveLcdSpiCS();
  11.         SSD1306_SelectData();
  12. }
复制代码
  1. static VOID DRV_SSD1306_SetContrast(UBYTE ucData)
  2. {
  3.         DRV_SSD1306_SendCmd(0x81);                        // Set Contrast Control
  4.         DRV_SSD1306_SendCmd(ucData);                        //   Default => 0x7F
  5. }
复制代码
  1. static VOID DRV_SSD1306_SetStartPage(UBYTE ucData)
  2. {
  3.         DRV_SSD1306_SendCmd(0xB0 | ucData);                        //   Default => 0xB0 (0x00)
  4. }
复制代码
  1. static VOID DRV_SSD1306_SetStartLine(UBYTE ucData)
  2. {
  3.         DRV_SSD1306_SendCmd(0x40 | ucData);                        // Set Display Start Line
  4.                                                 //   Default => 0x40 (0x00)
  5. }
复制代码
  1. static VOID DRV_SSD1306_SetStartColumn(UBYTE ucData)
  2. {
  3.     // Set Lower Column Start Address for Page Addressing Mode
  4.         DRV_SSD1306_SendCmd(0x00 + (ucData % 16));                        //   Default => 0x00
  5.         // Set Higher Column Start Address for Page Addressing Mode
  6.         DRV_SSD1306_SendCmd(0x10 + (ucData / 16));                        //   Default => 0x00
  7. }
复制代码
  1. static VOID DRV_SSD1306_SetDisplayOnOff(UBYTE ucData)       
  2. {
  3.         DRV_SSD1306_SendCmd(0xAE | ucData);                        // Set Display On/Off
  4.                                                 //   Default => 0xAE
  5.                                                 //     0xAE (0x00) => Display Off
  6.                                                 //     0xAF (0x01) => Display On
  7. }
复制代码
  1. static VOID DRV_SSD1306_SetEntireDisplay(UBYTE ucData)
  2. {
  3.         DRV_SSD1306_SendCmd(0xA4 | ucData);                        // Set Entire Display On / Off
  4.                                                 //   Default => 0xA4
  5.                                                 //     0xA4 (0x00) => Normal Display
  6.                                                 //     0xA5 (0x01) => Entire Display On
  7. }
复制代码
  1. static VOID DRV_SSD1306_SetInverseDisplay(UBYTE ucData)
  2. {
  3.         DRV_SSD1306_SendCmd(0xA6 | ucData);                        // Set Inverse Display On/Off
  4.                                                 //   Default => 0xA6
  5.                                                 //     0xA6 (0x00) => Normal Display
  6.                                                 //     0xA7 (0x01) => Inverse Display On
  7. }
复制代码
  1. static VOID DRV_SSD1306_FillRam(UBYTE ucData)
  2. {
  3.         UBYTE ucLoopi,ucLoopj;

  4.         for(ucLoopi = 0; ucLoopi < 8; ucLoopi++)
  5.         {
  6.             DRV_SSD1306_SetStartPage(ucLoopi);
  7.             DRV_SSD1306_SetStartColumn(0x00);
  8.             for(ucLoopj = 0; ucLoopj < 128; ucLoopj++)
  9.             {
  10.                 DRV_SSD1306_SendData(ucData);
  11.             }
  12.         }   
  13. }
复制代码
  1. void DRV_SSD1306_FillBlock(UBYTE ucData, UBYTE a, UBYTE b, UBYTE c, UBYTE d)
  2. {
  3.     UBYTE ucLoopi,ucLoopj;
  4.        
  5.         for(ucLoopi = a; ucLoopi <(b+1) ; ucLoopi++)
  6.         {
  7.                 DRV_SSD1306_SetStartPage(ucLoopi);
  8.                 DRV_SSD1306_SetStartColumn(c);

  9.                 for(ucLoopj = 0;ucLoopj < d; ucLoopj++)
  10.                 {
  11.                         DRV_SSD1306_SendData(ucData);
  12.                 }
  13.         }
  14. }
复制代码


 
 

回复

1944

帖子

32

TA的资源

纯净的硅(高级)

板凳
 
  1. void DRV_SSD1306_Sleep(UBYTE a)
  2. {
  3.         switch(a)
  4.         {
  5.                 case 0:
  6.                         DRV_SSD1306_SetDisplayOnOff(0x00);
  7.                         DRV_SSD1306_SetEntireDisplay(0x01);
  8.                         break;
  9.                 case 1:
  10.                         DRV_SSD1306_SetEntireDisplay(0x00);
  11.                         DRV_SSD1306_SetDisplayOnOff(0x01);
  12.                         break;
  13.         }
  14. }
复制代码
  1. UWORD DRV_SSD1306_Init(VOID)

  2. {
  3.     /* 拉低复位脚 */
  4.     BSP_ActiveLcdRst();
  5.     BSP_UsDelay(100);
  6.     BSP_InactiveLcdRst();

  7.     DRV_SSD1306_SetDisplayOnOff(0x00); // Display Off (0x00/0x01)

  8.     DRV_SSD1306_SendCmd(0xD5); // Set Clock as 100 Frames/Sec
  9.     DRV_SSD1306_SendCmd(0x80);

  10.     DRV_SSD1306_SendCmd(0xA8); // 1/64 Duty (0x0F~0x3F)
  11.     DRV_SSD1306_SendCmd(0x3F);

  12.     DRV_SSD1306_SendCmd(0xD3);// Shift Mapping RAM Counter (0x00~0x3F)
  13.     DRV_SSD1306_SendCmd(0x00);

  14.     DRV_SSD1306_SendCmd(0x40 | 0x00);// Set Mapping RAM Display Start Line (0x00~0x3F)  
  15.    
  16.     DRV_SSD1306_SendCmd(0x8D);// Enable Embedded DC/DC Converter (0x00/0x04)
  17.     DRV_SSD1306_SendCmd(0x10 | 0x04);
  18.    
  19.     DRV_SSD1306_SendCmd(0x20);// Set Page Addressing Mode (0x00/0x01/0x02)
  20.     DRV_SSD1306_SendCmd(0x02);
  21.    
  22.     DRV_SSD1306_SendCmd(0xA0 | 0x01);// Set SEG/Column Mapping (0x00/0x01)
  23.    
  24.     DRV_SSD1306_SendCmd(0xC0 | 0x08);// Set COM/Row Scan Direction (0x00/0x08)
  25.    
  26.     DRV_SSD1306_SendCmd(0xDA);
  27.     DRV_SSD1306_SendCmd(0x02 | 0x10);// Set Sequential Configuration (0x00/0x10)

  28.     DRV_SSD1306_SetContrast(0xCF);  // Set SEG Output Current
  29.    
  30.     DRV_SSD1306_SendCmd(0xD9);  // Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  31.     DRV_SSD1306_SendCmd(0xF1);

  32.     DRV_SSD1306_SendCmd(0xDB);  // Set VCOM Deselect Level
  33.     DRV_SSD1306_SendCmd(0x40);
  34.    
  35.     DRV_SSD1306_SetEntireDisplay(0x00);  // Disable Entire Display On (0x00/0x01)
  36.    
  37.     DRV_SSD1306_SetInverseDisplay(0x00);  // Disable Inverse Display On (0x00/0x01)

  38.     /* set contrast */
  39.     DRV_SSD1306_SetContrast(Brightness);
  40.    
  41.     /* 清除显示缓冲区 */
  42.     DRV_SSD1306_FillRam(0x00);
  43.    
  44.     DRV_SSD1306_SetDisplayOnOff(0x01);   // Display On (0x00/0x01)
  45.    
  46.     //DRV_SSD1306_FillRam(0xFF);
  47.     return SYS_NO_ERROR;
  48. }
复制代码


 
 
 

回复

27

帖子

1

TA的资源

一粒金砂(中级)

4
 
工作电流多大?
 
 
 

回复

1944

帖子

32

TA的资源

纯净的硅(高级)

5
 
全开的话大概十几个mA
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表