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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3921|回復: 4
收起左側

單片機士壤濕度 自動澆花系統設計資料 1602顯示(仿真+代碼)

[復制鏈接]
ID:331603 發表于 2019-1-17 15:25 | 顯示全部樓層 |閱讀模式
單片機士壤濕度1602  自動澆花系統里面包含論文各種資料
0.jpg 484KI@XBPYP`TM_76S4N7AJ.png

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

單片機源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit ad_cs=P1^3;         //ADC0832的控制位
  5. sbit ad_clk=P1^0;
  6. sbit ad_dat=P1^1;

  7. sbit lcd_rs=P3^0;         //LCD1602的控制位
  8. sbit lcd_e=P3^1;

  9. sbit key1=P1^4;                 //獨立按鍵
  10. sbit key2=P3^2;
  11. sbit key3=P3^3;

  12. sbit relay=P1^6;     //繼電器

  13. bit flag=1;                     //工作模式標志
  14. bit flag_motor=1;         //手動模式下,抽水機開關標志
  15. bit flag_jia=0;
  16. bit flag_jian=0;

  17. uchar Hum_H=60;                 //自動模式下,濕度設定最大值
  18. uchar Hum_L=30;                 //自動模式下,濕度設定最小值

  19. uchar num=0;

  20. /********************延時函數1ms*****************
  21. void delay_ms(uint a)                                       
  22. {
  23.         uint i;
  24.         while(a--)
  25.         for(i=0;i<125;i++);
  26. }
  27. *************************************/


  28. /*******************延時函數50us******************/
  29. void delay_50us(uint a)
  30. {
  31.         uint i;
  32.         while(a--)
  33.         for(i=0;i<19;i++);
  34. }
  35. /*************************************/

  36. /*******************ADC讀取******************/
  37. uchar read_ad(uchar channel)  
  38. {
  39.         uchar i;
  40.         uchar dat1,dat2;
  41.         ad_clk=0;
  42.         ad_cs=0;
  43.         ad_dat=1;
  44.         ad_clk=1;
  45.         ad_clk=0;  //起始信號

  46.         ad_dat=1;
  47.         ad_clk=1;
  48.         ad_clk=0;  //選擇單通道模式

  49.         ad_dat=channel;//0對應通道0,1對應通道1
  50.         ad_clk=1;
  51.         ad_clk=0;

  52.         ad_dat=1;

  53.         for(i=0;i<8;++i)
  54.         {
  55.                  ad_clk=1;
  56.                 ad_clk=0;
  57.                 dat1=dat1<<1;
  58.                 if(ad_dat)
  59.                 dat1|=0x01;        
  60.         
  61.         }
  62.         for(i=0;i<8;i++)
  63.         {
  64.                  dat2=dat2>>1;
  65.                 if(ad_dat)
  66.                 dat2|=0x80;        
  67.                
  68.                 ad_clk=1;
  69.                 ad_clk=0;
  70.         }
  71.         ad_cs=1;
  72.         return (dat1==dat2)?dat1:0;
  73.         
  74. }
  75. /*************************************/

  76. /*******************LCD1602初始化******************/
  77. void write_com(uchar com)        //寫指令
  78. {
  79.         lcd_e=0;
  80.         lcd_rs=0;
  81.         P0=com;
  82.         delay_50us(10);
  83.         lcd_e=1;
  84.         delay_50us(10);
  85.         lcd_e=0;
  86. }

  87. void write_data(uchar dat)  //寫數據
  88. {
  89.         lcd_e=0;
  90.         lcd_rs=1;
  91.         P0=dat;
  92.         delay_50us(10);
  93.         lcd_e=1;
  94.         delay_50us(10);
  95.         lcd_e=0;
  96. }                        

  97. void init_lcd1602()                 //lcd 初始化
  98. {
  99.         delay_50us(300);
  100.         write_com(0x38);
  101.         delay_50us(100);
  102.         write_com(0x38);
  103.         delay_50us(100);
  104.         write_com(0x38);
  105.         write_com(0x38);
  106.         write_com(0x08);
  107.         write_com(0x01);
  108.         write_com(0x06);
  109.         write_com(0x0c);
  110. }

  111. void display_shu(uchar add,uchar dat)          //顯示數字
  112. {
  113.         uchar l,m;
  114.         
  115. //        k=dat/100;
  116.         l=dat%100/10;
  117.         m=dat%10;

  118.         write_com(0x80+add);
  119. //        write_data(k+0x30);
  120.         write_data(l+0x30);
  121.         write_data(m+0x30);
  122. }

  123. void display_string(uchar add,uchar *dat)  //顯示字符串
  124. {
  125.         uchar i;
  126.          write_com(0x80+add);
  127.         while(dat!=0&&(*dat!='\0')&&i<16)
  128.         {
  129.                  write_data(*dat);
  130.                 dat++;
  131.                 i++;
  132.                 if(i==15) i=0;
  133.         }
  134. }
  135. /*****************************************/

  136. /****************主函數*******************/
  137. void main()
  138. {
  139.         EA=1;                                                          //開總中斷
  140.         EX0=1;                                                          //開外部中斷0
  141.         EX1=1;                                                          //開外部中斷1
  142.         IT0=0;                                                          //外部中斷0觸發方式為低電平
  143.         IT1=0;                                                          //外部中斷1觸發方式為低電平
  144.         
  145.         init_lcd1602();        
  146. //        relay=0;
  147.         display_string(0,"Hum:  %");      //實時顯示當前的濕度
  148.         display_string(11,"H:  %");       //顯示設置的濕度最大值

  149.         display_string(0x40,"Mode:");          //顯示工作模式
  150.         display_string(0x40+11,"L:  %");  //顯示設置的濕度最小值


  151.     while(1)
  152.         {        
  153.                 uchar i;
  154.                
  155.                 i=100-read_ad(0)*0.39;
  156.                 display_shu(4,i);
  157.                 display_shu(13,Hum_H);
  158.                 display_shu(0x40+13,Hum_L);
  159.                 if(key1==0)        
  160.                         {
  161.                                 delay_50us(100);
  162.                                 if(key1==0)
  163.                                 {
  164.                                         while(!key1);
  165.                                         num++;
  166.                                         if(num>2) num=0;
  167.                                 }        
  168.                            
  169.                                 switch (num)                                         //選擇工作模式和調整濕度設置最大、最小值
  170.                             {
  171.                                 case 0:flag=~flag;
  172.                                            flag_jia=0;
  173.                                            flag_jian=0;
  174.                                            //write_com(0x80+0x40);
  175.                                        //write_com(0x0f);
  176.                                            break;
  177.                                 case 1://write_com(0x80+9);
  178.                                        //write_com(0x0f);
  179.                                            //delay_50us(1000);
  180.                                            //write_com(0x0c);
  181.                                            flag_jia=1;
  182.                                            flag_jian=0;
  183.                                            break;
  184.                                 case 2://write_com(0x80+0x40+9);
  185.                                        //write_com(0x0f);
  186.                                            //delay_50us(1000);
  187.                                            //write_com(0x0c);
  188.                                            flag_jian=1;
  189.                                            flag_jia=0;
  190.                                            break;        
  191.                            }
  192.                            if(flag==0&&num==1)        
  193.                            {
  194.                                    flag=~flag;
  195.                                    num=0;
  196.                                    flag_jia=0;
  197.                                    flag_jian=0;
  198.                            }               
  199.                     }                  
  200.                 if(flag==0)                              //手動模式
  201.                 {
  202.                         
  203.                          display_string(0x40+5,"MT");
  204. //                        if(flag_motor) relay=1;
  205.                         if(i<=Hum_H) relay=1;          //不能超過濕度最大值
  206.                         else relay=0;
  207.                 }                                
  208.                 else                                                          //自動模式
  209.                 {
  210.                         display_string(0x40+5,"AT");
  211. //                        if(i<(Hum_L+Hum_H)/2)                   //最大和最小值的平均值作為抽水的判斷條件
  212.                         if(i<=Hum_L)
  213.                         {
  214.                                   relay=1;   //繼電器閉合低電平有效
  215.                         }
  216.                         else
  217.                                   relay=0;  //繼電器斷開
  218.                 }
  219.    }        
  220. }
  221. /********************************************/

  222. /***********************外部中斷*********************/
  223. void int0() interrupt 0
  224. {
  225.         delay_50us(20);
  226.         if(key2==0)
  227.         while(!key2);
  228.         flag_motor=~flag_motor;
  229.         if(flag&&flag_jia)
  230.           {
  231.                     //write_com(0x80+9);
  232.               //write_com(0x0f);
  233.                   //delay_50us(1000);
  234.               //write_com(0x0c);
  235.                   //delay_50us(1000);
  236.                   Hum_H++;
  237.                   if(Hum_H>=99) Hum_H=99;
  238.           }
  239.         if(flag&&flag_jian)
  240.           {
  241.                     //write_com(0x80+0x40+9);
  242.                   //write_com(0x0f);
  243.                   //delay_50us(1000);
  244.                   //write_com(0x0c);
  245. ……………………

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

所有資料51hei提供下載:
單片機士壤濕度1602 自動澆花系統.7z (2.95 MB, 下載次數: 180)
回復

使用道具 舉報

ID:318309 發表于 2019-1-24 20:25 | 顯示全部樓層
謝謝樓主分享。正好需要這個東西
回復

使用道具 舉報

ID:472691 發表于 2019-1-25 08:39 來自手機 | 顯示全部樓層
make 以后有錢了看
回復

使用道具 舉報

ID:659901 發表于 2019-12-10 14:47 | 顯示全部樓層
為什么仿真時顯示屏沒亮
回復

使用道具 舉報

ID:661464 發表于 2019-12-11 13:13 | 顯示全部樓層

謝謝樓主分享。正好需要這個東西
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人99久久亚洲综合精品 | 91在线视频网址 | 亚洲欧洲日本国产 | 国产精品久久久久久久久久久新郎 | 午夜亚洲 | 欧美色视频免费 | 在线观看www| 黄色网址在线免费观看 | 99视频在线免费观看 | 色婷婷av一区二区三区软件 | 暖暖成人免费视频 | 精品一区二区三区在线观看国产 | 日韩精品免费播放 | 一区二区三区四区在线 | 亚洲一区二区三区在线 | 国产福利在线 | 亚洲精品一区中文字幕乱码 | 大吊一区二区 | 日日摸夜夜添夜夜添精品视频 | 国产伦精品一区二区三区高清 | 成人三级网址 | 狠狠久久久 | 精品一区二区在线视频 | 国产一区二区三区网站 | 91久久精品日日躁夜夜躁欧美 | 一区二区在线免费播放 | 一区二区三区欧美在线 | 日日操日日舔 | 日韩精品在线看 | 国产亚洲精品美女久久久久久久久久 | 欧美日韩中文字幕在线播放 | 日韩无| 色综合天天天天做夜夜夜夜做 | 国产成人精品久久二区二区91 | 久久九九99 | 久久不卡 | 久久精品久久久久久 | 国产成人综合网 | 91在线精品一区二区 | 欧美激情久久久 | 亚洲欧美综合精品久久成人 |