数码管显示的温湿度计——DHT11
来源:互联网 发布:六肖公式算法大公开 编辑:程序博客网 时间:2024/05/16 18:24
这个是用数码管显示的温湿度,原理跟液晶显示是一样的,只是处理显示有所不同。
代码:
//前三位显示湿度,后三位显示温度
#include<reg52.h>
#include <intrins.h>sbit duan=P2^6;sbit wei=P2^7;typedef unsigned char unint8;typedef unsigned char unint16;unsigned char table0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带小数点unsigned char table[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,};//带小数点unsigned char str1[]={" "};unsigned char str2[]={" "};sbit TRH = P3^0;//温湿度传感器DHT11数据接入sbit LCD_RS = P2^6; sbit LCD_RW = P2^5;sbit LCD_EN = P2^7;void disp(unint8 str1,unint8 str2,unint8 str3,unint8 str4,unint8 str5,unint8 str6);unint8 TH_data,TL_data,RH_data,RL_data,CK_data;unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;unint8 com_data,untemp,temp;unint8 respond;void delayNOP(){ _nop_(); _nop_(); _nop_(); _nop_();}// 毫秒级延时子程序void delay_ms(unsigned char ms){ unsigned char i; while(ms--) { for(i = 0; i< 150; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } }}//5us级延时程序void delay_us(){ unint8 i; i--; i--; i--; i--; i--; i--;}char receive(){ unint8 i; com_data=0; for(i=0;i<=7;i++) { respond=2; while((!TRH)&&respond++); delay_us(); delay_us(); delay_us(); if(TRH) { temp=1; respond=2; while((TRH)&&respond++); } else temp=0; com_data<<=1; com_data|=temp; } return(com_data); }void read_TRH(){ //主机拉低18ms TRH=0; delay_ms(18); TRH=1; //DATA总线由上拉电阻拉高主机延时20us delay_us(); delay_us(); delay_us(); delay_us(); TRH=1; //判断DHT11是否有低电平响应信号如不响应则跳出,响应则向下运行 if(!TRH) { respond=2; //判断DHT11发出 80us 的低电平响应信号是否结束 while((!TRH)&& respond++); respond=2; //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(TRH && respond++); //数据接收状态 RH_temp = receive(); RL_temp = receive(); TH_temp = receive(); TL_temp = receive(); CK_temp = receive(); TRH=1; //数据校验 untemp=(RH_temp+RL_temp+TH_temp+TL_temp); if(untemp==CK_temp) { RH_data = RH_temp; RL_data = RL_temp; TH_data = TH_temp; TL_data = TL_temp; CK_data = CK_temp; } } //湿度整数部分 str1[0] = table0[RH_data/10]; str1[1] = table[RH_data%10]; //湿度小数部分 str1[2] = table0[RL_data/10]; //温度整数部分 str2[0] =table0[TH_data/10]; str2[1] =table[TH_data%10]; //温度小数部分 str2[2] = table0[TL_data/10]; }//主函数//TH,TL,RH,RL分别代表温湿度的整数和小数部分void main(){ delay_us(); TMOD=0X01;//选择定时器工作方式 TH0=(65536-12000)/256; TL0=(65536-12000)%256; EA=1;//开总中断 ET0=1;//开定时器中断 TR0=1;//启动定时器 while(1) { read_TRH(); } }void T0_timer() interrupt 1{ TH0=(65536-20000)/256; TL0=(65536-20000)%256; disp(str1[0],str1[1],str1[2],str2[0],str2[1],str2[2]);}void disp(unint8 str1,unint8 str2,unint8 str3,unint8 str4,unint8 str5,unint8 str6){ P0=0xff; wei=1; P0=0xfe; wei=0; duan=1; P0=str1; duan=0; delay_ms(1); P0=0xff; wei=1; P0=0xfd; wei=0; duan=1; P0=str2; duan=0; delay_ms(1); P0=0xff; wei=1; P0=0xfb; wei=0; duan=1; P0=str3; duan=0; delay_ms(1); P0=0xff; wei=1; P0=0xf7; wei=0; duan=1; P0=str4; duan=0; delay_ms(1); P0=0xff; wei=1;P0=0xef; wei=0; duan=1; P0=str5; duan=0; delay_ms(1); P0=0xff; wei=1; P0=0xdf; wei=0; duan=1; P0=str6; duan=0; delay_ms(1); }
- 数码管显示的温湿度计——DHT11
- 温湿度计——DHT11(液晶显示)
- 20141119 【 Arduino - DHT11 - 单片机 】 利用单片机数码管 显示 DHT11温湿度
- arduino学习系列——DHT11温湿度传感器的使用
- DHT11实现温度湿度的数码管显示
- 51-DHT11实现温湿度的检测显示于Lcd1602
- 温湿度传感器DHT11的数据处理
- NodeMCU读取dht11温湿度网页显示
- STC15F2K60S2读取DHT11温湿度串口显示实例
- STC15F2K60S2读取DHT11温湿度串口显示
- STM32外设驱动篇——DHT11温湿度传感器
- atmega1280上的dht11温湿度传感器
- 关于温湿度传感器DHT11的个人感悟
- Linux的温湿度传感器DHT11驱动
- 树莓派的GPIO - DHT11温湿度传感器
- 2.DHT11数字温湿度传感器的应用
- Arduino+ESP8266WIFI(2)——DHT11温湿度数据自动上传
- 温湿度传感器DHT11
- 64位fedora16日常操作备份
- 关于javaScript的一些东西
- K&R C Exercise 1-18 Solution
- K&R C Exercise 1-19 Solution
- 学习编程一年多的体会
- 数码管显示的温湿度计——DHT11
- I Build the LFS 6.8 on CentOS 6.0 -- Phase I
- linux设置环境变量
- 一个简单的udp接收数据的例子
- 使用Javascript 模拟键盘输入
- uva10878--String
- 什么是create
- 64位linux下android开发备份
- 用CDate类成员函数实现对用户按照年月日格式输入的日期加一天后按照年/月/日格式输出