jinglixixi 发表于 2018-4-23 09:41

【新版CH554评测】CH554开发板实现OLED屏显示

<div class='showpostmsg'> 本帖最后由 jinglixixi 于 2018-4-23 15:16 编辑

在步进电机的控制中,离不开人机交互,以OLED屏为显示器件可以满足此类需求。这里选用I2C接口双色屏,它可以比SPI接口的OLED屏更节省I/O引脚,且在显示时可以色彩来区分功能标识和工作参数。由于CH554的程序存储空间并不是很大,因此不便在程序中来存放中文字库,所以其提示信息宜采用英文提示或汉语拼音。该制作中,其工作界面如下图所示。在界面中看设置电机转动的方向及转动圈数。
为避开引脚的重叠,这里为OLED屏分配的引脚是P1.0和P1.1,其中P1.0与时钟引脚连接,P1.1与数据端连接。对引脚的相关定义如下:sbit scl = P1^0;sbit sda = P1^1;
#define OLED_SCLK_Clr() scl =0   #define OLED_SCLK_Set() scl =1
#define OLED_SDIN_Clr() sda =0   #define OLED_SDIN_Set() sda =1
为节省存储空间,所用的显示字模为6*8的点阵,相应的字符显示函数如下:void OLED_ShowChar(unsigned char x,unsigned char y,unsigned char chr,unsigned char Char_Size)
{            
                  unsigned char c=0,i=0;      
                  c=chr-' ';               
                  if(x>Max_Column-1){x=0;y=y+2;}
                  if(Char_Size ==6)
                  {      
                              OLED_Set_Pos(x,y);
                              for(i=0;i<6;i++)
                              OLED_WR_Byte(F6x8,OLED_DATA);
                  }
}

   对应的数值显示函数为:void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len,unsigned char size2)
{               
      unsigned char t,temp;
      unsigned char enshow=0;                                                   
      for(t=0;t<len;t++)
      {
                temp=(num/oled_pow(10,len-t-1))%10;
                if(enshow==0&&t<(len-1))
                {
                        if(temp==0)
                        {
                              OLED_ShowChar(x+6*t,y,' ',size2);
                              continue;
                        }else enshow=1;
                        
                }
               OLED_ShowChar(x+6*t,y,temp+'0',size2);
      }
}

对应的字符串显示函数为:void OLED_ShowString(unsigned char x,unsigned char y,unsigned char *chr,unsigned char Char_Size)
{
      unsigned char j=0;
      while (chr!='\0')
      {                OLED_ShowChar(x,y,chr,Char_Size);
                        x+=8;
                        if(x>120){x=0;y+=2;}
                        j++;
      }
}

对应的界面显示程序如下:OLED_Init();                        
      OLED_Clear();
      OLED_ShowString(0,0,"MOTOR CONTROL",6);
      OLED_ShowString(0,2,"Direction: +",6);
      OLED_ShowString(0,4,"Number of turns:",6);      
      k=0;
      // 模拟转动圈数显示
      while(k<100)
      {
               k=k+1;
                OLED_ShowNum(0,10,k,3,6);
                mDelaymS(200);
      }
当然为了进行参数的设置,还需配置对应的触摸键处理程序。

此内容由EEWORLD论坛网友jinglixixi原创,如需转载或用于商业用途需征得作者同意并注明出处

</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

xy598646744 发表于 2018-4-23 09:51

ch554带哪些外设?

我爱下载 发表于 2018-4-23 11:11

顶一下,你这个oled接口挺简单,不知道您是如何避免5V和3.3V,是不是传程序的时候把连线都拔下来

沁恒USB单片机 发表于 2018-4-23 13:15

:handshake

jinglixixi 发表于 2018-4-23 15:11

xy598646744 发表于 2018-4-23 09:51
ch554带哪些外设?

几乎就是LED、触摸键了、串行通讯、USB通讯功能了,其它需要自行配置和扩展。

jinglixixi 发表于 2018-4-23 15:14

我爱下载 发表于 2018-4-23 11:11
顶一下,你这个oled接口挺简单,不知道您是如何避免5V和3.3V,是不是传程序的时候把连线都拔下来

我是自己将电源接到3.3V上,传程序时也没太在意,一直就连着没拔下来。
页: [1]
查看完整版本: 【新版CH554评测】CH554开发板实现OLED屏显示