爱板网论坛

查看: 2260|回复: 2

[中移One NET] 麒麟座开发板的OLED屏显示

[复制链接]

100

主题

2

好友

2404

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 514 天

    连续签到: 51 天

    [LV.9]以坛为家II

    爱板会员勋章 活跃会员勋章

    发表于 2017-9-3 17:26:53 |显示全部楼层
    本帖最后由 jinglixixi 于 2017-9-3 17:29 编辑

           麒麟座mini开发板出于小巧的考虑没有配置相应的人机交互功能,这里就为其配置一个双色OLED作为显示窗口。由于该器件是以I2C接口进行通讯的,故该器件只有4个引脚。除去电源引脚外,它在工作时只需使用2个GPIO口,是十分节省MCU资源的。为了便于连接,OLED屏与MCU的连接关系为:
    SCL--A0
    SDA--A1
          在使用插排的情况下,完全可以将OLED屏插到开发板上,OLED与开发板的连接情况如图1所示。

    图片1.png

    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.png

    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.png

    3 显示温湿度

    回复

    使用道具 举报

    25

    主题

    10

    好友

    3313

    积分

    超级版主

    Rank: 8Rank: 8

    该用户从未签到

    发表于 2017-9-5 13:57:03 |显示全部楼层
    期待你的控制器
    回复

    使用道具 举报

    100

    主题

    2

    好友

    2404

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 514 天

    连续签到: 51 天

    [LV.9]以坛为家II

    爱板会员勋章 活跃会员勋章

    发表于 2017-9-5 17:42:17 |显示全部楼层
    ky123 发表于 2017-9-5 13:57
    期待你的控制器

    好的尽快发!正完成温湿度曲线绘制功能那!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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

    手机版|爱板网 |网站地图  

    GMT+8, 2017-11-23 13:13 , Processed in 0.606264 second(s), 12 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部