基于单片机的数据采集器(具备上位机VC++上传功能)源代码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DH_data = 1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if( !DH_data ) //T !
{
U8FLAG = 2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while( (!DH_data) && U8FLAG++ );
{
U8 i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
void Delay_10us(void)
{
U8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void COM(void)
U8comdata <<= 1;
U8comdata |= U8temp; //0
}
}
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
U8 code dis_temp[] = {"TEMP: 'C"};
U8 code dis_light[] = {"LIGHT: lx"};
U8 code dis_HUM[] = {"HUM: %RH "};
U8 code dis_SET0[] = {"SET ( )"};
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
void RH( void )
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
//----------------------
DH_data=0 ; //T
DH_data=1 ; //T
//----------------------
while( ( !DH_data ) && U8FLAG++ );
Delay_10us();
Delay_10us();
U8temp=0;
if(DH_data)
U8temp=1;
U8FLAG=2;
while( ( DH_data ) && U8FLAG++ );
//----------------------
COM();
U8T_data_H_temp = U8comdata;
COM();
U8T_data_L_temp = U8comdata;
COM();
U8checkdata_temp = U8comdata;
DH_data = 1;
//数据校验
{
//主机拉低18ms
DH_data = 0;
delay_1( 180 );
DH_data = 1;
//总线由上拉电阻拉高 主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号
sbit SDA=P1^6; //IIC数据引脚定义
sbit DH_data = P1^7 ;//DHT11的数据接口
sbit runled=P2^0;
sbit dataled=P2^1;
sbit warnled=P2^2;
**********************************************************/
int temp_max,temp_min,HUM_max,HUM_min,light_max,light_min;
#define SlaveAddress 0x46 //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改
U8 code dis_SET[] = {"From: To:"};
U8 code dis_ERROR[] = {"DATA ERROR"};
S16 dis_data; //变量
S16 light; //最终光照强度数据
void Multiple_Read_BH1750(void); //连续读出数据,存储在BUF中 ////////////////
/**********************************************************/
void delay_1(U8 j)
//这时,把常量的变量规定为data,可以提高执行速度
S8 code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节,表示在0x3b开始存放,【n】表示存放几个数
//code只程序存储区
/**********************************************************
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
///////////////////////////////////////////////////////////////////////////
sbit sw485=P3^4;
sbit setdata=P3^5; //设置按键
//P3_0、P3_1为串口通信端口
//P3_2、P3_3为中断,分别为故障检测和设置参数按键
///////////////////////////////////////////////////////////////////////////
typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
/////////////////////////////////////////////////////////////////////////// DH
U8 U8FLAG;
U8 U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
DH_data=0 ; //T
DH_data=0 ; //T
//----------------------
//超时则跳出for循环
if( U8FLAG == 1 )
break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
bit presence;
float temper;
U16 data display[2];
U8 data temp_data[2]; //data :可直接寻址的内部数据存储区(128B)
//在keil c里,data表示内部储存区开始的128字节,可以直接寻址,速度较快
//如果变量很多,大于128字节,有部分变量必然被放在后128字节,采用间接寻址,速度稍慢。
#include <REG51.H>
#include <math.h> //Keil library
#include <stdio.h> //Keil library
#include <INTRINS.H>
#define DataPort P0 //LCD1602数据端口
U8temp = ( U8T_data_H_temp + U8T_data_L_temp + U8RH_data_H_temp + U8RH_data_L_temp );
//ALT ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
typedef unsigned char BYTE;
typedef unsigned short WORD;
U8 BUF[8]; //接收数据缓存区
sbit add=P1^0; //按键加
sbit out=P1^1; //按键确认
sbit sub=P1^2; //按键减
sbit be =P1^3; //蜂鸣器
sbit DQ =P1^4; //DS温度传感器数据口
sbit SCL=P1^5; //IIC时钟引脚定义
sbit setled=P2^3;
sbit LCM_RW=P2^5; //LCD1602命令端口
sbit LCM_RS=P2^6; //LCD1602命令端口
sbit LCM_EN=P2^7; //LCD1602命令端口
typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
U8FLAG = 2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while( (DH_data) && U8FLAG++ );
//数据接收状态
COM();
U8RH_data_H_temp = U8comdata;
COM();
U8RH_data_L_temp = U8comdata;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if( !DH_data ) //T !
{
U8FLAG = 2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while( (!DH_data) && U8FLAG++ );
{
U8 i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
void Delay_10us(void)
{
U8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void COM(void)
U8comdata <<= 1;
U8comdata |= U8temp; //0
}
}
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
U8 code dis_temp[] = {"TEMP: 'C"};
U8 code dis_light[] = {"LIGHT: lx"};
U8 code dis_HUM[] = {"HUM: %RH "};
U8 code dis_SET0[] = {"SET ( )"};
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
void RH( void )
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
//----------------------
DH_data=0 ; //T
DH_data=1 ; //T
//----------------------
while( ( !DH_data ) && U8FLAG++ );
Delay_10us();
Delay_10us();
U8temp=0;
if(DH_data)
U8temp=1;
U8FLAG=2;
while( ( DH_data ) && U8FLAG++ );
//----------------------
COM();
U8T_data_H_temp = U8comdata;
COM();
U8T_data_L_temp = U8comdata;
COM();
U8checkdata_temp = U8comdata;
DH_data = 1;
//数据校验
{
//主机拉低18ms
DH_data = 0;
delay_1( 180 );
DH_data = 1;
//总线由上拉电阻拉高 主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号
sbit SDA=P1^6; //IIC数据引脚定义
sbit DH_data = P1^7 ;//DHT11的数据接口
sbit runled=P2^0;
sbit dataled=P2^1;
sbit warnled=P2^2;
**********************************************************/
int temp_max,temp_min,HUM_max,HUM_min,light_max,light_min;
#define SlaveAddress 0x46 //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改
U8 code dis_SET[] = {"From: To:"};
U8 code dis_ERROR[] = {"DATA ERROR"};
S16 dis_data; //变量
S16 light; //最终光照强度数据
void Multiple_Read_BH1750(void); //连续读出数据,存储在BUF中 ////////////////
/**********************************************************/
void delay_1(U8 j)
//这时,把常量的变量规定为data,可以提高执行速度
S8 code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节,表示在0x3b开始存放,【n】表示存放几个数
//code只程序存储区
/**********************************************************
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
///////////////////////////////////////////////////////////////////////////
sbit sw485=P3^4;
sbit setdata=P3^5; //设置按键
//P3_0、P3_1为串口通信端口
//P3_2、P3_3为中断,分别为故障检测和设置参数按键
///////////////////////////////////////////////////////////////////////////
typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
/////////////////////////////////////////////////////////////////////////// DH
U8 U8FLAG;
U8 U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
DH_data=0 ; //T
DH_data=0 ; //T
//----------------------
//超时则跳出for循环
if( U8FLAG == 1 )
break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
bit presence;
float temper;
U16 data display[2];
U8 data temp_data[2]; //data :可直接寻址的内部数据存储区(128B)
//在keil c里,data表示内部储存区开始的128字节,可以直接寻址,速度较快
//如果变量很多,大于128字节,有部分变量必然被放在后128字节,采用间接寻址,速度稍慢。
#include <REG51.H>
#include <math.h> //Keil library
#include <stdio.h> //Keil library
#include <INTRINS.H>
#define DataPort P0 //LCD1602数据端口
U8temp = ( U8T_data_H_temp + U8T_data_L_temp + U8RH_data_H_temp + U8RH_data_L_temp );
//ALT ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
typedef unsigned char BYTE;
typedef unsigned short WORD;
U8 BUF[8]; //接收数据缓存区
sbit add=P1^0; //按键加
sbit out=P1^1; //按键确认
sbit sub=P1^2; //按键减
sbit be =P1^3; //蜂鸣器
sbit DQ =P1^4; //DS温度传感器数据口
sbit SCL=P1^5; //IIC时钟引脚定义
sbit setled=P2^3;
sbit LCM_RW=P2^5; //LCD1602命令端口
sbit LCM_RS=P2^6; //LCD1602命令端口
sbit LCM_EN=P2^7; //LCD1602命令端口
typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
U8FLAG = 2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while( (DH_data) && U8FLAG++ );
//数据接收状态
COM();
U8RH_data_H_temp = U8comdata;
COM();
U8RH_data_L_temp = U8comdata;