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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS1820溫度測量1602顯示的單片機源碼

[復制鏈接]
跳轉到指定樓層
樓主
利用51單片機,DS1820溫度傳感器可以實現實時溫度檢測。        


單片機源程序如下:
  1. ///無線模塊板
  2. #include<reg52.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit k1=P3^5;
  7. sbit k2=P3^4;
  8. sbit k3=P3^3;
  9. sbit k4=P3^2;
  10. sbit DQ=P3^7;                         //ds18b20
  11. // 1602
  12. sbit lcden=P0^5;
  13. sbit lcdrs=P0^7;
  14. sbit lcdrw=P0^6;
  15. sbit bell=P3^6;
  16. uint        a[19];
  17. uint wendu=0;
  18. uint time=0;
  19. uchar        fen=0;
  20. uchar        miao=0;
  21. ////////  1602
  22. void delay1ms(uint z)
  23. {
  24.         uint x,y;
  25.         for(x=z;x>0;x--)
  26.                 for(y=114;y>0;y--);
  27. }

  28. void write_com(uchar com)
  29. {
  30.         lcdrs=0;
  31.         P2=com;
  32.         delay1ms(5);
  33.         lcden=1;
  34.         delay1ms(5);
  35.         lcden=0;
  36. }

  37. void write_data(uchar date)
  38. {
  39.         lcdrs=1;
  40.         P2=date;
  41.         delay1ms(5);
  42.         lcden=1;
  43.         delay1ms(5);
  44.         lcden=0;
  45. }
  46. void write_str(uchar *str)  
  47. {  
  48. while(*str!='\0')  //未結束   
  49. {  
  50.   write_data(*str++);  
  51.   delay1ms(1);  
  52. }  
  53. }
  54. void init_1602()
  55. {
  56. //        uchar num;
  57.         uchar table[16]={0};
  58.         uchar table1[16]={0};
  59.         lcdrw=0;
  60.         lcden=0;
  61.         write_com(0x38);       
  62.         write_com(0x0e);
  63.         write_com(0x06);
  64.         write_com(0x01);
  65.         write_com(0x80);
  66. /*        for(num=0;num<16;num++)
  67.         {
  68.                 write_data(table[num]);
  69.                 delay1ms(10);
  70.         }
  71.         write_com(0x80+0x40);
  72.         for(num=0;num<16;num++)
  73.         {
  74.                 write_data(table1[num]);
  75.                 delay1ms(10);
  76.         }
  77. */
  78. }
  79. /////         ////                         ds18b20

  80. bit init_DS18B20()
  81. {
  82.         uchar num;
  83.         bit flag;
  84.         DQ=1;
  85.         for(num=0;num<2;num++);  //先拉高
  86.         DQ=0;
  87.         for(num=0;num<200;num++);  // 480-960us        powerup
  88.         DQ=1;
  89.         for(num=0;num<20;num++);        //  >60us   wait
  90.         flag=DQ;                                        // 響應
  91.         for(num=0;num<150;num++);        //         60-240us ds18b20存在信號
  92.         DQ=1;
  93.         return flag;
  94. }

  95. void DS18B20_WR_CHAR(uchar byte)        // 先寫低位
  96. {       
  97.         uchar num;
  98.         uchar num1;
  99.         for(num1=0;num1<8;num1++)
  100.         {                
  101.                 DQ=0;                //拉低
  102.                 _nop_();        //下拉1us
  103.                 _nop_();
  104.                 DQ=byte&0x01;
  105.                 for(num=0;num<20;num++);        //  >60us   wait
  106.                 byte>>=1;       
  107.                 DQ=1;          //拉高       
  108.                 _nop_();
  109.                 _nop_();
  110.         }               
  111. }

  112. uchar DS18B20_RD_CHAR()        //先讀低位
  113. {
  114.         uchar num;
  115.         uchar num1;
  116.         uchar byte=0;
  117.         for(num1=0;num1<8;num1++)
  118.         {
  119.                 DQ=0;          //拉低
  120.                 _nop_();
  121.                 DQ=1;
  122.                 for(num=0;num<1;num++);  // <10us        
  123.                 byte>>=1;
  124.                 if(DQ==1)
  125.                         byte|=0x80;
  126.                 else
  127.                         byte|=0x00;
  128.                 DQ=1;        //拉高
  129.                 _nop_();
  130.                 _nop_();
  131.                 for(num=0;num<20;num++);  //  >60us
  132.                
  133.         }
  134.         return byte;
  135. }

  136. uint DS18B20_WENDU()
  137. {
  138.         uchar temperaturel=0,temperatureh=0;
  139.         uint temperature=0;
  140.         if(init_DS18B20()==0)
  141.         {
  142.                 DS18B20_WR_CHAR(0xcc);
  143.                 DS18B20_WR_CHAR(0x44);
  144.                 delay1ms(500);
  145.                 if(init_DS18B20()==0)
  146.                 {       
  147.                         DS18B20_WR_CHAR(0xcc);
  148.                         DS18B20_WR_CHAR(0xBE);
  149.                         _nop_();
  150.                         temperaturel=DS18B20_RD_CHAR();
  151.                         temperatureh=DS18B20_RD_CHAR();
  152.                         temperature=(temperatureh*256+temperaturel)*0.625;
  153.                         init_DS18B20();
  154.                 }
  155.                 return temperature;                               
  156.         }
  157. }

  158. void xianshi()
  159.         {
  160.    
  161.                         fen=time/60;
  162.                         miao=time%60;

  163.                           
  164.                         write_com(0x80);
  165.                         write_str("time    temp    ");
  166.                         write_com(0x80+0x40);
  167.                         write_data(fen/10+48);
  168.                         write_data(fen%10+48);
  169.                         write_data(':');
  170.                         write_data(miao/10+48);
  171.                         write_data(miao%10+48);                  // 0xdf
  172.                         write_data(0x20);                  // 0xdf
  173.                         write_data(0x20);                  // 0xdf
  174.                         write_data(0x20);                  // 0xdf
  175.                        
  176.                         write_data((wendu/100)%10+48);
  177.                         write_data((wendu/10)%10+48);
  178.                         write_data('.');
  179.                         write_data(wendu%10+48);
  180.                         write_data(0xdf);                  // 0xdf
  181.                         write_data('c');
  182.                        
  183.                   
  184.         }
  185. ///////
  186. main()
  187. {

  188.         uchar i=0;
  189.         init_1602();
  190.         delay1ms(1000);
  191.          if( init_DS18B20()==0)
  192.          {
  193.          wendu=DS18B20_WENDU();
  194.          }
  195.          delay1ms(1000);

  196.         while(1)
  197.         {
  198.         if( init_DS18B20()==0)
  199.          {
  200.          wendu=DS18B20_WENDU();
  201.          }
  202.         xianshi();
  203.         if(k1==0)
  204.         {
  205.         time=0;
  206.         bell=0;
  207.         delay1ms(50);
  208.         bell=1;
  209.         delay1ms(200);
  210.         while(time<721&&k4)
  211.         {
  212.          if( init_DS18B20()==0)
  213.          {
  214.          wendu=DS18B20_WENDU();
  215.          }
  216.          
  217.          xianshi();
  218.                         delay1ms(190);                   //200
  219.                         if(time==0){a[0]=wendu;}
  220.                         if(time==60){a[1]=wendu;}
  221.                         if(time==120){a[2]=wendu;}
  222.                         if(time==180){a[3]=wendu;}
  223.                         if(time==240){a[4]=wendu;}
  224.                         if(time==300){a[5]=wendu;}
  225.                         if(time==315){a[6]=wendu;}
  226.                         if(time==330){a[7]=wendu;}
  227.                         if(time==345){a[8]=wendu;}
  228.                         if(time==360){a[9]=wendu;}
  229.                         if(time==375){a[10]=wendu;}
  230.                         if(time==390){a[11]=wendu;}
  231.                         if(time==405){a[12]=wendu;}
  232.                         if(time==420){a[13]=wendu;}
  233.                         if(time==480){a[14]=wendu;}
  234.                         if(time==540){a[15]=wendu;}
  235.                         if(time==600){a[16]=wendu;}
  236.                         if(time==660){a[17]=wendu;}
  237.                         if(time==720){a[18]=wendu;}
  238.          time++;
  239.         }
  240.         time--;
  241.         bell=0;
  242.         delay1ms(50);
  243.         bell=1;
  244.         }
  245.         if(k2==0)
  246.         {
  247.          i=0;
  248.          bell=0;
  249.         delay1ms(50);
  250.         bell=1;

  251.          while(k1)
  252.          {
  253.          if(k4==0&&i<18)
  254.          {
  255.          i++;
  256.          bell=0;
  257.         delay1ms(50);
  258.         bell=1;
  259.          delay1ms(300);
  260.          }
  261.          if(k3==0&&i>0)
  262.          {
  263.          i--;
  264.          bell=0;
  265.         delay1ms(50);
  266.         bell=1;
  267.          delay1ms(300);
  268.          }
  269.                          if(i==0){time=0;wendu=a[0];}
  270.                         if(i==1){time=60;wendu=a[1];}
  271.                         if(i==2){time=120;wendu=a[2];}
  272.                         if(i==3){time=180;wendu=a[3];}
  273.                         if(i==4){time=240;wendu=a[4];}
  274.                         if(i==5){time=300;wendu=a[5];}
  275.                         if(i==6){time=315;wendu=a[6];}
  276.                         if(i==7){time=330;wendu=a[7];}
  277.                         if(i==8){time=345;wendu=a[8];}
  278.                         if(i==9){time=360;wendu=a[9];}
  279.                         if(i==10){time=375;wendu=a[10];}
  280.                         if(i==11){time=390;wendu=a[11];}
  281.                         if(i==12){time=405;wendu=a[12];}
  282.                         if(i==13){time=420;wendu=a[13];}
  283.                         if(i==14){time=480;wendu=a[14];}
  284.                         if(i==15){time=540;wendu=a[15];}
  285.                         if(i==16){time=600;wendu=a[16];}
  286.                         if(i==17){time=660;wendu=a[17];}
  287.                         if(i==18){time=720;wendu=a[18];}


  288.          xianshi();
  289.          delay1ms(500);
  290.          }
  291.         bell=0;
  292.         delay1ms(50);
  293.         bell=1;
  294.         time=0;
  295.          while(!k1);
  296.         delay1ms(600);
  297.          }
  298.        
  299.         }
  300.         }

