⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sensor.c

📁 该代码为温湿度传感器采集程序,包括测量温度、湿度等功能。
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#include <math.h>
#define uchar unsigned char
#define uint  unsigned int

sbit SCK=P1^0;                   // 将p1.0口模拟时钟口
sbit DATA=P1^1;                   // 将p1.1口模拟数据口
sbit K1=P1^4;                     //K1键按下软启动
sbit K2=P1^5;                     //K2键按下测量温度
sbit K3=P1^6;                     //K3键按下测量湿度
sbit K4=P1^7;
uchar  K_new,K_old,k;

/********************************************************/
uint T_databuffer[3]={0x00,0x00,0x00};
uint RH_databuffer[3]={0x00,0x00,0x00};
uint Readout_data=0x00;
uchar code  LEDData[ ]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
                               0x80,0x90,0xff}; 
float Temperature=0;
float RH_true=0;
float RH_linear=0;
uchar i;
uchar  ACK=0;   //SHT11收到命令后,在第8个时钟下降沿拉低DATA作为确认receiveC_ack,第9个时钟下降沿,释放DATA                              
/**********************************************************/
//uchar FR=0;              //FR为读取到的一个字节的标志位,为1表示MCU收到。
void Delayus(unsigned int num)//延时函数
{
  while( --num );
}
/*******************************************************************/
/*                                                                 */
/*  延时函数                                                       */
/*                                                                 */
/*******************************************************************/
void delay(int ms)
{
    while(ms--)
	{
      uchar i;
	  for(i=0;i<250;i++)  
	   {
	    _nop_();			   
		_nop_();
		_nop_();
		_nop_();
	   }
	}
}		
/*******************************************************************/
void display( float dis_data)
{
  uint buffer[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  uint a1=dis_data;  uint a2;
  buffer[0]=a1/10000;    //万位
  buffer[7]=a1%10000;     //
  buffer[1]=buffer[7]/1000;  //千位
  buffer[6]=buffer[7]%1000 ;  
  buffer[7]=buffer[6];
  buffer[2]=buffer[7]/100;  //百位
  buffer[6]=buffer[7]%100;
  buffer[7]=buffer[6];
  buffer[3]=buffer[7]/10;  //十位
  buffer[4]=buffer[7]%10;  //个位

  a2=(dis_data-a1)*1000;
  buffer[5]=a2/100;    //十分位
  buffer[7]=a2%100;
  buffer[6]=buffer[7]/10;//百分位
  buffer[7]=buffer[7]%10;//千分位
  
  
  P0=LEDData[buffer[0]]; //万位
  P2=0xfe;
  delay(1);
  P0=LEDData[buffer[1]]; //千位
  P2=0xfd;
  delay(1);
  P0=LEDData[buffer[2]]; //百位
  P2=0xfb;
  delay(1);
  P0=LEDData[buffer[3]]; //十位
  P2=0xf7;
  delay(1);
  P0=0x7f&LEDData[buffer[4]]; //个位+小数点
  P2=0xef;
  delay(1);
  P0=LEDData[buffer[5]]; //十分位
  P2=0xdf;
  delay(1);
  P0=LEDData[buffer[6]]; //百分位
  P2=0xbf;
  delay(1);
  P0=LEDData[buffer[7]]; //千分位
  P2=0x7f;
  delay(1);
  P2=0xff;                 //关闭显示
}
//-------------------------------------------------------
// 延时函数 delay5us
//-------------------------------------------------------
void delay5us()
{   
   _nop_();_nop_();_nop_();_nop_();_nop_();
}
/********************************************************/
uchar K_scan()
{
    P1=0xff;
    K_new=0x00;
    K_new=(~P1&0xf0)>>4;

    return(K_new);    //无键按下

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -