单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11031|回复: 290
收起左侧

基于DHT11的温湿计设计 OLED12864显示

  [复制链接]
凌净清河 发表于 2018-7-12 14:33 | 显示全部楼层 |阅读模式
本帖最后由 凌净清河 于 2018-7-12 20:04 编辑

本作品采用STC15F104W单片机和OLED12864(IIC)设计,配合B站上传的视频更佳。
B站搜索基于DHT11的温湿计(UP凌净清河)即可查到相关视频(预计2018年7月13日前会审核完毕)。

主要亮点:
1.自定义的显示函数以满足显示需求
2.简化的字库以满足单片机4K Flash的容量需求
次要亮点:
1.使用小巧的STC15F104W单片机

请注意!为防止低成本盗用(虽然写的不怎么样),仅展示主程序文件源码,在附件中有完整版。
图片.jpg
  1. #include<STC15.H>
  2. #include "intrins.h"
  3. #include "OLED_Contrul_Hygrothermograph.c"
  4. sbit YLED=P3^1;
  5. sbit RLED=P3^0;
  6. sbit DHT=P3^5;
  7. unsigned int Temperature[3]={1,1,1};
  8. unsigned int Humidity[2]={1,1};
  9. unsigned char Data_Receive[5];
  10. /*#################################################################################
  11. 设计名称:基于DHT11的温湿度计(Hygrothermograph)
  12. 设计者:清河

  13. 平台:STC15F104W
  14. 硬件部分
  15. 显示:采用OLED12864显示温度和湿度
  16. 测量,采用DHT11模块,模块信息如下:
  17. ASATR
  18. -----
  19. NA:DHT11
  20. OC:3.3-5.5V
  21. U1:5-95%RH
  22. U2:-20-60℃
  23. U3:±5%RH±2℃
  24. SN:A1712882A

  25. 为保证延时准确,晶振设置为12MHz

  26. 借用了<a href="http://www.51hei.com/bbs/dpj-38067-1.html" target="_blank">http://www.51hei.com/bbs/dpj-38067-1.html</a>上的部分程序,在此表示感谢
  27. #################################################################################*/
  28. void Delay30us()
  29. {unsigned char i;i=87;while(--i);}

  30. void Delay20ms()
  31. {unsigned char i,j,k;i=1;j=234;k=113;do{do{while(--k);}while(--j);}while(--i);}

  32. void Delay1s()
  33. {unsigned char i,j,k;i=46;j=153;k=245;do{do{while(--k);}while(--j);}while(--i);}

  34. void OLED_Display()
  35. {OLED_DataDisplay_T(56,4,Temperature);OLED_DataDisplay_H(56,6,Humidity);}

  36. void DHT_Collect()
  37. {unsigned char i,j;unsigned char t;unsigned char dat8=0;unsigned int CheckValue=0;
  38. DHT=0;Delay20ms();DHT=1;Delay30us();
  39. t=80;while(DHT&&t--);if(t==0){DHT=1;}t=250;while(!DHT&&t--);
  40. if(t==0){DHT=1;}t=250;while(DHT&&t--);if(t==0){DHT=1;}
  41. for(j=0;j<5;j++)
  42. {for(i=0;i<8;i++){t=150;while(!DHT&&t--);if(t==0){DHT=1;}t=0;
  43. while(DHT&&++t);dat8<<=1;if(t>30)dat8+=1;}Data_Receive[j]=dat8;}
  44. Delay30us();Delay30us();DHT=1;
  45. for(i=0;i<4;i++){CheckValue+=Data_Receive[i];}
  46. if((unsigned char)CheckValue==Data_Receive[4])
  47. {Temperature[0]=Data_Receive[2]/10;Temperature[1]=Data_Receive[2]%10;Temperature[2]=Data_Receive[3]%10;
  48. Humidity[0]=Data_Receive[0]/10;Humidity[1]=Data_Receive[0]%10;}}

  49. void sys_init()
  50. {YLED=1;RLED=1;OLED_Init();OLED_CLS();
  51. OLED_FormTitle(0,0);OLED_FormName(0,2);OLED_FormLine(0,3);OLED_FormTemp(8,4);OLED_FormHumi(16,6);
  52. OLED_AnyChar_16X16(96,4,TempChar);OLED_AnyChar_8X16(88,6,HumiChar);OLED_AnyChar_8X16(72,4,PointChar);}

  53. void main()
  54. {sys_init();while(1){DHT_Collect();YLED=1;RLED=0;OLED_Display();RLED=1;YLED=0;Delay1s();Delay1s();}}
