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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6226|回復: 14
收起左側

stc89c51單片機定時澆水PCB仿真程序 使用了adc0832+土壤濕度傳感器

  [復制鏈接]
回帖獎勵 20 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次(中獎概率 50%)
ID:383498 發表于 2020-6-19 14:46 | 顯示全部樓層 |閱讀模式
制作出來的定時澆水實物圖如下:

實物圖片

實物圖片

實物圖片

實物圖片

文件有點大,所有分批上傳了,見諒

Altium Designer畫的單片機定時澆水系統原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png 51hei.png 51hei.png

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png

單片機源程序如下:
  1. /* K1 用于設置選擇高位還是低位                                                              左數第四個   
  2. K2 用于高/低位減                                                                            左數第三個
  3. K3 用于高/低位加                                                                            左數第二個
  4. K4用于 設置模式 初始設置其他3按鍵按下無用 顯示at 按下一次之后啟動3個按鍵 顯示 mt            左數第一個
  5. 當測量值超過設置值或者低于設定值 小燈亮 反之不亮

  6. 顯示內容
  7. hun :數值%       H:數值
  8. mode:模式        L:數值
  9. */
  10. #include<reg51.h>
  11. #include"lcd.h"
  12. #include"adc0832.h"

  13. unsigned char shidu;                                                  //濕度數據
  14. unsigned char shidu_h=70;                                              //濕度高位
  15. unsigned char shidu_l=20;                                             //濕度低位
  16. unsigned char shidu_table[]={0,0,0,0};                                //濕度數組
  17. unsigned char disp1[]="Hum :";                                         //顯示
  18. unsigned char disp2[]="Mode:";
  19. unsigned char disp3[]="% AT MT H: L:";
  20. sbit LED=P1^1;
  21. sbit K1=P2^0;
  22. sbit K2=P2^1;
  23. sbit K3=P2^2;
  24. sbit K4=P2^3;
  25. bit mode_flag;                                                            //高低位模式
  26. bit shizhi_flag;                                                          //設置模式
  27. void key_proy();
  28. void Delay10ms(void) ;  //誤差 0us

  29. void Delay10ms(void)   //誤差 0us
  30. {
  31.     unsigned char a,b,c;
  32.     for(c=1;c>0;c--)
  33.         for(b=38;b>0;b--)
  34.             for(a=130;a>0;a--);
  35. }
  36. void Timer0Init()
  37. {
  38.         TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。

  39.         TH0=0XFC;        //給定時器賦初值,定時1ms
  40.         TL0=0X18;        
  41.         ET0=1;//打開定時器0中斷允許
  42.         EA=1;//打開總中斷
  43.         TR0=1;//打開定時器                        
  44. }



  45. void main()
  46. {
  47.   unsigned char i;
  48.         LcdInit();
  49.         Timer0Init();  //定時器0初始化
  50.          while(1)
  51.          {
  52.                     key_proy();
  53.                            LcdWriteCom(0x80);
  54.                                 for(i=0;i<5;i++)
  55.                                 {
  56.                                         LcdWriteData(disp1[i]);                                   //顯示Hum :
  57.                                 }
  58.                                 LcdWriteCom(0x80+0X40);
  59.                                 for(i=0;i<5;i++)
  60.                                 {
  61.                                         LcdWriteData(disp2[i]);                                  //顯示Mode:
  62.                                 }
  63.                                 LcdWriteCom(0x85);
  64.                                 LcdWriteData(shidu_table[0]+'0');                           //顯示濕度               
  65.                                 LcdWriteCom(0x86);
  66.                                 LcdWriteData(shidu_table[1]+'0');        
  67.         LcdWriteCom(0x87);        
  68.         LcdWriteData(disp3[0]);                                                              //顯示%
  69.                                 if(shizhi_flag==0)
  70.                                 {
  71.                                         LcdWriteCom(0x80+0X45);                                    //顯示at

  72.                                         LcdWriteData(disp3[2]);        
  73.                                         LcdWriteCom(0x80+0X46);        
  74.                                         LcdWriteData(disp3[3]);        
  75.                                 }
  76.                                 else
  77.                                 {
  78.                                   LcdWriteCom(0x80+0X45);                                     //顯示MT
  79.                                         LcdWriteData(disp3[5]);        
  80.                                         LcdWriteCom(0x80+0X46);        
  81.                                         LcdWriteData(disp3[6]);                                
  82.                                 }
  83.                                 LcdWriteCom(0x8c);                                     //顯示設定值  高位
  84.                                 LcdWriteData(disp3[8]);                    
  85.         LcdWriteCom(0x8d);
  86.                                 LcdWriteData(disp3[9]);               
  87.         LcdWriteCom(0x8e);
  88.                                 LcdWriteData(shidu_h/10+'0');        
  89.               LcdWriteCom(0x8f);
  90.                                 LcdWriteData(shidu_h%10+'0');               

  91.                           LcdWriteCom(0xcc);                                 //顯示設定值  低位
  92.                                 LcdWriteData(disp3[11]);        
  93.         LcdWriteCom(0xcd);
  94.                                 LcdWriteData(disp3[12]);               
  95.         LcdWriteCom(0xce);
  96.                                 LcdWriteData(shidu_l/10+'0');        
  97.               LcdWriteCom(0xcf);
  98.                                 LcdWriteData(shidu_l%10+'0');                                                
  99.          
  100.          }
  101. }               

  102. void key_proy()
  103. {
  104.             unsigned char i;
  105.       if(K1==0)                 
  106.                         {
  107.               Delay10ms();        //消除抖動
  108.                                 if(K1==0)
  109.                           mode_flag=~mode_flag;                                            // 設置按鍵模式
  110.                                 while((i<50)&&(K1==0))         //檢測按鍵是否松開
  111.                                 {
  112.                                         Delay10ms();
  113.                                         i++;
  114.                                 }
  115.                                 i=0;                                
  116.                         }         
  117.       if(K2==0)                                                                  // 高低位減
  118.                         {
  119.               Delay10ms();        //消除抖動
  120.                                 if(K2==0)
  121.                                 {
  122.                                         if(shizhi_flag==1)
  123.                                         {
  124.                                                 if(mode_flag==0)
  125.                                                                 shidu_l--;        
  126.                                                 if(mode_flag==1)
  127.                                                                 shidu_h--;        
  128.                                         }
  129.                                                    
  130.                                 }               
  131.                                 while((i<50)&&(K2==0))         //檢測按鍵是否松開
  132.                                 {
  133.                                         Delay10ms();
  134.                                         i++;
  135.                                 }
  136.                                 i=0;                                
  137.                         }         
  138.                   if(K3==0)                                                             // 高低位加
  139.                         {
  140.               Delay10ms();        //消除抖動
  141.                                 if(K3==0)
  142.                                 {
  143.           if(shizhi_flag==1)
  144.                                         {
  145.                                                 if(mode_flag==0)
  146.                                                                 shidu_l++;        
  147.                                                 if(mode_flag==1)
  148.                                                                 shidu_h++;        
  149.                                         }                                       
  150.                                 }               
  151.                                 while((i<50)&&(K3==0))         //檢測按鍵是否松開
  152.                                 {
  153.                                         Delay10ms();
  154.                                         i++;
  155.                                 }
  156.                                 i=0;                                
  157.                         }
  158.                         if(K4==0)                                                           // 設置高位/低位
  159.                         {
  160.               Delay10ms();         
  161.                                 if(K4==0)
  162.                                 {
  163.                          shizhi_flag=~shizhi_flag;
  164.                                 }               
  165.                                 while((i<50)&&(K4==0))         //檢測按鍵是否松開
  166.                                 {
  167.                                         Delay10ms();
  168.                                         i++;
  169.                                 }
  170.                                 i=0;                                
  171.                         }

  172. }

  173. void Timer0() interrupt 1
  174. {
  175.         static unsigned char i,key_time;
  176.         TH0=0XFC;        //給定時器賦初值,定時1ms
  177.         TL0=0X18;
  178.         i++;key_time++;
  179.         if(key_time==10)
  180.         {
  181.           key_time=0;
  182.         //        key_proy();
  183.         }
  184.         if(i==100)                                               //每100ms讀取一次數據
  185.         {
  186.                   i=0;
  187.                   shidu=100-read_ad(0)*0.39 ;              
  188.                         shidu_table[0] = shidu%100/10; //十位
  189.                         shidu_table[1] = shidu%10;//個位
  190.                   if((shidu<=shidu_h)&&(shidu>=shidu_l))              //溫度在 設定值小燈滅
  191.                                 LED=1;
  192.                         else                                                // 小燈亮
  193.                                 LED=0;
  194.                         
  195.         }        
  196. }
