本帖最后由 单刀桔子 于 2019-6-14 23:03 编辑
自己也是在社区找资料实现的功能,下面是一部分源码部分源码程序
#include"LCD1602.h" //添加LCD1602头文件 #include"dht11.h" //添加DHT11头文件 #include"adc0832.h" #include<math.h> sbit BUZZER = P1^3; sbit Reduc = P3^0 sbit Add = P3^1; sbit Mode = P3^2; //sbit LED1=P2^0; //sbit LED2=P2^1; uchar Rx_buf[4],Rxnum=0; uchar T1L=15,T1H=35,R1L=30,R1H=80; void InitUART(void) { TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; ES = 1; TR1 = 1; } void UART_send_byte(char dat) { SBUF = dat; while (TI == 0); TI = 0; } void UART_send_string(unsigned char *buf) { while (*buf != '\0') { UART_send_byte(*buf++); } } /*主函数*/ void main(void) { double PM,pm1,pm2; intPMVAL=0,HPM=200,PM_count=0,pm1_count=0; ucharT1_data=0,R1_data=0,T2_data=0,R2_data=0;//温度、湿度变量 ucharshezhi_flag=1,Mode_flag=1,n=1;//设置变量 ucharbueezr_flag=0,count=0,buzzer_time=9;//蜂鸣器报警变量 uint Mode_count=0; uchar disp[16] ={"PM2.5:0000ug/m3 "}; uchar disp1[16]={"T :00C RH:00%"}; uchar Tx_Buf[15]; InitUART(); //初始化串口 LCD_Init(); WriteChar(1,0,16,disp); //在第一行显示‘内容’ WriteChar(2,0,16,disp1);//在第二行显示‘内容’ while(1) { T1_data=Read_TRH(0,0);//温度 disp1[3]=T1_data/10+0x30;//十位 disp1[4]=T1_data%10+0x30;//个位
R1_data=Read_TRH(1,0);//湿度 disp1[13]=R1_data/10+0x30;//十位 disp1[14]=R1_data%10+0x30;//个位
pm1+=read_data(1); if(++PM_count>=20) { PM_count=0; pm1=pm1/20; pm2+=pm1; pm1=0; if(++pm1_count>=5) { pm1_count=0; PM=pm2/5; PM=PM*50/255; PM-=4; PM/=5; PM*=1000; PMVAL=PM; PMVAL+=235; PMVAL=PMVAL/9; if(PMVAL>=9999)PMVAL=9999; WriteCOMDATA(0x86,0); if(PMVAL<0)//PMVAL=0; {WriteCOMDATA(0+0x30,1);PMVAL=abs(PMVAL);} elseWriteCOMDATA(PMVAL/1000+0x30,1); WriteCOMDATA(PMVAL/100%10+0x30,1); WriteCOMDATA(PMVAL/10%10+0x30,1); WriteCOMDATA(PMVAL%10+0x30,1); PM=pm1=pm2=0; } } |