本帖最后由 單刀桔子 于 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; } } |