打印
[活动专区]

【N32G430开发板试用】+驱动0.96OLED

[复制链接]
708|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51xlf|  楼主 | 2022-7-24 15:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
@安小芯
这里用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)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

534

主题

9560

帖子

23

粉丝