熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-7-1 18:27
正文摘要:#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit Data=P3^5; uchar rec_dat[9]; sbit RS=P3^0 ... |
void main() { unsigned char i; lcd_init(); DHT11_delay_ms(100); While(1) { DHT11_receive(); write_com(0x80); for(i=0;i<12;i++) write_dat(lcd[i]); write_com(0xc0); for(i=0;i<9;i++) write_dat(rec_dat[i]); DL(); } } 把數(shù)據(jù)采聚寫(xiě)在while()循環(huán)內(nèi),這樣不斷刷新數(shù)據(jù)。 |
我不久前曾做過(guò)這個(gè),想提醒一下吧,DHT11部分,需要嚴(yán)格按照他的時(shí)序來(lái)寫(xiě),精確到微秒級(jí)us,不然就達(dá)不到提取溫濕度信號(hào)的作用,其他的注意分號(hào),大小寫(xiě)之類的就差不多了,如果只是采集信息的話 |
參與人數(shù) 1 | 黑幣 +30 | 收起 理由 |
---|---|---|
![]() | + 30 | 回帖助人的獎(jiǎng)勵(lì)! |
#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit Data=P3^6; unsigned char rec_dat[9]; sbit RS=P3^0; sbit RW=P3^1; sbit E=P3^2; unsigned char code lcd[]={"123456789"}; void lcd_init(); unsigned char r_status(); //void w_com(unsigned char com); //void w_data(unsigned char dat); void delay(unsigned int k); void DL(); void delay(unsigned int k) { unsigned int i,j; for(i=0;i>k;i++) for(j=0;j>200;j++); } void DHT11_delay_us(uchar n) { while(--n); } void DHT11_delay_ms(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void DHT11_start() { Data=1; DHT11_delay_us(2); Data=0; DHT11_delay_ms(30); Data=1; DHT11_delay_us(30); } uchar DHT11_rec_byte() { uchar i,dat=0; for(i=0;i<8;i++) { while(!Data); DHT11_delay_us(8); dat<<=1; if(Data==1) dat+=1; while(Data); } return dat; } void DHT11_receive() { uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise; DHT11_start(); if(Data==0) { while(Data==0); DHT11_delay_us(40); R_H=DHT11_rec_byte(); R_L=DHT11_rec_byte(); T_H=DHT11_rec_byte(); T_L=DHT11_rec_byte(); revise=DHT11_rec_byte(); DHT11_delay_us(25); if((R_H+R_L+T_H+T_L)==revise) { RH=R_H; RL=R_L; TH=T_H; TL=T_L; } rec_dat[0]='0'+(RH/10); rec_dat[1]='0'+(RH%10); rec_dat[2]='R'; rec_dat[3]='H'; rec_dat[4]=' '; rec_dat[5]=' '; rec_dat[6]='0'+(TH/10); rec_dat[7]='0'+(TH%10); rec_dat[8]='C'; } } void write_com(unsigned char com) { unsigned char m; do{ m=r_status(); m&=0x80; DL(); }while(m!=0); RS=0; P2=com; delay(5); //DL(); E=1; delay(5); //DL(); E=0; } void write_dat(unsigned char dat) { unsigned char m; do{ m=r_status(); m&=0x80; DL(); }while(m!=0); RW=0; RS=1; P2=dat; delay(5); //DL(); E=1; delay(5); //DL(); E=0; } void lcd_init() { write_com(0x38); write_com(0x0f); write_com(0x01); write_com(0x06); write_com(0x80); } unsigned char r_status() { unsigned char s; RS=0; RW=1; E=1; DL(); s=P2; E=0; RW=0; return(s); } void main() { //while(1); { unsigned char i; lcd_init(); DHT11_delay_ms(100); DHT11_receive(); write_com(0x80); for(i=0;i<12;i++) write_dat(lcd[i]); write_com(0xc0); for(i=0;i<9;i++) write_dat(rec_dat[i]); DL(); } while(1); } void DL() { _nop_(); _nop_(); _nop_(); } |
現(xiàn)在顯示的問(wèn)題解決了,但怎么在我這個(gè)新的程序的while中加入延時(shí)循環(huán)采集呀 |
w_data(str2[i]);一直 在寫(xiě)空,在while(1)中又不采集數(shù)據(jù),自然什么都沒(méi)有了 |
Powered by 單片機(jī)教程網(wǎng)