[活动专区] 【N32G430开发板试用】+驱动0.96OLED

[复制链接]
1024|0
 楼主| 51xlf 发表于 2022-7-24 15:47 | 显示全部楼层 |阅读模式
@安小芯
这里用N32G430实现对0.96寸的OLED的驱动。
111.jpg
在工程代码中使用的是PC13---SCL,PC14---SDA。
使用的是宏定义,方便后期修改和移植代码使用。
  1. #define OLED_SCLK_Pin GPIO_PIN_13
  2. #define OLED_SCLK_GPIO_Port GPIOC
  3. #define OLED_SDIN_Pin GPIO_PIN_14
  4. #define OLED_SDIN_GPIO_Port GPIOC
对SCL和SDA的操作,
  1. #define OLED_SCLK_Clr() GPIO_Pins_Reset(OLED_SCLK_GPIO_Port,OLED_SCLK_Pin)//SCL  拉低
  2. #define OLED_SCLK_Set() GPIO_Pins_Set(OLED_SCLK_GPIO_Port,OLED_SCLK_Pin)  //SCL  拉高

  3. #define OLED_SDIN_Clr() GPIO_Pins_Reset(OLED_SDIN_GPIO_Port,OLED_SDIN_Pin)//SDA  拉低
  4. #define OLED_SDIN_Set() GPIO_Pins_Set(OLED_SDIN_GPIO_Port,OLED_SDIN_Pin)  //SDA  拉高
下面开始初始化IO口的代码
  1.     GPIO_InitType GPIO_InitStructure;

  2.     RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOC);;
  3.     GPIO_InitStructure.Pin = OLED_SCLK_Pin|OLED_SDIN_Pin;
  4.     GPIO_InitStructure.GPIO_Mode     = GPIO_PULL_UP;;
  5.     GPIO_InitStructure.GPIO_Current  = GPIO_DS_8MA;;
  6.     GPIO_InitStructure.GPIO_Slew_Rate=GPIO_SLEW_RATE_FAST;
  7.     GPIO_Peripheral_Initialize(GPIOC, &GPIO_InitStructure);
其他的代码都是可以直接参考oled提供的例程即可。
这里只是提示如何实现汉字和英文的混合显示了。
  1. void OLED_ShowStringCN(uint8_t x,uint8_t y,uint8_t *chr,uint8_t mode)
  2. {   unsigned short k;
  3.     unsigned char i,j;
  4.     while(*chr) {
  5.         if((*chr) < 128)
  6.         {
  7.             OLED_ShowChar(x,y,*chr,16,mode);
  8.             x+=8;
  9.             chr++;
  10.         } else {

  11.             for (k=0; k<hz16_num; k++)
  12.             {
  13.                 if ((hz16[k].Index[0]==*(chr))&&(hz16[k].Index[1]==*(chr+1)))
  14.                 {
  15.                     for(i=0; i<16; i++)
  16.                     {
  17.                         for(j=0; j<8; j++)
  18.                         {
  19.                             if(hz16[k].Msk[i*2]&(0x80>>j))        OLED_DrawPoint(x+j,y+i,mode);
  20.                             else {
  21.                                 OLED_DrawPoint(x+j,y+i,!mode);;
  22.                             }
  23.                         }
  24.                         for(j=0; j<8; j++)
  25.                         {
  26.                             if(hz16[k].Msk[i*2+1]&(0x80>>j))        OLED_DrawPoint(x+j+8,y+i,mode);
  27.                             else
  28.                             {
  29.                                 OLED_DrawPoint(x+j+8,y+i,!mode);;
  30.                             }
  31.                         }
  32.                     }
  33.                 }
  34.             }
  35.             chr+=2;
  36.             x+=16;
  37.         }

  38.     }
  39. }
在main函数中初始化OLED即可,
  1.     OLED_Init();
  2.     OLED_Clear();
  3.     OLED_ShowStringCN(0,0,"国民技术N32G430",1);
  4.     OLED_ShowStringCN(0,16,"BBS.21ic.com",1);
  5.     OLED_Refresh();
112.jpg

取字模的方法。
搜狗截图22年07月24日1545_3.jpg

源代码
N32.rar (361.05 KB, 下载次数: 64)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

551

主题

9967

帖子

24

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