復制代碼

所有資料51hei提供下載:

仿真.zip

64.54 KB, 下載次數: 91, 下載積分: 黑幣 -5

程序.zip

39.12 KB, 下載次數: 118, 下載積分: 黑幣 -5

資料.zip

338.78 KB, 下載次數: 81, 下載積分: 黑幣 -5

硬件.zip

15.52 MB, 下載次數: 83, 下載積分: 黑幣 -5

評分

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

查看全部評分

回復

使用道具 舉報

ID:32289 發表于 2020-6-19 20:41 | 顯示全部樓層
不錯、不錯,正想DIY一個。
回復

使用道具 舉報

ID:108573 發表于 2020-6-20 08:32 | 顯示全部樓層
多謝分享,一塊學習
回復

使用道具 舉報

ID:774462 發表于 2020-6-20 10:37 | 顯示全部樓層
多謝分享,一塊學習
回復

使用道具 舉報

ID:477512 發表于 2020-6-21 22:25 | 顯示全部樓層
正需要這個單片機澆水控制器,謝謝分享!
回復

使用道具 舉報

ID:787812 發表于 2020-6-25 11:17 | 顯示全部樓層
這個厲害了 多謝分享
回復

使用道具 舉報

ID:789477 發表于 2020-6-25 14:31 | 顯示全部樓層

