- IC型号
企业档案
- 相关证件:
 
- 会员类型:
- 会员年限:12年
- 阿库IM:
- 地址:杭州市余杭区仁和街道永泰路2号22幢
- E-mail:752574498@qq.com
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); //清屏
}