2回答

1收藏

麒麟座开发板的OLED屏显示

物联网 物联网 6283 人阅读 | 2 人回复 | 2017-09-03

本帖最后由 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屏的初始化函数如下:
  1. void OLED_Init(void)
  2. {
  3.         GPIO_InitTypeDef gpioInitStrcut;
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);               
  5.         gpioInitStrcut.GPIO_Mode = GPIO_Mode_Out_PP;        
  6.         gpioInitStrcut.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;        
  7.         gpioInitStrcut.GPIO_Speed = GPIO_Speed_50MHz;                                                                        
  8.         GPIO_Init(GPIOA, &gpioInitStrcut);        
  9.         OLED_SCLK_Set();
  10.         OLED_SDIN_Set();        
  11.         Delay_1ms(800);
  12.         OLED_WR_Byte(0xAE,OLED_CMD);
  13.         OLED_WR_Byte(0x00,OLED_CMD);
  14.         OLED_WR_Byte(0x10,OLED_CMD);
  15.         OLED_WR_Byte(0x40,OLED_CMD);  
  16.         OLED_WR_Byte(0xB0,OLED_CMD);
  17.         OLED_WR_Byte(0x81,OLED_CMD);
  18.         OLED_WR_Byte(0xFF,OLED_CMD);   
  19.         OLED_WR_Byte(0xA1,OLED_CMD);
  20.         OLED_WR_Byte(0xA6,OLED_CMD);
  21.         OLED_WR_Byte(0xA8,OLED_CMD);
  22.         OLED_WR_Byte(0x3F,OLED_CMD);
  23.         OLED_WR_Byte(0xC8,OLED_CMD);
  24.         OLED_WR_Byte(0xD3,OLED_CMD);
  25.         OLED_WR_Byte(0x00,OLED_CMD);
  26.         OLED_WR_Byte(0xD5,OLED_CMD);
  27.         OLED_WR_Byte(0x80,OLED_CMD);
  28.         OLED_WR_Byte(0xD8,OLED_CMD);
  29.         OLED_WR_Byte(0x05,OLED_CMD);
  30.         OLED_WR_Byte(0xD9,OLED_CMD);
  31.         OLED_WR_Byte(0xF1,OLED_CMD);
  32.         OLED_WR_Byte(0xDA,OLED_CMD);
  33.         OLED_WR_Byte(0x12,OLED_CMD);
  34.         OLED_WR_Byte(0xDB,OLED_CMD);
  35.         OLED_WR_Byte(0x30,OLED_CMD);
  36.         OLED_WR_Byte(0x8D,OLED_CMD);
  37.         OLED_WR_Byte(0x14,OLED_CMD);
  38.         OLED_WR_Byte(0xAF,OLED_CMD);
  39. }
复制代码
为进行汉字显示,可使用字模提取软件“PCtoLCD2002”来构建用户自己的小字库,其界面如图2所示。

2 字模提取

与小字库配合的汉字显示函数为:
  1. void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
  2. {                                 
  3.         unsigned char t,adder=0;
  4.         OLED_Set_Pos(x,y);        
  5.         for(t=0;t<16;t++)
  6.         {
  7.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
  8.                                 adder+=1;
  9.         }        
  10.         OLED_Set_Pos(x,y+1);        
  11.        for(t=0;t<16;t++)
  12.         {        
  13.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
  14.                                 adder+=1;
  15.         }                                       
  16. }
复制代码
显示效果的主函数为:
  1. int main(void)
  2. {
  3.         Hardware_Init();                                                                                       
  4.         OLED_Init();                        
  5.         OLED_Clear();
  6.         OLED_ShowCHinese(10,0,0);   
  7.         OLED_ShowCHinese(28,0,1);  
  8.         OLED_ShowCHinese(46,0,2);  
  9.         OLED_ShowCHinese(64,0,3);  
  10.         OLED_ShowCHinese(82,0,4);  
  11.         OLED_ShowCHinese(100,0,5);  
  12.         OLED_ShowString(18,3,"JINGLIXIXI",16);  
  13.         OLED_ShowString(20,5,"2017/09/01",16);  
  14.         while(1)
  15.         {
  16.                 Led2_Set(LED_ON);DelayXms(500);Led2_Set(LED_OFF);               
  17.                 Led3_Set(LED_ON);DelayXms(500);Led3_Set(LED_OFF);        
  18.                 Led4_Set(LED_ON);DelayXms(500);Led4_Set(LED_OFF);                                
  19.                 Led5_Set(LED_ON);DelayXms(500);Led5_Set(LED_OFF);        
  20.         }
  21. }
复制代码
在与SHT20温湿度传感器的配合下,使用OLED屏可对温湿度进行显示,其效果如图3所示。
后面我们将以此为基础,来完成一个温湿度控制器。

3 显示温湿度

分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

ky123

发表于 2017-9-5 13:57:03 | 只看该作者

期待你的控制器
板凳

jinglixixi

发表于 2017-9-5 17:42:17 | 只看该作者

ky123 发表于 2017-9-5 13:57
期待你的控制器

好的尽快发!正完成温湿度曲线绘制功能那!
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条