标题: 基于单片机的压力监测装置设计 protues仿真及源程序 [打印本页]

作者: 51黑ff    时间: 2016-9-12 12:42
标题: 基于单片机的压力监测装置设计 protues仿真及源程序
protues中没有电阻应变片,就自己给了2mv的直流电压作为信号.

单片机的压力监测装置设计的仿真工程文件及完整的程序请下载:
仿真图和程序.zip (103.36 KB, 下载次数: 82)


源程序:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit rs=P2^0;  
  6. sbit rd=P2^1;
  7. sbit lcden=P2^2;
  8. sbit OE=P2^6;
  9. sbit EOC=P2^5;
  10. sbit START=P2^4;
  11. sbit CLK=P2^3;       

  12. void delay(uint ms);
  13. void write_com(uchar com);
  14. void write_date(uchar date);
  15. void ADC_read();
  16. void display();
  17. uchar Tab[]={"volt:0.00      "};
  18. void init();
  19. void key_scan();
  20. uint volt;
  21. int key_down;
  22. uchar code table[]={ 7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};
  23. uchar code table1[]={7,8,9,0x2f-0x30,
  24.                      4,5,6,0x58-0x30,
  25.                      1,2,3,0x2d-0x30,
  26.                                      0x01-0x30,0,0x3d-0x30,0x2b-0x30};

  27. void main()
  28. {  init();
  29.    
  30.    while(1)
  31.    {
  32.       ADC_read();
  33.           display();
  34.    }
  35. }
  36. void delay(uint ms)
  37. { uchar j;
  38.   while(ms--)
  39.   {
  40.     for(j=0;j<120;j++);
  41.   }
  42. }
  43. void ADC_read()
  44. {
  45.   START=0;
  46.   START=1;
  47.   START=0;
  48.   while(EOC==0);
  49.   OE=1;
  50.   //P1=0xff;
  51.   volt=P3;
  52.   delay(4);
  53.   OE=0;
  54.   volt=volt*1.96;
  55. }                 
  56. void write_com(uchar com)
  57. {
  58.         rs=0;
  59.         rd=0;
  60.         lcden=0;
  61.         P0=com;
  62.         delay(5);
  63.         lcden=1;
  64.         delay(5);
  65.         lcden=0;       
  66. }
  67. void write_date(uchar date)
  68. {
  69.         rs=1;
  70.         rd=0;
  71.         lcden=0;
  72.         P0=date;
  73.         delay(5);
  74.         lcden=1;
  75.         delay(5);
  76.         lcden=0;       
  77. }

  78. void init()
  79. {
  80.         uchar num;
  81.     TMOD=0x02;
  82.     TH0=256-255;
  83.     TL0=256-255;
  84.     TR0=1;
  85.     ET0=1;
  86.     EA=1;
  87.         lcden=0;
  88.         write_com(0x38);
  89.         write_com(0x0c);
  90.         write_com(0x06);
  91.         write_com(0x01);
  92.         write_com(0x80);
  93.         delay(5);
  94.         write_com(0x80);
  95.         for(num=0;num<15;num++)
  96.                 {
  97.                         write_date(Tab[num]);
  98.                         delay(5);
  99.                 }   
  100. }
  101. void display(){
  102.    //uchar a,b,c,d;
  103.    int num;
  104.    Tab[5]=volt/100+0x30;
  105.    Tab[7]=volt%100/10+0x30;
  106.    Tab[8]=volt%10+0x30;
  107.    ////Tab[5]=0x38;
  108.    //Tab[6]=0x38;
  109.    ///Tab[8]=0x38;
  110.    //Tab[9]=0x38;
  111.    write_com(0x80);
  112.    for(num=0;num<15;num++)
  113.                 {
  114.                         write_date(Tab[num]);
  115.                         delay(5);
  116.                 }   

  117. }
  118. void t0()interrupt 1
  119. {
  120. CLK=~CLK;
  121. }
  122. void key_scan()
  123. {
  124.     uchar hang,lie,key,buff;
  125.         int i;
  126.     P2=0xf0;
  127.     if((P2&0xf0)!=0xf0)
  128.       {
  129.              key_down=1;
  130.              delay(5);
  131.          if((P2&0xf0)!=0xf0)
  132.            {
  133.                     hang=0xfe;
  134.             while((hang&0x10)!=0)
  135.               {
  136.                              P2=hang;
  137.                  if((P2&0xf0)!=0xf0)
  138.                 {
  139.                                  lie=P2|0x0f;
  140.                  buff=((~hang)+(~lie));       
  141.                   switch(buff)
  142.                     { case 0x11: key=0;break;
  143.                       case 0x21: key=1;break;
  144.                       case 0x41: key=2;break;
  145.                       case 0x81: key=3;break;
  146.                       case 0x12: key=4;break;
  147.                       case 0x22: key=5;break;
  148.                       case 0x42: key=6;break;
  149.                       case 0x82: key=7;break;
  150.                       case 0x14: key=8;break;
  151.                       case 0x24: key=9;break;
  152.                       case 0x44: key=10;break;
  153.                       case 0x84: key=11;break;
  154.                       case 0x18: key=12;break;
  155.                       case 0x28: key=13;break;
  156.                       case 0x48: key=14;break;
  157.                       case 0x88: key=15;break;
  158.                      }
  159.                    }
  160.                 else hang=(hang<<1)|0x01;
  161.                }
  162.                 }
  163.         }
  164. }

复制代码


作者: admin    时间: 2016-9-12 12:54
51黑论坛有你更精彩!!!

作者: zhangheng_94    时间: 2018-3-7 14:43
51黑论坛有你更精彩!!!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1