久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6224|回復: 3
打印 上一主題 下一主題
收起左側

51單片機驅動OLED顯示DHT11溫濕度及BH1750亮度程序與資料

  [復制鏈接]
跳轉到指定樓層
樓主
   DHT11
  DHT11的供電電壓為 3-5.5V。傳感器上電后,要等待1s 以越過不穩定狀態在此期間無需發送任何指令。電源引腳(VDD,GND)之間可增加一個100nF 的電容,用以去耦濾波。
   DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數據格式,一次通訊時間4ms左右,數據分小數部分和整數部分,具體格式在下面說明,當前小數部分用于以后擴展,現讀出為零.操作流程如下:
一次完整的數據傳輸為40bit,高位先出。
數據格式:8bit濕度整數數據+8bit濕度小數數據+8bi溫度整數數據+8bit溫度小數數據+8bit校驗和
數據傳送正確時校驗和數據等于“ 8bit濕度整數數據+8bit濕度小數數據+8bi溫度整數數據+8bit溫度小數數據” 所得結果的末8位。
用戶MCU發送一次開始信號后,DHT11從低功耗模式轉換到高速模式,等待主機開始信號結束后,DHT11發送響應信號,送出40bit的數據,并觸發一次信號采集,用戶可選擇讀取部分數據.從模式下,DHT11接收到開始信號觸發一次溫濕度采集,如果沒有接收到主機發送開始信號,DHT11不會主動進行溫濕度采集.采集數據后轉換到低速模式。
0.96 OLED 模塊
IIC 接口模塊
模塊接口定義:
1. GND 電源地
2. VCC 電源正(3~5.5V)
3. SCL OLED 的 D0 腳,在 IIC 通信中為時鐘管腳
4. SDA OLED 的 D1 腳,在 IIC 通信中為數據管腳
BH1750
BH1750FVI是一種用于兩線式串行總線接口的數字型光強度傳感器集成電路。這種集成電路可以根據收集的光線強度數據來調整液晶或者鍵盤背景燈的亮度。利用它的高分辨率可以探測較大范圍的光強度變化。
硬件電路見圖
(PS:所有資料都放在附件中,需要可自行下載;程還加入了一些其他功能,大家可以根據需求自行修改;附OLED取模軟件)

