找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7512|回复: 2
收起左侧

压力传感器水压测试 程序+原理图

[复制链接]
ID:262 发表于 2016-8-12 16:11 | 显示全部楼层 |阅读模式









  1. #include"reg51.h"
  2. #define U16 unsigned int
  3. #define U8  unsigned char
  4. U16 temp=450,temp1,temp2;
  5. U8 nn;
  6. bit flag;
  7. unsigned char dd0[]="  SHANXI Dianzi";
  8. unsigned char dd1[]=" VOIT_H:";
  9. sbit rs=P3^7;
  10. sbit en=P5^4;    //Use really  P5.4,test P2.4
  11. sbit D0=ACC^0;
  12. sbit D1=ACC^1;
  13. sbit D2=ACC^2;
  14. sbit D3=ACC^3;
  15. sbit D4=ACC^4;
  16. sbit D5=ACC^5;
  17. sbit D6=ACC^6;
  18. sbit D7=ACC^7;
  19. void delay(U16 ms)
  20. {
  21. U8 m;
  22. while(ms--)
  23. for(m=0;m<20;m++);
  24. }
  25. void w1602c(U8 dat)
  26. {
  27. ACC=dat;
  28. P11=D0;
  29. P12=D1;
  30. P13=D2;
  31. P14=D3;
  32. P15=D4;
  33. P32=D5;
  34. P33=D6;
  35. P36=D7;
  36. rs=0;
  37. en=0;
  38. delay(2);
  39. en=1;
  40. delay(2);
  41. en=0;

  42. }
  43. void w1602d(U8 dat)
  44. {
  45.   
  46. ACC=dat;
  47. P11=D0;
  48. P12=D1;
  49. P13=D2;
  50. P14=D3;
  51. P15=D4;
  52. P32=D5;
  53. P33=D6;
  54. P36=D7;
  55. rs=1;
  56. en=0;
  57. delay(2);
  58. en=1;
  59. delay(2);
  60. en=0;

  61. }
  62. void init1602()
  63. {
  64. w1602c(0x38);
  65. w1602c(0x06);
  66. w1602c(0x0c);
  67. w1602c(0x01);
  68. }
  69. void InitADC()
  70. {
  71.   
  72.   P1ASF =0x01;  //P1.0 ADC_IN - +
  73.   ADC_RES=0;
  74.   ADC_RESL=0;
  75.   ADC_CONTR =0xe0;//ON_POWER
  76.   delay(2);                 
  77. }
  78. void disp(U16 dd)
  79. {
  80.   char i;
  81.   for(i=0;i<8;i++)  
  82. w1602d(dd1[i]);
  83. w1602d(dd/1000+0x30);
  84. w1602d((dd%1000)/100+0x30);
  85. w1602d(((dd%1000)%100)/10+0x30);
  86. w1602d(dd%10+0x30);
  87. }
  88. unsigned int ADC10()
  89. {  
  90.     InitADC();
  91.     ADC_CONTR |=0x08;
  92.     delay(2);
  93.     while(!(ADC_CONTR & 0x10));
  94.     ADC_CONTR &=~0x10;
  95.     temp=ADC_RES;
  96.     temp=temp<<2;
  97.     temp |=ADC_RESL;
  98.      return temp;
  99. }
  100. void main()
  101. {
  102.     unsigned char k;
  103.     init1602();
  104.     P1M1=0x01;
  105.     P1M0=0x00;
  106.     CLK_DIV &=~0x20;
  107.     while(1)
  108.         {
  109.             temp1=ADC10();
  110.             if(temp1<240)  //for water
  111.                 {
  112.                     delay(30);
  113.                     temp1=ADC10();
  114.                     if(temp1<240) //yes or no
  115.                         flag=1;   //  yes! start up water
  116.                     else          // no!
  117.                         {
  118.                             flag=0;      
  119.                             P30=0;     //close water
  120.                             P31=1;
  121.                          }
  122.                 }
  123.             else         //no water
  124.                 {
  125.                     flag=0;
  126.                     P30=0;     //close water
  127.                     P31=1;
  128.                 }
  129.             while(flag)  //up water
  130.                 {
  131.                     P30=1;      //start machine
  132.                     P31=0;
  133.                     delay(30);
  134.                     temp2=ADC10();
  135.                     temp1=temp2;
  136.                     w1602c(0x80);
  137.                     for(nn=0;nn<15;nn++)
  138.                     w1602d(dd0[nn]);
  139.                     delay(100);
  140.                     w1602c(0xc0);
  141.                     disp(temp1);
  142.                     w1602d(0x20);
  143.                     w1602d(0x4f);
  144.                     w1602d(0x4e);
  145.                     w1602d(0x20);
  146.                     delay(20000);
  147.                     if(temp1>320)  //full? No go on!
  148.                         {
  149.                             P30=0;       //Yes close machine
  150.                             P31=1;
  151.                             flag=0;      //end
  152.                          }
  153.                     delay(10);
  154.                   }
  155.             w1602c(0x80);
  156.             for(k=0;k<15;k++)
  157.             w1602d(dd0[k]);
  158.             delay(20);
  159.             w1602c(0xc0);
  160.             disp(temp1);
  161.             w1602d(0x20);
  162.             w1602d(0x4f);
  163.             w1602d(0x46);
  164.             w1602d(0x46);
  165.             delay(20000);
  166. }
  167. }
复制代码
回复

使用道具 举报

ID:504607 发表于 2019-4-4 09:59 | 显示全部楼层
请问用的是什么压力传感器呀
回复

使用道具 举报

ID:538270 发表于 2019-5-16 16:16 | 显示全部楼层
好,谢谢楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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