×
单片机 > 单片机程序设计 > 详情

基于51单片机实钟、土壤湿度检测、空气温度检测程序

发布时间:2020-08-31 发布时间:
|

项目是在相应环境中检测土壤湿度,以及检测空气温度。

软件环境:Keil C51软件     硬件环境:KST 51开发( 自带 温度、显示器模块)

使用模块:

土壤湿度传感器    PCF8591 AD转换模块 DS1302时钟模块


土壤湿度传感器

1.传感器适用于土壤的湿度检测

2.比较器采用LM393芯片,工作性能稳定

3.工作电压3.3V-5V

4.模块中蓝色的电位器是用于土壤湿度的阀值调节,顺时针调节,控制的湿度会越大,逆时针越小;

5.数字量输出D0可以与单片机直接相连,通过单片机来检测高低电平,由此来检测土壤湿度;

6.小板模拟量输出AO可以和AD模块相连,通过AD转换,可以获得土壤湿度更精确的数值;

PCF8591 AD转样模块

PCF8591 是具有I2C 总线接口的8 位A/D 及D/A 转换器。有4 路A/D 转换输入,1 路D/A 模拟输出。这就是说,它既可以作A/D 转换也可以作D/A 转换。A/D 转换为逐次比较型。电源电压典型值为5V。
  AIN0~AIN3:模拟信号输入端。
  A0~A3:引脚地址端。
  VSS:电源负极。
  SDA、SCL:I2C 总线的数据线、时钟线。
  OSC:外部时钟输入端,内部时钟输出端。
  EXT:内部、外部时钟选择线,使用内部时钟时EXT 接地。
  AGND:模拟信号地。
  VREF:基准电源端。
  AOUT:D/A 转换输出端。
  VDD:电源端。(2.5~6V)


本模块左边和右边分别外扩2路排针接口,分别说明如下:

  左边 AOUT 芯片DA输出接口

       AINO芯片模拟输入接口0  我在使用的时候接的时A0,接的是光敏传感器的AO口;

       AIN1芯片模拟输入接口1

       AIN2芯片模拟输入接口2

       AIN3芯片模拟输入接口3

  右边 SCL  IIC时钟接口  接KST 51开发板的SCL 口

       SDA IIC数字接口  接KST 51开发板的SDA口

       GND 模块地       外接地

       VCC 电源接口     外接3.3v-5v  我用的是3.3


我用的是pcf8591模块。包含了热敏和光敏电阻。

  模块共有3个红色短路帽,分别作用如下:

P4   接上P4短路帽,选择热敏电阻接入电路


P5   接上P5短路帽,选择光敏电阻接入电路


P6   接上P6短路帽,选择0-5V可调电压接入电路


土壤湿度传感器主程序:

unsigned int val;

         unsignedchar str[10];

         EA= 1;

         ConfigTimer0(10);

         lcd1602Init();

         while(1)

         {

                   if(flag300ms)

                   {

                            flag300ms= 0;

                            GetADCValue(3);//获取土壤湿度

//                        str = *INT8UtostrHEX(val);

                            lcd1602Display(0,1,INT8UtostrHEX(val));//显示到液晶上

                   }

         }

PCF8591 AD转样模块主程序:

/*读取当前的ADC转换值,、chn-ADC通道号0-3*/

unsigned char GetADCValue(unsigned charchn)

{

         unsignedchar val;

         Start_I2c();

         if(!writeI2C(0x91<<1))//寻址PCF8591,如未答应,则停止操作并返回0

         {

                   Stop_I2c();

                   return0;

         }

         writeI2C(0x40|chn);//写入控制字节,选择转换通道

         Start_I2c();

         writeI2C((0x48<<1)|0x01);//寻址PCF8591,指定后续为读操作

         NoAckI2c();//先空读一个字节,提供采样转换时间

         *str= ReadADC();//读取刚刚转换完的值

         Stop_I2c();

         returnval;        




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析