杭州清达光电技术有限公司

12年

杭州清达光电技术有限公司

卖家积分:21001分-22000分营业执照:已审核经营模式:原厂制造商所在地区:浙江 杭州

收藏本公司 人气:1143126

企业档案

  • 相关证件:营业执照已审核 
  • 会员类型:
  • 会员年限:12年
  • 卢小姐 QQ:752574498
  • 电话:13506715842
  • 手机:13506715842
  • 阿库IM:
  • 地址:杭州市余杭区仁和街道永泰路2号22幢
  • E-mail:752574498@qq.com

您的当前位置:

杭州清达光电技术有限公司 > 新闻动态 > SSD1309控制器串口OLED显示屏例程

SSD1309控制器串口OLED显示屏例程

发布时间: 2021/6/23 16:52:26 | 955 次阅读

   SSD1309控制器一般用来驱动2.7寸或者2.4寸128*64分辨率的OLED模块,为了缩短客户的开发时间清达光电提供了如下参考例程。

   #include "stm8s.h"
#include "HGS1286445_STM8.h"
#include "TAB.h"


/********* 时间延时程序 *********/
void delay(u16 t)   
{ u16 i,j;
  for(i=t;i>0;i--)
    for(j=2700;j>0;j--);
}


/******** 写“指令”程序 ********/
void write_com(u8 com)
{  
  u8 i;
  SCLK_H;
  CD_L;
  CS_L;
 
  for(i=0;i<8;i++)
  {
   if(com&0x80)
      SDIN_H;
    else
      SDIN_L;
    SCLK_L;
    SCLK_H;
    com<<=1;//左移一位
   }
   CS_H; 
}

/******** 写“数据”程序 ********/
void write_data(u8 dat)
{
  u8 i;
  SCLK_H;
  CD_H;
  CS_L;
  
  for(i=0;i<8;i++)
  {
    if(dat&0x80)
      SDIN_H;
    else
      SDIN_L;
    SCLK_L;
    SCLK_H;
    dat<<=1; //左移一位
   }
    CS_H;  
}



/******** 地址设置程序 ********/
void address(u8 page,u8 col)
{
  write_com(0xb0|page);  //Set Page Start Address for Page Addressing Mode
  write_com(0x00|(col&0x0f));  //Set Lower Column Start Address for Page Addressing Mode
  write_com(0x10|((col>>4)&0x0f));// Set Higher Column Start Address for Page Addressing Mode
}

/******** 全屏隔行显示程序********/
void fill(u8 dat)

  u8 i,j; 
  for(i=0;i<HD/8;i++)
   {
     address(i,0);
     for(j=0;j<WD;j++)
       write_data(dat); 
   }
}


/******16*16单个字符显示:x列地址,y页地址,coder,字符序号****************/
void display1616(u8 x,u8 y,u8 n)
{
  u8 i;
  address(y,x);
  for(i=0;i<16;i++)
  {
   write_data(tab16[16*n+i]);
   }
  address(y+1,x);
  for(i=0;i<16;i++)
  {
   write_data(tab16[16*n+i+16]);
   }
}
/**16*16(n个)字符显示, 从第m个开始连续写n个:x列地址,y页地址**/
void display_16(u8 x,u8 y,u8 m,u8 n)
{
  u8 i;
  for(i=m;i<n;i++)
  {display1616(x,y,i);
   x=x+16;
  }
}


void display88(u8 x,u8 y,u8 n)
{
  u8 i;
  address(y,x);
  for(i=0;i<8;i++)
  {
    write_data(tab8[8*n+i]);
   }
}
/**8*8(n个)字符显示, 从第m个开始连续写n个:x列地址,y页地址**/
void display_8(u8 x,u8 y,u8 m,u8 n)
{
  u8 i;
  for(i=m;i<n;i++)
  {
   display88(x,y,i);
   x=x+8;
  }
}

/********************************************************************************/

/******** 液晶屏初始化程序 ********/
void Init()
{      

   CONTROL1_OUTPUT_MODE();  //控制口1为输出  
   CONTROL2_OUTPUT_MODE();  //控制口2为输出
   BS1_L; 
   BS2_L;
   WR_L;
   RD_H;
   D3_L;
   D4_L;
   D5_L;
   D6_L;
   D7_L;
    
    
  delay(5);
  REST_L;
  delay(5);
  REST_H;
  delay(150);
 
  write_com(0xae);  //Display OFF 

  write_com(0xd5);  //Set Display Clock Divide Ratio/Oscillator Frequency
  write_com(0xa0);  //a0  d1

  write_com(0xd9);  //Set Pre-Charge Period
  write_com(0xf1);  //f1  22

  write_com(0xdb);  //Set VCOMH Deselect Level :0.78*VCC
  write_com(0x34);  //34  00
 
  write_com(0xa8);  //Set Multiplex Ratio:64 
  write_com(0x3f); 

  write_com(0xd3);  //Set Display Offset  
  write_com(0x00); 

  write_com(0x40);  //Set Display Start Line 

  write_com(0x20);  //Set Memory Addressing Mode: PAGE Addressing Mode
  write_com(0x02);  

  write_com(0xa1);  //Set Segment Re-Map:SEG127~SEG0

  write_com(0xc8);  //Set COM Output Scan Direction:COM63~COM0

  write_com(0xda);  //Set COM Pins Hardware Configuration: Alternative COM Pin
  write_com(0x12);   

  write_com(0x81);  //Set Contrast Control 
  write_com(0x7f); //(RESET = 7Fh)

  write_com(0xa4);  //Set Entire Display On/Off: Normal Display

  write_com(0xa6);  //Set Inverse Display On/Off: Normal Display
 
  write_com(0xaf);  //Display ON 
  fill(0x00);  //清屏 
  
}