急求一份DHT11+STC89C52Rc十LCD1602程序(c语言)你能发给我一份吗?谢谢5
我有现成SHT11的。。。。点我QQ加我把。
可以在proteus仿真的啊
可以交流的
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit DHTIO = P2^7; //管脚定义,DHT11总线输入输出;
sbit LCDRS = P2^3; //管脚定义,1602液晶RS控制端;
sbit LCDWR = P2^4; //管脚定义,1602液晶W/R控制端;
sbit LCDEN = P2^5; //管脚定义,1602液晶EN使能端;
uchar code table[]={'0','1','2','3','4','5','6','7','8','9'};
uchar data_byte;
uchar Tem_Z,Tem_X,Hum_Z,Hum_X,Check;
void LCD_Init(); //声明LCD_Init液晶初始化函数;
void LCD_Display(); //声明LCD_Display液晶显示函数;
void Rec_DHT(); //声明Rec_DHT,DHT11接收数据函数;
//主函数
void main()
{
LCD_Init();
while(1)
{
Rec_DHT();
LCD_Display();
}
}
/*********延时函数********/
void delay(uchar ms)
{
uchar i ;
while(ms--)
{
for(i=0;i<250;i++);
}
}
/***延时10us***/
void delay1()
{
uchar i;
i--;i--;i--;
i--;i--;i--;
}
/********主机发出开始信号*******/
void DHT11_Start() //请结合时序图分析
{
DHTIO=1;
delay1();
DHTIO=0;
delay(20); //保持电平时间大于18ms
DHTIO=1;
delay1(); //延迟等待20-40us
delay1();
delay1();
delay1();
delay1();
}
/********DHT11接收一个字节数据*******/
uchar receive_data()
{
uchar i,temp,count;
data_byte=0;
for(i=0;i<8;i++)
{
count=2;
while((!DHTIO)&&count++);//等待50us低电平结束
temp=0;
delay1();delay1();delay1();delay1();
if(DHTIO==1)
{
temp=1;
count=2;
while((DHTIO)&&count++);
}
if(count==1) break;
data_byte<<=1;
data_byte|=temp;
}
return data_byte;
}
/********DHT11接收数据*******/
void Rec_DHT()
{
uchar flag;
DHT11_Start();//主机发出开始信号
DHTIO=1; //拉高等待DHT11响应
if(!DHTIO) //从机发出响应信号
{
flag = 2;
while((!DHTIO) && flag++);
//判断从机是否发出 80us 的低电平响应信号是否结束
flag = 2;
while(DHTIO && flag++);
//判断从机是否发出 80us 的高电平,若发出则开始采集数据
Tem_Z = receive_data(); //采集湿度整数部分
Tem_X = receive_data(); //采集湿度小数部分
Hum_Z = receive_data(); //采集温度整数部分
Hum_X = receive_data(); //采集温度小数部分
Check = receive_data(); //采集校验位
DHTIO = 1;
}
}
/*******指令码*******/
void write_com(uchar com)
{
com=((com&0x01)<<7)|((com&0x02)<<5)|((com&0x04)<<3)|((com&0x08)<<1)|((com&0x10)>>1)|((com&0x20)>>3)|((com&0x40)>>5)|((com&0x80)>>7); //注:此部分因采用的最小系统板电路设计原因,需要将字节信息逆置;
LCDRS=0;
LCDEN=0;
delay(2);
LCDEN=1;
P0=com;
delay(2);
LCDEN=0;
}
/*******数据码*******/
void write_data(uchar date)
{
date=((date&0x01)<<7)|((date&0x02)<<5)|((date&0x04)<<3)|((date&0x08)<<1)|((date&0x10)>>1)|((date&0x20)>>3)|((date&0x40)>>5)|((date&0x80)>>7); //注:此部分因采用的最小系统板电路设计原因,需要将字节信息逆置;
LCDRS=1;
LCDEN=0;
delay(2);
LCDEN=1;
P0=date;
delay(2);
LCDEN=0;
}
/*********************/
/********1602液晶显示初始化*******/
void LCD_Init()
{
LCDEN=0; //使能低电平
LCDWR=0;
write_com(0x38); //显示模式设置,设置16*2显示,5*7点阵,8位数据接口
delay(2);
write_com(0x0c); //显示开关及光标设置
delay(2);
write_com(0x06);
delay(2);
write_com(0x01); //清屏
delay(2);
}
/**********1602液晶显示*********/
void LCD_Display()
{
//液晶显示第一行:温度显示;
write_com(0x0c);
write_com(0x81);delay(2);
write_data('T');delay(2);
write_data('e');delay(2);
write_data('m');delay(2);
write_data(':');delay(2);
write_com(0x86);delay(2);
write_data(table[(Tem_Z/10)]);delay(2); //输出温度的十位
write_data(table[(Tem_Z%10)]);delay(2); //输出温度的个位
write_data('.');delay(2);
write_data('0');delay(2);
write_data('0');delay(2);
write_com(0x8c);delay(2);
write_data(0xdf);delay(2); //输出℃
write_data(0x43);delay(2);
//液晶第二行:湿度显示;
write_com(0xc1);delay(2);
write_data('H');delay(2);
write_data('u');delay(2);
write_data('m');delay(2);
write_data(':');delay(2);
write_com(0xc6);delay(2);
write_data(table[(Hum_Z/10)]);delay(2); //输出湿度的十位
write_data(table[(Hum_Z%10)]);delay(2); //输出湿度的个位
write_data('.');delay(2);
write_data('0');delay(2);
write_data('0');delay(2);
write_com(0xcc);delay(2);
write_data('%');delay(2);
}
?不会,要是C++的话我可以
给一份DS18B20做参考
呵呵呵
急求一份DHT11+STC89C52Rc十LCD1602程序(c语言)你能发给我一份吗...
void DHT11_Start() \/\/请结合时序图分析 { DHTIO=1;delay1();DHTIO=0;delay(20); \/\/保持电平时间大于18ms DHTIO=1;delay1(); \/\/延迟等待20-40us delay1();delay1();delay1();delay1();} \/***DHT11接收一个字节数据***\/ uchar receive_data(){ uchar i,temp,count;...
100分,求温湿度传感器SHT11的源程序(51单片机语言)
sbit wela = P2^7;define OK 1 define ERROR 0 define NUMBER 20 define SIZE 5 sbit dht11 = P2^0;uchar status;\/\/存放五字节数据的数组 uchar value_array[SIZE];\/*可在其他的文件引用温湿度值,实际是温度的整数的10 倍 如dht11 读回的温度是26,则temp_value = 260, 湿度同理*\/ ucha...
dht11温湿度传感器
dht11温湿度传感器是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。dht11温湿度传感器特点 DHT11与单片机之间能采用简单的单总线进行通信,仅仅需要一个TO口。传感器...
求如何将DHT11测出的温度与湿度在lcd1062上显示? 数据读取的是下面这...
U8RH_data_H_temp是接收到的湿度数据的整数位。U8RH_data_H其实和它一样。也就是说 U8RH_data_H 就是一个两位数,这个数就是湿度的百分比。你对它求模求余就可以得到数字了。十位=U8RH_data_H\/10;个位=U8RH_data_H%10;另外U8T_data_H也就是温度的整数部分。数据手册看过了,DHT11输出...
dht11引脚怎么接
DHT11是数字温湿度传感器,所以不需要进行模数的转换,具体接口如下:引脚1是 VDD:供电3-5.5VDC,接电源正极。引脚2是 DATA:串行数据,单总线。引脚3是 NC:空脚,要悬空。引脚4是 GND:接地,电源负极。DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块...
急求DHT11 用AT89C52单片机驱动的C程序,最好能和郭天祥51单片机兼容的...
这个与兼空与否没太大关系,我的是11.0592MH的时钟,你只需要程序中将定义的通信管脚改一下就可以使用了。很简单。里面可以读取2个DHT11,你随便选一个用就行了。已发送。
求单片机程序关于温湿度。传感器采用DHT11,按键四个可以设置温湿度的上...
TRH=1; \/\/判断DHT11是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!TRH) { respond=2; \/\/判断DHT11发出 80us 的低电平响应信号是否结束 while((!TRH)&& respond++); respond=2; \/\/判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(TRH && respond++); \/\/数据接收状态...
用DHT11湿温度传感器传出数据是这样的,跪求解答。A6代表十进制是多少度...
10度 传感器(英文名称:transducer\/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。传感器的特点包括:微型化、数字化、智能化、多功能化、系统化、网络化。它是实现自动检测...
89C52,我用DHT11测量温湿度,但在LCD1602上显示 不出正确的数值,不知道...
如果可以显示数值,只是不是正确的,或者说是乱码,你在main函数一开始的时候把各个I\/O口给初始化下,送个0x00。然后再对每个引脚操作,会解决乱显示数据的问题。如果是有规律的显示,可能是算法有问题了。你检查下,有问题可以继续询问。
dht11引脚怎么接
然后再他的输出引脚采集信号就可以了,输出信号如果是模拟量的话,通过A\/D芯片,将模拟量转换为数字信号,然后传送给单片机。DHT11是数字传感器,所以不需要进行模数的转换,具体接口如下:引脚1:VDD供电3-5.5VDC。引脚2:DATA串行数据,单总线。引脚3:NC空脚,请悬空。引脚4:GND接地,电源负极。
止炭卡维: sbit DHT11_1 = P2^4 ; void COM1() { U8 i; for(i=0;i<8;i++) { U8FLAG=2; while((!DHT11_1)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0; if(DHT11_1)U8temp=1; U8FLAG=2; while((DHT11_1)&&U8...
道外区13466004537: 急求用51单片机(stc89c52)利用pwm控制led灯光亮度变化的c程序,电路图如下: - ?
止炭卡维: #include <reg52.h> #define uint unsigned int #define uchar unsigned char uchar count ,z; sbit key_1 = P3^7; sbit key_2 = P3^6; sbit PWM = P2^0; void key_control(); void init (); void create_PWM(uchar); void delay(uint); void main () {init ();while(1)...
道外区13466004537: STC89C52利用定时器及GPIO口来实现PWM输出一个3V电压,求代码 - ?
止炭卡维: 周期500us,占空比60%平均值即为3伏 可以用定时器定时100us,首先办出高电平,中断3次后输出低电平,5次后恢复高电平#include<REG51.H>#define uchar unsigned char sbit PWM=P2^0; uchar a=0; void main(void)//主程序 { TMOD=0X02;TH0=256-100; TL0=256-100; ET0=1; EA=1; while(1) } void timer0()interrupt 1//中断程序 { a++; if(a<3) PWM=1; else PWM=0; if(a==5){a=0;PWM=1;} }
道外区13466004537: 温湿度传感器dht11 在 isis 7上用什么代替 - ?
止炭卡维: 原理图如下:P2.0数据输入 .用的是STC89C54芯片:调试过程中实在是艰苦了,一直只能显示零 ,数码管还不停的闪烁.程序大致如下: 能帮我解决问题的高手请跟帖//****************************************************************//// DHT21使用范...
道外区13466004537: 用stc89c52单片机控制洗衣机电机运转规律为:正转20秒→停10秒→反转20秒→停10秒→正转20秒……. - ?
止炭卡维: 你的电路应该没有问题吧?我以前也编写过这样的程序,其实控制电机的正转,反转,停止只根据 IN1,IN2电平高低控制的,所以在编写程序的时候最重要的是控制这两个引脚的高低电平转换的时间,这样就可以完成目的了.电路没有问题,那就测试一下你的P1.5和P1.6引脚的电平变化情况就可以了.
道外区13466004537: 急求STC89C51单片机八段数码管流水灯汇编程序 - ?
止炭卡维: 1、D1~D8八个彩灯按规定顺序依次点亮(间隔1秒),最后全亮;2、按规定顺序依次熄灭(间隔1秒),最后全灭;3、八个灯同时点亮,保持1秒;4、八个灯同时熄灭,保持0.5秒; 再将第3、4步重复4遍,最后整个程序再重复N遍.5、让八...
道外区13466004537: 怎样实现51单片机根据温度动态控制风扇转速,请高手帮帮忙! - ?
止炭卡维: 给您思路:第一,你需要使用温控元件测温,比如DS18B20温度传感器.第二:你所需要使用的控制芯片可以选择单片机,比如STC89C55(带掉电参数保存功能).第三:使用数码管或者LCD1602显示您所检测的温度或者显示您所需要设置的温度范围.第四:按键,根据你所需要的温度范围,根据按键来设置参数范围.第五:使用定时器1或者2输出PWM波,控制可控硅(BTA06等),根据您的电流大小吧.第七:在单片机里处理您的各类控制.大概就是如此吧.
道外区13466004537: 求大神,编一个STC89C52单片机的程序 - ?
止炭卡维: #include<reg51.h>#define uchar unsigned char; uchar LED1,LED2,LED3,LED4; uchar keyval,flag=0; uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; unsigned int number,r_dat; void delay(...
道外区13466004537: C51,求份STC89C52对24WC08的读写操作.sbit sda=P1^6; sbit scl=P1^5; - ?
止炭卡维: #include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define NOP4() {_nop_();_nop_();_nop_();_nop_();} sbit SCL = P1^5; sbit SDA = P1^6; sbit SPK = P3^0;//扬声器 uchar code HI_LIST[] = { 0,226,229,232...
道外区13466004537: 求助,STC89C516RD+单片机程序烧不进去 - ?
止炭卡维: STC的ISP下载失败有很多种可能原因,比如:1. 上位机软件设置的单片机型号与实际使用的单片机型号不符.注意设置的单片机型号必须与实际使用的单片机型号完全相同!哪怕是用STC89C52RC给设置成了STC89C52没有RC,都无法下载程序.2. 检查串口号是否正确,确保单片机串口两个引脚没有与其它外设相连.3. 检查单片机的晶振是否已经装好,使用开发板下载的,忘记装晶振的情况比较常见.4. 尝试降低串口波特率,到最低1200.5. 检查单片机电源电压是否正常,电源电压过低也会导致下载失败.6. 尝试将P1.1、P1.0对地短路后再下载程序.7. 尝试更换单片机芯片.