复制代码
带注释版以及OLED控制文件、字库文件、底层通信文件在附件中,上面的为主程序文件无注释紧缩版。
所有代码排版严谨,分级之间使用TAB件,无多余空格,使用Notpad++以c文件形式打开即可正常观看。

新矿城学习基地 凌净清河



游客,如果您要查看本帖隐藏内容请回复



QQ截图20180712200231.png

评分

参与人数 3黑币 +87 收起 理由
aiober + 30 很给力!
hbnpmw + 7
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

twelveboy 发表于 2018-8-15 21:58 | 显示全部楼层
楼主,我仿制了一个,我想把数字的字体加大到16*32,程序怎么改,我试了多次,提示void OLED_Set_Pos(unsigned char x, unsigned char y) 这里出错,请楼主帮忙,谢谢了。 旋转 QQ图片20180815215345.jpg

评分

参与人数 1黑币 +70 收起 理由
admin + 70 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

 楼主| 凌净清河 发表于 2018-8-27 09:25 | 显示全部楼层
kodak0818 发表于 2018-8-26 17:51
楼主,感谢分享,顺便问一下,怎么鉴定oled12864是不是坏的,我烧你的hex,oled不显示啊

确定连线都是按照程序中位定义连接的么?OLED的初始化操作正确执行了么?这两步完成程序应该会有显示了。OLED对延时要求不是很高呀。和DHT相关的部分倒是要改一下精准延时函数。
回复

使用道具 举报

 楼主| 凌净清河 发表于 2018-8-27 09:27 | 显示全部楼层
kodak0818 发表于 2018-8-26 17:51
楼主,感谢分享,顺便问一下,怎么鉴定oled12864是不是坏的,我烧你的hex,oled不显示啊

如果不是按照程序中的引脚定义连线的,要改一下OLED_Hygrothermograph.h中的串行数据/时钟的定义,应该是没有改吧?
回复

使用道具 举报

 楼主| 凌净清河 发表于 2018-9-5 12:27 | 显示全部楼层
twelveboy 发表于 2018-8-15 21:58
楼主,我仿制了一个,我想把数字的字体加大到16*32,程序怎么改,我试了多次,提示void OLED_Set_Pos(unsig ...

不好意思,之前浏览回复的时候竟然没有注意到你的问题。但是我并没能想清楚你的问题出现在哪里,OLED_Set_Pos的作用类似于打印机将打印头移动到要写入数据的位置处。本不应该出现错误的,推测是你的上级调用函数出了问题?
增大字号的话,先是扩充取模数组,对应着取模的方式重写显示函数,要考虑到每一个字符占的位置大小,每一个字节的显示顺序等等,当需要开始新一行(8个纵点)的时候就要重新设置Pos,如此分行多次写完一个字模。
回复

使用道具 举报

 楼主| 凌净清河 发表于 2018-9-5 12:31 | 显示全部楼层
kodak0818 发表于 2018-8-27 22:25
线序是对的,烧了好多hex 都没有反应,自己也写了一些全屏显示的代码,没有反应,估计屏幕是坏的。放弃了 ...

OLED12864在淘宝上最便宜有12块钱包邮的,小猫芯城价格15元,15元也是大多数“便宜”卖家给出的价格,至于20块左右或者更高价格的,直接pass吧,我买过几个便宜的,用着也没什么问题。
回复

使用道具 举报

 楼主| 凌净清河 发表于 2018-9-5 12:33 | 显示全部楼层
pk可乐 发表于 2018-8-28 15:56
谢谢,想学习一下12864与单片机的链接

连接...IIC的话除了P0要加上拉之外,SDA和SCL随便连接哪一个IO都可以啊~
回复

使用道具 举报

 楼主| 凌净清河 发表于 2018-9-12 10:04 | 显示全部楼层

不大,如果是用我的程序直接烧录的话,难度就是5个IO和器件的连接,因为屏幕是IIC的,所以连接起来较SPI的更方便。
制作成本的话,按主要的算,屏幕13+洞洞板0.8元+DTH11 5.7+microUSB小板0.8+STC15F104W 1.8+杂项,大约不到25元。
回复

使用道具 举报

songxia8013 发表于 2018-7-13 13:57 | 显示全部楼层
不错的设计,新颖的单片机,好!
回复

使用道具 举报

lemon0210 发表于 2018-7-17 14:46 | 显示全部楼层
回复看看咯,希望有惊喜
回复

使用道具 举报

wss12345678 发表于 2018-7-18 00:51 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

854100995 发表于 2018-7-18 09:29 | 显示全部楼层
不错,学习了
回复

使用道具 举报

by64214 发表于 2018-7-18 10:13 | 显示全部楼层
谢谢分享  回复看看咯,希望有惊喜
回复

使用道具 举报

大概微笑会好吧 发表于 2018-7-18 10:56 | 显示全部楼层
厉害了楼主
回复

使用道具 举报

Mxzy 发表于 2018-7-19 15:27 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

通信狗 发表于 2018-7-19 16:25 来自手机 | 显示全部楼层
谢谢分享~
回复

使用道具 举报

uva2015 发表于 2018-7-24 00:05 | 显示全部楼层
谢谢分享,学习中
回复

使用道具 举报

hjklk 发表于 2018-7-24 13:44 | 显示全部楼层
你好  您的基于DHT1112864显示   我能下载吗”
回复

使用道具 举报

siyaqq 发表于 2018-7-24 17:06 | 显示全部楼层
好,学学兮兮
回复

使用道具 举报

 楼主| 凌净清河 发表于 2018-7-24 20:50 | 显示全部楼层
hjklk 发表于 2018-7-24 13:44
你好  您的基于DHT1112864显示   我能下载吗”

这算是试探性的回复么?>v<
只要回帖就可以下载的。
回复

使用道具 举报

OPJH 发表于 2018-7-24 22:54 | 显示全部楼层
很好的代码
回复

使用道具 举报

fate998 发表于 2018-7-24 23:13 | 显示全部楼层
牛人
回复

使用道具 举报

天涯明月刀 发表于 2018-7-25 18:59 来自手机 | 显示全部楼层
可以可以,很好
回复

使用道具 举报

twelveboy 发表于 2018-8-5 18:06 | 显示全部楼层
正找这个呢
回复

使用道具 举报

jawin 发表于 2018-8-8 12:10 | 显示全部楼层
看看如何
回复

使用道具 举报

wdyang27 发表于 2018-8-8 16:14 | 显示全部楼层
不错的设计
回复

使用道具 举报

zfyzxgg 发表于 2018-8-8 16:39 来自手机 | 显示全部楼层
多谢分享
回复

使用道具 举报

15081898066 发表于 2018-8-13 10:01 | 显示全部楼层
正尝试STM32的DHT11温湿度 前来参考参考
回复

使用道具 举报

feixue2007 发表于 2018-8-13 14:53 | 显示全部楼层
收藏学习一下,研究一下小发明
回复

使用道具 举报

18588278793 发表于 2018-8-15 07:45 来自手机 | 显示全部楼层
不错的设计;下载学习
回复

使用道具 举报

Akon4 发表于 2018-8-15 09:01 | 显示全部楼层
不错 谢谢分享!
回复

使用道具 举报

密码忘了 发表于 2018-8-15 19:44 | 显示全部楼层
想要学习oled遂来讨教
回复

使用道具 举报

冰冰洁洁 发表于 2018-8-15 23:33 来自手机 | 显示全部楼层
很好,简单的就好
回复

使用道具 举报

986283407 发表于 2018-8-17 09:44 | 显示全部楼层
很好的资料
回复

使用道具 举报

adsl989 发表于 2018-8-17 13:58 | 显示全部楼层
回复看看咯,希望有惊喜
回复

使用道具 举报

engcyh 发表于 2018-8-18 18:28 | 显示全部楼层
谢谢分享,51黑有你更精彩
回复

使用道具 举报

engcyh 发表于 2018-8-18 18:29 | 显示全部楼层
谢谢分享,支持原创
回复

使用道具 举报

逗比不逗_ 发表于 2018-8-23 21:25 | 显示全部楼层
不错的资料
回复

使用道具 举报

arther 发表于 2018-8-24 22:03 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

smalldi 发表于 2018-8-25 00:26 | 显示全部楼层
感谢分享
回复

使用道具 举报

莫林 发表于 2018-8-25 06:49 来自手机 | 显示全部楼层
菜鸟来学习一下
回复

使用道具 举报

szzxl10 发表于 2018-8-26 12:38 | 显示全部楼层
不错,学习了
回复

使用道具 举报

kodak0818 发表于 2018-8-26 12:57 | 显示全部楼层
感谢楼主分享,学习了e
回复

使用道具 举报

kodak0818 发表于 2018-8-26 17:51 | 显示全部楼层
楼主,感谢分享,顺便问一下,怎么鉴定oled12864是不是坏的,我烧你的hex,oled不显示啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

快速回复 返回顶部 返回列表