本帖最后由 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 显示效果
|