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(); } } 把数据采聚写在while()循环内,这样不断刷新数据。 |
#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_(); } |
现在显示的问题解决了,但怎么在我这个新的程序的while中加入延时循环采集呀 |
w_data(str2[i]);一直 在写空,在while(1)中又不采集数据,自然什么都没有了 |