基于52单片机温湿度传感器课程设计报告(含代码)

发布时间 : 星期三 文章基于52单片机温湿度传感器课程设计报告(含代码)更新完毕开始阅读

}

shi=dat/10; ge=dat;

write_com(0x98+add); write_dat(0x30+shi); write_dat(0x30+ge);

/*温度显示子函数*/

void write_tem(uchar add) { write_com(0x88+add); write_dat(tab[4]); write_dat(tab[5]); write_dat(tab[6]); write_dat(tab[7]); }

/*湿度显示子函数*/

void write_hum(uchar add) { write_com(0x98+add); write_dat(tab[0]); write_dat(tab[1]); write_dat(tab[2]); write_dat(tab[3]); }

void COM(void) { U8 i; for(i=0;i<8;i++) { U8FLAG=2; while((!AM2301)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0; if(AM2301)U8temp=1; U8FLAG=2; while((AM2301)&&U8FLAG++); //超时则跳出for循环 if(U8FLAG==1)break; //判断数据位是0还是1

// 如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1; U8comdata|=U8temp; } }

/***温湿度读取子函数***/ void RH(void) {

//主机拉低18ms AM2301=0; Delay2(180); AM2301=1;

//总线由上拉电阻拉高 主机延时40us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us();

//主机设为输入 判断从机响应信号 AM2301=1;

//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!AM2301) //T ! { U8FLAG=2;

//判断从机是否发出 80us 的低电平响应信号是否结束 while((!AM2301)&&U8FLAG++); U8FLAG=2;

//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while((AM2301)&&U8FLAG++); //数据接收状态 COM();

U8RH_data_H_temp=U8comdata; COM();

U8RH_data_L_temp=U8comdata; COM();

U8T_data_H_temp=U8comdata; COM();

U8T_data_L_temp=U8comdata; COM();

U8checkdata_temp=U8comdata; AM2301=1; //数据校验

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp

); }

if(U8temp==U8checkdata_temp) if(1) {

U8RH_data_H = U8RH_data_H_temp;//湿度 U8RH_data_L = U8RH_data_L_temp; U16temp1 = U8RH_data_H; U16temp1 <<= 8;

U16temp1 |= U8RH_data_L;//获得完整的湿度 tab[0]=U16temp1/100+0x30; //湿度百位 tab[1]=U16temp10/10+0x30;//湿度十位 tab[3]=U16temp1+0x30; //湿度个位 U8T_data_H = U8T_data_H_temp;//温度 U8T_data_L = U8T_data_L_temp; U16temp2 = U8T_data_H; U16temp2<<=8;

U16temp2 |= U8T_data_L;//获得完整的温度 tab[4]=U16temp2/100+0x30;//温度百位 tab[5]=U16temp20/10+0x30;//温度十位 tab[7]=U16temp2+0x30;//温度个位 U8checkdata=U8checkdata_temp;//校验位 } }

/*******主界面显示*********/ void display1() {

uchar i; init();

/***从第一行第一个字符的位置开始显示***/ lcd_pos(0,0); i=0; while(dis1[i]!='\\0') { write_dat(dis1[i]); i++; }

/***从第二行第一个字符的位置开始显示***/ lcd_pos(1,0); i=0; while(dis2[i]!='\\0')

{ }

write_dat(dis2[i]); i++;

/***从第三行第一个字符的位置开始显示***/ lcd_pos(2,0); i=0; while(dis3[i]!='\\0') { write_dat(dis3[i]); i++; } /***从第四行第一个字符的位置开始显示***/ lcd_pos(3,0); i=0; while(dis4[i]!='\\0') { write_dat(dis4[i]); i++; } }

/*****温湿度上下限及报警开关设置界面***********/ void display2() {

uchar i; init(); /***从第一行第一个字符的位置开始显示***/ lcd_pos(0,0); i=0; while(dis5[i]!='\\0') { write_dat(dis5[i]); i++; } write_lim1(5,temp_H); write_dat(0x2e); write_dat(0x30); if(flag3) { write_com(0x80+7); write_dat(0xbf); write_dat(0xaa); }

联系合同范文客服:xxxxx#qq.com(#替换为@)