2038|2

1581

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【平头哥RVB2601创意应用开发】+光照强度检测 [复制链接]

 

有了GPIO口的使用基础,除了可以驱动OLED屏之外,还可以用来驱动相应的数字式传感器,这里是对光照强度传感器进行驱动,并配合OLED屏的显示功能来实现光照强度检测,其显示效果如图1所示。

 

图1 显示效果

由于提供的电源引脚比较少,故光照强度传感器BH1750所用的引脚如图2所示,相应的对应关系为:

CLK---PA2

DIN---PA5

 

图2 引脚连接

 

相较于OLED屏的驱动,光照强度传感器的驱动要复杂些,它不但涉及引脚要以输出模式工作,有时还需要以输入模式工作,应适时地进行模式切换。

为此,对引脚输出高低电平及读取引脚状态的语句定义为:

#define SCL_Clr1()       csi_gpio_pin_write(&clk, GPIO_PIN_LOW)

#define SCL_Set1()      csi_gpio_pin_write(&clk, GPIO_PIN_HIGH)

#define SDA_Clr1()       csi_gpio_pin_write(&din, GPIO_PIN_LOW)

#define SDA_Set1()      csi_gpio_pin_write(&din, GPIO_PIN_HIGH)

#define IIC_SDA_IN1    csi_gpio_pin_read(&din)

相应的引脚工作模式配置函数为:

  • void IIC_INPUT_MODE()
  • {
  •     csi_gpio_pin_init(&din, PA5);
  •     csi_gpio_pin_dir(&din, GPIO_DIRECTION_INPUT);
  • }
  • void IIC_OUTPUT_MODE()
  • {
  •     csi_gpio_pin_init(&din, PA5);
  •     csi_gpio_pin_dir(&din, GPIO_DIRECTION_OUTPUT);
  • }

 

以GPIO口模拟I2C发送字节数据的函数为:

  • void BH1750_SendByte(char data)
  • {
  •     char i;
  •     IIC_OUTPUT_MODE();
  •     SCL_Clr1();
  •     udelay(2);
  •     for (i=0;i<8;i++)
  •     {
  •         if(data&0x80) SDA_Set1();
  •         else SDA_Clr1();
  •         data <<= 1;
  •         SCL_Set1();
  •         udelay(2);
  •         SCL_Clr1();
  •         udelay(2);
  •     }
  • }

 

读取并显示检测值的函数为:

  • void Get_Sunlight_Value()
  • {
  •     int dis_data=0;
  •     float temp;
  •     unsigned int sd;
  •     Single_Write_BH1750(0x01);
  •     Single_Write_BH1750(0x10);
  •     udelay(1000 * 180);
  •     Multiple_Read_BH1750();
  •     dis_data=BUF[0];
  •     dis_data=(dis_data<<8)+BUF[1];
  •     temp=(float) dis_data/1.2;
  •     sd=temp;
  •     OLED_ShowNum(20,6,sd,5,16);
  • }

 

实现图示显示效果的主程序为:

  • int main(void)
  • {
  •     csi_error_t ret;
  •     csi_rtc_time_t last_time, base_time, alarm_time;
  •     board_yoc_init();
  •     oled_pinmux_init();
  •     OLED_Init();
  •     OLED_Clear();
  •     OLED_ShowString(20,0,"CH2601",16);
  •     OLED_ShowString(20,2,"OLED & RTC",16);
  •     BH1750_Init();
  •     udelay(1000 * 1000);
  •     OLED_ShowString(20,2,"OLED & BH1750",16);
  •     OLED_ShowString(20,4,"Sunlight=",16);
  •     OLED_ShowString(68,6,"lx",16);
  •     while (1) {
  •         Get_Sunlight_Value();
  •         udelay(1000 * 1000);
  •     }
  • }

 

由于电源引脚紧张,后面需要将显示任务交回给LCD屏,以便空出电源引脚来连接其它的外设。

 

最新回复

我也有这种想法,可是不想折腾,SPI可以空出很多IO。  详情 回复 发表于 2022-5-13 20:16
点赞 关注
 
 

回复
举报

7183

帖子

11

TA的资源

版主

沙发
 
我也有这种想法,可是不想折腾,SPI可以空出很多IO。
 
 
 

回复

1581

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
lugl4313820 发表于 2022-5-13 20:16 我也有这种想法,可是不想折腾,SPI可以空出很多IO。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
ADI 有奖直播报名中~
直播时间:3月27日(周四) 上午10:00-11:30
直播主题:易于驱动SAR型ADC的原理、优点及应用介绍
好礼等你拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 11

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表