DHT11传感器STC12单片机程序.doc_第1页
DHT11传感器STC12单片机程序.doc_第2页
DHT11传感器STC12单片机程序.doc_第3页
DHT11传感器STC12单片机程序.doc_第4页
DHT11传感器STC12单片机程序.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include#include#includesbit DHT = P00; /管脚定义,DHT11总线输入输出;uchar data_byte;uchar Tem_Z,Tem_X,Hum_Z,Hum_X,Check;void LCD_Display(); /声明LCD_Display液晶显示函数;void Rec_DHT(); /声明Rec_DHT,DHT11接收数据函数;void receive();/主函数void main()lcd_init(); while(1) Rec_DHT(); LCD_Display(); delayms(1000); /延时函数,/延时msvoid delays()/12.000MHz uchar i, j, k;i = 1;j = 234;k = 113;dodowhile (-k); while (-j); while (-i);/延时iusvoid delay10us() uchar i; for(i=0;i6;i+) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); /*主机发出开始信号*/ void DHT11_Start() DHT=1; delay10us(); DHT=0; delays(); /保持电平时间大于18ms,延时20ms DHT=1; delay10us(); /延迟等待20-40us,延时20us delay10us(); delay10us(); delay10us(); DHT=1; /拉高等待DHT11响应/DHT11接收一个字节数据uchar receive_data() uchar i,temp,count; data_byte=0; for(i=0;i8;i+) count=2; while(!DHT)&count+); /等待50us低电平结束 delay10us(); /等待40us高电平,后判断电平高低,高:DHT为1,低:DHT为0 delay10us(); delay10us(); delay10us(); temp=0; if(DHT=1) temp=1; /DHT为高:1,位为1 count=2; while(DHT)&count+); /等待DHT高电平结束 if(count=1) break; /DHT为低:0,位为0 data_byte35) write(注意防署); else if(Tem_Z70) write(注意除湿); else if(Hum_Z0;i-) /单片机晶振频率为12MHZ; for(j=120;j0;j-); /单片机12倍速度运行/12864写命令void write_com(uchar com) uchar i; uchar i_data; i_data=0xf8; /11111000-写指令0 cs=1; sclk=0; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; i_data=com; i_data&=0xf0; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; i_data=com; i_data=i_data4; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; cs=0; delayms(10); /12864写数据void write_data(uchar date) uchar i; uchar i_data; i_data=0xfa; /写数据 cs=1; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; i_data=date; i_data&=0xf0; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; i_data=date; i_data=i_data4; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; cs=0; delayms(10); /lcd12864初始化void lcd_init() psb=0; /液晶屏为串行数据传输模式 rst=0; /复位 delayms(2); rst=1; delayms(2); write_com(0x30); /基本指令, 扩充指令为34H delayms(4); write_com(0x02); /清除ddram delayms(4); write_com(0x0c); /显示开, 关光标 delayms(4); write_com(0x01); /清屏 delayms(4);/设定显示位置,x、y为12864轴坐标,x:1-4;y:1-16;void lcd_pos(uchar x,uchar y) uchar pos; if(x=1) x=0x80; /x为第几行1-4; else if(x=2) x=0x90; else if(x=3) x=0x88; else if(x=4) x=0x98; pos=x+y-1; write_com(pos);/指定位置显示任意文字、字符void write(uchar * str) uchar i =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论