标题:
STC12C5A60S2+DHT11温湿度传感器+数码管
[打印本页]
作者:
bai_yun
时间:
2017-12-3 13:00
标题:
STC12C5A60S2+DHT11温湿度传感器+数码管
附件文件为c,h的文本格式。
0.png
(6.57 KB, 下载次数: 51)
下载附件
2017-12-3 22:12 上传
单片机源程序如下:
/************************************************
项 目:温、湿度测量程序
单片机:STC12C5A60S2
传感器:DHT11
日 期:04.09
************************************************/
#include <stc12c5a60s2.h>
#include "delay.h"
#define uint unsigned int
#define uchar unsigned char
sbit io = P2^0; //定义数据端口
uchar data_byte; //定义全局变量
uchar RH,RL,TH,TL; //定义全局变量
unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值0~9
uchar TempData[5]; //存储显示值的全局变量
/******************** DHT11测试模块**********************/
void start() //开始信号
{
io=1;
delayus(10);
io=0;
delayms(30); //10~60之间
io=1;
delayus(100); //关键时间:35-250之间
}
/**********************接收一个字节**********************/
uchar receive_byte()
{
uchar i,temp,count;
for(i=0;i<8;i++)
{
count=2;
while((!io)&&count++)
temp=0;
delayus(150); //关键时间:10~23之间
if(io==1)temp=1;
count=2;
while((io)&&count++);
if(count==1)break;
data_byte<<=1;
data_byte|=temp;
}
return data_byte;
}
/************************接收数据************************/
void receive()
{
uchar T_H,T_L,R_H,R_L,check,num_check;
uchar count;
start(); //开始信号
io=1;
if(!io) //读取DHT11响应信号
{
count=2;
while((!io)&&count++); //DHT11高电平80us是否结束
count=2;
while((io)&&count++);
R_H=receive_byte();
R_L=receive_byte();
T_H=receive_byte();
T_L=receive_byte();
check=receive_byte();
io=0;
delayms(1); //拉低延时
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 display()
{
P2=0xef;
P0=TempData[0];
delayms(20);
P2=0xff;
P2=0xdf;
P0=TempData[1];
delayms(20);
P2=0xff;
P2=0xbf;
P0=TempData[2];
delayms(20);
P2=0xff;
P2=0x7f;
P0=TempData[3];
delayms(20);
P2=0xff;
}
/*******************************************************************
定时器初始化子函数
*******************************************************************/
void InitTimer(void)
{
TMOD |= 0x01; //定义定时器T0,工作方式1
TH0=(65536-20000)/256;
TL0=(65536-20000)%256; //50ms
ET0=1;
TR0=1;
EA = 1; //开总中断
}
/***************************主函数**************************/
void main()
{
P0M0=0xFF; //定义P0口为推挽输出 1111 1111
// P2M0=0xF0; //定义P2.4 ~ P2.7口为推挽输出 1111 0000
InitTimer();
delayms(10);
while(1)
{
receive();
TempData[0]=DuanMa[RH/10];
TempData[1]=DuanMa[RH%10];
TempData[2]=DuanMa[TH/10];
TempData[3]=DuanMa[TH%10];
delayms(20);
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
程序文件.rar
(1.94 KB, 下载次数: 159)
2017-12-3 12:58 上传
点击文件名下载附件
c;h文件
下载积分: 黑币 -5
作者:
gxlin
时间:
2017-12-6 17:09
请传电路图参考
作者:
bbsbbc
时间:
2018-2-7 11:07
非常给力,顶顶顶
作者:
雪儿乌鸦
时间:
2018-4-17 16:16
谢谢分享,下来看看怎么样
作者:
pjp69
时间:
2019-11-27 23:07
感谢分享,很不错!
作者:
pjp69
时间:
2019-11-27 23:08
感谢分享,很不错
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1