本帖最后由 muyichuan2012 于 2024-12-25 18:50 编辑
大伙都有OLED,好像不来一次OLED的测试都有点不好意思
那就OLED测试水一篇吧(模拟IIC),点亮效果先来一张
21IC还是非常强大的喔
接下来看下我们的数据吧
#define OLED_CMD 0 //写命令
#define OLED_DATA 1 //写数据
//-----------------OLED端口定义----------------
#define OLED_SCL_Clr() gpio_bits_reset(GPIOB,GPIO_PINS_8)
#define OLED_SCL_Set() gpio_bits_set(GPIOB,GPIO_PINS_8)
#define OLED_SDA_Clr() gpio_bits_reset(GPIOB,GPIO_PINS_9)
#define OLED_SDA_Set() gpio_bits_set(GPIOB,GPIO_PINS_9)
上面的0/1就是字面意思(分别表示下一笔数据是cmd还是data),我们的GPIO用的是B口的8/9
//发送一个字节
//向SSD1306写入一个字节。
//mode:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 mode)
{
I2C_Start();
Send_Byte(0x78);//Slave address
I2C_WaitAck();
if(mode){Send_Byte(0x40);}
else{Send_Byte(0x00);}
I2C_WaitAck();
Send_Byte(dat);
I2C_WaitAck();
I2C_Stop();
}
上面一段可以看到我们的看到//Slave address为0X78(8BIT)
OLED_Init();//初始化OLED
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
接下来就是main函数的显示内容
while(1)
{
OLED_ShowString1(0,0,"21ic ",16);
for(i=0;i<6;i++)
OLED_ShowChinese(i*16+32,0,i+2,16);
OLED_ShowString1(0,16,"21ic-21IC rgbLED",16);
for(i=0;i<3;i++)
OLED_ShowChinese(i*16,4,i+9,16);
OLED_ShowString1(56,32,"AT32L021",16);
OLED_ShowString1(0,48,"2024-12-25",16);
at32_led_toggle(LED2);
Delay_ms(200);
at32_led_toggle(LED3);
Delay_ms(200);
at32_led_toggle(LED4);
Delay_ms(200);
}
手机拍照有点闪,将就看吧
OLED.zip
(1.61 MB)
|