@安小芯
这里用N32G430实现对0.96寸的OLED的驱动。
在工程代码中使用的是PC13---SCL,PC14---SDA。
使用的是宏定义,方便后期修改和移植代码使用。
#define OLED_SCLK_Pin GPIO_PIN_13
#define OLED_SCLK_GPIO_Port GPIOC
#define OLED_SDIN_Pin GPIO_PIN_14
#define OLED_SDIN_GPIO_Port GPIOC
对SCL和SDA的操作,
#define OLED_SCLK_Clr() GPIO_Pins_Reset(OLED_SCLK_GPIO_Port,OLED_SCLK_Pin)//SCL 拉低
#define OLED_SCLK_Set() GPIO_Pins_Set(OLED_SCLK_GPIO_Port,OLED_SCLK_Pin) //SCL 拉高
#define OLED_SDIN_Clr() GPIO_Pins_Reset(OLED_SDIN_GPIO_Port,OLED_SDIN_Pin)//SDA 拉低
#define OLED_SDIN_Set() GPIO_Pins_Set(OLED_SDIN_GPIO_Port,OLED_SDIN_Pin) //SDA 拉高
下面开始初始化IO口的代码
GPIO_InitType GPIO_InitStructure;
RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOC);;
GPIO_InitStructure.Pin = OLED_SCLK_Pin|OLED_SDIN_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_PULL_UP;;
GPIO_InitStructure.GPIO_Current = GPIO_DS_8MA;;
GPIO_InitStructure.GPIO_Slew_Rate=GPIO_SLEW_RATE_FAST;
GPIO_Peripheral_Initialize(GPIOC, &GPIO_InitStructure);
其他的代码都是可以直接参考oled提供的例程即可。
这里只是提示如何实现汉字和英文的混合显示了。
void OLED_ShowStringCN(uint8_t x,uint8_t y,uint8_t *chr,uint8_t mode)
{ unsigned short k;
unsigned char i,j;
while(*chr) {
if((*chr) < 128)
{
OLED_ShowChar(x,y,*chr,16,mode);
x+=8;
chr++;
} else {
for (k=0; k<hz16_num; k++)
{
if ((hz16[k].Index[0]==*(chr))&&(hz16[k].Index[1]==*(chr+1)))
{
for(i=0; i<16; i++)
{
for(j=0; j<8; j++)
{
if(hz16[k].Msk[i*2]&(0x80>>j)) OLED_DrawPoint(x+j,y+i,mode);
else {
OLED_DrawPoint(x+j,y+i,!mode);;
}
}
for(j=0; j<8; j++)
{
if(hz16[k].Msk[i*2+1]&(0x80>>j)) OLED_DrawPoint(x+j+8,y+i,mode);
else
{
OLED_DrawPoint(x+j+8,y+i,!mode);;
}
}
}
}
}
chr+=2;
x+=16;
}
}
}
在main函数中初始化OLED即可,
OLED_Init();
OLED_Clear();
OLED_ShowStringCN(0,0,"国民技术N32G430",1);
OLED_ShowStringCN(0,16,"BBS.21ic.com",1);
OLED_Refresh();
取字模的方法。
源代码
N32.rar
(361.05 KB)
|