找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1412|回复: 0
打印 上一主题 下一主题
收起左侧

单片机土壤湿度检测程序

[复制链接]
跳转到指定楼层
楼主
ID:645091 发表于 2021-1-1 23:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define  ad1_7  P1
  5. uchar hour,min,sec,shangxian,xiaxian,sett,count,cent0=0,cent1=0;
  6. uint mv;

  7. uchar code table1[]={"  H:  :    H:  %"};
  8. uchar code table2[]={"MV:  %     L:  %"};
  9. sbit lcden=P2^5;
  10. sbit lcdrw=P2^6;
  11. sbit lcdrs=P2^7;
  12. sbit key1=P2^0;
  13. sbit scl=P2^1;
  14. sbit key3=P2^2;
  15. sbit key4=P2^3;
  16. sbit inc=P2^2;
  17. sbit dec=P2^3;
  18. sbit led1=P2^4;
  19. sbit sda=P3^2;
  20. sbit buzzer=P3^3;
  21. sbit led=P3^4;
  22. sbit ADCS=P3^5;
  23. sbit ADRD=P3^6;
  24. sbit ADWR=P3^7;
  25. bit flag,flag0=0;
  26. void delay()
  27. {;;}
  28. void delay1(uint xs)//定时1ms
  29. {
  30.         uint i,j;
  31.         for(j=xs;j>0;j--)
  32.                 for(i=110;i>0;i--);
  33. }
  34. void start_adc0804(void)
  35. {      
  36.                  ADCS=0;                        
  37.                  ADWR=0;
  38.                 delay1(1);
  39.                  ADWR=1;
  40.                 ADCS=1;        
  41.                 delay1(1);
  42. }

  43. read_ad()
  44. {      
  45.          uchar ad_data;         
  46.          ad1_7=0xff;         
  47.          ADCS=0;                  
  48.          ADRD=0;                    
  49.          delay1(1);         
  50.          ad_data=ad1_7;         
  51.          ADRD=1;
  52.          ADCS=1;           
  53.          
  54.          return(ad_data);
  55. }
  56. void start()//开始
  57. {
  58.         sda=1;
  59.         delay();
  60.         scl=1;
  61.         delay();
  62.         sda=0;
  63.         delay();
  64. }
  65. void stop()        //结束
  66. {
  67.         sda=0;
  68.         delay();
  69.         scl=1;
  70.         delay();
  71.         sda=1;
  72.         delay();
  73. }
  74. void respons()//应答
  75. {
  76.         uchar i;
  77.         scl=1;
  78.         delay();
  79.         while((sda==1)&&(i<250))
  80.         i++;
  81.         scl=0;
  82.         delay();
  83. }
  84. void init()
  85. {
  86.         scl=1;
  87.         sda=1;
  88. }
  89. void write_byte(uchar date)
  90. {
  91.         uchar i,temp;
  92.         temp=date;
  93.         scl=0;
  94.         delay();
  95.         for(i=0;i<8;i++)
  96.         {
  97.                 temp=temp<<1;
  98.                 sda=CY;
  99.                 delay();
  100.                 scl=1;
  101.                 delay();
  102.                 scl=0;
  103.                 delay();
  104.         }
  105.         sda=1;
  106.         delay();
  107. }
  108. uchar read_byte()
  109. {
  110.         uchar i,j,k;
  111.         scl=0;
  112.         delay();
  113.         sda=1;
  114.         delay();
  115.         for(i=0;i<8;i++)
  116.         {
  117.                 scl=1;
  118.                 delay();
  119.                 if(sda)
  120.                         j=1;
  121.                 else
  122.                         j=0;
  123.                 k=((k<<1)|j);
  124.                 delay();
  125.                 scl=0;
  126.                 delay();
  127.         }        
  128.         return k;
  129. }
  130. void write_add(uchar add,uchar date)
  131. {
  132.         start();
  133.         write_byte(0xa0);
  134.         respons();
  135.         write_byte(add);
  136.         respons();
  137.         write_byte(date);
  138.         respons();
  139.         stop();
  140. }
  141. uchar read_add(uchar add)
  142. {
  143.         uchar date;
  144.         start();
  145.         write_byte(0xa0);
  146.         respons();
  147.         write_byte(add);
  148.         respons();
  149.         start();
  150.         write_byte(0xa1);
  151.         respons();
  152.         date=read_byte();
  153.         stop();
  154.         return date;        
  155. }
  156. void write_comm(uchar comm)
  157. {
  158.         lcdrs=0;
  159.         P0=comm;
  160.         delay1(5);//5ms
  161.         lcden=1;
  162.         delay1(5);//5ms
  163.         lcden=0;
  164. }
  165. void write_data(uchar dat)
  166. {
  167.         lcdrs=1;
  168.         P0=dat;
  169.         delay1(5);//5ms
  170.         lcden=1;
  171.         delay1(5);//5ms
  172.         lcden=0;
  173. }                        
  174. void init1()
  175. {
  176.         lcdrw=0;
  177.         lcden=0;
  178.         write_comm(0x38);
  179.            write_comm(0x0c);
  180.         write_comm(0x06);
  181.         write_comm(0x01);
  182.         write_comm(0x80);
  183. }
  184. void set_scan()
  185. {
  186.         if(sett)
  187.         {
  188.                 led1=0;
  189.                 TR0=0;
  190.         }
  191.         else
  192.         {
  193.                 led1=1;
  194.                 TR0=1;
  195.         }
  196.         if(!key1)
  197.         {
  198.                 delay1(5);
  199.                 if(!key1)
  200.                 {
  201.                         sett++;
  202.                         if(sett>5)
  203.                         sett=0;        
  204.                 }
  205.                 while(!key1);
  206.                 delay1(5);
  207.                 while(!key1);
  208.          }
  209.         if(sett==1)
  210.         {
  211.                 if(!key3)
  212.                 {
  213.                         delay1(5);
  214.                         if(!key3)
  215.                         {
  216.                                 hour++;
  217.                                 if(hour>99)
  218.                                 hour=0;
  219.                         }
  220.                         while(!key3);
  221.                         delay1(5);
  222.                         while(!key3);
  223.                 }
  224.                 if(!key4)
  225.                 {
  226.                         delay1(5);
  227.                         if(!key4)
  228.                         {
  229.                                 if(hour==0)
  230.                                 hour=99;
  231.                                 else
  232.                                 hour--;
  233.                         }
  234.                         while(!key4);
  235.                         delay1(5);
  236.                         while(!key4);
  237.                 }
  238.                 write_add(20,hour);
  239.                 write_comm(0x80);         
  240.                 write_data(0x30+hour/10);
  241.                 write_data(0x30+hour%10);
  242.                    write_comm(0x80+1);         
  243.                 write_comm(0x0f);        
  244.         }

  245.            if(sett==2)
  246.         {
  247.                 if(!key3)
  248.                 {
  249.                         delay1(5);
  250.                         if(!key3)
  251.                         {
  252.                                 min++;
  253.                                 if(min==60)
  254.                                 min=0;
  255.                         }
  256.                         while(!key3);
  257.                         delay1(5);
  258.                         while(!key3);
  259.                 }
  260.                 if(!key4)
  261.                 {
  262.                         delay1(5);
  263.                         if(!key4)
  264.                         {
  265.                                 if(min==0)
  266.                                 min=59;
  267.                                 else
  268.                                 min--;
  269.                         }
  270.                         while(!key4);
  271.                         delay1(5);
  272.                         while(!key4);
  273.                 }
  274.                 write_add(21,min);
  275.                 write_comm(0x80+4);
  276.                 write_data(0x30+(min/10));
  277.                 write_data(0x30+(min%10));
  278.                 write_comm(0x80+5);         
  279.                 write_comm(0x0f);
  280.         }
  281.         if(sett==3)
  282.         {
  283.                 if(!key3)
  284.                 {
  285.                         delay1(5);
  286.                         if(!key3)
  287.                         {
  288.                                 sec++;
  289.                                 if(sec==60)
  290.                                 sec=0;
  291.                         }
  292.                         while(!key3);
  293.                         delay1(5);
  294.                         while(!key3);
  295.                 }
  296.                 if(!key4)
  297.                 {
  298.                         delay1(5);
  299.                         if(!key4)
  300.                         {
  301.                                 if(sec==0)
  302.                                 sec=59;
  303.                                 else
  304.                                 sec--;
  305.                         }
  306.                         while(!key4);
  307.                         delay1(5);
  308.                         while(!key4);
  309.                 }
  310.                 write_add(22,sec);
  311.                 write_comm(0x80+7);
  312.                 write_data(0x30+(sec/10));
  313.                 write_data(0x30+(sec%10));        
  314.                 write_comm(0x80+8);         
  315.                 write_comm(0x0f);
  316.         }
  317.         if(sett==4)
  318.         {
  319.                 if(!key3)
  320.                 {
  321.                         delay1(5);
  322.                         if(!key3)
  323.                         {
  324.                                 shangxian++;
  325.                                 if(shangxian==100)
  326.                                 shangxian=0;
  327.                         }
  328.                         while(!key3);
  329.                         delay1(5);
  330.                         while(!key3);
  331.                 }
  332.                 if(!key4)
  333.                 {
  334.                         delay1(5);
  335.                         if(!key4)
  336.                         {        
  337.                                 if(shangxian==0)
  338.                                 shangxian=99;
  339.                                 else
  340.                                 shangxian--;        
  341.                         }
  342.                         while(!key4);
  343.                         delay1(5);
  344.                         while(!key4);
  345.                 }
  346.                 write_add(23,shangxian);
  347.                 write_comm(0x80+13);
  348.                 write_data(0x30+(shangxian/10));
  349.                 write_data(0x30+(shangxian%10));        
  350.                 write_comm(0x80+14);         
  351.                 write_comm(0x0f);
  352.         }
  353.         if(sett==5)
  354.         {
  355.                 if(!key3)
  356.                 {
  357.                         delay1(5);
  358.                         if(!key3)
  359.                         {
  360.                                 xiaxian++;
  361.                                 if(xiaxian==100)
  362.                                 xiaxian=0;
  363.                         }
  364.                         while(!key3);
  365.                         delay1(5);
  366.                         while(!key3);
  367.                 }
  368.                 if(!key4)
  369.                 {
  370.                         delay1(5);
  371.                         if(!key4)
  372.                         {        
  373.                                 if(xiaxian==0)
  374.                                 xiaxian=99;
  375.                                 else
  376.                                 xiaxian--;                                
  377.                         }
  378.                         while(!key4);
  379.                         delay1(5);
  380.                         while(!key4);
  381.                 }
  382.                 write_add(24,xiaxian);
  383.                 write_comm(0x80+0x40+13);
  384.                 write_data(0x30+(xiaxian/10));
  385.                 write_data(0x30+(xiaxian%10));        
  386.                 write_comm(0x80+0x40+14);         
  387.                 write_comm(0x0f);
  388.         }
  389. }

  390. void init2()
  391. {
  392.         uchar i;
  393.          for(i=0;i<16;i++)
  394.         write_data(table1[i]);
  395.         write_comm(0x80+0x40);
  396.         for(i=0;i<16;i++)
  397.         write_data(table2[i]);

  398.         hour=read_add(20);
  399.         write_comm(0x80);
  400.         write_data(0x30+(hour/10));
  401.         write_data(0x30+(hour%10));
  402.         min=read_add(21);
  403.         write_comm(0x80+4);
  404.         write_data(0x30+(min/10));
  405.         write_data(0x30+(min%10));
  406.         sec=read_add(22);
  407.         write_comm(0x80+7);
  408.         write_data(0x30+(sec/10));
  409.         write_data(0x30+(sec%10));
  410.         shangxian=read_add(23);
  411.         write_comm(0x80+13);
  412.         write_data(0x30+(shangxian/10));
  413.         write_data(0x30+(shangxian%10));
  414.            xiaxian=read_add(24);
  415.         write_comm(0x80+0x40+13);
  416.         write_data(0x30+(xiaxian/10));
  417.         write_data(0x30+(xiaxian%10));
  418.         mv=read_add(25);
  419.           write_comm(0x80+0x40+7);
  420.         write_data(0x30+(mv/10));
  421.         write_data(0x30+(mv%10));        
  422.         write_data(table1[15]);        
  423. }
  424. void daojishi()
  425. {
  426.         write_comm(0x80);
  427.         write_data(0x30+(hour/10));
  428.         write_data(0x30+(hour%10));
  429.         write_comm(0x80+4);
  430.         write_data(0x30+(min/10));
  431.         write_data(0x30+(min%10));
  432.         write_comm(0x80+7);
  433.         write_data(0x30+(sec/10));
  434.         write_data(0x30+(sec%10));        
  435. }
  436. void main()
  437. {
  438.         uint temp;
  439.         //buzzer=0;
  440.         init();
  441.          init1();
  442.         init2();
  443.         TMOD=0x01;
  444.         TH0=(65536-50000)/256;        
  445.         TL0=(65536-50000)/256;
  446.         EA=1;
  447.         ET0=1;
  448.         TR0=1;
  449.         /*for(i=0;i<16;i++)
  450.         {
  451.                 write_comm(0x18);
  452.                 delay(200);
  453.         }*/
  454.         sett=0;
  455.         while(1)
  456.         {        
  457.                    if(!sett)
  458.                 {
  459.                         
  460.                         if(flag)
  461.                         while(1);
  462.                            daojishi();
  463.                         set_scan();
  464.                         start_adc0804();
  465.                         temp= read_ad();
  466.                         mv=temp*(1.0/255)*100;
  467.                         if(mv>=100)
  468.                         mv=0;
  469.                         else
  470.                         mv=100-mv;


  471.                         if((mv>=shangxian)||(mv<=xiaxian))
  472.                         {
  473.                                 flag0=1;
  474.                                 led=0;
  475.                         }
  476.                         else
  477.                         {
  478.                                  flag0=0;
  479.                                 led=1;
  480.                         }
  481.                         if(cent0>=12)
  482.                         {
  483.                                 cent0=0;
  484.                                 write_add(25,mv);
  485.                                 write_comm(0x80+0x40+3);
  486.                                 write_data(0x30+(mv/10));
  487.                                 write_data(0x30+(mv%10));        
  488.                                 write_comm(0x0c);
  489.                         }        
  490.                 }
  491.                 else if(sett)
  492.                 {
  493.                         set_scan();
  494.                         cent1=0;
  495.                          buzzer=1;
  496.                 }
  497.         }
  498. }
  499. void timer0() interrupt 1
  500. {
  501.         TH0=(65536-50000)/256;        
  502.         TL0=(65536-50000)/256;
  503.         count++;
  504.         cent0++;
  505.         
  506.         if(count==20&&!sett)
  507.         {
  508.                 count=0;
  509.                 if(sec==0)
  510.                 {
  511.                         if(min==0)
  512.                         {
  513.                                 if(hour==0)
  514.                                 {
  515.                                         flag=1;
  516.                                         TR0=0;
  517.                                 }
  518.                                 else
  519.                                 {
  520.                                         hour--;
  521.                                         min=59;
  522.                                 }
  523.                         }
  524.                         else
  525.                         {
  526.                                 min--;
  527.                                 sec=59;
  528.                         }
  529.                 }
  530.                 else
  531.                 sec--;
  532.         }
  533.         if(flag0==1)
  534.         {
  535.                 cent1++;
  536.                 if(cent1<6)
  537.                 buzzer=1;
  538.                 else if(cent1<12)
  539.                 buzzer=0;
  540.             else
  541.                 cent1=0;
  542.         }
  543.          else
  544.          {
  545.                  cent1=0;
  546.                  buzzer=1;
  547.          }
  548.         
  549.                
  550. }
复制代码

原理图.rar

174.7 KB, 下载次数: 17, 下载积分: 黑币 -5

程序.zip

47.63 KB, 下载次数: 12, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表