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

📄 lcd+adc0832.lst

📁 压力传感器mpx4115驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   LCD_ADC0832                                                          03/11/2008 22:20:46 PAGE 1   


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

line level    source

   1          /********************************************************
   2                             压力测试仪
   3          系统描述;输入  15--115kPA压力信号
   4                   输出  00h--ffh数字信号(adc0832)
   5                   在LCD上显示实际的压力值,如果超限则报警
   6          
   7          线性区间标度变换公式:    y=(115-15)/(243-13)*X+15kpa   
   8          
   9          作者:
  10          单位:
  11          日期:2008.3.7
  12          
  13          ********************************************************/
  14          
  15          #include<reg51.h>
  16          #include<intrins.h>
  17          #include <absacc.h>
  18          #include <math.h>
  19          
  20          #define uchar unsigned char
  21          #define uint   unsigned int
  22          #define BUSY  0x80                               //常量定义
  23          #define DATAPORT P0
  24          
  25          
  26          //ADC0832的引脚
  27          sbit ADCS =P3^5;  //ADC0832 chip seclect
  28          sbit ADDI =P3^7;  //ADC0832 k in
  29          sbit ADDO =P3^7;  //ADC0832 k out
  30          sbit ADCLK =P3^6;  //ADC0832 clock signal
  31          
  32          sbit LCM_RS=P2^0;
  33          sbit LCM_RW=P2^1;
  34          sbit LCM_EN=P2^2;
  35          
  36          uchar ad_data;                                    //采样值存储
  37          sbit Alarm_led_red =P1^5;                         //超过压力表量程最大值红色led报警定义
  38          sbit Alarm_led_green=P1^6;                        //低于压力表量程最小值绿色led报警定义
  39                                    //adc采样值存储单元
  40          char press_data;                                  //标度变换存储单元
  41          unsigned char ad_alarm;                           //报警值存储单元
  42          unsigned char press_bai=0;                        //显示值百位
  43          unsigned char press_shi=0;                        //显示值十位
  44          unsigned char press_ge=0;                         //显示值个位
  45          unsigned char press_dot=0;                        //显示值十分位
  46          
  47          uchar code str0[]={"Press:    .  kpa "};
  48          uchar code str1[]={" Check BY Jack "};
  49          
  50          void delay(uint);
  51          void lcd_wait(void);
  52          void delay_LCM(uint);                                                                                                   //LCD延时子程序
  53          void initLCM( void);                                                                                                    //LCD初始化子程序
  54          void lcd_wait(void);                                                                                                    //LCD检测忙子程序
  55          void WriteCommandLCM(uchar WCLCM,uchar BusyC);                              //写指令到ICM子函数
C51 COMPILER V8.05a   LCD_ADC0832                                                          03/11/2008 22:20:46 PAGE 2   

  56          void WriteDataLCM(uchar WDLCM);                                             //写数据到LCM子函数
  57          void DisplayOneChar(uchar X,uchar Y,uchar DData);                           //显示指定坐标的一个字符子函数
  58          void DisplayListChar(uchar X,uchar Y,uchar code *DData);                    //显示指定坐标的一串字符子函数
  59          void display(void);                                                         //系统显示子函数
  60          uchar Adc0832(unsigned char channel);                                                                                                                   
  61          void alarm(void);
  62          void data_pro(void);
  63          
  64          
  65          /**********main funcation************/
  66          
  67          void main(void)
  68          { 
  69   1          delay(500);                      //系统延时500ms启动
  70   1      //      ad_data=0;                       //采样值存储单元初始化为0
  71   1              initLCM( );
  72   1              
  73   1              WriteCommandLCM(0x01,1);                    //清显示屏
  74   1          DisplayListChar(0,0,str0);
  75   1              DisplayListChar(0,1,str1);
  76   1       
  77   1              while(1)
  78   1          {
  79   2                 ad_data =Adc0832(0);    //采样值存储单元初始化为0
  80   2                 
  81   2                  alarm();
  82   2              
  83   2                      data_pro();
  84   2                      
  85   2                      display();
  86   2                                       
  87   2              }
  88   1      }
  89          
  90          
  91          /*********延时K*1ms,12.000mhz**********/
  92          
  93          void delay(uint k)
  94          {
  95   1          uint i,j;
  96   1          for(i=0;i<k;i++)
  97   1          {
  98   2              for(j=0;j<60;j++)
  99   2                      {;}
 100   2          }
 101   1      }   
 102          /**********写指令到ICM子函数************/
 103          
 104          void WriteCommandLCM(uchar WCLCM,uchar BusyC)
 105          {
 106   1          if(BusyC)lcd_wait();
 107   1              DATAPORT=WCLCM;
 108   1          LCM_RS=0;                   // 选中指令寄存器
 109   1          LCM_RW=0;                   // 写模式       
 110   1          LCM_EN=1;    
 111   1              _nop_();   
 112   1              _nop_();
 113   1              _nop_(); 
 114   1          LCM_EN=0;
 115   1         
 116   1      }
 117          
C51 COMPILER V8.05a   LCD_ADC0832                                                          03/11/2008 22:20:46 PAGE 3   

 118          /**********写数据到LCM子函数************/
 119          
 120          void WriteDataLCM(uchar WDLCM)
 121          { 
 122   1          lcd_wait( );             //检测忙信号    
 123   1              DATAPORT=WDLCM;
 124   1          LCM_RS=1;                // 选中数据寄存器
 125   1          LCM_RW=0;                    // 写模式
 126   1          LCM_EN=1;
 127   1          _nop_();
 128   1              _nop_();
 129   1              _nop_();
 130   1          LCM_EN=0;
 131   1      }
 132          
 133          /***********lcm内部等待函数*************/
 134          
 135          void lcd_wait(void)
 136          {
 137   1          DATAPORT=0xff;           //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色
 138   1              LCM_EN=1;
 139   1          LCM_RS=0;   
 140   1          LCM_RW=1;   
 141   1          _nop_();
 142   1          _nop_();
 143   1              _nop_();
 144   1          while(DATAPORT&BUSY)  
 145   1              {  LCM_EN=0;
 146   2                 _nop_();
 147   2                 _nop_();
 148   2                 LCM_EN=1;
 149   2                 _nop_();
 150   2                 _nop_();
 151   2                 }     
 152   1              LCM_EN=0;       
 153   1              
 154   1      }
 155          
 156          /**********LCM初始化子函数***********/
 157          
 158          void initLCM( )
 159          {   
 160   1              DATAPORT=0;     
 161   1              delay(15);
 162   1              WriteCommandLCM(0x38,0);    //三次显示模式设置,不检测忙信号
 163   1          delay(5); 
 164   1          WriteCommandLCM(0x38,0);
 165   1          delay(5); 
 166   1          WriteCommandLCM(0x38,0);
 167   1          delay(5); 
 168   1      
 169   1          WriteCommandLCM(0x38,1);    //8bit数据传送,2行显示,5*7字型,检测忙信号
 170   1          WriteCommandLCM(0x08,1);    //关闭显示,检测忙信号
 171   1          WriteCommandLCM(0x01,1);    //清屏,检测忙信号
 172   1          WriteCommandLCM(0x06,1);    //显示光标右移设置,检测忙信号
 173   1          WriteCommandLCM(0x0c,1);    //显示屏打开,光标不显示,不闪烁,检测忙信号
 174   1      }

⌨️ 快捷键说明

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