本帖最后由 芯圣电子官方QQ 于 2023-7-20 09:40 编辑
OLED屏大体分为2种,一是基于I2C接口的;另一类则是SPI接口的。 为此,用HC89F0541开发板做了一下简单的尝试。 该OLED屏与MCU的连接关系为: CS --- P2_4 RST --- P3_5 DC --- P3_4 SCLK ---P3_3 SDIN ---P1_7
显示字符函数为: - void OLED_ShowChar(u8 x,u8 y,u8 chr)
- {
- unsigned char c=0,i=0;
- c=chr-' ';
- if(x>Max_Column-1){x=0;y=y+2;}
- if(SIZE ==16)
- {
- OLED_Set_Pos(x,y);
- for(i=0;i<8;i++)
- OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
- OLED_Set_Pos(x,y+1);
- for(i=0;i<8;i++)
- OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
- }
- else
- {
- OLED_Set_Pos(x,y+1);
- for(i=0;i<6;i++)
- OLED_WR_Byte(F6x8[c][i],OLED_DATA);
-
- }
- }
显示字符串的函数为: - void OLED_ShowString(u8 x,u8 y,u8 *chr)
- {
- unsigned char j=0;
- while (chr[j]!='\0')
- { OLED_ShowChar(x,y,chr[j]);
- x+=8;
- if(x>120){x=0;y+=2;}
- j++;
- }
- }
显示汉字的函数为: - void OLED_ShowCHinese(u8 x,u8 y,u8 no)
- {
- u8 t,adder=0;
- OLED_Set_Pos(x,y);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
- adder+=1;
- }
- OLED_Set_Pos(x,y+1);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
- adder+=1;
- }
- }
若主程序如下: - void main(void)
- {
- unsigned char i;
- while((CLKCON&0x20)!=0x20);
- CLKSWR = 0x51;
- while((CLKSWR&0xC0)!=0x40);
- CLKDIV = 0x01;
-
- P2M4 = 0xC2;
- P3M5 = 0xC2;
- P3M4 = 0xC2;
- P3M3 = 0xC2;
- P1M7 = 0xC2;
-
- delay_ms(5000);
- OLED_Init();
-
- while(1)
- {
- OLED_Clear();
- OLED_ShowString(22,0,"OLED TEST");
- OLED_ShowString(8,2," Jinglixixi");
- OLED_ShowString(20,4,"2020/07/01");
- delay_ms(50000);
- OLED_Clear();
- OLED_ShowCHinese(0,0,0);
- OLED_ShowCHinese(18,0,1);
- OLED_ShowCHinese(36,0,2);
- OLED_ShowCHinese(54,0,3);
- OLED_ShowCHinese(72,0,4);
- OLED_ShowCHinese(90,0,5);
- OLED_ShowCHinese(108,0,6);
- delay_ms(50000);
- }
- }
则OLED屏显示中文字符,如图1所示。 图1 中文显示
显示字符串信息,图2所示。 图2 字符串显示
当使用I2C接口的OLED屏时,使OLED屏与MCU的连接关系为: SDA --- P3_5 SCK --- P3_4
在使用相同中文字库的情况下,也可显示出中文,如图3所示。 图3 中文显示
结论:两种接口的OLED屏在SDK-HC89F0541开发板上均可实现显示功能,只是I2C接口的要更节省些GPIO资源。值得注意的是在定义字库时,其存储数组应定义为uc8型,否则容易出现异常。
|