【点亮OLED显示屏】
瑞萨 RA4M2 支持硬件 I2C,开发板上有 I2C OLED 屏接口,可以接入 OLED 屏使用,如下:

P408、P409 设置为I2C接口,开漏输出
P112 设置为 DHT11 单总线接口
OLED 驱动代码如下:
void OLED_SSD1306_Init(void)
{
u8 i;
OLED_SSD1306_IIC_Init();
for (i=0; i<sizeof(OLED_SSD1306_CONFIG_TABLE); i++)
{
OLED_SSD1306_W_CMD(OLED_SSD1306_CONFIG_TABLE[i]);
}
}
void OLED_SSD1306_CLEAR(u8 color)
{
u8 i;
for(i=0; i<8; i++)
{
OLED_SSD1306_SetXY(0, i);
OLED_SSD1306_FillnB(color, 128);
}
}
void OLED_SSD1306_Draw(void* buf, u8 x, u8 page, u8 w, u8 h)
{
u8 i, *img;
img = buf;
for(i=0; i<(h>>3); i++)
{
OLED_SSD1306_SetXY(x, (u8)(page+i));
OLED_SSD1306_WritenB(0x40, img, w);
img+=w;
}
}
DHT11 驱动代码如下:
sret DHT11_Read(u8* dat)
{
u8 t, i, j, d, sum;
if (dat == NULL) return SR_ERR_PARAM;
DHT11_DAT_L;
DHT11_DELAY_MS(19); // DHT11: Min: 18ms, type: 20ms, Max: 30ms; DHT22: Min: 0.8ms, type: 1ms, Max: 20ms
DHT11_DAT_H;
DHT11_DELAY(5);
DHT11_WAIT(DHT11_DAT_R, 90); // DHT11: Min: 10us, type: 13us, Max: 35us; DHT22: Min: 25us, type: 30us, Max: 45us
DHT11_WAIT(!DHT11_DAT_R, 180); // DHT11: Min: 78us, type: 83us, Max: 88us; DHT22: Min: 75us, type: 80us, Max: 85us
DHT11_WAIT(DHT11_DAT_R, 190); // DHT11: Min: 80us, type: 87us, Max: 92us; DHT22: Min: 75us, type: 80us, Max: 85us
sum = 0;
d = 0;
for (j=0; j<5; j++)
{
sum += d;
d = 0;
for (i=0; i<8; i++)
{
DHT11_WAIT(!DHT11_DAT_R, 120); // DHT11: Min: 50us, type: 54us, Max: 58us; DHT22: Min: 48us, type: 50us, Max: 55us
DHT11_WAIT(DHT11_DAT_R, 150); // DHT11: 0: Min: 23us, type: 24us, Max: 27us; 1: Min: 68us, type: 71us, Max: 74us; DHT22: 0: Min: 22us, type: 26us, Max: 30us; 1: Min: 68us, type: 70us, Max: 75us
d <<= 1;
if (t > 45) d |= 0x01;
}
*dat++ = d;
}
if (sum != d)
{
return SR_ERR_CHECK;
}
DHT11_WAIT(!DHT11_DAT_R, 110); // DHT11: Min: 52us, type: 54us, Max: 56us; DHT22: Min: 45us, type: 50us, Max: 55us
return SR_OK;
}