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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5242|回復(fù): 3
收起左側(cè)

oled顯示溫度報(bào)警的51單片機(jī)程序

[復(fù)制鏈接]
ID:294461 發(fā)表于 2018-12-27 14:36 | 顯示全部樓層 |閱讀模式
溫度報(bào)警限制上下值
由oled顯示
制作出來(lái)的實(shí)物圖如下:
片1.png

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include "oled.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. unsigned char set=0;
  6. unsigned char code table[]="0123456789";
  7. uchar shi,bai,ge,xiaoshu;
  8. sbit DSPORT=P3^7;
  9. sbit k1=P2^7;
  10. sbit k2=P2^6;
  11. sbit k3=P3^2;
  12. bit N_flag;
  13. int shangxian=22;
  14. int xiaxian=10;
  15. int temp;
  16. sbit beep=P1^5;
  17. sbit alam=P1^6;
  18. uchar H1,H2,L1,L2;
  19. void delay(uint c)
  20. {
  21.    uint x,y;
  22.         for(x=c;x>0;x--)
  23.         for(y=123;y>0;y--);
  24. }
  25. void Delay1ms(unsigned int y)
  26. {
  27.         unsigned int x;
  28.         for( ; y>0; y--)
  29.         {
  30.                 for(x=110; x>0; x--);
  31.         }
  32. }


  33. uchar Ds18b20Init()
  34. {
  35.         uchar i;
  36.         DSPORT = 0;                         //將總線拉低480us~960us
  37.         i = 70;       
  38.         while(i--);//延時(shí)642us
  39.         DSPORT = 1;                        //然后拉高總線,如果DS18B20做出反應(yīng)會(huì)將在15us~60us后總線拉低
  40.         i = 0;
  41.         while(DSPORT)        //等待DS18B20拉低總線
  42.         {
  43.                 Delay1ms(1);
  44.                 i++;
  45.                 if(i>5)//等待>5MS
  46.                 {
  47.                         return 0;//初始化失敗
  48.                 }
  49.        
  50.         }
  51.         return 1;//初始化成功
  52. }



  53. void Ds18b20WriteByte(uchar dat)
  54. {
  55.         unsigned int i, j;

  56.         for(j=0; j<8; j++)
  57.         {
  58.                 DSPORT = 0;                       //每寫(xiě)入一位數(shù)據(jù)之前先把總線拉低1us
  59.                 i++;
  60.                 DSPORT = dat & 0x01;  //然后寫(xiě)入一個(gè)數(shù)據(jù),從最低位開(kāi)始
  61.                 i=6;
  62.                 while(i--); //延時(shí)68us,持續(xù)時(shí)間最60us
  63.                 DSPORT = 1;        //然后釋放總線,至少1us給總線恢復(fù)時(shí)間才能接著寫(xiě)入第二個(gè)數(shù)值
  64.                 dat >>= 1;
  65.         }
  66. }



  67. uchar Ds18b20ReadByte()
  68. {
  69.         uchar byte, bi;
  70.         unsigned int i, j;       
  71.         for(j=8; j>0; j--)
  72.         {
  73.                 DSPORT = 0;//先將總線拉低1us
  74.                 i++;
  75.                 DSPORT = 1;//然后釋放總線
  76.                 i++;
  77.                 i++;//延時(shí)6us等待數(shù)據(jù)穩(wěn)定
  78.                 bi = DSPORT;         //讀取數(shù)據(jù),從最低位開(kāi)始讀取
  79.                 /*將byte左移一位,然后與上右移7位后的bi,注意移動(dòng)之后移掉那位補(bǔ)0。*/
  80.                 byte = (byte >> 1) | (bi << 7);                                                  
  81.                 i = 4;                //讀取完之后等待48us再接著讀取下一個(gè)數(shù)
  82.                 while(i--);
  83.         }                               
  84.         return byte;
  85. }


  86. void  Ds18b20ChangTemp()
  87. {
  88.         Ds18b20Init();
  89.         Delay1ms(1);
  90.         Ds18b20WriteByte(0xcc);                //跳過(guò)ROM操作命令                 
  91.         Ds18b20WriteByte(0x44);            //溫度轉(zhuǎn)換命令
  92.         //Delay1ms(100);        //等待轉(zhuǎn)換成功,而如果你是一直刷著的話,就不用這個(gè)延時(shí)了
  93.    
  94. }


  95. void  Ds18b20ReadTempCom()
  96. {       

  97.         Ds18b20Init();
  98.         Delay1ms(1);
  99.         Ds18b20WriteByte(0xcc);         //跳過(guò)ROM操作命令
  100.         Ds18b20WriteByte(0xbe);         //發(fā)送讀取溫度命令
  101. }


  102. uint Ds18b20ReadTemp()
  103. {
  104.         int temp = 0;
  105.         uchar tmh, tml;
  106.         Ds18b20ChangTemp();                                 //先寫(xiě)入轉(zhuǎn)換命令
  107.         Ds18b20ReadTempCom();                        //然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令
  108.         tml = Ds18b20ReadByte();                //讀取溫度值共16位,先讀低字節(jié)
  109.         tmh = Ds18b20ReadByte();                //再讀高字節(jié)
  110.         temp = tmh;
  111.         temp <<= 8;
  112.         temp |= tml;
  113.         if(temp>0x0fff)
  114.         {
  115.     N_flag=1;
  116.                 temp=temp-1;
  117.                 temp=~temp;
  118.   }
  119.         else
  120.         {
  121.     N_flag=0;
  122.   }
  123.         temp=temp*0.625;
  124.        
  125.          bai=temp/1000;
  126.          shi=temp%1000/100;
  127.    ge=temp%1000%100/10;
  128.    xiaoshu=temp%10;

  129.         return (temp);
  130. }
  131. void keyscan()
  132. {  
  133.        
  134.         if(set==0)
  135.     {       
  136.                 if(k1==0)
  137.                 {
  138.                         delay(10);
  139.                         if(k1==0)shangxian++;
  140.                 }
  141.         if(k2==0)
  142.                 {
  143.                         delay(10);
  144.                         if(k2==0)shangxian--;
  145.                 }  
  146.         }

  147.     if(set==1)
  148.         {
  149.                 if(k1==0)
  150.                 {
  151.                         delay(10);
  152.                         if(k1==0)xiaxian++;
  153.                 }
  154.         if(k2==0)
  155.                 {
  156.                         delay(10);
  157.                         if(k2==0)xiaxian--;
  158.         }
  159.      }

  160.          H1=shangxian/10;
  161.          H2=xiaxian/10;
  162.          L1=shangxian%10;
  163.          L2=xiaxian%10;

  164. }
  165. void alarm()
  166. {
  167.         temp=Ds18b20ReadTemp();
  168.    if(temp/10>=shangxian)
  169.          {
  170.       beep=0;
  171.                   alam=0;
  172.                   delay(10);
  173.                   beep=1;
  174.                   alam=1;
  175.                   delay(10);
  176.    }
  177.          else
  178.          {
  179.       beep=1;
  180.                   alam=1;
  181.    }
  182.          if(temp/10<=xiaxian)
  183.          {
  184.       beep=~beep;
  185.                   alam=~alam;
  186.                  delay(10);
  187.    }
  188.          else
  189.          {
  190.          beep=1;
  191.                      alam=1;
  192.    }
  193. }
  194. void main(void)
  195. {        IT0=1;
  196.         EX0=1;
  197.         EA=1;
  198.         OLED_Init();                        //初始化OLED  
  199.         OLED_Clear();       
  200.         while(1)
  201.         {               
  202.                 Ds18b20ReadTemp();
  203.                 keyscan();
  204.                 alarm();
  205.                 OLED_ShowCHinese(0,0,0);
  206.                 OLED_ShowCHinese(16,0,1);
  207.                 OLED_ShowChar(32,0,':');
  208.                  if(temp<0)
  209.          {
  210.      OLED_ShowChar(40,0,'-');
  211.    }
  212.    else
  213.          {
  214.       OLED_ShowChar(40,0,'+');
  215.    }       
  216.    
  217.                 OLED_ShowNum(48,0,bai,1,8);
  218.                 OLED_ShowNum(56,0,shi,1,8);
  219.                 OLED_ShowNum(64,0,ge,1,8);
  220.                 OLED_ShowChar(72,0,'.');
  221. ……………………

  222. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
oled的溫度顯示.rar (159.05 KB, 下載次數(shù): 172)
回復(fù)

使用道具 舉報(bào)

ID:294123 發(fā)表于 2020-2-16 12:28 | 顯示全部樓層
很好,正在學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:582255 發(fā)表于 2020-4-18 09:07 | 顯示全部樓層
點(diǎn)贊,樓主厲害
回復(fù)

使用道具 舉報(bào)

ID:585455 發(fā)表于 2020-9-27 13:29 | 顯示全部樓層
正在摸索oled;幫助真的很大,下載來(lái)測(cè)試。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品久久久久久下一站 | 久久av.com | 国产一级视频在线 | 国产免费人成xvideos视频 | 五十女人一级毛片 | 亚洲综合在线播放 | 一级片av | 999久久久 | 精品久久一区 | 亚洲第一av网站 | 人人亚洲| www日韩高清 | 精品美女久久久久久免费 | 视频一区在线观看 | 国产综合精品一区二区三区 | av一级久久 | 亚洲精品一区久久久久久 | 污书屋 | 中文字幕一区二区三区乱码在线 | 欧美久操网| 一区二区三区日韩精品 | 国产一级一级毛片 | 免费成人国产 | 精品一区二区免费视频 | 国产资源网 | 91久久久久| 中文字幕亚洲精品 | 日韩中文字幕久久 | 色婷婷亚洲一区二区三区 | 99久久精品国产毛片 | 亚洲黄色在线免费观看 | 日韩久久久久久 | 97福利在线 | 91精品久久久久久久久久 | 国产综合久久 | 欧美在线a | 美日韩免费视频 | 丝袜 亚洲 另类 欧美 综合 | 亚洲高清在线 | 欧美一区二区三区的 | 91精品久久久久久久久 |