單片機源程序如下:
  1. //              GND    電源地
  2. //              VCC  接5V或3.3v電源
  3. //              D0   P1^0(SCL)
  4. //              D1   P1^1(SDA)
  5. //              RES  接P12
  6. //              DC   接P13
  7. //              CS   接P14               
  8. //******************************************************************************/
  9. #include "REG52.h"
  10. #include "oled.h"
  11. #include "bmp.h"
  12. #include  <math.h>     
  13. #include  <stdio.h>  
  14. #include "intrins.h"

  15. #define uint unsigned int
  16. #define uchar unsigned char

  17. sbit SCL=P1^3;     
  18. sbit SDA=P1^4;  
  19. sbit LED1=P2^3;
  20. sbit LED2=P2^4;
  21. sbit D1=P2^5;
  22. sbit D2=P2^6;

  23. #define SlaveAddress   0x46

  24. typedef unsigned char BYTE;
  25. typedef unsigned short WORD;
  26. static unsigned int time;


  27. BYTE BUF[8];                                 
  28. unsigned char ge,shi,bai,qian,wan;            
  29. int dis_data;   

  30. void delay_nms(unsigned int k);

  31. void Init_BH1750(void);

  32. void conversion(uint temp_data);
  33. void  Single_Write_BH1750(uchar REG_Address);              
  34. uchar Single_Read_BH1750(uchar REG_Address);               
  35. void  Multiple_Read_BH1750();                             

  36. void Delay5us();
  37. void Delay5ms();
  38. void BH1750_Start();                  
  39. void BH1750_Stop();                    
  40. void BH1750_SendACK(bit ack);         
  41. bit  BH1750_RecvACK();                 
  42. void BH1750_SendByte(BYTE dat);      
  43. BYTE BH1750_RecvByte();  

  44. void conversion(uint temp_data)  
  45. {  
  46.         qian=temp_data/1000+0x30 ;
  47.     temp_data=temp_data%1000;   
  48.     bai=temp_data/100+0x30   ;
  49.     temp_data=temp_data%100;     
  50.     shi=temp_data/10+0x30    ;
  51.     temp_data=temp_data%10;     
  52.     ge=temp_data+0x30;         
  53. }

  54. void delay_nms(unsigned int k)        
  55. {                                                
  56.         unsigned int i,j;                                
  57.         for(i=0;i<k;i++)
  58.         {                        
  59.         for(j=0;j<121;j++)                        
  60.         {;}}                                                
  61.         }

  62. void delay(uint u)
  63. {
  64.         while(u--);
  65. }

  66. void Delay5us()
  67. {
  68.     _nop_();_nop_();_nop_();_nop_();
  69.     _nop_();_nop_();_nop_();_nop_();
  70.         _nop_();_nop_();_nop_();_nop_();
  71.         _nop_();_nop_();_nop_();_nop_();
  72. }

  73. void Delay5ms()
  74. {
  75.     WORD n = 560;

  76.     while (n--);
  77. }

  78. void BH1750_Start()
  79. {
  80.     SDA = 1;                  
  81.     SCL = 1;                 
  82.     Delay5us();               
  83.     SDA = 0;                  
  84.     Delay5us();               
  85.     SCL = 0;                  
  86. }

  87. void BH1750_Stop()
  88. {
  89.     SDA = 0;                    
  90.     SCL = 1;                  
  91.     Delay5us();              
  92.     SDA = 1;                    
  93.     Delay5us();                 
  94. }

  95. void BH1750_SendACK(bit ack)
  96. {
  97.     SDA = ack;                 
  98.     SCL = 1;                  
  99.     Delay5us();               
  100.     SCL = 0;               
  101.     Delay5us();              
  102. }

  103. bit BH1750_RecvACK()
  104. {
  105.     SCL = 1;                  
  106.     Delay5us();              
  107.     CY = SDA;              
  108.     SCL = 0;              
  109.     Delay5us();            

  110.     return CY;
  111. }

  112. void BH1750_SendByte(BYTE dat)
  113. {
  114.     BYTE i;

  115.     for (i=0; i<8; i++)        
  116.     {
  117.         dat <<= 1;            
  118.         SDA = CY;              
  119.         SCL = 1;              
  120.         Delay5us();            
  121.         SCL = 0;            
  122.         Delay5us();            
  123.     }
  124.     BH1750_RecvACK();
  125. }

  126. BYTE BH1750_RecvByte()
  127. {
  128.     BYTE i;
  129.     BYTE dat = 0;

  130.     SDA = 1;                  
  131.     for (i=0; i<8; i++)         
  132.     {
  133.         dat <<= 1;
  134.         SCL = 1;               
  135.         Delay5us();           
  136.         dat |= SDA;                     
  137.         SCL = 0;               
  138.         Delay5us();            
  139.     }
  140.     return dat;
  141. }

  142. void Single_Write_BH1750(uchar REG_Address)
  143. {
  144.     BH1750_Start();                 
  145.     BH1750_SendByte(SlaveAddress);  
  146.     BH1750_SendByte(REG_Address);   
  147.     BH1750_Stop();                  
  148. }

  149. void Multiple_read_BH1750(void)
  150. {   uchar i;        
  151.     BH1750_Start();                          
  152.     BH1750_SendByte(SlaveAddress+1);        
  153.         
  154.          for (i=0; i<3; i++)                     
  155.     {
  156.         BUF[i] = BH1750_RecvByte();         
  157.         if (i == 3)
  158.         {

  159.            BH1750_SendACK(1);               
  160.         }
  161.         else
  162.         {               
  163.           BH1750_SendACK(0);               
  164.        }
  165.    }

  166.     BH1750_Stop();                        
  167.     Delay5ms();
  168. }

  169. void Init_BH1750()
  170. {
  171.    Single_Write_BH1750(0x01);  

  172. }



  173. uchar dat_r[4];   

  174. sbit DATA=P2^2;  

  175. void Delay30us()                //@11.0592MHz-40
  176. {
  177.         unsigned char i;

  178.         i = 11;
  179.         while (--i);
  180. }


  181. void Delay20ms()                //@11.0592MHz
  182. {
  183.         unsigned char i, j;

  184.         i = 36;
  185.         j = 217;
  186.         do
  187.         {
  188.                 while (--j);
  189.         } while (--i);
  190. }

  191. void Delay1s()                //@11.0592MHz
  192. {
  193.         unsigned char i, j, k;

  194.         _nop_();
  195.         i = 8;
  196.         j = 1;
  197.         k = 243;
  198.         do
  199.         {
  200.                 do
  201.                 {
  202.                         while (--k);
  203.                 } while (--j);
  204.         } while (--i);
  205. }

  206. void DHT11_start()              
  207. {
  208.    DATA=1;                              
  209.    _nop_();
  210.    _nop_();
  211.    DATA=0;                              
  212.    Delay20ms();  
  213.    DATA=1;                                
  214.    Delay30us();
  215. }

  216. uchar DHT11_rec_byte()      
  217. {
  218.    uchar i,dat=0;
  219.   for(i=0;i<8;i++)   
  220.    {         
  221.       while(!DATA);
  222.       Delay30us();
  223.           Delay30us();   
  224.       dat<<=1;         
  225.       if(DATA==1)   
  226.          dat+=1;
  227.       while(DATA);     
  228.     }  
  229.     return dat;
  230. }

  231. void DHT11_receive()      
  232. {
  233.     uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  234.     DHT11_start();                 
  235.     if(DATA==0)
  236.     {
  237.         while(DATA==0);   
  238.         Delay30us();
  239.                 Delay30us();
  240.                 Delay30us();  
  241.         R_H=DHT11_rec_byte();   
  242.         R_L=DHT11_rec_byte();     
  243.         T_H=DHT11_rec_byte();   
  244.         T_L=DHT11_rec_byte();   
  245.         revise=DHT11_rec_byte();

  246.         Delay30us();   

  247.         if((R_H+R_L+T_H+T_L)==revise)   
  248.         {
  249.             RH=R_H;
  250.             RL=R_L;
  251.             TH=T_H;
  252.             TL=T_L;
  253.         }
  254.         dat_r[0]='0'+(RH/10);
  255.         dat_r[1]='0'+(RH%10);
  256.         dat_r[2]='0'+(TH/10);
  257.         dat_r[3]='0'+(TH%10);
  258.     }
  259. }

  260. int main(void)
  261. {        
  262.                  float temp;
  263.                 delay_nms(100);            
  264.                 Init_BH1750();        
  265.                 OLED_Init();                        
  266.                 OLED_Clear();
  267.                
  268.                         
  269.                         OLED_Clear();               
  270.                         OLED_ShowCHinese1(3,0,0);
  271.                                         OLED_ShowCHinese1(21,0,1);
  272.                         OLED_ShowCHinese1(39,0,2);//溫度               
  273.                         OLED_ShowCHinese2(3,3,0);
  274.                                         OLED_ShowCHinese2(21,3,1);
  275.                         OLED_ShowCHinese2(39,3,2);//濕度
  276.                         OLED_ShowCHinese3(3,6,0);
  277.                                         OLED_ShowCHinese3(21,6,1);
  278.                         OLED_ShowCHinese3(39,6,2);//亮度
  279.                 while(1)
  280.                 {            
  281.                                        
  282.                         OLED_DrawBMP(90,0,106,2,BMP1);
  283.                         OLED_DrawBMP(90,3,106,5,BMP2);
  284.                         DHT11_receive();
  285.                         OLED_ShowChar(60,3,dat_r[0],16);
  286.                         OLED_ShowChar(70,3,dat_r[1],16);
  287.                         OLED_ShowChar(60,0,dat_r[2],16);
  288.                         OLED_ShowChar(70,0,dat_r[3],16);

  289.                         Single_Write_BH1750(0x01);   
  290.                         Single_Write_BH1750(0x10);   
  291.                         delay_nms(180);              
  292.                         Multiple_Read_BH1750();      
  293.                         dis_data=BUF[0];
  294.                         dis_data=(dis_data<<8)+BUF[1];
  295.                         temp=(float)dis_data/1.2;
  296.                         conversion(temp);
  297.                         OLED_ShowNum(60,6,temp,3,16);               

  298.                          if(temp>70)
  299.                         {
  300.                                 LED1=1;
  301.                                 LED2=1;
  302.                                 D1=0;
  303.                                 D2=0;
  304.                         }
  305.                         else
  306.                         {
  307.                                 LED1=1;
  308.                                 LED2=1;
  309.                                 D1=1;
  310.                                 D2=1;
  311.                         }
  312.                         delay_ms(100);
  313.         }         
  314. }
  315.         
