摄影网站公司,公司名称变更说明函,哪里有做ppt的网站,衡阳做网站的51单片机温湿度数据管理系统
1.硬件准备
开发板#xff1a;51单片机 显示#xff1a;lcd1602 温湿度模块#xff1a;DHT11 通信模块#xff1a;HC-08蓝牙
2.代码实现
uart.c
#include reg52.h
#include config.h
#include string.hsf…51单片机温湿度数据管理系统
1.硬件准备
开发板51单片机 显示lcd1602 温湿度模块DHT11 通信模块HC-08蓝牙
2.代码实现
uart.c
#include reg52.h
#include config.h
#include string.hsfr AUXR 0x8E;
sbit D6 P3^6;
char buffer[12];void UartInit(void) //9600bps11.0592MHz
{AUXR 0x01;SCON 0x50; //配置串口工作方式1REN使能接收TMOD 0xF0;TMOD | 0x20;//定时器1工作方式位8位自动重装TH1 0xFD;TL1 0xFD;//9600波特率的初值TR1 1;//启动定时器EA 1;//开启总中断ES 1;//开启串口中断
}
void sendByte(char data_msg)
{SBUF data_msg;while(!TI);TI 0;
}void sendString(char* str)
{while( *str ! \0){sendByte(*str);str;}
}void Uart_Handler() interrupt 4
{char tmp;char i;if(RI)//中断处理函数中对于接收中断的响应{RI 0;//清除接收中断标志位tmp SBUF;if(tmp :){i 0;}buffer[i] tmp;if(buffer[0] : buffer[1] o buffer[2] p){fengshan 0;memset(buffer,\0,12);}if(buffer[0] : buffer[1] c buffer[2] l){fengshan 1;D6 0;Delay1000ms();Delay1000ms();memset(buffer,\0,12);}}if(TI);
}
uart.h
#ifndef _UART_H
#define _UART_Hvoid UartInit(void); //9600bps11.0592MHzvoid sendByte(char data_msg);void sendString(char* str);#endiflcd1602.c
#include reg52.h
#include intrins.h
#include delay.h#define databuffer P0 //定义8位数据线Po端口组
sbit RS P1^0;
sbit RW P1^1;
sbit EN P1^4;void check_busy()
{char tmp 0x80;databuffer 0x80;while(tmp 0x80){//1000 0000RS 0;RW 1;EN 0;_nop_();EN 1;_nop_();_nop_();tmp databuffer;EN 0;_nop_();}
}void Write_Cmd_Func(char cmd)
{check_busy();RS 0;RW 0;EN 0;_nop_();databuffer cmd;_nop_();EN 1;_nop_();_nop_();EN 0;_nop_();
}void Write_Data_Func(char dataShow)
{check_busy();RS 1;RW 0;EN 0;_nop_();databuffer dataShow;_nop_();EN 1;_nop_();_nop_();EN 0;_nop_();
}void LCD1602_INIT()
{//1延时 15msDelay15ms();
//2写指令 38H(不检测忙信号) Write_Cmd_Func(0x38);
//3延时 5msDelay5ms();
//4以后每次写指令读/写数据操作均需要检测忙信号
//5写指令 38H显示模式设置Write_Cmd_Func(0x38);
//6写指令 08H显示关闭Write_Cmd_Func(0x08);
//7写指令 01H显示清屏Write_Cmd_Func(0x01);
//8写指令 06H显示光标移动设置Write_Cmd_Func(0x06);
//9写指令 0CH显示开及光标设置}Write_Cmd_Func(0x0c);
}void LCD1602_showLine(char row, char col, char *string)
{switch(row){case 1:Write_Cmd_Func(0x80col);while(*string){Write_Data_Func(*string);string;}break;case 2:Write_Cmd_Func(0x800x40col);while(*string){Write_Data_Func(*string);string;}break;}
}lcd1602.h
#ifndef _LCD1602_H
#define _LCD1602_Hvoid LCD1602_INIT();void LCD1602_showLine(char row, char col, char *string);#endifdht11.c
#include reg52.h
#include delay.hsbit dht P3^3;//模块的data插在p3.3char datas[5];void DHT11_Start()
{dht 1;dht 0;//延时30msDelay30ms();dht 1;//卡d点while(dht1); 卡e点 while(!dht) 卡f点while(dht)while(dht);while(!dht);while(dht);
}void Read_Data_From_DHT()
{int i;//轮int j;//每一轮读多少次char tmp;char flag;DHT11_Start();for(i 0;i 5;i){//卡g点while(!dht) 有效数据都是高电平持续时间不一样50us读低电平0 高电平for(j0;j8;j){while(!dht);//等待卡g点Delay40us();if(dht 1){flag 1;while(dht);}else{flag 0;} tmp tmp 1;tmp | flag;}datas[i] tmp;}}dht11.h
#ifdenf _DHT11_H
#define _DHT11_Hvoid Read_Data_From_DHT();#endifdelay.c
#include intrins.h
void Delay30ms() //11.0592MHz
{unsigned char i, j;i 54;j 199;do{while (--j);} while (--i);
}void Delay40us() //11.0592MHz
{unsigned char i;_nop_();i 15;while (--i);
}void Delay1000ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 8;j 1;k 243;do{do{while (--k);} while (--j);} while (--i);
}void Delay15ms() //11.0592MHz
{unsigned char i, j;i 27;j 226;do{while (--j);} while (--i);
}
void Delay5ms() //11.0592MHz
{unsigned char i, j;i 9;j 244;do{while (--j);} while (--i);
}delay.h
#ifndef _DELAY_H
#define _DELAY_H#include intrins.h
void Delay30ms(); //11.0592MHzvoid Delay40us(); //11.0592MHzvoid Delay1000ms(); //11.0592MHzvoid Delay15ms(); //11.0592MHzvoid Delay5ms(); //11.0592MHz#endifconfig.h
#ifndef _CONFIG_H
#define _CONFIG_Hsbit ledOne P3^7;
sbit fengshan P1^6;#endifmain.c
#include reg52.h
#include intrins.h
#include delay.h
#include lcd1602.h
#include uart.h
#include dht11.h
#include config.hchar temp[8];
char huma[8];
extern char datas[5];void Build_Datas()
{huma[0] H;huma[1] datas[0]/10 0x30;huma[2] datas[0]%10 0x30;huma[3] .;huma[4] datas[1]/10 0x30;huma[5] datas[1]%10 0x30;huma[6] %;huma[7] \0;temp[0] T;temp[1] datas[2]/10 0x30;temp[2] datas[2]%10 0x30;temp[3] .;temp[4] datas[3]/10 0x30;temp[5] datas[3]%10 0x30;temp[6] C;temp[7] \0;}void main()
{Delay1000ms();UartInit();LCD1602_INIT();Delay1000ms();Delay1000ms();ledOne 0;while(1){Delay1000ms();Read_Data_From_DHT(); if(datas[2] 24){fengshan 0;}else{fengshan 1;}Build_Datas();sendString(huma);sendString(\r\n);sendString(temp);sendString(\r\n);LCD1602_showLine(1,2,huma);LCD1602_showLine(2,2,temp);}
}