恍惚间仿佛听到了先生当年的成名美曲,不禁感叹,至此撸码一篇,以表怀念!
成品效果:
![](https://img-blog.csdnimg.cn/5b1230e7b0ee42c6995bdf47fa5d16fd.png)
开始:伸手摸到角落里的SSD1306_OLED,鬼脑一开 start:
1.因SSD1306_OLED模块支持IIC协议,想要完成坤坤显示则需要据IIC时序封装函数,方便调用;
![](https://img-blog.csdnimg.cn/603edeb7f91648e48f60206b0e02557c.png)
![](https://img-blog.csdnimg.cn/5d88f1aa541f472b95b9d6124668f95f.png)
![](https://img-blog.csdnimg.cn/23e5dc95760f41969b7a8f96622ef5e4.png)
//封装这些函数作用:根据时序图,通过单片机控制sda scl高低电平以及持续时间,
//让模块判断到各种信号;进行:开始/结束/应答/数据发送 等操作
sbit sda=P3^0;
sbit scl=P3^1;
void IICstart()
{
scl = 0; //先让为低电平避免读取杂乱数据,导致花屏;开始看可以忽略这一句;
scl = 1;
sda = 1;
_nop_();//115200mhz 空函数需要大概5us;
sda = 0;
_nop_();
}
void IICend()
{
scl = 0;//先让为低电平避免读取杂乱数据,导致花屏;开始看可以忽略这一句;
scl = 1;
sda = 0;
_nop_();
sda = 1;
_nop_();
}
char ACKcheck () //应答位判断
{
char flag;
sda = 1;
_nop_();
scl = 1;
_nop_();
flag = sda;
_nop_();
scl = 0;
_nop_();
return flag;
}
//发送1字节
void IIC_Send_Byte(char sendByte)
{
int i;
for(i=0;i |