A. 多个SHT11怎么用单总线跟单片机连接
// DHT21使用范例
//单片机 : AT89S52 或 STC89C52RC
// 功能 :串口发送温湿度数据 波特率 9600
//硬件连接: P2.0口为通讯口连接DHT11,DHT11的电源和地连接单片机的电源和地,单片机串口加MAX232连接电脑
// 公司 :济南联诚创发科技有限公司
//
#include <reg51.h>
#include <intrins.h>
//
typedef unsigned char U8;
typedef signed char S8;
typedef unsigned int U16;
typedef signed int S16;
typedef unsigned long U32;
typedef signed long S32;
typedef float F32;
typedef double F64;
//
#define uchar unsigned char
#define uint unsigned int
#define Data_0_time 4
//----------------------------------------------//
//----------------IO口定义区--------------------//
//----------------------------------------------//
sbit P2_0 = P2^0 ;
sbit P2_1 = P2^1 ;
sbit P2_2 = P2^2 ;
sbit P2_3 = P2^3 ;
//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
U8 U8FLAG,k;
U8 U8count,U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
U8 outdata[5]; //定义发送的字节数
U8 indata[5];
U8 count, count_r=0;
U8 str[5]={"RS232"};
U16 U16temp1,U16temp2;
SendData(U8 *a)
{
outdata[0] = a[0];
outdata[1] = a[1];
outdata[2] = a[2];
outdata[3] = a[3];
outdata[4] = a[4];
count = 1;
SBUF=outdata[0];
}
void Delay(U16 j)
{ 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)
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
//----------------------
P2_1=0 ; //T
P2_1=1 ; //T
//----------------------
while((!P2_0)&&U8FLAG++);
Delay_10us();
Delay_10us();
// Delay_10us();
U8temp=0;
if(P2_0)U8temp=1;
U8FLAG=2;
while((P2_0)&&U8FLAG++);
//----------------------
P2_1=0 ; //T
P2_1=1 ; //T
//----------------------
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}//rof
}
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
void RH(void)
{
//主机拉低18ms
P2_0=0;
Delay(180);
P2_0=1;
//总线由上拉电阻拉高 主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号
P2_0=1;
//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行
if(!P2_0) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!P2_0)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((P2_0)&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
P2_0=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}//fi
}//fi
}
//----------------------------------------------
//main()功能描述: AT89C51 11.0592MHz 串口发
//送温湿度数据,波特率 9600
//----------------------------------------------
void main()
{
U8 i,j;
//uchar str[6]={"RS232"};
TMOD = 0x20; //定时器T1使用工作方式2
TH1 = 253; // 设置初值
TL1 = 253;
TR1 = 1; // 开始计时
SCON = 0x50; //工作方式1,波特率9600bps,允许接收
ES = 1;
EA = 1; // 打开所以中断
TI = 0;
RI = 0;
SendData(str) ; //发送到串口
Delay(1); //延时100US(12M晶振)
while(1)
{
//------------------------
//调用温湿度读取子程序
RH();
//串口显示程序
//--------------------------
str[0]=U8RH_data_H;
str[1]=U8RH_data_L;
str[2]=U8T_data_H;
str[3]=U8T_data_L;
str[4]=U8checkdata;
SendData(str) ; //发送到串口
//读取模块数据周期不易小于 2S
Delay(20000);
}//elihw
}// main
void RSINTR() interrupt 4 using 2
{
U8 InPut3;
if(TI==1) //发送中断
{
TI=0;
if(count!=5) //发送完5位数据
{
SBUF= outdata[count];
count++;
}
}
if(RI==1) //接收中断
{
InPut3=SBUF;
indata[count_r]=InPut3;
count_r++;
RI=0;
if (count_r==5)//接收完4位数据
{
//数据接收完毕处理。
count_r=0;
str[0]=indata[0];
str[1]=indata[1];
str[2]=indata[2];
str[3]=indata[3];
str[4]=indata[4];
P0=0;
}
}
}
B. 关于SHT11的编程
SHT11是瑞士Sensirion公司生产的具有I2C总线接口的单片全校准数字式相对湿度和温度传感器。该传感器采用独特的CMOSens TM技术,具有数字式输出、免调试、免标定、免外围电路及全互换的特点。文中对传感器的性能特点、接口时序与命令进行了详细的阐述,给出了SHT11与单片机的接口电路及相应程序。 关键词:数字式;温湿度传感器;I2C总线;单片机1 概述温湿度的测量在仓储管理、生产制造、气象观测、科学研究以及日常生活中被广泛应用,传统的模拟式湿度传感器一般都要设计信号调理电路并需要经过复杂的校准和标定过程,因此测量精度难以保证,且在线性度、重复性、互换性、一致性等方面往往不尽人意。SHT11是瑞士Sensirion公司推出的基于CMOSensTM技术的新型温湿度传感器。该传感器将CMOS芯片技术与传感器技术结合起来,从而发挥出它们强大的优势互补作用。
2 性能特点SHT11温湿度传感器的主要特性如下:●将温湿度传感器、信号放大调理、A/D转换、I2C总线接口全部集成于一芯片(CMOSensTM技术);●可给出全校准相对湿度及温度值输出;●带有工业标准的I2C总线数字输出接口;●具有露点值计算输出功能;●具有卓越的长期稳定性;●湿度值输出分辨率为14位,温度值输出分辨率为12位,并可编程为12位和8位;●小体积(7.65×5.08×23.5mm),可表面贴装;●具有可靠的CRC数据传输校验功能;●片内装载的校准系数可保证100%互换性;●电源电压范围为2.4~5.5V;●电流消耗,测量时为550μA,平均为28μA,休眠时为3μA。
SHT11温湿度传感器采用SMD(LCC)表面贴片封装形式,管脚排列如图1所示,其引脚说明如下:(1)GND:接地端;(2)DATA:双向串行数据线;(3)SCK:串行时钟输入;(4)VDD电源端:0.4~5.5V电源端;(5~8)NC:空管脚。
3 工作原理SHT11的湿度检测运用电容式结构,并采用具有不同保护的“微型结构”检测电极系统与聚合物覆盖层来组成传感器芯片的电容,除保持电容式湿敏器件的原有特性外,还可抵御来自外界的影响。由于它将温度传感器与湿度传感器结合在一起而构成了一个单一的个体,因而测量精度较高且可精确得出露点,同时不会产生由于温度与湿度传感器之间随温度梯度变化引起的误差。CMOSensTM技术不仅将温湿度传感器结合在一起,而且还将信号放大器、模/数转换器、校准数据存储器、标准I2C总线等电路全部集成在一个芯片内。SHT11传感器的内部结构框图如图2所示。SHT11的每一个传感器都是在极为精确的湿度室中校准的。SHT11传感器的校准系数预先存在OTP内存中。经校准的相对湿度和温度传感器与一个14位的A/D转换器相连,可将转换后的数字温湿度值送给二线I2C总线器件,从而将数字信号转换为符合I2C总线协议的串行数字信号。
由于将传感器与电路部分结合在一起,因此,该传感器具有比其它类型的湿度传感器优越得多的性能。首先是传感器信号强度的增加增强了传感器的抗干扰性能,保证了传感器的长期稳定性,而A/D转换的同时完成,则降低了传感器对干扰噪声的敏感程度。其次在传感器芯片内装载的校准数据保证了每一只湿度传感器都具有相同的功能,即具有100%的互换性。最后,传感器可直接通过I2C总线与任何类型的微处理器、微控制器系统连接,从而减少了接口电路的硬件成本,简化了接口方式。3.1 输出特性(1)湿度值输出SHT11可通过I2C总线直接输出数字量湿度值,其相对湿度数字输出特性曲线如图3所示。由图3可看出,SHT11的输出特性呈一定的非线性,为了补偿湿度传感器的非线性,可按如下公式修正湿度值:RHlinear=c1+c2SORH+c3SORH2式中,SORH为传感器相对湿度测量值,系数取值如下:12位:SORH:c1=-4,c2=0.0405,c3=-2.8×10-68位:SORH:c1=-4,c2=0.648,c3=-7.2×10-4(2)温度值输出由于SHT11温度传感器的线性非常好,故可用下列公式将温度数字输出转换成实际温度值:T=d1+d2SOT当电源电压为5V,且温度传感器的分辨率为14位时,d1=-40�d2=0.01,当温度传感器的分辨率为12位时,d1=-40�d2=0.04。(3)露点计算空气的露点值可根据相对湿度和温度值来得出,具体的计算公式如下:LogEW=(0.66077+7.5T/(237.3+T)+[log10(RH)-2]Dp=[(0.66077-logEW)×237.3]/(logEW-8.16077)3.2 命令与接口时序SHT11传感器共有5条用户命令,具体命令格式见表1所列。下面介绍一下具体的命令顺序及命令时序。
i2c总线数字式温湿度传感器sht11及其在单片机系统的应用 来自: 免费论文网
表1 SHT11传感器命令列表命 令编 码说 明测量温度00011温度测量测量湿度00101湿度测量读寄存器状态00111“读”状态寄存器写寄存器状态00110“写”状态寄存器软启动11110重启芯片,清除状态记录器的错误记录11毫秒后进入下一个命令(1)传输开始初始化传输时,应首先发出“传输开始”命令,该命令可在SCK为高时使DATA由高电平变为低电平,并在下一个SCK为高时将DATA升高。接下来的命令顺序包含三个地址位(目前只支持“000”)和5个命令位,当DATA脚的ack位处于低电位时,表示SHT11正确收到命令。(2)连接复位顺序如果与SHT11传感器的通讯中断,下列信号顺序会使串口复位:即当DATA线处于高电平时,触发SCK 9次以上(含9次),此后应接着发一个“传输开始”命令。
表2 SHT11状态寄存器类型及说明位类型说 明缺 省 7 保留0 6读工检限(低电压检查)X 5 保留0 4 保留0 3 只用于试验,不可以使用0 2读/写加热0关1读/写不从OTP重下载0重下载0读/写'1'=8位相对湿度,12位温度分辨率。'0'=12位相对湿度,14位湿度分辨率012位相对湿度,14位湿度(3)温湿度测量时序当发出了温(湿)度测量命令后,控制器就要等到测量完成。使用8/12/14位的分辨率测量分别需要大约11/55/210ms的时间。为表明测量完成,SHT11会使数据线为低,此时控制器必须重新启动SCK,然后传送两字节的测量数据与1字节CRC校验和。控制器必须通过使DATA为低来确认每一个字节,所有的量均从右算,MSB列于第一位。通讯在确认CRC数据位后停止。如果没有用CRC-8校验和,则控制器就会在测量数据LSB后保持ack为高来停止通讯,SHT11在测量和通讯完成后会自动返回睡眠模式。需要注意的是:为使SHT11的温升低于0.1℃�此时的工作频率不能大于标定值的15%(如:12位精确度时,每秒最多进行3次测量)。测量温度和湿度命令所对应的时序如图4所示。
论文I2C总线数字式温湿度传感器SHT11及其在单片机系统的应用来自
图4
3.3 寄存器配置SHT11传感器中的一些高级功能是通过状态寄存器来实现的,寄存器各位的类型及说明见表2所列。下面对寄存器相关位的功能说明:(1)加热使芯片中的加热开关接通后,传感器温度大约增加5℃,从而使功耗增加至8mA@5V。加热用途如下:●通过对启动加热器前后的温、湿度进行比较,可以正确地区别传感器的功能;●在相对湿度较高的环境下,传感器可通过加热来避免冷凝。(2)低电压检测SHT11工作时可以自行检测VDD电压是否低于2.45V,准确度为±0.1V。(3)下载校准系数为了节省能量并提高速度,OTP在每次测量前都要重新下载校准系数,从而使每一次测量节省8.2ms的时间。(4)测量分辨率设定将测量分辨率从14位(温度)和12位(湿度)分别减到12位和8位可应用于高速或低功耗场合。
4 应用说明4.1 运行条件测量量程以外的温度会使湿度信号暂时地偏移+3%。然后传感器会慢慢返回到校准条件。若将芯片在湿度小于5%环境下加热24小时到90℃,芯片就会迅速恢复高相对湿度、高温度环境的影响,但是,延长强度条件会加速芯片的老化。4.2 安装注意事项由于大气的相对湿度与温度的关系比较密切,因此,测量大气温度时的要点是将传感器与大气保持同一温度,如果传感器线路板上有发热元件,SHT11应与热源保持良好的通风,为减少SHT11和PCB之间的热传导,应使铜导线最细并在其中加上窄缝,同时应避免使传感器在强光或UV下曝晒。传感器在布线时,SCK和DATA信号平行且相互接近,或信号线长于10cm时,均会产生干扰信息,此时应在两组信号之间放置VDD或GND。
5 具体应用图5是AT89C2051单片机与SHT11的接口电路。由于AT89C2051不具备I2C总线接口,故使用单片机通用I/O口线来虚拟I2C总线,并利用P1.0来虚拟数据线DATA,利用P1.1口线来虚拟时钟线,并在DATA端接入一只4.7kΩ的上拉电阻,同时,在VDD及GND端接入一只0.1μF的去耦电容。下面给出与上述硬件电路配套的C51应用程序。#define DATA P1_1#define SCK P1_0#define ACK 1#define noACK 0#define MEASURE_TEMP 0x03 //测量温度命令#define MEASURE_HUMI 0x05 //测量湿度命令//读温湿度数据char s-measure(unsigned char *p- value, un-signed char *p_checksum, unsigned char mode){unsigned char error=0;unsigned int i;s_transstart(); //传输开始switch(mode){caseTEMP:error+=s_write_byte(measure_temp);break;caseHUMI:error+=s_write_byte(measure_humi);break;default:break;}for(i=0;i<65535;i++) if(DATA==0) break;if (DATA) reeor+=1;*(p_value)=s_read_byte(ACK);*(p_value+1)=s_read_byte(ACK);*p_checksum=s_read_byte(noACK);return error;}//温湿度值标度变换及温度补偿void calc_sth15(float *p_humidity,float *p_tempera-ture){const float c1=-4.0;const float c2=0.0405;const float c3=-0.0000028;const float t1=-0.01;const float t2=0.00008;float rh=×p_humidity;float t=×p_temperature;float rh_lin;float th_ture;float t_c;t_c=t×0.01-40;rh_lin=c3×rh×rh+c2×rh+c1;trh_ture=(t_c-25)×(t1+t2×rh)+rh_lin;×p_temperature=t-c;×p_humidity=rh_ture;}//从相对温度和湿度计算露点char calc_dewpoint(float h,float t){float logex,dew_point;logex=0.66077+7.5×t/(237.3+t)+[log10(h)-2];dew_point=(logex-0.66077)×237.3/(0.66077+7.5-logex);return dew_point;}限于篇幅,上述程序中未给出传输开始、写字节数据、读字节数据函数。
C. 单片机控制SHT15温湿度传感器的稳定电源怎么弄
是TL431吧,精度达1%
D. 谁能发张温湿度传感器sht11和单片机连接原理图,现成的也可以
你可以按这个电路接。
E. 多个sht11能并联到一个地址线吗多个sht11传感器怎么能连接到单片机上
SHT11没有单独的片选信号,也没有标准的I²C地址识别功能,所以不能并联数据线时钟线使用。
多个SHT11只能分别连接到单片机上,每个传感器占用2根IO口(时钟线若驱动能力足够,并且线缆不太长,那么可以共用)。
当然SHT11本身通信速率并不高、信息量也不大,一个单片机完全可以通过各种IO扩展方式扩出大量的IO连接很多的SHT11。连接两三百个完全不成问题。
F. 谁能给个温湿度传感器sht11和单片机连接图 要具体的图
这个很简单的,给你一个参考
G. 求SHT11或DHT90温室传感器芯片和MCS51单片机组成的测量电路及电路图。越详细越好!
我记得SHT11和DHT90除了供电以外,串行数据接口可以直接用IO引脚驱动
只是你需要按照通讯协议编写程序
H. 空气湿度传感器sht10与430单片机如何接线
SHT1X系列传感器,采用IIC通信协议,通过内部信号转换模块,将温度、湿度等模拟量转变成为数字量输出。
该传感器系列一般使用4引脚对外输出。430单片机与其相连时,主要连接传感器的DATA引脚和CLK引脚。参考电路图如下:
I. 温湿度传感器SHT10与51单片机连接电路
SHTl0的供电电压为2.4~5.5 V。传感器上电后,要等待11ms,从“休眠”状态恢复。在此期间不发送任何指令。电源引脚(VDD和GND)之间可增加1个100 nF的电容器,用于去耦滤波。
为避免数据发生冲突,MCU应该驱动DATA使其处于低电平状态,而外部接1个上拉电阻将信号拉至高电平。
J. 谁能发张温湿度传感器sht11和单片机连接原理图,现成的也可以。谢谢
原理图很简单 就是把sht11的数据口和时钟口就到单片机的两个端口,关键是编程啊,下面一段是我之前写的一段关于sht11的程序,希望能帮到你,有问题交流下的
#include <reg52.h> //头文件
#include <intrins.h>
#include <stdio.h> //
#include <math.h> //Keil library
//**************************************
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int //定义一下方便使用
#define ulong unsigned long //定义一下方便使用
#define TEMP_ML 0x03 //000 0001 1 温度命令
#define HUMI_ML 0x05 //000 0010 1 温度命令
unsigned char error ;//全局错误变量
unsigned char ack ;//全局应答变量
//float temp_zi ;//全局应答变量
//float humi_zi ;//全局应答变量
unsigned char temp_h ;//全局应答变量
unsigned char temp_LL ;//全局应答变量
unsigned int xian_t=0;//温度显值
unsigned int xian_h=0;//湿度显值
uchar set_h,set_l;
bit setbz_h,setbz_l,setkey;
sbit DATA =P2^6;//数据
sbit SCK=P2^7;//时钟
sbit hot =P2^0;// 加热
sbit motor =P2^1;// 电机
sbit speek =P2^2;// 声音
sbit set =P0^0;// 设置
sbit setup =P0^1;// 设置+
sbit setdown =P0^2;// 设置-
sbit gwei =P3^4;//个位
sbit swei =P3^3;//十位
sbit bwei =P3^2;//百位
sbit qwei =P3^1;//千位
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳
//*******************************基本驱动程
/////////////////
//////////////////////
char read() //读一个字节 返回应答信号
//----------------------------------------------------------------------------------
// reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
{
unsigned char i,val=0;
temp_LL=0;
temp_h=0;
DATA=1; //释放数据总线
for (i=0x80;i>0;i/=2) //位移8位
{ SCK=1; //上升沿读入
if (DATA) val=(val | i); //确定值
SCK=0;
}
DATA=0; //读应答信号,有应答为1,为应答为0 通过CPU下拉为应答
SCK=1; //第9个脉冲
_nop_(); _nop_(); _nop_(); //pulswith approx. 5 us
SCK=0;
DATA=1; //释放数据总线
temp_h=val;
val=0;
////低8位/////////////////////////////
DATA=1; //释放数据总线
for (i=0x80;i>0;i/=2) //位移8位
{ SCK=1; //上升沿读入
if (DATA) val=(val | i); //确定值
SCK=0;
}
DATA=1;//0; //不需要应答 通过CPU下拉为应答
SCK=1; //第9个脉冲
_nop_(); _nop_(); _nop_(); //pulswith approx. 5 us
SCK=0;
DATA=1; //释放数据总线
temp_LL=val;
}
////////////
char write(unsigned char value) //写一个字节 返回应答信号
//---------------------------------------------------------
{
unsigned char i ;
ack=0;
for (i=0x80;i>0;i/=2) //释放数据总线
{ if (i & value) DATA=1; //写入值
else DATA=0;
SCK=1; //上升沿写入
_nop_(); _nop_(); _nop_(); //延时
SCK=0;
}
DATA=1; //释放数据总线
SCK=1; //第9个脉冲
if (DATA==1) ack=1;
//读应答信号
SCK=0;
return ack; //error=1 表示没有应答
}
////////
void start_sht11(void) //启动
//--------------------------------------------------------
{
DATA=1; SCK=0; //数据为1,SCK=0
_nop_();
SCK=1; //第一个脉冲
_nop_();
DATA=0; //数据跌落
_nop_ ();
SCK=0; //完成一个脉冲
_nop_(); _nop_(); _nop_();
SCK=1; //再一个脉冲
_nop_();
DATA=1; //数据变为1
_nop_();
SCK=0; //完成该脉冲
}
//////////////////////////////////
void sht_rest(void) //复位
{
unsigned char i;
DATA=1; SCK=0; //数据为1 时钟为0
for(i=0;i<9;i++) //9 个脉冲为 复位
{ SCK=1;
SCK=0;
}
start_sht11(); //启动
}
////////////////////////////////
//测量温度或者是温度,返回校验值
text_a(unsigned char ml)
{
unsigned int i;
start_sht11(); //启动
write(ml);//写入测温度
if (ack==1)
{
sht_rest() ;//复位
write(ml);//写入测温度
}
//判断是否处于忙
// DATA=1;//释放数据总线
//for (i=0;i<65535;i++) if(DATA==0) break;
for (i=0;i<55535;i++){ if(DATA==0) break;else {xianshi();} }
read();//读温度
}
/////////温湿度处理//////
text_jishuan_temp11()
{
error=0;
ack=0;
sht_rest() ;//复位
text_a(TEMP_ML);
text_jishuan_temp();
key();
text_a(HUMI_ML);
text_jishuan_humi();
}
/////
//////////计算温度////
text_jishuan_temp()
{
float aa=0,bb=0,temp_zi;
int abcd=0;
aa=(float)temp_h*256+(float)temp_LL;
temp_zi=0.01*aa-40;
//
if (temp_zi<0)
{
temp_zi=0;
}
temp_zi=temp_zi*10;
xian_t=(int)temp_zi;//给显示值
}
///////计算湿度//////
text_jishuan_humi()
{
float aa=0,bb=0,humi_zi;
int abcd=0;
aa=(float)temp_h*256+(float)temp_LL;
bb=aa*aa*2.8/1000000;
aa=0.0405*aa;
aa=aa-4-bb;
humi_zi=aa;
//
humi_zi=humi_zi*10;
xian_h=(int)humi_zi;
}
///////延时///////
delay(int i)
{
while(--i);
}
///////显示处理///////
xianshi()
{
int abcd=0;
int i;
for (i=0;i<1;i++)
{
abcd=xian_h;
gwei=1;
swei=1;
bwei=1;
qwei=1;
P1=dispcode[abcd/100];
qwei=0;
delay(40);
qwei=1;
abcd=abcd%100 ;
P1=dispcode[abcd/10];
bwei=0;
delay(40);
bwei=1;
if(setbz_h^setbz_l)
{
if(setbz_h) abcd=set_h;
if(setbz_l) abcd=set_l;
P1=dispcode[abcd/10];
swei=0;
delay(40);
swei=1;
P1=dispcode[abcd%10];
gwei=0;
delay(40);
gwei=1;
}
else
{
abcd=xian_t;
P1=dispcode[abcd/100];
swei=0;
delay(40);
swei=1;
abcd=abcd%100 ;
P1=dispcode[abcd/10];
gwei=0;
delay(40);
gwei=1;
}
}
}
doing()
{
char xian_mi;
xian_mi=xian_t/10;
if((xian_mi<set_h)&(xian_t>set_l)) { motor=0;hot=0;speek=0;}
if(xian_mi>set_h) { motor=1;hot=0;speek=1;}
if(xian_mi<set_l) { motor=0;hot=1;speek=1;}
}
key()
{
if(set&setkey)
{
setkey=0;
if(setbz_l) {setbz_l=0;setbz_h=0;}
else
{ if(!setbz_h) setbz_h=1;
else {setbz_h=0;setbz_l=1;}
}
}
if(!set) setkey=1;
if(setup==0)
{
if(setbz_h==1)
{ if (set_h<=99) set_h++;}
if(setbz_l==1)
{ if ((set_l<set_h)&(set_l<=99)) set_l++;}
}
if(setdown==0)
{
if(setbz_h==1)
{ if ((set_h>set_l)&(set_h>=1)) set_h--;}
if(setbz_l==1)
{ if (set_l>=1) set_l--;}
}
}
//系统初始化///
csh()
{
P0=0XFF;
P1=1;
P2=0;
P3=0XFF;
}
/////////////////////////////////
///////////////////////
main()
{
set_h=22;//设置高温
set_l=20;//设置低温
csh();//系统初始化
while(1)
{
text_jishuan_temp11();//测温湿度
//xianshi();//显示
doing();//处理
key();//键处理
// xianshi();//显示
}
}