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

📄 1602lcd-2.lst

📁 一个使用adc0809进行数据采集,采用1602液晶显示模拟电压的源程序,已经调试通过.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.10   1602LCD_2                                                             03/26/2006 15:26:39 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE 1602LCD_2
OBJECT MODULE PLACED IN 1602lcd-2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1602lcd-2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <REG51.H>
   2          #include <INTRINS.H>                            //为调用nop空指令需要
   3          
   4          
   5          #define         DS_NOP()                _nop_();_nop_();_nop_();_nop_()
   6          #define         REF_Voltage     5.25  //ADC0809基准电压
   7          #define         PLUS_CH0                1         //各个通道增益
   8          #define         PLUS_CH1                1
   9          #define         PLUS_CH2                1
  10          #define         PLUS_CH3                5
  11          #define         PLUS_CH4                1
  12          #define         PLUS_CH5                1
  13          #define         PLUS_CH6                1
  14          #define         PLUS_CH7                1
  15          
  16          
  17                         
  18          /**************ADC0809引脚定义**********/
  19          sbit            ST              = P2^5;
  20          sbit            OE              = P2^4;
  21          sbit            EOC             = P2^3;
  22          sbit            ADC0809_C       = P2^2;
  23          sbit            ADC0809_B       = P2^1;
  24          sbit            ADC0809_A       = P2^0;
  25          
  26          /**************LCD引脚定义*************/
  27          sbit            LCM_RW          =       P3^6;                   //定义LCD引脚
  28          sbit            LCM_RS          =       P3^7;
  29          sbit            LCM_E           =       P3^5;
  30          #define         LCM_Data                P1
  31          #define         Busy                    0x80                    //用于检测LCM状态字中的Busy标识
  32          
  33          /************函数声明*******************/
  34          void LCMInit(void);
  35          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  36          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  37          void DisplayNumberFloat(unsigned char X, unsigned char Y,float Number,unsigned char point_number);
  38          void Delay5Ms(void);
  39          void Delay400Ms(void);
  40          void Decode(unsigned char ScanCode);
  41          void WriteDataLCM(unsigned char WDLCM);
  42          void WriteCommandLCM(unsigned char WCLCM,BuysC);
  43          
  44          unsigned char ReadDataLCM(void);
  45          unsigned char ReadStatusLCM(void);
  46          unsigned char code cdle_net[] = {"   welcome...   "};
  47          unsigned char code email[] = {"VoltageTestDemo!"};
  48          unsigned char code Cls[] = {" "};
  49          
  50          float VoltageSurvey(unsigned char AD_ChannelNumber);
  51          
  52          void main(void)
  53          {
  54   1              float CHa_voltage;                      //显示在第一行上的测量电压
  55   1              float CHb_voltage;                      //显示在第二行上的测量电压
C51 COMPILER V7.10   1602LCD_2                                                             03/26/2006 15:26:39 PAGE 2   

  56   1                              
  57   1              Delay400Ms();                           //启动等待,等LCM讲入工作状态
  58   1              LCMInit();                                      //LCM初始化
  59   1              Delay400Ms(); 
  60   1              DisplayListChar(0, 0, cdle_net);
  61   1              DisplayListChar(0, 1, email);
  62   1              Delay400Ms(); 
  63   1              Delay400Ms(); 
  64   1              Delay400Ms();
  65   1              Delay400Ms();
  66   1              WriteCommandLCM(0x01,1); //显示清屏,光标归位,地址归位
  67   1              
  68   1              DisplayListChar(15, 0, "V");    //显示单位
  69   1              DisplayListChar(15, 1, "V");
  70   1              WriteCommandLCM(0x0c,1); //关光标,关闪烁
  71   1      
  72   1              while(1)
  73   1              {
  74   2                      CHa_voltage = VoltageSurvey(0);                                                 //测量通道0电压
  75   2                      DisplayListChar(0, 0, "CH0:");                                                  
  76   2                      DisplayNumberFloat(7,0,CHa_voltage,2);                                  //在LCD中部显示通道0电压
  77   2                      Delay5Ms();
  78   2                      CHb_voltage = VoltageSurvey(1);                                                 //测量通道1电压
  79   2                      DisplayListChar(0, 1, "CH1:");
  80   2                      DisplayNumberFloat(7,1,CHb_voltage,2);                                  //在LCD中部显示通道1电压
  81   2                      Delay5Ms();
  82   2                      Delay400Ms();                                                                                   //延时1.6s,即停留显示1.6s
  83   2                      Delay400Ms();
  84   2                      Delay400Ms();
  85   2                      Delay400Ms();
  86   2      
  87   2                      CHa_voltage = VoltageSurvey(2);
  88   2                      DisplayListChar(0, 0, "CH2:");
  89   2                      DisplayNumberFloat(7,0,CHa_voltage,2);
  90   2                      Delay5Ms();
  91   2                      CHb_voltage = VoltageSurvey(3);
  92   2                      DisplayListChar(0, 1, "CH3:");
  93   2                      DisplayNumberFloat(7,1,CHb_voltage,2);
  94   2                      Delay5Ms();
  95   2                      Delay400Ms();
  96   2                      Delay400Ms();
  97   2                      Delay400Ms();
  98   2                      Delay400Ms();
  99   2      
 100   2                      CHa_voltage = VoltageSurvey(4);
 101   2                      DisplayListChar(0, 0, "CH4:");
 102   2                      DisplayNumberFloat(7,0,CHa_voltage,2);
 103   2                      Delay5Ms();
 104   2                      CHb_voltage = VoltageSurvey(5);
 105   2                      DisplayListChar(0, 1, "CH5:");
 106   2                      DisplayNumberFloat(7,1,CHb_voltage,2);
 107   2                      Delay5Ms();
 108   2                      Delay400Ms();
 109   2                      Delay400Ms();
 110   2                      Delay400Ms();
 111   2                      Delay400Ms();
 112   2      
 113   2                      
 114   2                      CHa_voltage = VoltageSurvey(6);
 115   2                      DisplayListChar(0, 0, "CH6:");
 116   2                      DisplayNumberFloat(7,0,CHa_voltage,2);
 117   2                      Delay5Ms();
C51 COMPILER V7.10   1602LCD_2                                                             03/26/2006 15:26:39 PAGE 3   

 118   2                      CHb_voltage = VoltageSurvey(7);
 119   2                      DisplayListChar(0, 1, "CH7:");
 120   2                      DisplayNumberFloat(7,1,CHb_voltage,2);
 121   2                      Delay5Ms();
 122   2                      Delay400Ms();
 123   2                      Delay400Ms();
 124   2                      Delay400Ms();
 125   2                      Delay400Ms();
 126   2      
 127   2                      
 128   2      
 129   2              }
 130   1      }
 131          /*
 132          //########################################################################################################
             -###############################
 133          //########################################################################################################
             -###############################
 134                                                                                                                  ADC0809驱动部分
 135          */
 136          
 137                  
 138          /*****************************************************
 139          ADC0809转换函数
 140          输入: 通道号(0-7)
 141          返回: 测量到的模拟电压所对应的数字量
 142          *****************************************************/
 143          unsigned char ADC0809test(unsigned char ch0)
 144          {
 145   1              unsigned char ADCdata;                  //AD转换后得到的数字量
 146   1      
 147   1              ST  = 0;
 148   1              EOC = 1;
 149   1              OE  = 0;
 150   1              
 151   1              switch(ch0)
 152   1              {
 153   2                      case 0:
 154   2                      {
 155   3                              ADC0809_A = 0;
 156   3                              ADC0809_B = 0;
 157   3                              ADC0809_C = 0;
 158   3                              break;  
 159   3                      }
 160   2                      case 1:
 161   2                      {
 162   3                              ADC0809_A = 1;
 163   3                              ADC0809_B = 0;
 164   3                              ADC0809_C = 0;
 165   3                              break;  
 166   3                      }
 167   2                      case 2:
 168   2                      {
 169   3                              ADC0809_A = 0;
 170   3                              ADC0809_B = 1;
 171   3                              ADC0809_C = 0;
 172   3                              break;  
 173   3                      }
 174   2                      case 3:
 175   2                      {
 176   3                              ADC0809_A = 1;
 177   3                              ADC0809_B = 1;
C51 COMPILER V7.10   1602LCD_2                                                             03/26/2006 15:26:39 PAGE 4   

 178   3                              ADC0809_C = 0;
 179   3                              break;  
 180   3                      }
 181   2                      case 4:
 182   2                      {
 183   3                              ADC0809_A = 0;
 184   3                              ADC0809_B = 0;
 185   3                              ADC0809_C = 1;
 186   3                              break;  
 187   3                      }
 188   2                      case 5:
 189   2                      {
 190   3                              ADC0809_A = 1;
 191   3                              ADC0809_B = 0;
 192   3                              ADC0809_C = 1;
 193   3                              break;  
 194   3                      }
 195   2      
 196   2                      case 6:
 197   2                      {
 198   3                              ADC0809_A = 0;
 199   3                              ADC0809_B = 1;
 200   3                              ADC0809_C = 1;
 201   3                              break;  
 202   3                      }
 203   2                      case 7:
 204   2                      {
 205   3                              ADC0809_A = 1;
 206   3                              ADC0809_B = 1;
 207   3                              ADC0809_C = 1;
 208   3                              break;  
 209   3                      }
 210   2                      default:break;
 211   2              }
 212   1              ST = 1;
 213   1              ST = 0;
 214   1              DS_NOP();
 215   1      
 216   1              while(EOC == 0)
 217   1              {
 218   2                ;
 219   2              }
 220   1              if(EOC == 1)
 221   1              {
 222   2                      OE = 1;
 223   2                      ADCdata  = P0;
 224   2                      return (ADCdata); 
 225   2              }
 226   1      }
 227          
 228          /*******************************************************
 229           电压测量并装换成实际的电压值
 230          入口参数: AD_ChannelNumber 输入通道号:在0-7之间选择 
 231          出口参数: 转换后的电压值,实际的值
 232          ********************************************************/

⌨️ 快捷键说明

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