stc12c5a60s2烧写程序的单片机与at89c51单片机有什么区别论文上面要用?

#include "dth11.h" /**本程序在STC89C52RC 11.0592Mhz状态下测试通过,其他单片机不保证通过!!!!*/ 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(20); //延时18ms以上 Data=1; DHT11_delay_us(30); } uchar
DHT11_rec_byte() //接收一个字节 { uchar i,dat=0; for(i=0;i<8;i++) //从高到低依次接收8位数据 { while(!Data); ////等待50us低电平过去 DHT11_delay_us(8); //延时60us,如果还为高则数据为1,否则为0 dat<<=1;
//移位使正确接收8位数据,数据为0时直接移位 if(Data==1) //数据为1时,使dat加1来接收数据1 dat+=1; while(Data); //等待数据线拉低 } return dat; } void DHT11_receive(uchar dat[]) //接收40位的数据 { uchar
R_H,R_L,T_H,T_L,revise; DHT11_start(); if(Data==0) { while(Data==0); //等待拉高 DHT11_delay_us(40); //拉高后延时80us 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) //校正 { dat[0]=T_H;
//温度高8位(表示整数部分) dat[1]=T_L; //温度低8位(表示小数部分) dat[2]=R_H; //湿度高8位(表示整数部分) dat[3]=R_L; //湿度低8位(表示小数部分) } } }

我要回帖

更多关于 stc12c5a60s2烧写程序 的文章

 

随机推荐