本帖最后由 jinglixixi 于 2020-8-30 00:58 编辑
Mega4809Curiosity Nao 开发板是一款近于最小系统的核心板,因此其资源基本可以完全供用户使用。 为使该开发板有一个可供直接观查的窗口,故为它配置了一个OLED显示屏。此外,值得指出的是在程序下载时是不可带着显示屏的,否则无法进行下载。 要在该开发板上驱动OLED屏显示,要完成的主要有3件事: 1)指定驱动OLED屏的I/O口 2)设置延时程序 3)配置OLED屏的显示函数 1. 驱动引脚的配置 为驱动OLED屏,所使用的2个I/O口是PF3和PF4,对应的连接关系为: SDA---PF3 SCL---PF4 引脚配置如图1所示
图1 引脚配置 2.设置延时 按图2 所示,使用系统的资源可生成延时函数,所得到的毫秒级的延时函数为: void DELAY_milliseconds(uint16_t milliseconds)
{
while(milliseconds--){
_delay_ms(1);
}
}
图2 生成延时函数
3. 配置显示函数 由于本次所使用的OLED屏是I2C接口的,使用只需I/O口即可模拟产生。 其中的IIC_Start()函数和IIC_Stop()函数的内容如下: void IIC_Start()
{
SCL_SetHigh();
SDA_SetHigh();
SDA_SetLow();
SCL_SetLow();
}
void IIC_Stop()
{
SCL_SetLow();
SDA_SetLow();
SCL_SetHigh();
SDA_SetHigh();
}
OLED屏的初始化函数为: void OLED_Init(void)
{
DELAY_milliseconds(500);
OLED_WrCmd(0xae);
OLED_WrCmd(0x00);
OLED_WrCmd(0x10);
OLED_WrCmd(0x40);
OLED_WrCmd(0x81);
OLED_WrCmd(Brightness);
OLED_WrCmd(0xa1);
OLED_WrCmd(0xc8);
OLED_WrCmd(0xa6);
OLED_WrCmd(0xa8);
OLED_WrCmd(0x3f);
OLED_WrCmd(0xd3);
OLED_WrCmd(0x00);
OLED_WrCmd(0xd5);
OLED_WrCmd(0x80);
OLED_WrCmd(0xd9);
OLED_WrCmd(0xf1);
OLED_WrCmd(0xda);
OLED_WrCmd(0x12);
OLED_WrCmd(0xdb);
OLED_WrCmd(0x40);
OLED_WrCmd(0x20);
OLED_WrCmd(0x02);
OLED_WrCmd(0x8d);
OLED_WrCmd(0x14);
OLED_WrCmd(0xa4);
OLED_WrCmd(0xa6);
OLED_WrCmd(0xaf);
OLED_Fill(0x00);
OLED_Set_Pos(0,0);
}
显示图3所示效果的主程序为: int main(void)
{
/* Initializes MCU, drivers and middleware */
SYSTEM_Initialize();
OLED_Init();
OLED_CLS();
OLED_P8x16Str(0,0,"ATmega4809");
OLED_P8x16Str(0,2,"OLED Display");
/* Replace with your application code */
while (1){
LED_Toggle();
DELAY_milliseconds(500);
}
}
图3 显示效果
|