本帖最后由 jinglixixi 于 2017-9-3 17:29 编辑
麒麟座mini开发板出于小巧的考虑没有配置相应的人机交互功能,这里就为其配置一个双色OLED作为显示窗口。由于该器件是以I2C接口进行通讯的,故该器件只有4个引脚。除去电源引脚外,它在工作时只需使用2个GPIO口,是十分节省MCU资源的。为了便于连接,OLED屏与MCU的连接关系为: SCL--A0 SDA--A1 在使用插排的情况下,完全可以将OLED屏插到开发板上,OLED与开发板的连接情况如图1所示。
图1 整体构成
使用GPIO口输出高、低电平的定义语句如下: #define OLED_SCLK_Clr() GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_RESET) //SCL #define OLED_SCLK_Set() GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET) #define OLED_SDIN_Clr() GPIO_WriteBit(GPIOA, GPIO_Pin_1,Bit_RESET) //SDA #define OLED_SDIN_Set() GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET) OLED屏的初始化函数如下: - void OLED_Init(void)
- {
- GPIO_InitTypeDef gpioInitStrcut;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- gpioInitStrcut.GPIO_Mode = GPIO_Mode_Out_PP;
- gpioInitStrcut.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
- gpioInitStrcut.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &gpioInitStrcut);
- OLED_SCLK_Set();
- OLED_SDIN_Set();
- Delay_1ms(800);
- OLED_WR_Byte(0xAE,OLED_CMD);
- OLED_WR_Byte(0x00,OLED_CMD);
- OLED_WR_Byte(0x10,OLED_CMD);
- OLED_WR_Byte(0x40,OLED_CMD);
- OLED_WR_Byte(0xB0,OLED_CMD);
- OLED_WR_Byte(0x81,OLED_CMD);
- OLED_WR_Byte(0xFF,OLED_CMD);
- OLED_WR_Byte(0xA1,OLED_CMD);
- OLED_WR_Byte(0xA6,OLED_CMD);
- OLED_WR_Byte(0xA8,OLED_CMD);
- OLED_WR_Byte(0x3F,OLED_CMD);
- OLED_WR_Byte(0xC8,OLED_CMD);
- OLED_WR_Byte(0xD3,OLED_CMD);
- OLED_WR_Byte(0x00,OLED_CMD);
- OLED_WR_Byte(0xD5,OLED_CMD);
- OLED_WR_Byte(0x80,OLED_CMD);
- OLED_WR_Byte(0xD8,OLED_CMD);
- OLED_WR_Byte(0x05,OLED_CMD);
- OLED_WR_Byte(0xD9,OLED_CMD);
- OLED_WR_Byte(0xF1,OLED_CMD);
- OLED_WR_Byte(0xDA,OLED_CMD);
- OLED_WR_Byte(0x12,OLED_CMD);
- OLED_WR_Byte(0xDB,OLED_CMD);
- OLED_WR_Byte(0x30,OLED_CMD);
- OLED_WR_Byte(0x8D,OLED_CMD);
- OLED_WR_Byte(0x14,OLED_CMD);
- OLED_WR_Byte(0xAF,OLED_CMD);
- }
复制代码为进行汉字显示,可使用字模提取软件“PCtoLCD2002”来构建用户自己的小字库,其界面如图2所示。
图2 字模提取
与小字库配合的汉字显示函数为: - 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;
- }
- }
复制代码显示效果的主函数为: - int main(void)
- {
- Hardware_Init();
- OLED_Init();
- OLED_Clear();
- OLED_ShowCHinese(10,0,0);
- OLED_ShowCHinese(28,0,1);
- OLED_ShowCHinese(46,0,2);
- OLED_ShowCHinese(64,0,3);
- OLED_ShowCHinese(82,0,4);
- OLED_ShowCHinese(100,0,5);
- OLED_ShowString(18,3,"JINGLIXIXI",16);
- OLED_ShowString(20,5,"2017/09/01",16);
- while(1)
- {
- Led2_Set(LED_ON);DelayXms(500);Led2_Set(LED_OFF);
- Led3_Set(LED_ON);DelayXms(500);Led3_Set(LED_OFF);
- Led4_Set(LED_ON);DelayXms(500);Led4_Set(LED_OFF);
- Led5_Set(LED_ON);DelayXms(500);Led5_Set(LED_OFF);
- }
- }
复制代码在与SHT20温湿度传感器的配合下,使用OLED屏可对温湿度进行显示,其效果如图3所示。 后面我们将以此为基础,来完成一个温湿度控制器。
图3 显示温湿度
|