本帖最后由 jinglixixi 于 2023-9-19 16:11 编辑
#申请原创# @21小跑堂
通过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的情况下,开发工作还是比较容易的。
演示视频:
|
二姨认为瑞萨的开发挺不舒适的,Arduino IDE可以说专治各种不适应,可以更快速的完成小型应用的开发,作者以瑞萨RL78/G15为例在Arduino IDE完成了常用外设的搭建。