OLED屏是一种小巧的显示器件,特别是I2C接口的OLED 屏更能节省I/O口资源。本次使用的是一款0.91'的单色OLED屏,它比常规的OLED屏要长且窄,故更适于显示信息和参数,也更适于用在便携装置上。 1. OLED屏显示 1)OLED屏与NV32F100的连接关系如下: SCL --- PA5 SDA --- PA6 2)为进行显示定义引脚输出高低电平的语句为: #defineOLED_SCLK_Clr() GPIO_PinClear(GPIO_PTE1); #defineOLED_SCLK_Set() GPIO_PinSet(GPIO_PTE1);
#defineOLED_SDIN_Clr() GPIO_PinClear(GPIO_PTE0); #defineOLED_SDIN_Set() GPIO_PinSet(GPIO_PTE0);
3)OLED屏初始化函数为: - void OLED_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- __HAL_RCC_GPIOA_CLK_ENABLE();
- GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- OLED_SCLK_Set();
- OLED_SDIN_Set();
- Delay_1ms(800);
- OLED_WR_Byte(0xAE,OLED_CMD);//--display off
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
- OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
- OLED_WR_Byte(0x81,OLED_CMD); // contract control
- OLED_WR_Byte(0xFF,OLED_CMD);//--128
- OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
- OLED_WR_Byte(0x1F,OLED_CMD);//--1/32 duty
- OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
- OLED_WR_Byte(0x00,OLED_CMD);//
- OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
- OLED_WR_Byte(0xF0,OLED_CMD);//
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
- OLED_WR_Byte(0x22,OLED_CMD);//
- OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
- OLED_WR_Byte(0x02,OLED_CMD);//
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
- OLED_WR_Byte(0x49,OLED_CMD);//
- OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
- OLED_WR_Byte(0x14,OLED_CMD);//
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
- OLED_Clear();
- }
复制代码
4)汉字显示函数为: - void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
- {
- unsigned char t,adder=0;
- OLED_Set_Pos(x,y);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
- adder+=1;
- }
- OLED_Set_Pos(x,y+1);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
- adder+=1;
- }
- }
复制代码
2. 字模提取 为了显示汉字,需要提前相应的字模,以PCtoLCD2002字模提取软件为例,在提取前需按图1所示来进行设置。 图1 格式设置
1)录入需显示的内容,如图2所示。 图2 输入提取内容
2)编写显示函数,其内容为: - void cd()
- {
- OLED_ShowCHinese(18,0,0);
- OLED_ShowCHinese(36,0,1);
- OLED_ShowCHinese(54,0,2);
- OLED_ShowCHinese(72,0,3);
- OLED_ShowCHinese(90,0,4);
-
- OLED_ShowCHinese(18,2,5);
- OLED_ShowCHinese(36,2,6);
- OLED_ShowCHinese(54,2,7);
- OLED_ShowCHinese(72,2,8);
- OLED_ShowCHinese(90,2,9);
- }
复制代码
3)编写主程序,其代码如下: - int main(void)
- {
- HAL_Init();
- /* Configure the system clock to 80 MHz */
- SystemClock_Config();
- OLED_Init();
- OLED_Clear();
- cd();
- while (1);
- }
复制代码
4)下载并运行后,其效果如图3所示。 图3 显示效果
工程代码:
|