K_A12_014 基于STM32等单片机驱动S12SD紫外线传感器模块 串口与OLED0.96双显示

  • 一、资源说明
  • 二、基本参数
    • 参数
    • 引脚说明
  • 三、驱动说明
    • IIC地址/采集通道选择/时序
    • 对应程序:
    • 数据对比:
  • 四、部分代码说明
    • 1、接线引脚定义
      • 1.1、STC89C52RC+S12SD紫外线传感器模块
      • 1.2、STM32F103C8T6+S12SD紫外线传感器模块
  • 五、基础知识学习与相关资料下载
  • 六、视频效果展示与程序资料获取
  • 七、注意事项
  • 八、接线说明
    • STC89C52RC
    • STM32F103C8T6

注:PCF8591为8位ADC通过计算后分辨率会相对不是很理想 建议用10位及其以上ADC模块或者用STM32
具体计算公式可参考文档手册中CJMCU-S12D-test-arduino.txt文件

一、资源说明

单片机型号 测试条件 模块名称 代码功能
STC89C52RC 晶振11.0592M S12SD紫外线传感器模块 STC89C52RC采集S12SD紫外线传感器模块参数 串口与OLED0.96双显示
STM32F103C8T6 晶振8M/系统时钟72M S12SD紫外线传感器器模块 STM32F103C8T6采集S12SD紫外线传感器模块参数 串口与OLED0.96双显示

其他资料目录 直戳跳转

二、基本参数

参数

引脚说明

S12SD紫外线传感器模块 引脚说明
VCC 正极 3.3-5V供电
GND 负极 接GND
SIG 模拟量输出

三、驱动说明

STC89C52RC无ADC所以需要借助外部ADC模块 此处用PCF8591模块进行采集

IIC地址/采集通道选择/时序



对应程序:

以51为例

/*******************************************************************起动总线函数
函数原型: void  Start_I2c();
功能:     启动I2C总线,即发送I2C起始条件.
********************************************************************/
void Start_I2c()
{PCF8591_SDA=1;         /*发送起始条件的数据信号*/PCF8591_SCL=1;IIC_Delay();PCF8591_SDA=0;         /*发送起始信号*/IIC_Delay();      PCF8591_SCL=0;       /*钳住I2C总线,准备发送或接收数据 */IIC_Delay();
}/*******************************************************************结束总线函数
函数原型: void  Stop_I2c();
功能:     结束I2C总线,即发送I2C结束条件.
********************************************************************/
void Stop_I2c()
{PCF8591_SDA=0;      /*发送结束条件的数据信号*/PCF8591_SCL=1;      /*结束条件建立时间大于4μs*/IIC_Delay();PCF8591_SDA=1;      /*发送I2C总线结束信号*/IIC_Delay();
}/*******************************************************************字节数据发送函数
函数原型: void  SendByte(UCHAR c);
功能:     将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0)     发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void SendByte(uint8_t  c)
{uint8_t  BitCnt;for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/{if((c<<BitCnt)&0x80)PCF8591_SDA=1;   /*判断发送位*/else  PCF8591_SDA=0;                PCF8591_SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/IIC_Delay();       PCF8591_SCL=0; }IIC_Delay();PCF8591_SDA=1;                /*8位发送完后释放数据线,准备接收应答位*/IIC_Delay();  PCF8591_SCL=1;IIC_Delay();if(PCF8591_SDA==1)ack=0;     else ack=1;        /*判断是否接收到应答信号*/PCF8591_SCL=0;IIC_Delay();
}/*******************************************************************字节数据接收函数
函数原型: UCHAR  RcvByte();
功能:        用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数应答从机。
********************************************************************/
uint8_t RcvByte()
{uint8_t  retc;uint8_t  BitCnt;retc=0; PCF8591_SDA=1;                     /*置数据线为输入方式*/for(BitCnt=0;BitCnt<8;BitCnt++){PCF8591_SCL=0;                  /*置时钟线为低,准备接收数据位*/IIC_Delay();PCF8591_SCL=1;                  /*置时钟线为高使数据线上数据有效*/IIC_Delay();retc=retc<<1;if(PCF8591_SDA==1)retc=retc+1;  /*读数据位,接收的数据位放入retc中 */IIC_Delay();}PCF8591_SCL=0;    IIC_Delay();return(retc);
}/********************************************************************应答子函数
函数原型:  void Ack_I2c(bit a);
功能:      主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2c(uint8_t a)
{if(a==0)PCF8591_SDA=0;              /*在此发出应答或非应答信号 */else PCF8591_SDA=1;IIC_Delay();    PCF8591_SCL=1;IIC_Delay();PCF8591_SCL=0;                     /*清时钟线,钳住I2C总线以便继续接收*/IIC_Delay();
}采集通道选择:
ISendByte(PCF8591,0x42);地址:
#define  PCF8591 0x90    //PCF8591 地址