復制代碼

程序和傳感器PDF下載:
程序.7z (2.72 MB, 下載次數: 156)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1130376 發表于 2024-8-16 21:24 | 只看該作者
你好我想問一下我用的是STC8H8K64U的芯片用不了是有什么問題嗎
回復

使用道具 舉報

板凳
ID:192294 發表于 2024-8-17 13:26 | 只看該作者
樓主的程序是12T的傳統51,STC8H要注意調整速度,及一定要IO口初始化!!!
回復

使用道具 舉報

地板
ID:76027 發表于 2024-8-17 16:26 | 只看該作者
1754232 發表于 2024-8-16 21:24
你好我想問一下我用的是STC8H8K64U的芯片用不了是有什么問題嗎

STC8H8K64U要配置IO
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av在线播放不卡 | 99精品视频免费观看 | 一区二区免费看 | 金莲网 | 99精彩视频 | 天天弄天天操 | 精品亚洲一区二区 | 18gay男同69亚洲网站 | 欧美中国少妇xxx性高请视频 | 91人人在线 | 国内成人免费视频 | 日本亚洲精品成人欧美一区 | 日韩免费高清视频 | 我我色综合 | 久久久久国产精品午夜一区 | 国产日韩欧美一区 | 日韩影院在线观看 | 毛片一区二区三区 | 亚欧性视频 | 欧洲色| 国产精品自在线 | 中文字幕国产 | 色综合久久久 | 亚洲国产精品久久久久婷婷老年 | 999免费观看视频 | 欧美日韩亚洲国产 | 日韩免| 久久久精彩视频 | 国产综合欧美 | 视频二区在线观看 | 国产精品免费一区二区三区 | 欧美猛交| 亚洲成人播放器 | 中文字幕第十五页 | 日韩视频精品在线 | 91精品国产综合久久久久久丝袜 | 成人av一区| 亚洲国产成人在线视频 | 精品一区二区三区四区五区 | 欧美在线色视频 | 亚洲精品在线视频 |