51单片机 温湿度传感器DHT11 LCD1602
更新时间:2023-10-08 07:58:01 阅读量: 综合文库 文档下载
- 51单片机推荐度:
- 相关推荐
//51单片机控制温湿度传感器DHT11,然后在LCD1602上显示当前的温湿度及单位,其中湿度在第一行显示,温度在第二行显示 #include
#define uint unsigned int #define uchar unsigned char
sbit io=P1^3;//dht11data端接单片机的P1^0口// sbit rw=P1^1;//一下三行是设置lcd1602的使能端// sbit rs=P1^0; sbit ep=P1^2;
typedef bit BOOL;//此声明一个布尔型变量即真或假// uchar data_byte;
uchar RH,RL,TH,TL;
//***************延时函数************************************* void delay(uchar ms) //延时模块// {
uchar i; while(ms--) for(i=0;i<100;i++); }
void delay1()//一个for循环大概需要8个多机器周期,一个机器周期为1us(晶振为12MHz),也就是说本函数延时8us多(此延时函数必须德稍微精确一点) {
uchar i;
for(i=0;i<1;i++); }
//*************************************************************** //lcd模块//
BOOL lcd_bz()//测试lcd忙碌状态,返回值为布尔型数值,真或假('1'.'0') {
BOOL result; rs=0; rw=1;
ep=1;//由高到低,跳变的时候处理命令或者数据 result=(BOOL)(P0&0x80);//LCD的高位(D7)为高电平时,忙,模块不能接收命令或数据,为低电平时表示不忙 ep=0;
return result; }
void write_cmd(uchar cmd)//写指令// {
while(lcd_bz());//等待LCD不忙 rs=0; rw=0; ep=0;
P0=cmd;//读取命令 ep=1; ep=0; }
void write_addr(uchar addr)//写地址// {
write_cmd(addr|0x80);//LCD第一行的首地址为0x80,第二行的首地址为0x80+0x40=0xc0 }
void write_byte(uchar dat) //写字节// {
while(lcd_bz());//等到LCD模块不忙 rs=1; rw=0; ep=0;
P0=dat;//读取数据 ep=1; ep=0; }
void lcd_init() //lcd初始化// {
write_cmd(0x38);//设置LCD两行显示,一个数据由5*7点阵表示,数据由8跟线传输 delay(1);
write_cmd(0x01);//清除屏幕显示 delay(1);
write_cmd(0x06);//设定输入方式,增量不移位 delay(1);
write_cmd(0x0c);//开整体显示,关光标,不闪烁 delay(1); }
void display(uchar addr,uchar q)//在某一地址上显示内容,adder表示的是地址偏移量,q表示显示的字符或数字// {
delay(10);
write_addr(addr); write_byte(q);
delay(1);//修改此时间,可以改变LCD上数值跳变的数度 }
//**************************dht11测试某块*************************************// void start()//开始信号 {
io=1; delay1(); io=0;
delay(25);// 主机把总线拉低必须大于18ms,保证DHT11能检测到起始信号 io=1; //发送开始信号结束后,拉高电平延时20-40us delay1();//以下三个延时函数差不多为24us,符合要求 delay1(); delay1(); }
uchar receive_byte()//接收一个字节// {
uchar i,temp;
for(i=0;i<8;i++)//接收8bit的数据 { while(!io);//等待50us的低电平开始信号结束 delay1();//开始信号结束之后,延时26us-28us(以下三个延时函数) delay1(); delay1(); temp=0;//时间为26us-28us,表示接收的为数据'0' if(io==1) temp=1; //如果26us-28us之后,还为高电平,则表示接收的数据为'1' while(io);//等待数据信号高电平('0'为26us-28us,'1'为70us) data_byte<<=1;//接收的数据为高位在前(右移) data_byte|=temp; }
return data_byte; }
void receive()//接收数据// {
uchar T_H,T_L,R_H,R_L,check,num_check,i; start();//开始信号//
io=1; //主机设为输入,判断从机(DHT11)响应信号 if(!io)//判断从机是否有低电平响应信号// {
while(!io);//判断从机发出 80us 的低电平响应信号是否结束// while(io);//判断从机发出 80us 的高电平是否结束,如结束则主机进入数据接收状态 R_H=receive_byte();//湿度高位 R_L=receive_byte();//湿度低位 T_H=receive_byte();//温度高位 T_L=receive_byte();//温度低位 check=receive_byte();//校验位 io=0; //当最后一bit数据接完毕后,从机拉低电平50us// for(i=0;i<7;i++)//差不多50us的延时 delay1(); io=1;//总线由上拉电阻拉高,进入空闲状态 num_check=R_H+R_L+T_H+T_L; if(num_check==check)//判断读到的四个数据之和是否与校验位相同 { RH=R_H; RL=R_L; TH=T_H; TL=T_L; check=num_check; } } }
//********************************************************************************************
void main()//主函数模块// {
lcd_init();//初始化LCD while(1) {
receive();//接收数据 display(0x00,'R');//LCD的第一行显示 display(0x01,':'); display(0x02,RH/10+0x30); //0x30表示:带字库的LCD1602中0x30的位置放有数字0(RH/10+0x30即表示湿度的十位数字在字库RH/10+0x30的位置处放着) display(0x03,RH+0x30); display(0X04,'%'); display(0x40,'T');//LCD的第二行显示 display(0x41,':'); display(0x42,TH/10+0x30); display(0x43,TH+0x30); display(0x44,0xdf);//以下两个是温度单位的处理 display(0x45,0x43); }
}
正在阅读:
51单片机 温湿度传感器DHT11 LCD160210-08
传热学历届试卷10-06
三次采油技术研究与应用09-25
英语作文-比较类06-15
2011安全工作总结01-18
写人的作文400字04-01
熟悉的陌生人作文04-01
数学北师大版二年级下册整理与复习教案04-05
一种智能家居远程监控系统设计03-20
学雷锋做好事的作文共7篇04-01
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 温湿度
- 单片机
- 传感器
- LCD1602
- DHT11
- 闽西革命史知识
- SUN Solaris常见问题集锦
- 2017会计继续教育企业所得税年度纳税申报表考试题库全
- 电厂实验室岗位职责、管理制度、仪器操作规程
- 最高院关于担保法的6个重要疑难问题的司法观点(2014)
- 江南大学远程教育食品加工工艺学第1阶段测试题 - 图文
- 筒袋泵检修规程
- 2014高考英语单项选择精英练习题(17)
- 剑桥国际英语interchange2-unit 11 - 图文
- “三供一业”移交攻坚阶段
- 合并财务报表1-3题库
- 小学一年级数学 课外兴趣学习资料 超级实用
- 财务报表分析第二次作业
- 乡镇卫生院各类人员岗位职责
- 2015年高考语文真题分类汇编(04)病句题(附答案解析)
- 在全县三级干部工作会议上讲话
- 河南省苗圃绿化行业名录2018版1036家 - 图文
- 房地产销售工作计划模板参考3篇
- 某小学教师考核办法. -
- 李凌书法家解说词