[51单片机] 51单片机驱动OLED的问题

[复制链接]
739|0
 楼主| 比神乐 发表于 2022-9-23 23:11 | 显示全部楼层 |阅读模式
OLED是I2C接口的,单片机是STC12C5A56S2.
我现在可以显示单个字符,可是显示字符串就不行。
显示字符的程序如下:
  1. //在指定位置显示一个字符,包括部分字符

  2. //x:0~127

  3. //y:0~63

  4. //mode:0,反白显示;1,正常显示                                 

  5. //size:选择字体 16/12

  6. void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size)

  7. {              

  8.         uint8_t c=0,i=0;        

  9.         c=chr-' ';//得到偏移后的值                        

  10.         if(x>Max_Column-1)

  11.         {

  12.                 x = 0;

  13.                 y = y+2;

  14.         }

  15.         if(Char_Size == 16)

  16.         {

  17.                 OLED_Set_Pos(x, y);        

  18.                 for(i=0; i<8; i++)

  19.                         OLED_WR_Byte(F8X16[c*16 + i], OLED_DATA);

  20.                

  21.                 OLED_Set_Pos(x, y+1);

  22.                 for(i=0; i<8; i++)

  23.                         OLED_WR_Byte(F8X16[c*16 + i + 8], OLED_DATA);

  24.         }

  25.         else

  26.         {        

  27.                 OLED_Set_Pos(x, y);

  28.                 for(i=0; i<6; i++)

  29.                         OLED_WR_Byte(F6x8[c][i], OLED_DATA);

  30.         }

  31. }
显示字符串的程序如下:
  1. //显示一个字符号串

  2. void OLED_ShowString(uint8_t x, uint8_t y, uint8_t *chr, uint8_t Char_Size)

  3. {

  4.         uint8_t j=0;

  5.         while (chr[j] != '\0')

  6.         {               

  7.                 OLED_ShowChar(x, y, chr[j], Char_Size);

  8.                 x += 8;

  9.                 if(x>120)

  10.                 {

  11.                         x=0;

  12.                         y+=2;

  13.                 }

  14.                 j++;

  15.         }

  16. }
请高手指教,我确实想不出来了。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部