復制代碼

所有資料51hei提供下載:
326 溫度測量1602顯示.rar (31.37 KB, 下載次數: 25)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:194581 發表于 2019-5-6 18:18 | 只看該作者
感謝大佬分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品1区2区 | 亚洲成人av | 国产一区二区三区精品久久久 | 欧美一区二区 | 免费一区二区 | 91精品久久久久久久久久小网站 | 国产欧美一区二区三区国产幕精品 | 久久久久亚洲精品国产 | 成人黄色电影在线观看 | 国产精品久久久久久久免费大片 | 日韩成人免费视频 | 狠狠操在线 | 国产网站久久 | 国产在线一区二 | 日本精品久久久久 | 免费成人在线网站 | 久久精品一级 | 福利一区二区在线 | 91社区在线观看高清 | 九九久久在线看 | 成人老司机 | 亚洲精品一区二三区不卡 | 免费看a | 日韩视频在线观看一区二区 | 久久国内 | 人人亚洲 | 国产精品我不卡 | 国产精品美女久久久久久免费 | 99久久婷婷| 99久久精品免费看国产四区 | 日韩成人免费 | 国产成人99av超碰超爽 | 一色一黄视频 | www.亚洲 | 午夜成人免费电影 | 91偷拍精品一区二区三区 | 国产91视频一区二区 | 久久精品色欧美aⅴ一区二区 | 日韩国产精品一区二区三区 | 青青草在线视频免费观看 | 欧美日韩中文字幕在线 |