資源簡介
遠程倉庫濕度監測系統設計-Proteus仿真與C語言源碼,經過測試,完全能夠正常實現

代碼片段和文件信息
//****************************************************
//SHT11溫度+濕度傳感器,測量結果用LCD1602顯示
//操作的關鍵部分是1.對照SHT11的時序圖操作
// ??2.數值的轉換
// ??3.對SHT11的誤差進行線性補償
//****************************************************
#include?
#include?
#include?
sbit?SCK=P2^4;
sbit?DATA=P2^5;
sbit?LCD_RS=P2^0;
sbit?LCD_EN=P2^2;
unsigned?char?RH_HRH_L; //接收的濕度的高位數據和低位數據
unsigned?int?ij;
unsigned?char?dispbuf[4];
void?delay(unsigned?int?z)
{
unsigned?int?xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void?write_GETRH(unsigned?char?GETRH)
{
LCD_RS=0;
P0=GETRH;
delay(1);
LCD_EN=1;
delay(1);
LCD_EN=0;
}
void?write_DATA(unsigned?char?*date)
{
unsigned?char?n;
for(n=0;n<0x40;n++)
{
if(date[n]==‘*‘)break; //檢測,如果字符輸入“*“就終止
LCD_RS=1;
P0=date[n];
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
}
void?init()
{
LCD_EN=0;
write_GETRH(0x38);
write_GETRH(0x0c);
write_GETRH(0x06);
write_GETRH(0x01);
}
//在SCK上發送n個脈沖信號
void?nSCKPulse(unsigned?int?n)
{
for(i=n;i>0;i--)
{
SCK=0;
SCK=1;
}
}
//啟動SHT11
void?STARTSHT11()
{
SCK=1;
DATA=0;
SCK=0;
SCK=1;
DATA=1;
SCK=0;
}
//獲得濕度數據
void?GETRH(unsigned?char?GETRH) //測量濕度
{
unsigned?char?bei=0x80;
DATA=1;
SCK=0; //下面可以開始
for(i=8;i>0;i--)
{
if(GETRH&bei)
{
DATA=1;
SCK=1;
SCK=0;
}
else
{
DATA=0;
SCK=1;
SCK=0;
}
bei=bei/2;
}
}
//對SHT11進行讀操作
void?READSHT11()
{
unsigned?char?temp;
RH_H=0;
RH_L=0;
for(i=0;i<4;i++) //4個脈沖沒數據
{
SCK=1;
SCK=0;
}
for(i=4;i>0;i--) //接收RH高4位數據
{
SCK=1;
temp=0x01;
if(DATA==1)
{
temp=(temp<<(i-1)); //右移動
RH_H=RH_H+temp;
}
SCK=0;
}
DATA=0; //拉低
SCK=1;
SCK=0;
DATA=1; //釋放
for(i=8;i>0;i--) //接收RH低4位數據
{
SCK=1;
temp=0x01;
if(DATA==1)
{
temp=(temp<<(i-1)); //右移動
RH_L=RH_L+temp;
}
SCK=0;
}
P1=RH_H;
P3=RH_L;
DATA=0; //拉低
SCK=1;
SCK=0;
DATA=1; //釋放(不做CRC校驗,就此結束)
}
//階乘函數
long?FACTORIAL(int?n)
{
long?nn=1;
for(;n>0;n--)
{
nn=10*nn;
}
return(nn);
}
//SHT11的補償算法
void?COMPENSATIONSHT()
{
unsigned?long?ii;
char?m;
ii=((((RH_H*256+RH_L)-221)*318878)/100000);
if(ii>5000)
{
ii=ii+((10000-ii)*620/5000);
}
else
{
ii=ii+ii*620/5000;
}
//??printf(“%f\n“ii);
for(m=4;m>=0;m--)
{
if(m==1)
{
write_DATA(“.*“);
}
LCD_RS=1;
P0=(int)(ii/FACTORIAL(m))+0x30;
if(m==4&P0==0x30)
{
P0=0x20;
}
if(m==4&P0==0x31)
{
write_DATA(“100.00*“);
break;
}
if(m==3&P0==0x30)
{
P0=0x20;
}
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
ii=ii-((int)(ii/FACTORIAL(m)))*FACTORIAL(m);
}
write_DATA(“%*“);
}
void?InitUart(void)
{
SCON?=?0x50;??????????????????????????????????//工作方式1
TMOD?=?0x21;
PCON?=?0x00;
TH1?=?0xfd;???????????????????????????????????//使用T1作為波特率發生器
TL1?=?0xfd;
TI?=?1;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-04-28?19:51??遠程倉庫濕度監測系統\
?????文件???????91511??2012-04-06?09:32??遠程倉庫濕度監測系統\Last?Loaded?倉庫監控系統.DBK
?????文件????????8687??2012-04-06?16:35??遠程倉庫濕度監測系統\MCU.LST
?????文件???????13843??2012-04-06?16:35??遠程倉庫濕度監測系統\MCU.OBJ
?????文件????????3793??2012-04-06?09:30??遠程倉庫濕度監測系統\MCU.c
?????文件????????4070??2012-01-21?16:09??遠程倉庫濕度監測系統\SHT11的應用實例.hex
?????文件????????6376??2005-03-22?15:22??遠程倉庫濕度監測系統\STARTUP.A51
?????文件???????14048??2012-04-06?16:35??遠程倉庫濕度監測系統\STARTUP.LST
?????文件?????????749??2012-04-06?16:35??遠程倉庫濕度監測系統\STARTUP.OBJ
?????文件???????12669??2012-04-06?16:35??遠程倉庫濕度監測系統\倉庫監控系統
?????文件???????91511??2012-04-06?18:43??遠程倉庫濕度監測系統\倉庫監控系統.DSN
?????文件???????17312??2012-04-06?16:35??遠程倉庫濕度監測系統\倉庫監控系統.M51
?????文件????????1025??2012-04-06?16:35??遠程倉庫濕度監測系統\倉庫監控系統.Opt
?????文件?????????821??2012-04-06?18:43??遠程倉庫濕度監測系統\倉庫監控系統.PWI
?????文件????????2151??2012-04-05?15:05??遠程倉庫濕度監測系統\倉庫監控系統.Uv2
?????文件????????4265??2012-04-06?16:35??遠程倉庫濕度監測系統\倉庫監控系統.hex
?????文件??????????63??2012-04-06?16:35??遠程倉庫濕度監測系統\倉庫監控系統.lnp
?????文件?????????416??2012-04-06?16:35??遠程倉庫濕度監測系統\倉庫監控系統.plg
?????文件????????1025??2012-04-06?09:32??遠程倉庫濕度監測系統\倉庫監控系統_Opt.Bak
?????文件???????????0??2012-04-05?11:28??遠程倉庫濕度監測系統\倉庫監控系統_Uv2.Bak
?????文件?????????813??2012-02-07?16:08??遠程倉庫濕度監測系統\和PC機串行通信應用實例.hex
評論
共有 條評論