找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3705|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機土壤濕度監(jiān)控程序 DCS

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:222477 發(fā)表于 2019-4-15 23:40 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
以51單片機為內(nèi)核,土壤濕度傳感器檢測濕度,電機驅(qū)動模塊驅(qū)動水泵,1602顯示,矩陣鍵盤控制電機轉(zhuǎn)速



單片機源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. unsigned char i=100;
  5. unsigned char j,k,temp,key;

  6. sbit lcden=P3^4;
  7. sbit rs=P3^2;
  8. sbit rw=P3^3;        
  9. sbit D1=P3^5;
  10. sbit TR=P3^6;
  11. uchar table1[]=" soil humidity  ";
  12. uchar table2[]="    ok";
  13. uchar table3[]="Not ok";
  14. void delay(uint x)
  15. {
  16.         uint a,b;
  17.         for(a=x;a>0;a--)
  18.                 for(b=10;b>0;b--);
  19. }

  20. void write_com(uchar com)
  21. {
  22.         P1=com;
  23.         rs=0;
  24.         lcden=0;
  25.         delay(10);
  26.         lcden=1;
  27.         delay(10);
  28.         lcden=0;
  29.         
  30. }

  31. void write_date(uchar date)
  32. {
  33.         P1=date;
  34.         rs=1;
  35.         lcden=0;
  36.         delay(10);
  37.         lcden=1;
  38.         delay(10);
  39.         lcden=0;
  40.         
  41. }

  42. void init()
  43. {
  44.     rw=0;
  45.         write_com(0x38);   //顯示模式設(shè)置:16×2顯示,5×7點陣,8位數(shù)據(jù)接口
  46.         delay(20);
  47.         write_com(0x0f);   //顯示模式設(shè)置
  48.         delay(20);
  49.         write_com(0x06);   //顯示模式設(shè)置:光標右移,字符不移
  50.         delay(20);
  51.         write_com(0x01);   //清屏幕指令,將以前的顯示內(nèi)容清除
  52.         delay(20);        
  53. }

  54. unsigned char key_scan()
  55. {
  56.         P2=0xfe;
  57.     temp=P2;
  58.     temp=temp&0xf0;
  59.     if(temp!=0xf0)
  60.     {
  61.       delay(5);
  62.       if(temp!=0xf0)
  63.       {
  64.         temp=P2;
  65.         switch(temp)
  66.         {
  67.           case 0xee:
  68.                key=0;
  69.                break;

  70.           case 0xde:
  71.                key=15;
  72.                break;

  73.           case 0xbe:
  74.                key=14;
  75.                break;

  76.           case 0x7e:
  77.                key=13;
  78.                break;
  79.          }
  80.          while(temp!=0xf0)
  81.          {
  82.            temp=P2;
  83.            temp=temp&0xf0;
  84.          }
  85.                  return key;
  86.       }
  87.     }
  88.     P2=0xfd;
  89.     temp=P2;
  90.     temp=temp&0xf0;
  91.     if(temp!=0xf0)
  92.     {
  93.       delay(5);
  94.       if(temp!=0xf0)
  95.       {
  96.         temp=P2;
  97.         switch(temp)
  98.         {
  99.           case 0xed:
  100.                key=12;
  101.                break;

  102.           case 0xdd:
  103.                key=9;
  104.                break;

  105.           case 0xbd:
  106.                key=6;
  107.                break;

  108.           case 0x7d:
  109.                key=3;
  110.                break;
  111.          }
  112.          while(temp!=0xf0)
  113.          {
  114.            temp=P2;
  115.            temp=temp&0xf0;
  116.          }
  117.                  return key;
  118.       }
  119.       }
  120.     P2=0xfb;
  121.     temp=P2;
  122.     temp=temp&0xf0;
  123.     if(temp!=0xf0)
  124.     {
  125.       delay(5);
  126.       if(temp!=0xf0)
  127.       {
  128.         temp=P2;
  129.         switch(temp)
  130.         {
  131.           case 0xeb:
  132.                key=0;
  133.                break;

  134.           case 0xdb:
  135.                key=8;
  136.                break;

  137.           case 0xbb:
  138.                key=5;
  139.                break;

  140.           case 0x7b:
  141.                key=2;
  142.                break;
  143.          }
  144.          while(temp!=0xf0)
  145.          {
  146.            temp=P2;
  147.            temp=temp&0xf0;
  148.          }
  149.                  return key;
  150.       }
  151.       }
  152.     P2=0xf7;
  153.     temp=P2;
  154.     temp=temp&0xf0;
  155.     if(temp!=0xf0)
  156.     {
  157.       delay(5);
  158.       if(temp!=0xf0)
  159.       {
  160.         temp=P2;
  161.         switch(temp)
  162.         {
  163.           case 0xe7:
  164.                key=11;
  165.                break;

  166.           case 0xd7:
  167.                key=7;
  168.                break;

  169.           case 0xb7:
  170.                key=4;
  171.                break;

  172.           case 0x77:
  173.                key=1;
  174.                break;
  175.          }
  176.          while(temp!=0xf0)
  177.          {
  178.            temp=P2;
  179.            temp=temp&0xf0;
  180.          }
  181.                  return key;
  182.       }
  183.     }
  184.         return 16;
  185. }

  186. void main()
  187. {
  188.         uchar a;
  189.         uchar b;
  190.         uchar c;
  191.         D1=0;
  192.         init();
  193.         write_com(0x80);         //將第一個字符寫在向右偏移17個字符處,為后面的由右向左劃入做準備。
  194.         delay(20);
  195.         for(a=0;a<16;a++)
  196.         {
  197.         write_date(table1[a]);
  198.         delay(20);               
  199.         }
  200.         while(1)
  201.         {
  202.                 b=key_scan();
  203.                 if(b!=16)
  204.                 {
  205.                   c=b;
  206.                   write_com(0xc0|0x07);
  207.                  write_date('0'+c);
  208.                   write_date('D');
  209.                 }
  210.                 if(TR==1)
  211.                 {
  212.                         D1=0;
  213.                         write_com(0xc0);
  214.                         delay(1);
  215.                         for(a=0;a<6;a++)
  216.                         {
  217.                         write_date(table2[a]);
  218.                         delay(1);               
  219.                         }
  220.                 }
  221.                 else
  222.                 {
  223.                         D1=1;
  224.                         delay(c*20);
  225.                         D1=0;
  226.                         write_com(0xc0);
  227.                         for(a=0;a<6;a++)
  228.                         {
  229.                         write_date(table3[a]);               
  230.                         }
  231.                         
  232.                 }
  233.                         
  234.         }
  235. }
復(fù)制代碼

所有資料51hei提供下載:
源代碼.rar (24.19 KB, 下載次數(shù): 26)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2019-4-17 01:23 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表