|
本作品采用STC15F104W單片機和OLED12864(IIC)設計,配合B站上傳的視頻更佳。
B站搜索基于DHT11的溫濕計(UP凌凈清河)即可查到相關視頻(預計2018年7月13日前會審核完畢)。
主要亮點:
1.自定義的顯示函數以滿足顯示需求
2.簡化的字庫以滿足單片機4K Flash的容量需求
次要亮點:
1.使用小巧的STC15F104W單片機
請注意!為防止低成本盜用(雖然寫的不怎么樣),僅展示主程序文件源碼,在附件中有完整版。
- #include<STC15.H>
- #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
- 借用了<a href="http://www.zg4o1577.cn/bbs/dpj-38067-1.html" target="_blank">http://www.zg4o1577.cn/bbs/dpj-38067-1.html</a>上的部分程序,在此表示感謝
- #################################################################################*/
- 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();}}
復制代碼 帶注釋版以及OLED控制文件、字庫文件、底層通信文件在附件中,上面的為主程序文件無注釋緊縮版。
所有代碼排版嚴謹,分級之間使用TAB件,無多余空格,使用Notpad++以c文件形式打開即可正常觀看。
新礦城學習基地 凌凈清河
Keil代碼下載:
基于DHT11的溫濕計 凌凈清河.zip
(45.51 KB, 下載次數: 581)
2018-7-12 14:24 上傳
點擊文件名下載附件
|
評分
-
查看全部評分
|