历史上的今天
今天是:2024年10月17日(星期四)
2019年10月17日 | 基于DHT11的温湿计设计 OLED12864显示
2019-10-17 来源:51hei
本作品采用STC15F104W单片机和OLED12864(IIC)设计,配合B站上传的视频更佳。
B站搜索基于DHT11的温湿计(UP凌净清河)即可查到相关视频(预计2018年7月13日前会审核完毕)。
主要亮点:
1.自定义的显示函数以满足显示需求
2.简化的字库以满足单片机4K Flash的容量需求
次要亮点:
1.使用小巧的STC15F104W单片机
请注意!为防止低成本盗用(虽然写的不怎么样),仅展示主程序文件源码,在附件中有完整版。
#include
#include "intrins.h"
#include "OLED_Contrul_Hygrothermograph.c"
sbit YLED=P3^1;
sbit RLED=P3^0;
sbit DHT=P3^5;
unsigned int Temperature[3]={1,1,1};
unsigned int Humidity[2]={1,1};
unsigned char Data_Receive[5];
/*#################################################################################
设计名称:基于DHT11的温湿度计(Hygrothermograph)
设计者:清河
平台:STC15F104W
硬件部分
显示:采用OLED12864显示温度和湿度
测量,采用DHT11模块,模块信息如下:
ASATR
-----
NA:DHT11
OC:3.3-5.5V
U1:5-95%RH
U2:-20-60℃
U3:±5%RH±2℃
SN:A1712882A
为保证延时准确,晶振设置为12MHz
借用了http://www.51hei.com/bbs/dpj-38067-1.html上的部分程序,在此表示感谢
#################################################################################*/
void Delay30us()
{unsigned char i;i=87;while(--i);}
void Delay20ms()
{unsigned char i,j,k;i=1;j=234;k=113;do{do{while(--k);}while(--j);}while(--i);}
void Delay1s()
{unsigned char i,j,k;i=46;j=153;k=245;do{do{while(--k);}while(--j);}while(--i);}
void OLED_Display()
{OLED_DataDisplay_T(56,4,Temperature);OLED_DataDisplay_H(56,6,Humidity);}
void DHT_Collect()
{unsigned char i,j;unsigned char t;unsigned char dat8=0;unsigned int CheckValue=0;
DHT=0;Delay20ms();DHT=1;Delay30us();
t=80;while(DHT&&t--);if(t==0){DHT=1;}t=250;while(!DHT&&t--);
if(t==0){DHT=1;}t=250;while(DHT&&t--);if(t==0){DHT=1;}
for(j=0;j<5;j++)
{for(i=0;i<8;i++){t=150;while(!DHT&&t--);if(t==0){DHT=1;}t=0;
while(DHT&&++t);dat8<<=1;if(t>30)dat8+=1;}Data_Receive[j]=dat8;}
Delay30us();Delay30us();DHT=1;
for(i=0;i<4;i++){CheckValue+=Data_Receive[i];}
if((unsigned char)CheckValue==Data_Receive[4])
{Temperature[0]=Data_Receive[2]/10;Temperature[1]=Data_Receive[2]%10;Temperature[2]=Data_Receive[3]%10;
Humidity[0]=Data_Receive[0]/10;Humidity[1]=Data_Receive[0]%10;}}
void sys_init()
{YLED=1;RLED=1;OLED_Init();OLED_CLS();
OLED_FormTitle(0,0);OLED_FormName(0,2);OLED_FormLine(0,3);OLED_FormTemp(8,4);OLED_FormHumi(16,6);
OLED_AnyChar_16X16(96,4,TempChar);OLED_AnyChar_8X16(88,6,HumiChar);OLED_AnyChar_8X16(72,4,PointChar);}
void main()
{sys_init();while(1){DHT_Collect();YLED=1;RLED=0;OLED_Display();RLED=1;YLED=0;Delay1s();Delay1s();}}
下一篇:单片机自动浇花系统
史海拾趣
|
用c#开发了一个wince程序,现在想连接远程服务器的数据库,数据库是sqlserver2005,请问如何连。 好像和正常winfrom程序连接不太一样吧,using System.Data.SqlClient;引用不了,请大家帮忙… 查看全部问答> |
|
本内容: 设计一个体温(呼吸)的测量系统,要求如下: 1、可以测量人体的体温(呼吸频率)。 2、能够对测量的信号进行处理并可显示体温(呼吸频率)。 3、能够存储若干次测量结果。 4、能用开关控制系统 ...… 查看全部问答> |
|
Altium Designer原廠網站提供的庫清單可以依照廠牌, 型號, 功能 搜尋你要找的零件之前的放錯了, 6MB 這個才是對的. [ 本帖最后由 dale 于 2011-8-1 14:25 编辑 ]… 查看全部问答> |
|
msp430x15x 430x16x 430x161x datasheet msp430x15x 430x16x 430x161x datasheet [ 本帖最后由 guanglin 于 2011-8-2 11:06 编辑 ]… 查看全部问答> |
|
用6736做了一块板子,在进行UCS的初始化时,运行初始化代码如下: PJDIR |= BIT0 | BIT1 | BIT3; // ACLK, MCLK, SMCLK set out to pinsPJSEL |= BIT0 | BIT1 | BIT3; &nbs ...… 查看全部问答> |
|
小白正在做一个FPGA跟单片机通信的小实验,遇到问题了。请各路大神指导指导。 现在的情况是,单片机先运行,然后FPGA再开始运行,传输数据就是正确的。但是,当FPGA运行过程中,单片机复位之后,数据就发生错误。估计问题是出现在发送的计数器问题 ...… 查看全部问答> |
|
本帖最后由 wangfuchong 于 2014-6-7 21:36 编辑 今天手工挖地翻土(一块地被土地承包商的沟渠分割,无法通过手扶拖拉机之类,我父亲太好说话,竟然没要求给设立一个涵洞或者铺设一个可通过手扶拖拉机的极断的桥,也许水泥预制板就能行),浑身是汗,以至 ...… 查看全部问答> |




