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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機智慧大棚監測程序-18b20實驗

[復制鏈接]
跳轉到指定樓層
樓主
ID:1138266 發表于 2024-12-4 22:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4.        
  5. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  6.                             0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //段碼表
  7. unsigned char code table1[]={0x7f,0xbf,0xdf,0xef,0xf7};

  8. bit DS18B20_Reset();
  9. void DS18B20_WriteData(uchar dat);
  10. uchar DS18B20_RadeData();
  11. void Seg7_Display(uint val);
  12. void delayms(uint xms);
  13. void system_Ini();
  14. void InitMotor();
  15. void SetMotor();

  16. uchar tempL;
  17. sbit CS88=P2^2;
  18. uint tempH;
  19. uint temp;

  20. sbit LED=P1^1;
  21. sbit DS=P2^4;           //引腳定義
  22. sbit DU=P2^0;
  23. sbit WE=P2^1;
  24. sbit beep = P2^3;

  25. sbit A = P3^4;          //定義管腳
  26. sbit b = P3^5;
  27. sbit C = P3^6;
  28. sbit D = P3^7;

  29. //步進電機驅動
  30. unsigned char MotorStep=0;  //步進馬達步序
  31. unsigned int  MotorDelay,Speed=1,TIM,CT;
  32. #define speed 12   // 調整速度 數值不要設的太低 低了會引起震動。

  33. void main()
  34. {
  35.    system_Ini();
  36.    InitMotor();
  37.         while(1)
  38.         {
  39.                 CS88=0;
  40.                 DS18B20_Reset();
  41.                 DS18B20_WriteData(0xcc);  //跳過ROM檢測
  42.                 DS18B20_WriteData(0x44);  //啟動溫度轉換
  43.                 DS18B20_Reset();
  44.                 DS18B20_WriteData(0xcc);  //跳過ROM檢測
  45.                 DS18B20_WriteData(0xbe);  //讀暫存器
  46.                 tempL=DS18B20_RadeData();       //讀溫度地位
  47.           tempH=DS18B20_RadeData();
  48.           tempH=(tempH<<8)|tempL;     //16位
  49.                 if((tempH&0xf8)==0xf800)   //如果溫度是負值,取反加一
  50.                         tempH=~tempH+1;               
  51.                         temp=tempH*0.0625*1000;  //25   25360
  52. //顯示讀取到的溫度               
  53.                   Seg7_Display(temp);     //25.360
  54. //判斷溫度是否超過29度               
  55.                         if (temp>34000)
  56.                         {
  57.                                 LED=0;
  58.                                 beep=0;
  59.                                 SetMotor();
  60.                         }
  61.                         else
  62.                         {
  63.                                 LED=1;
  64.                                 beep=1;
  65.                                 A = 0;
  66.         b = 0;                    
  67.         C = 0;
  68.         D = 0;
  69.                         }
  70.                        
  71. //靜態顯示小數點                       
  72.                         DU=1;
  73.                         P0=0x80;
  74.                         DU=0;
  75.                         P0=0xff;
  76.                         WE=1;
  77.                         P0=0xef;
  78.                         WE=0;
  79.         }
  80. }


  81. bit DS18B20_Reset()
  82. {
  83.         bit flag;
  84.         uchar i;
  85.         DS=0;
  86.         for(i=240;i>0;i--);  //每執行一次,是兩個機器周期 240X2=480
  87.         DS=1;
  88.         for(i=40;i>0;i--);    //延時80us
  89.         flag=DS;
  90.         for(i=200;i>0;i--);   //延時400us
  91.         return flag;
  92. }

  93. void DS18B20_WriteData(uchar dat)
  94. {
  95.         uchar i,j;
  96.         for(j=0;j<8;j++)
  97.         {
  98.                 DS=0;
  99.                 for(i=2;i>0;i--);
  100.                 DS=dat&0x01;  //取出最低位
  101.                 for(i=30;i>0;i--);    //延時約60us
  102.                 DS=1;          //釋放總線
  103.                 dat = dat>>1;
  104.         }
  105. }

  106. uchar DS18B20_RadeData()
  107. {
  108.         uchar i,j,rdata;
  109.         for(j=0;j<8;j++)
  110.         {
  111.                 rdata>>=1;
  112.                 DS=0;
  113.                 for(i=2;i>0;i--);
  114.           DS=1;
  115.                 for(i=3;i>0;i--);
  116.                 if(DS==1)
  117.                         rdata=rdata|0x80;
  118.                 for(i=30;i>0;i--);
  119.           DS=1;
  120.         }
  121.         return rdata;
  122. }
  123. void delayms(uint xms)
  124. {
  125. uint i,j;
  126. for(i=xms;i>0;i--)
  127.     for(j=110;j>0;j--);
  128. }

  129. void Seg7_Display(uint val)
  130. {
  131.         uint i=4;
  132.         uint dis_data[5]={0};
  133.         dis_data[0]=val%10;      
  134.         dis_data[1]=val/10%10;   
  135.         dis_data[2]=val/100%10;   
  136.         dis_data[3]=val/1000%10;  
  137.         dis_data[4]=val/10000%10;  

  138.         for (i=0;i<5;i++)
  139.         {
  140.         P0=0xff;
  141.         DU=1;
  142.         P0=table[dis_data[i]];
  143.         DU=0;
  144.         P0=0xff;
  145.         WE=1;
  146.         P0=table1[i];
  147.         WE=0;
  148.         delayms(1);
  149.         }
  150.        
  151. }
  152. void InitMotor()
  153. {
  154.   A = 1;
  155.   b = 1;
  156.   C = 1;
  157.   D = 1;
  158. }

  159. void SetMotor()
  160. {

  161.     MotorDelay=Speed;        //調整速度
  162.     switch(MotorStep)
  163.     {
  164.        case 0:
  165.           if(TIM)   // A
  166.           {                                    
  167.             A = 0;                    //0xf1  
  168.             b = 1;
  169.                               C = 1;
  170.             D = 1;
  171.             MotorStep = 1;
  172.                         TIM=0;
  173.           }
  174.        break;

  175.        case 1:                 // AB
  176.          if(TIM)
  177.           {       
  178.             A = 0;                   //0xf3
  179.             b = 0;
  180.                    C = 1;
  181.             D = 1;
  182.             MotorStep = 2;
  183.                         TIM=0;
  184.           }
  185.        break;

  186.        case 2:           //B
  187.          if(TIM)
  188.           {
  189.            
  190.                   A = 1;
  191.             b = 0;                  //0xf2
  192.             C = 1;
  193.             D = 1;
  194.            
  195.             MotorStep = 3;
  196.                         TIM=0;
  197.           }
  198.        break;


  199.        case 3:                //BC
  200.          if(TIM)
  201.           {       
  202.             A = 1;
  203.             b = 0;                    //0xf6
  204.             C = 0;
  205.             D = 1;
  206.             MotorStep = 4;
  207.                         TIM=0;
  208.           }
  209.        break;
  210.      case 4:                 //C
  211.          if(TIM)
  212.           {       
  213.             A = 1;
  214.             b = 1;                    //0xf4
  215.             C = 0;
  216.             D = 1;
  217.             MotorStep = 5;
  218.                         TIM=0;
  219.            }
  220.        break;
  221.         case 5:                          //CD
  222.          if(TIM)
  223.           {       
  224.             A = 1;
  225.             b = 1;                    //0xfc
  226.             C = 0;
  227.             D = 0;
  228.             MotorStep = 6;
  229.                         TIM=0;
  230.           }
  231.        break;
  232.         case 6:                          //D
  233.          if(TIM)
  234.           {       
  235.             A = 1;
  236.             b = 1;                    //0xf8
  237.             C = 1;
  238.             D = 0;
  239.             MotorStep = 7;
  240.                         TIM=0;
  241.           }
  242.        break;
  243.         case 7:                        //DA
  244.          if(TIM)
  245.           {       
  246.             A = 0;
  247.             b = 1;                    //0xf9
  248.             C = 1;
  249.             D = 0;
  250.             MotorStep = 0;
  251.                         TIM=0;
  252.           }
  253.        break;
  254.        
  255.         }

  256. }


  257. void system_Ini()
  258. {
  259.     TMOD|= 0x11;
  260.     TH0=0xDC; //11.0592M
  261.     TL0=0x00;       
  262.           IE = 0x8A;       
  263.     TR0  = 1;
  264. }

  265. void Tzd(void) interrupt 1
  266. {
  267.    TH0 = 0xfe;    //11.0592
  268.          TL0 = 0x33;

  269.         if( CT++==speed)
  270.           {TIM=1;
  271.            CT=0;
  272.           }
  273. }
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区在线 | 中文字幕av一区二区三区 | 日韩国产精品一区二区三区 | 91精品久久久久久久 | 黄视频网址 | 性大毛片视频 | 黄色大片毛片 | 91精品欧美久久久久久久 | 蜜桃在线视频 | 午夜久久久| 中文字幕在线观看精品 | 成人一级片在线观看 | 亚洲成人免费视频 | 中文字幕一区二区三区精彩视频 | 亚洲欧美综合网 | 日韩福利在线观看 | 日日干日日色 | 亚洲精品久久久久中文字幕欢迎你 | 久久久久久久久久性 | a级毛片毛片免费观看久潮喷 | 91在线精品播放 | 黄色国产大片 | 国产成人亚洲精品 | 成人av一区二区三区 | 2021狠狠天天天 | 国产精品一二三区在线观看 | 欧美日韩91 | avhd101在线成人播放 | 岛国毛片 | 日韩成人性视频 | 逼逼网| 亚洲iv一区二区三区 | 久久精品中文字幕 | 福利影院在线看 | 亚洲精品在线免费看 | 成人高清在线 | 一级片免费观看 | 国产精品美女一区二区 | 久久69精品久久久久久久电影好 | 国产伦精品一区二区三区四区视频 | 久久久亚洲综合 |