字符型低温OLED显示模块HCS1625屏I2C通信方式应用参考示例介绍

字符型低温OLED显示模块HCS1625是一款可以显示32个字符(2行,每行显示16个字符)的自带西文字符库的OLED显示模块,工作温度可以-40~80℃,适合工业现场,并且普通单片机可以直接驱动和控制,下面是51单片机控制参考电路(使用了IO口模拟I2C时序):
在这里插入图片描述基于此电路下的参考程序如下:
#include<reg51.h>
#include <string.h>
#include <intrins.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCL =P1^0;
sbit SDA =P1^1;
uchar code tab1[]={“0123456789ABCDEFGHIJ”};
uchar code tab2[]={“0123456789ABCDEFGHIJ”};
uchar code tab3[]={" Tel:13701081790 "};
uchar code CGR[]={ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,//隔列1
0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,//隔行1
0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,//隔列2
0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,//隔行2
0xff};
//清达光电编写,有问题可以及时联系我们13701081790刘经理
/******************************************************************
延时子程序
*****************************************************************/

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x–)
for(y=124;y>0;y–);
}

void del(void)
{
nop(); nop();
}

void start(void)
{
SDA=1;del();
SCL=1;del();
SDA=0;del();
SCL=0;del();
}

void stop(void)
{
SDA=0;del();
SCL=1;del();
SDA=1;del();
}

void ack(void)
{
uchar i=0;
SCL=1;
del();
SCL=0;
del();
}

void wr_byte(uchar b)
{
uchar i;
for(i=0;i<8;i++)
{

SCL=0;del();
SDA=b&0x80;del();
b=b<<1;
SCL=1;del();
SCL=0;del();
}
SDA=1;del();

ack();
}

void wr_data(uchar b)
{
start();
wr_byte(0x78);
wr_byte(0x40);
wr_byte(b);
stop();
}

void wr_com(uchar com)
{
start();
wr_byte(0x78);
wr_byte(0x00);
wr_byte(com);
stop();
}

/******************************************************************
定位地址(一个地址对应5*8字符和)
x–> 水平方向地址数(0~39) ;y–> 垂直方向字符数(0~1);
*****************************************************************/

void dot(uchar x,uchar y)
{
if(y) x|=0x40;
x|=0x80;
wr_com(x);
}
/******************************************************************
自定义字符形成;
**/
void CGR_SET(uchar code s)
{
uchar i=0;
while(s!=0xff)
{
wr_com(0x40+i);
wr_data(s);
s++;
i++;
}
}
/

全屏;
*****************************************************************/
void fill(uchar z) //全屏
{
uchar x,y ;
for(y=0;y<2;y++)
for(x=0;x<20;x++)
{
dot(x,y);
wr_data(z);
}
}

/******************************************************************
清屏;
*****************************************************************/

void clear(void)
{
wr_com(0x01);delay(5);
}

/******************************************************************
字符的输入(5*8)
x–> 水平方向地址数(0~39) ;y–> 垂直方向字符数(0~1);s–>字符代码首地址;
*****************************************************************/
void en_c_r(uchar x,uchar y,uchar code * s)
{
dot(x,y);
while(*s>0&&x<20)
{
wr_data(*s);
s++;
x++;
}
}

/******************************************************************
初始化设置;
*****************************************************************/

void init(void)
{
RS=0;

delay(50);

// RES=1;delay(5);
// RES=1;delay(5);
// RES=1;delay(5);

wr_com(0x38);
delay(5);
wr_com(0x38);
delay(5);
wr_com(0x38);

wr_com(0x38);
wr_com(0x08);
wr_com(0x01);
wr_com(0x06);
wr_com(0x0c);
}

/******************************************************************
主程序;
*****************************************************************/
int main(void)
{
init();
CGR_SET(CGR);
while(1)
{
fill(0x00);delay(700);
fill(0x01);delay(700);
fill(0x02);delay(700);
fill(0x03);delay(700);
fill(0x1f); delay(500);//全显
fill(0x20); //清屏
clear();
en_c_r(0,0,tab1);
en_c_r(0,1,tab3); delay(2000);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值