IIC接口的OLED是平时实验中常用的显示设备,和开发板只需要四根线连接,VCC、GND、SDA、SCL。而且所使用的IIC经常采用软件模拟的方式实现。本次移植就是利用N32L436的两个IO口模拟IIC总线,实现对OLED的控制。电路连接如下所示:
厂家对于OLED有晚上的控制程序,本次移植主要对接口的定义进行移植。
一下代码是IO口的定义,分别用PA0和PA1作为SDA和SCL。
GPIO_InitType GPIO_InitStructure;
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
此外,为便于编程,对SCL和SDA的高低电平进行宏定义。
#define OLED_SCL_Clr() GPIOA->PBC = GPIO_PIN_0
#define OLED_SCL_Set() GPIOA->PBSC = GPIO_PIN_0
#define OLED_SDA_Clr() GPIOA->PBC = GPIO_PIN_1
#define OLED_SDA_Set() GPIOA->PBSC = GPIO_PIN_1
在程序中,使用指令,控制OLED显示文字及曲线。代码如下:
int main(void)
{
uint8_t i;
delay_init();
led_init();
OLED_Init();
OLED_ColorTurn(0);
OLED_DisplayTurn(0);
while (1)
{
OLED_Clear();
OLED_ShowChinese(24,0,0,16,1);
OLED_ShowChinese(40,0,1,16,1);
OLED_ShowChinese(56,0,2,16,1);
OLED_ShowChinese(72,0,3,16,1);
OLED_ShowChinese(88,0,4,16,1);
OLED_ShowChinese(32,20,5,16,1);
OLED_ShowChinese(48,20,6,16,1);
OLED_ShowChinese(64,20,7,16,1);
OLED_ShowChinese(80,20,8,16,1);
OLED_ShowString(32,40,"N32L436",16,1);
OLED_Refresh();
delay_ms(500);
delay_ms(500);
for(i=0;i<20;i++)
{
OLED_Clear();
OLED_DrawCircle(64, 32, i);
OLED_Refresh();
delay_ms(100);
}
delay_ms(200);
}
}
最终实现的效果如下: