标题: 基于DHT11的温湿计设计 OLED12864显示 [打印本页]

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

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

请注意!为防止低成本盗用(虽然写的不怎么样),仅展示主程序文件源码,在附件中有完整版。

  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文件形式打开即可正常观看。

新矿城学习基地 凌净清河

Keil代码下载: 基于DHT11的温湿计 凌净清河.zip (45.51 KB, 下载次数: 581)


作者: 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遂来讨教

作者: twelveboy    时间: 2018-8-15 21:58
楼主,我仿制了一个,我想把数字的字体加大到16*32,程序怎么改,我试了多次,提示void OLED_Set_Pos(unsigned char x, unsigned char y) 这里出错,请楼主帮忙,谢谢了。


作者: 冰冰洁洁    时间: 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不显示啊
作者: 凌净清河    时间: 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-8-27 09:34
学习学习,谢楼主分享
作者: tsf8587710    时间: 2018-8-27 18:43
学习学习,谢楼主分享
作者: kodak0818    时间: 2018-8-27 22:24
twelveboy 发表于 2018-8-15 21:58
楼主,我仿制了一个,我想把数字的字体加大到16*32,程序怎么改,我试了多次,提示void OLED_Set_Pos(unsig ...

请问你这个 温度计 还有水滴 是用什么软件取模的?
作者: kodak0818    时间: 2018-8-27 22:25
凌净清河 发表于 2018-8-27 09:27
如果不是按照程序中的引脚定义连线的,要改一下OLED_Hygrothermograph.h中的串行数据/时钟的定义,应该是 ...

线序是对的,烧了好多hex 都没有反应,自己也写了一些全屏显示的代码,没有反应,估计屏幕是坏的。放弃了,再买一个
作者: 股海冲浪2006    时间: 2018-8-28 06:45
学习ing
作者: pk可乐    时间: 2018-8-28 15:55
谢谢,想看看12864与单片机的链接
作者: pk可乐    时间: 2018-8-28 15:56
谢谢,想学习一下12864与单片机的链接
作者: 小白来报到    时间: 2018-8-31 10:44
谢谢分享

作者: 陌念惜年!    时间: 2018-9-4 22:19
新手,想来学习学习
作者: mengchen12    时间: 2018-9-5 04:41
谢谢分享
作者: 凌净清河    时间: 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都可以啊~
作者: 100860903    时间: 2018-9-5 14:35
good,good
作者: 吕志盛    时间: 2018-9-9 17:13
写得好
作者: 兰大明    时间: 2018-9-10 08:38
下载学习一下
作者: a704625084    时间: 2018-9-10 15:31
谢谢分享
作者: 拣尽寒枝不肯栖    时间: 2018-9-10 17:16
厉害
作者: 叶活    时间: 2018-9-12 08:28
制作难度大吗
作者: 凌净清河    时间: 2018-9-12 10:04
叶活 发表于 2018-9-12 08:28
制作难度大吗

不大,如果是用我的程序直接烧录的话,难度就是5个IO和器件的连接,因为屏幕是IIC的,所以连接起来较SPI的更方便。
制作成本的话,按主要的算,屏幕13+洞洞板0.8元+DTH11 5.7+microUSB小板0.8+STC15F104W 1.8+杂项,大约不到25元。
作者: wkings    时间: 2018-9-22 19:31
look look
作者: 梁光阳    时间: 2018-9-23 18:53
看看,一起学习,东西非常好
作者: hasi    时间: 2018-9-25 22:56
很好的例子,值得研究学习
作者: jijkf    时间: 2018-10-1 11:05
可以发给我吗
作者: jijkf    时间: 2018-10-1 11:40
这是什么型号oled
作者: 凌净清河    时间: 2018-10-1 22:15
jijkf 发表于 2018-10-1 11:40
这是什么型号oled

OLED12864(IIC接口)
作者: LXJ50    时间: 2018-10-2 00:21
学习学习。仿制一个!
作者: ttgogogo    时间: 2018-10-2 16:20
想看

作者: hbnpmw    时间: 2018-10-2 23:22
谢谢分享  回复看看咯,希望有惊喜
作者: jijkf    时间: 2018-10-6 20:31
怎样换成中文的?
作者: 凌净清河    时间: 2018-10-6 22:31
jijkf 发表于 2018-10-6 20:31
怎样换成中文的?

中文显示就要换一下显示驱动函数了,具体的要根据取字模的方式而定,而且这个单片机的话,存不下太多中文字模,一共只有4k的空间。
作者: middfat    时间: 2018-10-7 18:08
谢谢大神
作者: cokesu    时间: 2018-10-7 22:41
学习学习
作者: jamyg    时间: 2018-10-13 11:13
学习学习
作者: 小黑屋@    时间: 2018-10-13 13:09
资料值得看看。

作者: Jack589    时间: 2018-10-13 23:51
谢谢分享
作者: Jack589    时间: 2018-10-14 00:02
学习到了
作者: 文凤轩    时间: 2018-10-14 11:11
谢谢分享!
作者: xiong731    时间: 2018-10-14 19:46
不错,学习了!
作者: 潘香亦鸿    时间: 2018-10-15 11:27
不错,学习一下。

作者: jijkf    时间: 2018-10-15 19:31
凌净清河 发表于 2018-9-5 12:27
不好意思,之前浏览回复的时候竟然没有注意到你的问题。但是我并没能想清楚你的问题出现在哪里,OLED_Set ...

有没有用sm32做的
作者: compione星星    时间: 2018-10-15 20:49
很好,很强大,感谢
作者: 凌净清河    时间: 2018-10-16 10:22
jijkf 发表于 2018-10-15 19:31
有没有用sm32做的

不好意思,没有使用32,51的资源足够了。
作者: wqs123456    时间: 2018-10-16 17:27
回复看看咯,希望有惊喜
作者: ab1801574    时间: 2018-10-17 23:34
学习一下,谢谢楼主分享
作者: hu2018y    时间: 2018-10-18 00:18
出个套件吗?
作者: starheaven    时间: 2018-10-22 11:09
学习了
作者: xiaoxiaoniao    时间: 2018-10-22 13:01
我虽然不会,但是感觉你挺牛。
作者: snchj    时间: 2018-10-22 22:13

学习,给看看
作者: szdgsz    时间: 2018-10-24 17:48
谢谢分享
作者: kkfy888    时间: 2018-10-25 01:24
不错,下个测试下!
作者: zhao1997@    时间: 2018-10-25 13:58
很好,看图片不错啊
作者: WFX777888    时间: 2018-10-26 22:33
谢谢分享资料
作者: 719500    时间: 2018-10-27 00:04
谢谢分享
作者: WseriesY    时间: 2018-10-27 00:21
Thank you for your sharing!
作者: qhdyang    时间: 2018-10-27 00:58
高手啊,看了后学到知识了
作者: sd19941129    时间: 2018-10-27 12:43
很期待,多学习学习
作者: ╰つ懷念_ヽ那回    时间: 2018-11-4 19:36
来看看                 
作者: FLY581    时间: 2018-11-5 10:17
谢谢分享
作者: kjl    时间: 2018-11-24 16:08
赞赞赞赞赞赞





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1