📄 sensor.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 + -