@安小芯
这里用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, 下载次数: 64)
|