文件名称
传感器编程指南---51单片机
更新时间
2021-12-31 08:33:38.0
版本号
v1.0.1
修订人
修改内容
修订时间
颜明杰
版本初始化
2021-12-31 16:33:37.0
相关文档
文档预览
传感器编程指南——51单片机Ver1.0一、传感器设计思路和编程样式1.编程思路设计思路:传感器搭配信号转换电路最终以电压的方式输出,搭配FPC8591芯片,将模拟量转换为数字量,传递给单片机。使用单片机:AT89S52。晶振22.1184。2.参考程序#include#include"i2c.h"#include"lcd.h"//--定义PCF8591的读写地址--//#define WRITEADDR 0x90 //写地址#define READADDR 0x91 //读地址//--声明全局函数--//void Pcf8591SendByte(unsigned char channel);unsigned char Pcf8591ReadByte();void Pcf8591DaConversion(unsigned char value);/******************************************************************************** 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*******************************************************************************/void main(){u16 gas_concentration; //气体浓度变量u16 calibration; //校准值u16 Zero_value; //零点值unsigned int adNum[5];float value0;LcdInit();while(1){Pcf8591SendByte(0); //发送电位器转换命令//--由于8591在第一次读取的时候是读取到的上次转换的结果--////--所以我们先读一次,只是读到的数据不做处理--//adNum[0]= Pcf8591ReadByte()*2;//将前一次转换结果读走//--在读走上一次转换结果之后,才开始启动下一次转换,需要一点时间--////--要读取的命令,做一些数据处理和显示当做延时--//Pcf8591SendByte(1); //发送读取指令adNum[0]= Pcf8591ReadByte()*2;//读取电位器转换结果//--读取走了,上一次转换结果就是电位器的转换结果之后,热敏的转换开始--////--我们继续做一些处理当延时。--////--我们8591每读取到一个1就表示5/256V,所以要知道电压值就乘以0.01953--//value0=adNum[0]/2*0.01953; //转为电压值adNum[0]=value0*100; //保留两位小数/***********************标定************************///探头信号输出为线性输出,分正极性和负极性探头/****正极性****/gas_concentration=(adNum[0]-Zero_value)*calibration;// calibration:校准值,通过标气进行标定/****负极性****/gas_concentration=(Zero_value-adNum[0])*calibration;// calibration:校准值,通过标气进行标定}}/******************************************************************************** 函 数 名 : Pcf8591SendByte* 函数功能 : 写入一个控制命令* 输 入 : channel(转换通道)* 输 出 : 无*******************************************************************************/void Pcf8591SendByte(unsigned char channel){I2C_Start();I2C_SendByte(WRITEADDR, 1); //发送写器件地址I2C_SendByte(0x40|channel, 0); //发送控制寄存器I2C_Stop();}/******************************************************************************** 函 数 名 : Pcf8591ReadByte* 函数功能 : 读取一个转换值* 输 入 : 无* 输 出 : dat*******************************************************************************/unsigned char Pcf8591ReadByte(){unsigned char dat;I2C_Start();I2C_SendByte(READADDR, 1);//发送读器件地址dat=I2C_ReadByte(); //读取数据I2C_Stop(); //结束总线return dat;}/******************************************************************************** 函 数 名 : Pcf8591DaConversion* 函数功能 : PCF8591的输出端输出模拟量* 输 入 : value(转换的数值)* 输 出 : 无*******************************************************************************/void Pcf8591DaConversion(unsigned char value){I2C_Start();I2C_SendByte(WRITEADDR, 1);//发送写器件地址I2C_SendByte(0x40, 1); //开启DA写到控制寄存器I2C_SendByte(value, 0); //发送转换数值I2C_Stop();}
公司地址:山东省威海市环翠区高区火炬路221号
售前电话:0631-3792685
售后电话:0631-3792028
关注我们
精讯公众号
精讯云小程序
友情链接
Powered bybeat365中文官方网站©2008-2020 鲁ICP备15041757号-1 威海beat365中文官方网站电子科技有限公司