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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12050|回復: 16
收起左側

51單片機OLED+dht11顯示溫度的源程序

  [復制鏈接]
ID:195329 發表于 2018-4-6 02:01 | 顯示全部樓層 |閱讀模式
入門51單片機一個多月,參加一個比賽熬夜寫出了OLED+DHT11程序。

單片機源程序如下:
  1. #include "REG51.h"
  2. #include "oled.h"
  3. #include<intrins.h>
  4. typedef unsigned char BYTE;
  5. typedef unsigned int WORD;
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. sbit io=P1^2;//dht11data端接單片機的P1^0口//
  9. sbit IN1 = P1^0;                        
  10. sbit IN2 = P1^1;  //輸入電機接口
  11. sbit K1  = P3^0;
  12. sbit K2  = P3^1;          //按鍵接口
  13. uchar data_byte;

  14. uchar RH,RL,TH,TL;

  15. int count1,a;
  16. void DelayUs2x(unsigned char t)

  17. {

  18.         while(--t);

  19. }

  20. void DelayMs(unsigned char t)

  21. {

  22.         while(t--)

  23.         {

  24. //大致延時1mS

  25.         DelayUs2x(245);

  26.         DelayUs2x(245);

  27.         }

  28. }

  29. void delay(uchar ms) //延時模塊//
  30. {

  31.   uchar i;

  32.   while(ms--)                 

  33. for(i=0;i<100;i++);

  34. }

  35. void delay1()//一個for循環大概需要8個多機器周期一個機器周期為1us晶振為12MHz也就是說本函數延時8us多此延時函數必須德稍微精確一點

  36. {

  37.   uchar i;

  38.   for(i=0;i<1;i++);

  39. }

  40. //電機的程序
  41. void ZHUAN(){
  42.        
  43.           IN2=0;
  44.    }


  45. void speed(int cnt,int sd)
  46. {  
  47. if(cnt<sd)  
  48.         {
  49.         IN1=1;
  50.         }
  51. else  
  52.         {
  53.         IN1=0;
  54.         }

  55. }  
  56. void turn(int cnt,int sd)                                   
  57. {  
  58.     ZHUAN();          
  59.         speed(cnt,sd);
  60. }  



  61. void start()//開始信號

  62. {

  63.   io=1;

  64.   delay1();

  65.   io=0;

  66.   delay(25);// 主機把總線拉低必須大于18ms保證DHT11能檢測到起始信號

  67.   io=1;    //發送開始信號結束后拉高電平延時20-40us

  68.   delay1();//以下三個延時函數差不多為24us符合要求

  69.   delay1();

  70.   delay1();

  71. }
  72. uchar receive_byte()//接收一個字節//

  73. {

  74.   uchar i,temp;

  75.   for(i=0;i<8;i++)//接收8bit的數據

  76.   {

  77.         while(!io);//等待50us的低電平開始信號結束

  78.         delay1();//開始信號結束之后延時26us-28us以下三個延時函數

  79.          delay1();

  80.         delay1();

  81.         temp=0;//時間為26us-28us表示接收的為數據'0'

  82.         if(io==1)

  83.          temp=1; //如果26us-28us之后還為高電平則表示接收的數據為'1'

  84.     while(io);//等待數據信號高電平'0'為26us-28us'1'為70us

  85.         data_byte<<=1;//接收的數據為高位在前右移

  86.          data_byte|=temp;

  87.   }

  88.   return data_byte;

  89. }
  90. void receive()//接收數據//
  91. {

  92.   uchar T_H,T_L,R_H,R_L,check,num_check,i;

  93.   start();//開始信號//

  94.   io=1;   //主機設為輸入判斷從機DHT11響應信號

  95.   if(!io)//判斷從機是否有低電平響應信號//

  96.   {  
  97.         while(!io);//判斷從機發出 80us 的低電平響應信號是否結束//

  98.         while(io);//判斷從機發出 80us 的高電平是否結束如結束則主機進入數據接收狀態

  99.         R_H=receive_byte();//濕度高位

  100.         R_L=receive_byte();//濕度低位

  101.         T_H=receive_byte();//溫度高位

  102.         T_L=receive_byte();//溫度低位

  103.         check=receive_byte();//校驗位

  104.         io=0; //當最后一bit數據接完畢后從機拉低電平50us//

  105.         for(i=0;i<7;i++)//差不多50us的延時

  106.         delay1();

  107.         io=1;//總線由上拉電阻拉高進入空閑狀態

  108.         num_check=R_H+R_L+T_H+T_L;

  109.         if(num_check==check)//判斷讀到的四個數據之和是否與校驗位相同

  110.         {

  111.    RH=R_H;

  112.    RL=R_L;

  113.    TH=T_H;

  114.    TL=T_L;

  115.    check=num_check;
  116.         }
  117.   }
  118. }

  119. int main(void)
  120. {       
  121.         TMOD=0x01;
  122.         EA=1;  
  123.         TH0=(65536-1000)/256;
  124.         TL0=(65536-1000)%256;
  125.         ET0=1;
  126.         TR0=1;
  127.        
  128.         a = 100;
  129.                 OLED_Init();                        //初始化OLED  
  130.                 OLED_Clear() ;
  131.                 OLED_ShowCHinese(36,0,0);
  132.                 OLED_ShowCHinese(54,0,1);
  133.                 OLED_ShowCHinese(72,0,2);
  134.                 OLED_ShowCHinese(0,2,3);
  135.                 OLED_ShowCHinese(18,2,5);
  136.                 OLED_ShowCHinese(0,4,4);
  137.                 OLED_ShowCHinese(18,4,5);
  138.                 OLED_ShowString(37,4,":",16);
  139.                   OLED_ShowString(37,2,":",16);
  140.         while(1)
  141.         {
  142.             turn(count1,a);

  143.                 if(K1==0)

  144.                 {

  145.                         DelayMs(100);

  146.                         if(K1==0)// 去抖動

  147.                         {
  148.                            if(a>=0)
  149.                            a=a-10;
  150.                         }

  151.                         }
  152.                 if(K2==0)

  153. ……………………

  154. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
OLED_DHT11.zip (97.73 KB, 下載次數: 462)


評分

參與人數 2黑幣 +55 收起 理由
zkele + 5 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:372098 發表于 2018-7-15 18:25 | 顯示全部樓層
寫的很好,大贊一個[em04][em04][em04][em04]
回復

使用道具 舉報

ID:104846 發表于 2018-7-24 15:19 | 顯示全部樓層
贊一個
回復

使用道具 舉報

ID:380115 發表于 2018-7-28 10:48 | 顯示全部樓層
正在嘗試做gy-30數字光傳感器用oled顯示,有一定參考價值
回復

使用道具 舉報

ID:412987 發表于 2018-11-24 22:48 | 顯示全部樓層
為何我重新編譯以后,下載到單片機就不能用了
回復

使用道具 舉報

ID:517217 發表于 2019-4-20 16:46 | 顯示全部樓層
剛好用到,謝謝樓主分享
回復

使用道具 舉報

ID:575725 發表于 2019-7-1 15:44 | 顯示全部樓層
最近正在看這些東西,感謝分享。
回復

使用道具 舉報

ID:490458 發表于 2019-7-1 19:28 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:620057 發表于 2019-10-7 13:50 | 顯示全部樓層
感謝樓主的分享,找的我焦頭爛額
回復

使用道具 舉報

ID:692618 發表于 2020-2-13 00:17 | 顯示全部樓層
是有字符串和數字都有嗎
回復

使用道具 舉報

ID:258216 發表于 2020-2-21 14:48 | 顯示全部樓層
為何編譯后下載到單片機就不能用了
回復

使用道具 舉報

ID:704775 發表于 2020-4-20 10:31 | 顯示全部樓層
這個電機入口,和led管腳不是重復了嗎
回復

使用道具 舉報

ID:423286 發表于 2020-5-13 22:41 | 顯示全部樓層
謝謝帶哥分享。
回復

使用道具 舉報

ID:760870 發表于 2020-5-26 12:54 | 顯示全部樓層
請問能麻煩樓主發一下io接口嗎,我做不了
回復

使用道具 舉報

ID:841232 發表于 2020-11-10 20:15 | 顯示全部樓層
正好在學習這一塊,感謝分享
回復

使用道具 舉報

ID:166284 發表于 2020-11-12 17:01 | 顯示全部樓層
網頁上怎么沒有原理圖呢?  
回復

使用道具 舉報

ID:834280 發表于 2020-11-16 14:04 | 顯示全部樓層
HAO 給你點贊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩午夜影院 | 永久免费视频 | 久久高清 | 性色av一区 | 亚洲在线一区 | 亚洲精品9999 | 国产日韩欧美一区二区 | 国产精品日日夜夜 | 欧美视频三区 | 国产成人精品久久 | 中文字幕国产 | 99中文字幕 | 欧美无乱码久久久免费午夜一区 | 伊人精品视频 | 日本电影韩国电影免费观看 | 久久久久久久久久久爱 | 国产乱精品一区二区三区 | 日韩视频成人 | 一级国产精品一级国产精品片 | 国产精品久久久久久婷婷天堂 | 国产原创视频 | 国产精品国产成人国产三级 | 久久男人天堂 | 久久精品国产一区二区电影 | 亚洲一区二区不卡在线观看 | 综合激情网 | 国产精品色婷婷久久58 | 日韩精品成人一区二区三区视频 | 日韩有码在线观看 | 日韩av福利在线观看 | 国产精品一区二区三区在线 | 欧美日韩国产一区二区 | 91一区 | 午夜影院在线观看视频 | 国产日韩欧美一区二区 | 成人国内精品久久久久一区 | 久久精品免费一区二区 | 中文字幕免费视频 | 国产精品99久久久久 | 色www精品视频在线观看 | 日本国产精品视频 |