[IDE]瑞萨RL78/G15的功能扩展方法

通过Arduino IDE开发环境的构建,就为瑞萨RL78/G15开发板的功能扩展敞开了大门。
1)LED模块控制
为掌握I/O口的使用,可通过扩展接口来控制LED模块,其测试程序及上传结果如图1所示。

图1 测试程序及上传


 

由于LED模块是由引脚13来控制,在完成连接的情况下,其造型效果如图2和图3所示。

图2 点亮LED模块

图3熄灭LED模块
2)触摸模块检测
除了使用I/O口来输出控制信号,还可使用I/O口来检测引脚所处状态,在连接触摸模块的情况下,通过图4所示的程序可控制LED模块的亮灭。

图4 控制程序

图5 空闲状态



 

图6 触控状态

3)OLED屏驱动
对于瑞萨RL78/G15开发板来说,为它配置一个显示器件是十分必要的,由于该开发板的引脚资源比较少,这里就为它配置了一个I2C接口的OLED屏,其显示分辨率为128*64像素点。
该OLED屏与开发板的连接关系为:
SCL---P22 (A1)
SDA---P02 (A2)

为便于输出高低电平信号,所定义的语句为:
#defineSCL_high  digitalWrite(15, HIGH)
#defineSCL_low   digitalWrite(15, LOW)
#defineSDA_high  digitalWrite(16, HIGH)
#defineSDA_low   digitalWrite(16, LOW)
以I/O口模拟I2C发送字节数据的函数为:
复制
void Write_IIC_Byte(unsigned char IIC_Byte)

{

    unsigned char i;

    unsigned char m,da;

    da=IIC_Byte;

    SCL_low;

    for(i=0;i<8;i++)

    {

        m=da;

        m=m&0x80;

        if(m==0x80)

        {

            SDA_high;

        }

        else  SDA_low;

        da=da<<1;

        SCL_high;

        SCL_low;

     }

}

该显示屏的清屏函数为:
复制
void OLED_Clear(void)

{

    uint8_t i,n;

    for(i=0;i<8;i++)

    {

        OLED_WR_Byte (0xb0+i,OLED_CMD);

        OLED_WR_Byte (0x00,OLED_CMD);

        OLED_WR_Byte (0x10,OLED_CMD);

        for(n=0;n<128;n++) OLED_WR_Byte(0,OLED_DATA);

    }

}


 

为便于检测驱动效果,可将清屏的数据改为0XF0,这样若在显示屏上显示相间的水平线,则说明显示驱动有效。

图7 测试效果

在驱动有效的情况下,通过添加字符显示函数可实现字符的显示,该函数的具体内容为:
复制
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size)

{

      unsigned char c=0,i=0;

      c=chr-' ';

     if(x>Max_Column-1){x=0;y=y+2;}

     if(Char_Size ==16)

     {

            OLED_Set_Pos(x,y);

            for(i=0;i<8;i++)

            OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);

            OLED_Set_Pos(x,y+1);

            for(i=0;i<8;i++)

            OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);

      }

}

所使用的字库结构为:
unsigned charF8X16[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,
  …
}

受芯片程序空间的制约,需对字库进行相应地删减和压缩,否则会无法完成编译。
以字符显示函数为基础,通过数值显示函数的添加,则完成数据显示的需要,其具体的内容为:
复制
void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size2)

{

    uint8_t t,temp;

    uint8_t 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+(size2/2)*t,y,' ',size2);

                continue;

            }

            else enshow=1;

        }

        OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);

    }

}

有字符和数值显示函数的支持,相应的初始设置函数和循环处理函数为:
复制
void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(4, OUTPUT);

  pinMode(13, OUTPUT);

  pinMode(15, OUTPUT);

  pinMode(16, OUTPUT);

  OLED_Init();

  OLED_Clear();

  OLED_ShowChar(16,0,'C',16);

  OLED_ShowChar(24,0,'D',16);

  OLED_ShowNum(32,0,78,2,16);

  OLED_ShowChar(48,0,'/',16);

  OLED_ShowChar(56,0,'E',16);

  OLED_ShowNum(64,0,15,2,16);

  OLED_ShowNum(16,4,1234567890,10,16);

}



void loop() {

  digitalWrite(4, HIGH);   // turn the LED on (HIGH is the voltage level)

  digitalWrite(13, HIGH);

  delay(1000);           // wait for a second

  digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW

  digitalWrite(13, LOW);

  delay(1000);           // wait for a second

}

经程序的编译和上传,其显示效果如图8所示。

图8 显示效果

4)数据采集

以显示程序为基础,通过添加ADC数据采集功能,就可直接观察采集的数据结果,相应的循环处理函数为:
复制
void loop() {

  digitalWrite(4, HIGH);    // turn the LED on (HIGH is the voltage level)

  digitalWrite(13, HIGH);

  delay(500);            // wait for a second

  digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW

  digitalWrite(13, LOW);

  delay(500);            // wait for a second

  sensorValue = analogRead(A0);

  OLED_ShowNum(40,4,sensorValue,4,16);

}

经程序的编译和上传,其显示效果如图9和图10所示。

图9 悬空检测

图10 检测3.3V电压

5)电子时钟
由于瑞萨RL78/G15在片内并没有配置RTC计时器,因此要实现电子时钟功能,就只好依靠延时程序来解决。

实现电子时钟功能的初始设置函数和循环处理函数为:
复制
void setup() {

  pinMode(4, OUTPUT);

  pinMode(13, OUTPUT);

  pinMode(15, OUTPUT);

  pinMode(16, OUTPUT);

  OLED_Init();

  OLED_Clear();

  OLED_ShowChar(16,0,'A',16);

  OLED_ShowChar(24,0,'B',16);

  OLED_ShowNum(32,0,78,2,16);

  OLED_ShowChar(48,0,'/',16);

  OLED_ShowChar(56,0,'C',16);

  OLED_ShowNum(64,0,15,2,16);

  OLED_ShowChar(32,4,':',16);

  OLED_ShowChar(56,4,':',16);

}



void loop() {

     if(t!=p)

     {

            if(t>59)

            {

                t=0;

                m=m+1;

            }

            if(m>59)

            {

                m=0;

                h=m+1;

            }

            if(h>24)

            {

                h=0;

            }

            OLED_ShowNum(16,4,h,2,16);

            OLED_ShowNum(40,4,m,2,16);

            OLED_ShowNum(64,4,t,2,16);

            p=t;

      }

      delay(1000);

      t=t+1;

}


 

经程序的编译和上传,其显示效果如图11所示。

图11 计时效果


 

由此可以发现,尽管瑞萨RL78/G15开发板的体型比较小,芯片规模也不是很大,但它还是有一定的功能扩展空间的。尤其在使用Arduino IDE的情况下,开发工作还是比较容易的。
---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3328160-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值