与电脑通信的温湿度传感器c程序.docx
- 文档编号:28037248
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:9
- 大小:15.92KB
与电脑通信的温湿度传感器c程序.docx
《与电脑通信的温湿度传感器c程序.docx》由会员分享,可在线阅读,更多相关《与电脑通信的温湿度传感器c程序.docx(9页珍藏版)》请在冰豆网上搜索。
与电脑通信的温湿度传感器c程序
#include
#include
#include
typedefunsignedcharuchar;
typedefunsignedintuint;
voidunit();
voiddelay2ms(uintM);
voiddelay2xus(ucharm);
ucharread_onebyte();
voidRead();
voidwrite_com(ucharcom);
voidwrite_data(ucharD);
voidLCD1602_unit();//初始化lcd1602
voidLCD1602_display();
voiduart_unit();
voidsent_byte();
ucharDATA[5];
sbitled=P0^3;
sbitled3=P0^0;
ucharD=1;
sbitDQ=P2^7;
sbitlcd_rs=P3^3;
sbitlcd_rw=P3^4;
sbitlcd_en=P3^5;
ucharRH_H,RH_L,T_H,T_L,CHECK;
floatRH,T;
/*---------------------微秒延时函数--------------------------------------*/
voiddelay2xus(ucharm)
{while(--m);
}
/*--------------------毫秒延时函数---------------------------------------*/
voiddelay2ms(uintM)
{
uinti,j,k;
for(k=0;k {for(i=0;i<9;i++) {for(j=0;j<32;j++); } } } /*--------------------------DHT11初始化函数---------------------------*/ voidunit() {led3=1; led3=0;DQ=1; DQ=0; delay2ms(12); DQ=1; delay2xus(12);//检测DHT11响应信号是否开始 while(DQ);//DQ=1时跳过 while(! DQ);//检测DHT11响应信号是否结束 while(DQ); led3=1;//检测DHT11的发送bite开始信号是否开始 } /*---------------------读一个字节函数-----------------------------------*/ ucharread_onebyte() {uchari; ucharflag; ucharbyte=0x00; for(i=0;i<8;i++) {while(DQ); byte=byte<<=1; while(! DQ);//检测数据信号,即高电平 delay2xus(17);//区分开1信号和0信号 if(DQ) flag=1; else flag=0; byte=byte|flag;//若DQ是高电平,就是1信号,是低电平就是0信号 } returnbyte;//返回8位数据 } /*-------------------------------读DHT11数据函数------------------------------*/ voidRead() { ucharj,total; //检测数据是否正确指示灯 for(j=0;j<5;j++) {led=0; DATA[j]=read_onebyte();}//按协议顺序,DATA[0]为湿整,DATA[1]为湿小,DATA[2]为温整,DATA[3]为温小 RH_H=DATA[0]; RH_L=DATA[1]; T_H=DATA[2]; T_L=DATA[3]; CHECK=DATA[4]; total=RH_H+RH_L+T_H+T_L; if(CHECK==total);//检测数据是否正确 else led=1;//检测数据是否正确指数灯 } /*------------------------------LCD写指令函数--------------------------------------------*/ voidwrite_com(ucharcom) { lcd_rs=0;//声明是指令 P1=com; delay2ms(5); lcd_en=1;//下降沿有效 delay2ms(5); lcd_en=0; } /*---------------------------------LCD写数据函数---------------------------------------*/ voidwrite_data(ucharD) { lcd_rs=1;//声明是数据 P1=D; delay2ms(5); lcd_en=1;//下降沿有效 delay2ms(5); lcd_en=0; } /*---------------------------------LCD1602初始化函数----------------------------------*/ voidLCD1602_unit() {lcd_rw=0; write_com(0x80); write_com(0x06);//声明是写操作 //清屏 //光标右移,字符不动 write_com(0x0f);//开显示,有光标,光标不闪烁 write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口 } /*-------------------------------------LCD1602显示函数-------------------------------------*/ voidLCD1602_display() { ucharwho[2]; uchari; ucharstr1[11];//暂存相对湿度字符 ucharstr2[11];//暂存温度字符 LCD1602_unit(); write_com(0x80);//光标在第一行第一位 who[0]=0xdf; who[1]='c'; RH=RH_H+RH_L*0.001;//相对湿度数据 T=T_H+T_L*0.001; //温度数据 sprintf(str1,"RH: %7.3f%%",RH);//转化为字符串 sprintf(str2,"T: %7.3f%s",T,who); for(i=0;i<11;i++)//在第一行显示相对湿度数据 {write_data(str1[i]); } write_com(0xc0);//光标在第二行第一位 for(i=0;i<11;i++)//在第二行显示温度数据 { write_data(str2[i]); } } /*----------------------------------串行异步通信初始化函数与------------------------------*/voiduart_unit() { TMOD|=0x20; PCON=0x00; SCON=0x50;//启动timer1,mode2,8bit自动重装 //波特率正常,即SMOD=0 //串口模式1,8bitUART,REN=1,SM0=0;SM1=1 TH1=0xf3;//自动重装,波特率为2400,晶振12MHZ TL1=0xf3; TR1=1;//打开总xx ES=1;//打开timer1 EA=1;//打开串行xx } /*------------------------------------串行发送数据函数-----------------------------------*/ voidsent_byte() {ucharc; ucharsent[2]; sent[0]=2;//准备接收信号 sent[1]=RH; sent[2]=3; sent[3]=T; sent[4]=0; for(c=0;c<5;c++) {SBUF=sent[c]; while(! TI); TI=0; delay2ms(25);//xx补偿 } } /*------------------------------------------------------------------------ 主函数 ------------------------------------------------------------*/ voidmain() {D=1; while (1)//主循环,等待上位机给启动信号 { while(! D);//检测上位机命令 RI=0; TI=0; delay2ms(100);//当电脑传给T=1时,可跳出循环,开始新一轮的测量数据,并发送上一次测量数据T=0;while(! T); unit(); Read();//读并整理出相对湿度值和温度值 LCD1602_unit();//初始化lcd1602 LCD1602_display();//显示 uart_unit(); sent_byte(); //运行一次后停止 } } /*-----------------------中断服务函数-------------------------------*/ voiduart()interrupt4//串行中断号为4 { if(RI==1) D=SBUF;//将T置1或0 RI=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电脑 通信 温湿度 传感器 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)