数据对比:

void UV_Index(uint32_t D_Index)
{if(D_Index < 50){  //查表,把得到的光电流值转换成紫外线等级uv = 0;}else if(D_Index < 227){uv = 1;}else if(D_Index < 318){uv = 2;}else if(D_Index < 408){uv = 3;}else if(D_Index < 503){uv = 4;}else if(D_Index < 606){uv = 5;}else if(D_Index < 696){uv = 6;}else if(D_Index < 795){uv = 7;}else if(D_Index < 881){uv = 8;}else if(D_Index < 976){uv = 9;}else if(D_Index < 1079){uv = 10;}else{uv = 11;}
}

四、部分代码说明

1、接线引脚定义

需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改

1.1、STC89C52RC+S12SD紫外线传感器模块

//S12SD紫外线传感器模块+PCF8591模块引脚定义
S12SD紫外线传感器模块---------------PCF8591
AO--------------------------------AIN2sbit  PCF8591_SCL=P1^0;       //I2C  时钟
sbit  PCF8591_SDA=P1^1;       //I2C  数据
//OLED0.96模块引脚定义
sbit SCL=P1^2; //串行时钟
sbit SDA=P1^3; //串行数据

1.2、STM32F103C8T6+S12SD紫外线传感器模块

//S12SD紫外线传感器模块引脚定义 GPIOA_0  ADC1通道0
#define    ADC_GPIO_APBxClock_FUN        RCC_APB2PeriphClockCmd
#define    ADC_GPIO_CLK                  RCC_APB2Periph_GPIOA
#define    ADC_PORT                      GPIOA
#define    ADC_PIN                       GPIO_Pin_0
//OLED0.96模块引脚定义
//-----------------OLED IIC端口定义----------------                        #define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8)#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_9)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_9)

五、基础知识学习与相关资料下载

1、STC89C52RC程序下载 直戳跳转

2、STM32F103C8T6程序下载
(1)串口下载 直戳跳转
(2)ST-LINK下载 直戳跳转
(3)J-LINK下载 直戳跳转
(4)DAP-LINK下载 直戳跳转

3、OLED0.96程序说明 直戳跳转

4、串口助手下载与使用
(1)安信可调试助手使用 直戳跳转
(2) sscom33串口调试助手使用 直戳跳转
(3)STC-ISP串口调试助手使用 直戳跳转

六、视频效果展示与程序资料获取

视频连接 直戳跳转
  资料获取            ( 滑到最后添加群号看公告免费获取)

七、注意事项

1、VCC GND请勿接反,接反易烧
2、OLED显示异常时,排除接线接触不良

八、接线说明

STC89C52RC

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : S12SD紫外线传感器模块测试程序
//  测试条件   : STC89C52RC   晶振11.0592
接线
S12SD紫外线传感器模块-----------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
S12SD紫外线传感器模块-----------------------PCF8591
SIG-------------------------------------AIN2PCF8591--------------------------------STC89C52RC
VCC-- ---------------------------------5V
GND- ----------------------------------GND
SCL- ----------------------------------P1.0 //SCL
SDA- ----------------------------------P1.1 //SDAOLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------3.3V
GND------------------------------------GND
SCL------------------------------------P1^2
SDA------------------------------------P1^3
*************************************************************************************/

STM32F103C8T6

/************************************************************************************
//  生成日期   : 2021-6-21
//  最近修改   : 2021-11-21
//  功能描述   : S12SD紫外线传感器模块测试程序
//  测试条件   : STM32F103C8T6   晶振8M  系统时钟 72M
接线
S12SD紫外线传感器模块-----------------------STM32F103C8T6
VCC-------------------------------------3.3V
GND-------------------------------------GND
SIG--------------------------------------PA_0 OLED0.96
VCC-- -----------------------------------3.3V
GND- ------------------------------------GND
SCL- ------------------------------------PB_8 //SCL
SDA- ------------------------------------PB_9 //SDA
*****************************************************************************************/

K_A12_014 基于STM32等单片机驱动S12SD紫外线传感器模块 串口与OLED0.96双显示相关推荐

  1. K_A14_003 基于STM32等单片机驱动APDS9960手势运动模块 串口与OLED0.96双显示

    K_A14_003 基于STM32等单片机驱动APDS9960手势运动模块 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 时序 对应程序: 四.部分代码说明 ...

  2. K_A14_012基于STM32等单片机驱动GY-25倾斜度角度模块 串口与OLED0.96双显示

    K_A14_012基于STM32等单片机驱动GY-25倾斜度角度模块 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 对应程序: 四.部分代码说明 1.接线引脚 ...

  3. K_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示

    _A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 IIC地址/采集通道选择/时序 对应程序: 四.部 ...

  4. K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示

    K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 UART对应程序: IIC对应程序: 四.部分 ...

  5. K_A14_001 基于STM32等单片机驱动MPU6050模块 串口与OLED0.96双显示

    K_A14_001 基于STM32等单片机驱动MPU6050模块 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 时序 对应程序: 四.部分代码说明 1.接线引 ...

  6. K_A12_004 基于STM32等单片机采集人体红外感应(HC-SR501)模块串口与OLED0.96双显示

    K_A12_004 基于STM32等单片机采集人体红外感应(HC-SR501)模块串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 模块工作原理: 对应程序: 四 ...

  7. K_A12_002 基于STM32等单片机采集光敏电阻传感器参数串口与OLED0.96双显示

    K_A12_002 基于STM32等单片机采集光敏电阻传感器参数串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 IIC地址/采集通道选择/时序 对应程序: 四. ...

  8. K_A08_013 基于 STM32等单片机驱动大功率MOS管模块按键控制直流电机加减速启停

    目录 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 大功率MOS模块驱动 对应程序: 四.部分代码说明 接线说明 STC89C52RC+大功率MOS模块 STM32F103C8T6+大功率 ...

  9. K_A13_001 基于STM32驱动霍尔开关传感器 串口与OLED0.96双显示

    K_A13_001 基于STM32驱动霍尔开关传感器 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 对应程序: 四.部分代码说明 1.接线引脚定义 STM32 ...

最新文章

  1. 2012年12月4期手机网页开发
  2. MySql中管理百万级要注意些什么东西(转载)
  3. itools下载链接被360警告:虚假招聘网站
  4. AbilitySlice之间的传递值
  5. JavaScript实现Interpolation search插值查找算法(附完整源码)
  6. JavaScript 项目构建工具 Grunt 实践:安装和创建项目框架
  7. EasyStack一天连中五单,OpenStack新拐点显现
  8. 龙博方案网贵宾订购版是综合通讯、安全和电子商务的组件包
  9. 如何隐藏SAP Spartacus home页面标准的header区域
  10. 【渝粤题库】陕西师范大学202281 中央银行学II 作业(专升本)
  11. wireless 时好时断的一些解决的建议
  12. 慕课2022沟通心理学答案
  13. 微信开放平台申请方法与用途
  14. 如何通过微信小程序进行更加有效的电商营销?
  15. 该网页无法正常运作localhost 目前无法处理此请求。
  16. 吴恩达深度学习课程笔记(初步认识神经网络)
  17. hexo网页相册页面的制作
  18. 前端酷炫效果参考_纯CSS3实现的一些酷炫效果
  19. html按钮按下效果_Animate/FLASH如何为按钮添加声音(无代码)
  20. 华为机试HJ94:记票统计

热门文章

  1. CAS 5.3自定义 登录
  2. springboot jta-atomikos动态数据源
  3. HP F388经常卡纸
  4. php 开发高德地图地理围栏,高德地图-地理围栏功能实现
  5. win10命令行进入文件夹的方法
  6. xshell文件传输乱码_XShell下乱码的解决方法
  7. [渗透测试]Vulnstack 红队(三)
  8. 国家禁用的化妆品和护肤品名单,快看看有没有你正在使用和曾经使用过的?
  9. 如果一定要我感谢谁,我这个世界上最感谢的人就是我的妈妈
  10. 如何判断二维平面中,两条线段是否相交