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

📄 lcd+adc0832.lst

📁 压力传感器mpx4115驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 175          
 176          /****显示指定坐标的一个字符子函数****/
 177          
 178          void DisplayOneChar(uchar X,uchar Y,uchar DData)
 179          
C51 COMPILER V8.05a   LCD_ADC0832                                                          03/11/2008 22:20:46 PAGE 4   

 180          {
 181   1          Y&=1;
 182   1          X&=15;
 183   1          if(Y)X|=0x40;               //若y为1(显示第二行),地址码+0X40
 184   1          X|=0x80;                    //指令码为地址码+0X80
 185   1          WriteCommandLCM(X,0);
 186   1          WriteDataLCM(DData);
 187   1      }
 188          
 189          /*******显示指定坐标的一串字符子函数*****/
 190           
 191          void DisplayListChar(uchar X,uchar Y,uchar code *DData)
 192          {
 193   1          uchar ListLength=0;
 194   1          Y&=0x01;
 195   1          X&=0x0f;
 196   1          while(X<16)
 197   1          {
 198   2              DisplayOneChar(X,Y,DData[ListLength]);
 199   2              ListLength++;
 200   2              X++;
 201   2          }
 202   1      }
 203          
 204           /*****************系统显示子函数*****************/
 205          
 206          void display(void)
 207          {
 208   1              WriteCommandLCM(0x0c,1);                                //显示屏打开,光标不显示,不闪烁,检测忙信号    
 209   1              DisplayListChar(0,0,str0);      
 210   1              DisplayListChar(0,1,str1);      
 211   1      
 212   1      
 213   1              DisplayOneChar(7,0,press_bai+0x30);
 214   1              DisplayOneChar(8,0,press_shi+0x30);
 215   1              DisplayOneChar(9,0,press_ge +0x30);
 216   1          DisplayOneChar(11,0,press_dot+0x30);
 217   1              delay(1000);                               //稳定显示
 218   1      }
 219          /************
 220          读ADC0832函数
 221          ************/
 222          
 223          //采集并返回
 224          uchar Adc0832(unsigned char channel)     //AD转换,返回结果
 225          {
 226   1          uchar i=0;
 227   1          uchar j;
 228   1          uint dat=0;
 229   1          uchar ndat=0;
 230   1      
 231   1          if(channel==0)channel=2;
 232   1          if(channel==1)channel=3;
 233   1          ADDI=1;
 234   1          _nop_();
 235   1          _nop_();
 236   1          ADCS=0;//拉低CS端
 237   1          _nop_();
 238   1          _nop_();
 239   1          ADCLK=1;//拉高CLK端
 240   1          _nop_();
 241   1          _nop_();
C51 COMPILER V8.05a   LCD_ADC0832                                                          03/11/2008 22:20:46 PAGE 5   

 242   1          ADCLK=0;//拉低CLK端,形成下降沿1
 243   1          _nop_();
 244   1          _nop_();
 245   1          ADCLK=1;//拉高CLK端
 246   1          ADDI=channel&0x1;
 247   1          _nop_();
 248   1          _nop_();
 249   1          ADCLK=0;//拉低CLK端,形成下降沿2
 250   1          _nop_();
 251   1          _nop_();
 252   1          ADCLK=1;//拉高CLK端
 253   1          ADDI=(channel>>1)&0x1;
 254   1          _nop_();
 255   1          _nop_();
 256   1          ADCLK=0;//拉低CLK端,形成下降沿3
 257   1          ADDI=1;//控制命令结束 
 258   1          _nop_();
 259   1          _nop_();
 260   1          dat=0;
 261   1          for(i=0;i<8;i++)
 262   1          {
 263   2              dat|=ADDO;//收数据
 264   2              ADCLK=1;
 265   2              _nop_();
 266   2              _nop_();
 267   2              ADCLK=0;//形成一次时钟脉冲
 268   2              _nop_();
 269   2              _nop_();
 270   2              dat<<=1;
 271   2              if(i==7)dat|=ADDO;
 272   2          }  
 273   1          for(i=0;i<8;i++)
 274   1          {
 275   2              j=0;
 276   2              j=j|ADDO;//收数据
 277   2              ADCLK=1;
 278   2              _nop_();
 279   2              _nop_();
 280   2              ADCLK=0;//形成一次时钟脉冲
 281   2              _nop_();
 282   2              _nop_();
 283   2              j=j<<7;
 284   2              ndat=ndat|j;
 285   2              if(i<7)ndat>>=1;
 286   2          }
 287   1          ADCS=1;//拉低CS端
 288   1          ADCLK=0;//拉低CLK端
 289   1          ADDO=1;//拉高数据端,回到初始状态
 290   1          dat<<=8;
 291   1          dat|=ndat;
 292   1          return(dat);            //return ad k
 293   1      }
 294          
 295          
 296          void data_pro(void)
 297          {
 298   1            unsigned int temp;
 299   1            float  press;                       
 300   1      
 301   1                if(14<ad_data<243)                                   //当压力值介于15kpa到115kpa之间时,遵循线性变换
 302   1                      {                           
 303   2                          int vary=ad_data;                                           //y=(115-15)/(243-13)*X+15kpa                   
C51 COMPILER V8.05a   LCD_ADC0832                                                          03/11/2008 22:20:46 PAGE 6   

 304   2                              press=((10.0/23.0)*vary)+9.3;                   //测试时补偿值为9.3
 305   2                                                                                                                        
 306   2                              temp=(int)(press*10);                   //放大10倍,便于后面的计算
 307   2                                                                                              
 308   2                                                                                                              
 309   2                              press_bai=temp/1000;                            //取压力值百位
 310   2                              press_shi=(temp%1000)/100;                      //取压力值十位
 311   2                              press_ge=((temp%1000)%100)/10;          //取压力值个位
 312   2                              press_dot=((temp%1000)%100)%10;                 //取压力值十分位
 313   2      
 314   2                         }        
 315   1                               
 316   1      }
 317          /*****************报警子函数*******************/
 318          
 319          void alarm(void)
 320          {
 321   1               if(ad_data>=243)                           //如果当前压力值大于115kpa,
 322   1      
 323   1                {  Alarm_led_red=0; }                 //则启动red led报警
 324   1              
 325   1                else
 326   1                   {    Alarm_led_red=1; }                    //关闭red led 报警
 327   1                         
 328   1              
 329   1                if(ad_data<=14)                                                       //如果当前压力值小于16kpa
 330   1      
 331   1                   {  Alarm_led_green=0;  }               //则启动green led报警
 332   1      
 333   1            else
 334   1                   {   Alarm_led_green=1; }                           //关闭green  led 报警
 335   1               
 336   1      }
 337          
 338          
 339          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    757    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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