【 NUCLEO-F446RE 试用体验】驱动庆科扩展板I2C接口的OLED屏

  • donatello
  • LV6工程师
  • |      2017-11-08 23:29:26
  • 浏览量 870
  • 回复:0
庆科扩展板上面有一个非常好用的显示器件——黄青双色OLED屏,与淘宝上售卖的双色OLED屏完全相同,程序兼容,第一行是黄色,后面三行是青色。本次试用帖就以OLED屏出发,通过模拟I2C总线驱动I2C器件。 OLED的硬件地址是0x78(八位地址),写入的数据由两个寄存器负责:0x40号寄存器负责接收八位指令,如收到0xae——关闭OLED面板,收到0xaf——开启OLED显示等等;0x00号寄存器负责接收八位数据。OLED的画点是按照这个顺序进行的:确定初始化坐标位置——竖向画点,0x00号寄存器每收到一个数据就往右移一竖排,一竖排八个点,从低位置开始到高位置结束。了解了这几点之后,可以先进行简单的刷屏指令:

void OLED_Fill()

{

int i,n;

for(i=0;i<8;i++)

{

OLED_WR_Byte(0xb0+i,0);

OLED_WR_Byte(0x00,0);

OLED_WR_Byte(0x10,0);

for(n=0;n<128;n++)OLED_WR_Byte(0xff,1);

}

}

8次大循环标示OLED的8行,三条命令标示每行的起始位置,128次小循环则是纵向的128竖排。刷屏搞定了,那就可以进行ASCII码字符串的显示了,我们先来排一下从0x20-0x94的ASCII码:
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~
将这行乱糟糟的东西复制进取模软件中: 排列出来的字模就是按照ASCII码排序的: 结合刷屏原理,写出ASCII显示函数:

void OLED_ShowASCII(int x,int y,char n)

{

int i=0,m;

n-=0x20;

m=n*16;

OLED_Set_Pos(x,y);

for(i=m;i

{

OLED_WR_Byte(ASCIIChar,1);

}

OLED_Set_Pos(x,y+1);

for(i=m+8;i

{

OLED_WR_Byte(ASCIIChar,1);

}

}

void OLED_ShowString(int x,int y,char s)

{

int i;

for(i=0;s!='\0';i++)

OLED_ShowASCII(x+i*8,y,s);

}

这就可以完成初步的ASCII码显示了。 汉字显示同理,大家自己摸索。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子

上海固越电子科技有限公司 版权所有©       投诉、举报邮箱:contact@icxbk.com       客服、投诉、举报电话:021-31029100-9104

经营增值电信业务试点批复:沪通信管自贸[2019]24号 出版物经营许可证:新出发沪批字第Y8445号

沪ICP备18038102号  沪公网安备 31011702004806号 |营业执照