⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shuzi.lst

📁 压力传感器mpx4115驱动程序
💻 LST
字号:
C51 COMPILER V8.05a   SHUZI                                                                03/11/2008 21:28:39 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE SHUZI
OBJECT MODULE PLACED IN shuzi.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE shuzi.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          ID:bawgijfd
   3          作者:剑圣
   4          日期:2007/10/16
   5          欢迎加入proteus技术仿真小组:
   6          
   7          http://group.ednchina.com/306/
   8          
   9          小组公告
  10          
  11          如果你没有钱买实验板,那就跟着我来吧,保证实现你的梦想,学单片机将是一件轻松好玩的事,出发吧!!!
  12          
  13          prtoeus仿真QQ群:
  14          
  15          29946422
  16          
  17          欢迎你的加入。
  18          
  19          所有的实例都是精挑细选的,本人亲手调试通过,并且附带完整的源程序代码和proteus仿真图。
  20          
  21          
  22          
  23          */
  24          #include <reg51.H> 
  25          #include "intrins.h"
  26          
  27          
  28          #define uint unsigned int
  29          #define uchar unsigned char
  30          
  31          //ADC0832的引脚
  32          sbit ADCS =P2^0;  //ADC0832 chip seclect
  33          sbit ADDI =P3^7;  //ADC0832 k in
  34          sbit ADDO =P3^7;  //ADC0832 k out
  35          sbit ADCLK =P3^6;  //ADC0832 clock signal
  36          
  37          unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};  //位扫描
  38          unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};  //共阳数码管字段码
  39          unsigned char dispbuf[4];
  40          uint temp;
  41          uchar getdata; //获取ADC转换回来的值
  42          
  43          
  44          void delay_1ms(void)  //12mhz delay 1.01ms
  45          {
  46   1         unsigned char x,y;   
  47   1         x=3;
  48   1         while(x--) 
  49   1        {
  50   2             y=40;
  51   2             while(y--);
  52   2          }
  53   1      }
  54          void display(void)  //数码管显示函数
  55          {
C51 COMPILER V8.05a   SHUZI                                                                03/11/2008 21:28:39 PAGE 2   

  56   1        char k;
  57   1        for(k=0;k<4;k++)
  58   1        {
  59   2      
  60   2        P1 = dispbitcode[k];
  61   2        P0 = dispcode[dispbuf[k]];
  62   2        if(k==1)        //加上数码管的dp小数点
  63   2              P0&=0x7f;
  64   2        delay_1ms();    
  65   2        }
  66   1      }
  67          
  68          /************
  69          读ADC0832函数
  70          ************/
  71          
  72          //采集并返回
  73          unsigned int Adc0832(unsigned char channel)     //AD转换,返回结果
  74          {
  75   1          uchar i=0;
  76   1          uchar j;
  77   1          uint dat=0;
  78   1          uchar ndat=0;
  79   1      
  80   1          if(channel==0)channel=2;
  81   1          if(channel==1)channel=3;
  82   1          ADDI=1;
  83   1          _nop_();
  84   1          _nop_();
  85   1          ADCS=0;//拉低CS端
  86   1          _nop_();
  87   1          _nop_();
  88   1          ADCLK=1;//拉高CLK端
  89   1          _nop_();
  90   1          _nop_();
  91   1          ADCLK=0;//拉低CLK端,形成下降沿1
  92   1          _nop_();
  93   1          _nop_();
  94   1          ADCLK=1;//拉高CLK端
  95   1          ADDI=channel&0x1;
  96   1          _nop_();
  97   1          _nop_();
  98   1          ADCLK=0;//拉低CLK端,形成下降沿2
  99   1          _nop_();
 100   1          _nop_();
 101   1          ADCLK=1;//拉高CLK端
 102   1          ADDI=(channel>>1)&0x1;
 103   1          _nop_();
 104   1          _nop_();
 105   1          ADCLK=0;//拉低CLK端,形成下降沿3
 106   1          ADDI=1;//控制命令结束 
 107   1          _nop_();
 108   1          _nop_();
 109   1          dat=0;
 110   1          for(i=0;i<8;i++)
 111   1          {
 112   2              dat|=ADDO;//收数据
 113   2              ADCLK=1;
 114   2              _nop_();
 115   2              _nop_();
 116   2              ADCLK=0;//形成一次时钟脉冲
 117   2              _nop_();
C51 COMPILER V8.05a   SHUZI                                                                03/11/2008 21:28:39 PAGE 3   

 118   2              _nop_();
 119   2              dat<<=1;
 120   2              if(i==7)dat|=ADDO;
 121   2          }  
 122   1          for(i=0;i<8;i++)
 123   1          {
 124   2              j=0;
 125   2              j=j|ADDO;//收数据
 126   2              ADCLK=1;
 127   2              _nop_();
 128   2              _nop_();
 129   2              ADCLK=0;//形成一次时钟脉冲
 130   2              _nop_();
 131   2              _nop_();
 132   2              j=j<<7;
 133   2              ndat=ndat|j;
 134   2              if(i<7)ndat>>=1;
 135   2          }
 136   1          ADCS=1;//拉低CS端
 137   1          ADCLK=0;//拉低CLK端
 138   1          ADDO=1;//拉高数据端,回到初始状态
 139   1          dat<<=8;
 140   1          dat|=ndat;
 141   1          return(dat);            //return ad k
 142   1      }
 143          
 144          
 145          void main(void) 
 146          {  
 147   1        while(1)
 148   1        {       unsigned int temp;
 149   2            float  press;                       
 150   2                getdata=Adc0832(0);
 151   2                if(14<getdata<243)                                   //当压力值介于15kpa到115kpa之间时,遵循线性变换
 152   2                      {                           
 153   3                          int vary=getdata;                                           //y=(115-15)/(243-13)*X+15kpa                   
 154   3                              press=((10.0/23.0)*vary)+9.3;                   //测试时补偿值为10
 155   3                                                                                                                        
 156   3                              temp=(int)(press*10);                   //放大10倍,便于后面的计算
 157   3                                                                                      
 158   3                                                                                                              
 159   3                              dispbuf[3]=temp/1000;                           //取压力值百位
 160   3                              dispbuf[2]=(temp%1000)/100;                     //取压力值十位
 161   3                              dispbuf[1]=((temp%1000)%100)/10;                //取压力值个位
 162   3                              dispbuf[0]=((temp%1000)%100)%10;                        //取压力值十分位
 163   3                              display();
 164   3                         }        
 165   2        
 166   2        }
 167   1      } 
 168          
 169          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    384    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
C51 COMPILER V8.05a   SHUZI                                                                03/11/2008 21:28:39 PAGE 4   

END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -