#include<reg52.h>
#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
unsigned char shuju1[9]={0}; //濕度
uchar code table2[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x53,0x48,0x49,0x25,0x2e,0x20}; //濕度調用
/**************1602d調用函數*******************/
void write_com(uchar com);
void write_shuju(uchar shuju);
void init();
void delay(uchar z);
/****************hs1101調用函數*************************/
void readfrequency(void); // 讀頻率函數//
bit minrange=0; //濕度下限標志位//
bit maxrange=0; //濕度上限標志位//
bit T0Over=0; //定時器結束標記
unsigned char w,x,y;
/******************主函數******************/
void main()
{
init();
while(1)
{
readfrequency();
}
}
/*****************1602延時程序*****************/
void delay(uchar z)
{
uint a,b;
for(a=0;a<z;a++)
for(b=0;b<110;b++);
}
/*******************1602初始化**************/
void init()
{
en=0;
write_com(0x38); //設置為8位并行,顯示2行,5*7點陣顯示
write_com(0x0c); //設置顯示開 無光標 光標不閃爍
write_com(0x01); //清屏指令
write_com(0x80);
}
/***************1602寫指令*********************/
void write_com(uchar com)
{
rs=0;
rw=0;
P1=com;
delay(5);
en=1;
en=0;
}
/**************1602寫數據**********************/
void write_shuju(uchar shuju)
{
rs=1;
rw=0;
P1=shuju;
delay(5);
en=1;
en=0;
}
/****************中斷*****************************/
void timer0() interrupt 1
{
TR1=0;
TR0=0;
TF0=0;
ET0=0;
T0Over=1;
}
/*************濕度傳感器頻率采集及轉換模塊***************/
void readfrequency()
{
unsigned int ftequency,RH;
TMOD=0x51;
TH0=0x4C;
TL0=0X00;
TH1=0;
TL1=0;
TR1=1;
TR0=1;
ET0=1;
ET1=0;
EA=1;
T0Over=0;
while(!T0Over)
write_com(0x80+0x40);
write_shuju(table2[shuju1[0]]);
write_com(0x80+0x41);
write_shuju(table2[shuju1[1]]);
write_com(0x80+0x42);
write_shuju(table2[shuju1[2]]);
write_com(0x80+0x43);
write_shuju(table2[shuju1[3]]);
write_com(0x80+0x44);
write_shuju(table2[shuju1[4]]);
write_com(0x80+0x45);
write_shuju(table2[shuju1[5]]);
write_com(0x80+0x46);
write_shuju(table2[shuju1[6]]);
write_shuju(table2[shuju1[7]]);
write_shuju(table2[shuju1[8]]);
ftequency=(TH1*256+TL1)*20;
minrange=0;
maxrange=0;
if(ftequency)
{
if(ftequency<6033)
maxrange=1;
if(ftequency>7351)
minrange=1;
if(6330<ftequency<=7351)
RH=5880-0.8*ftequency;
if(6033<=ftequency<=6330)
RH=5860-0.8*ftequency;
shuju1[0]=10;
shuju1[1]=11;
shuju1[2]=12;
shuju1[3]=15;
shuju1[4]=RH/100;
shuju1[5]=(RH%100)/10;
shuju1[6]=14;
shuju1[7]=(RH%10);
shuju1[8]=13;
}
}
|