正需要這個單片機澆水控制器,謝謝分享!
回復

使用道具 舉報

ID:495287 發表于 2020-6-27 12:20 | 顯示全部樓層
謝謝樓主分享指點,學習下先。
好人一生平安。
回復

使用道具 舉報

ID:305511 發表于 2020-9-21 18:04 | 顯示全部樓層
正需要燒水控制器,謝謝分享!
回復

使用道具 舉報

ID:1129742 發表于 2024-7-28 19:55 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:982617 發表于 2024-8-5 16:27 | 顯示全部樓層
你好 有沒有詳細資料 需要學習一下 拜托
回復

使用道具 舉報

ID:1132037 發表于 2024-9-16 13:38 | 顯示全部樓層
感謝分享,趁著假期學習一下
回復

使用道具 舉報

ID:1134207 發表于 2024-10-21 10:36 | 顯示全部樓層
謝謝樓主分享指點,學習下先。
回復

使用道具 舉報

ID:1139033 發表于 2024-12-9 10:24 | 顯示全部樓層
nice try
回復

使用道具 舉報

ID:613800 發表于 2024-12-17 15:51 | 顯示全部樓層
人才,DIY玩具
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区二区三区视频 | 亚洲精品一二三区 | 亚洲精品久久区二区三区蜜桃臀 | 国产成人免费视频网站高清观看视频 | 亚洲成人在线免费 | 久www| 久久99国产精品久久99果冻传媒 | 精品国产欧美一区二区三区成人 | 风间由美一区二区三区在线观看 | 久久久99国产精品免费 | 中文一区二区视频 | 免费看a | 亚洲精品乱码久久久久久蜜桃91 | 精品国产乱码久久久久久88av | 欧美精品久久 | 国产中文字幕在线 | 日韩在线一区二区三区 | 免费在线观看一区二区 | h在线观看 | 色综合久久天天综合网 | 国产欧美精品一区二区三区 | 2019中文字幕视频 | 日本网站免费观看 | 在线a视频网站 | 天天操人人干 | 中文精品久久 | 精品国产31久久久久久 | 精品国产乱码久久久久久久久 | 亚洲第一天堂无码专区 | 国产色婷婷精品综合在线播放 | 亚洲国产一区在线 | 亚洲激情av| 在线观看中文字幕视频 | 91在线免费视频 | 精品亚洲一区二区三区 | 日本精品久久久久久久 | 欧美精品一区二区三区在线播放 | 国产精品美女久久久 | 欧美a免费 | 91动漫在线观看 | 爱爱免费视频 |