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

📄 main.lst

📁 书中详细说明了多路数据采集的方法,以及怎么样用AD来采集数据哟,大家不妨看看嘛,说不定有所帮助哟?
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 15:33:28 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <c8051f020.h>
   2          #include <stdio.h>
   3          #include "CPU_Init.h"
   4          #include "RS485M.h"
   5          #include "LCD_send.h"
   6          #include "ZLG7290_key.h"
   7          
   8          void LCDSend_Int(void);
   9          void Key_Disp(void);
  10          void UARTRX_Disp(void);
  11          void Help_1(void);
  12          void KeyDisp_F0(void);
  13          void KeyDisp_KX(unsigned char pass_data);
  14          void PASS_Disp(unsigned char pass_data);
  15          unsigned char Sum_verify(unsigned char verify[],unsigned char ii);
  16          void CYC_Disp(void);
  17          
  18          unsigned char RX[10];//UART0接收数据存放数组
  19          unsigned char TX[10];//UART0发送数据存放数组
  20          unsigned char key;   //按键键值 
  21          unsigned char pass_data;//选择的采集通道
  22          
  23          bit ReceiveBit=0;  //接收完成标志
  24          bit key_sign=0;    //按键标志
  25          bit F0_sign=0;     //F0按键标志
  26          bit KX_sign=0;   //处理通道已选标志
  27          bit F2_sign=0;     //循环采集标志
  28          
  29          void main(void)
  30          {
  31   1          WDTCN = 0xde;   //关闭看门狗
  32   1          WDTCN = 0xad;
  33   1          Init_Device();
  34   1              LCDSend_Int();
  35   1              EA=1;
  36   1          DE_RE = 0;
  37   1              while(1)
  38   1              {
  39   2              if(key_sign==1) //有按键
  40   2                  {
  41   3                          key_sign=0;
  42   3                          Key_Disp(); //按键处理
  43   3              }
  44   2              }
  45   1      } 
  46          
  47          void UARTRX_Disp(void)
  48          {
  49   1         UART0_TX(TX,5);
  50   1      }
  51          
  52          void Key_Disp(void)
  53          {
  54   1          if(key==F0)
  55   1          {
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 15:33:28 PAGE 2   

  56   2              F0_sign=1;
  57   2              KX_sign=0; 
  58   2              F2_sign=0;
  59   2              lcd_init();
  60   2              send_asc16str(0,0,"->");
  61   2              send_hz(1,0,"请选择采集通道");
  62   2              send_asc16str(2,16,"K1-K8:");
  63   2              send_hz(4,1,"通道");
  64   2              send_asc16str(12,16,"1-8");
  65   2              send_asc16str(2,32,"F2:");
  66   2              send_hz(3,2,"循环采集");
  67   2          }
  68   1          if(key==F1)
  69   1          {
  70   2              Help_1();
  71   2          }
  72   1          if(F0_sign==1&&F2_sign==0&&(key==K1||key==K2||key==K3||key==K4||key==K5||key==K6||key==K7||key==K8))
  73   1          {
  74   2              KX_sign=1; //单路采集模式
  75   2                  F2_sign=0; //选择循环采集模式
  76   2              pass_data=(key%8)+(key/8)*4;
  77   2                  lcd_init(); //通道已选择显示
  78   2              send_hz(1,0,"单路采集模式");
  79   2              send_hz(1,1,"采集通道");
  80   2              send_asc16str(10,16,":");
  81   2              send_ascii16(12,16,pass_data+0x30);
  82   2              send_asc16str(4,32,"F3->");
  83   2                  send_hz(4,2,"确定");
  84   2              send_asc16str(4,48,"F0->");
  85   2                  send_hz(4,3,"返回");
  86   2          }
  87   1          if(F0_sign==1&&key==F2&&KX_sign==0)
  88   1          {
  89   2              F2_sign=1; //选择循环采集模式
  90   2              KX_sign=0; //关闭通道选择
  91   2              lcd_init();
  92   2              send_hz(1,0,"循环采集模式");
  93   2              send_asc16str(4,16,"F3->");
  94   2                  send_hz(4,1,"确定");
  95   2              send_asc16str(4,32,"F0->");
  96   2                  send_hz(4,2,"返回");
  97   2          }
  98   1          if(KX_sign==1&& key==F3)
  99   1          {
 100   2              KX_sign=0; //只有再次按下F0键以后才能重新操作
 101   2                  F0_sign=0;
 102   2              F2_sign=0;
 103   2                  PASS_Disp(pass_data);//通道选择确定后数据处理
 104   2          }
 105   1          if(F2_sign==1&& key==F3)
 106   1          {
 107   2              KX_sign=0; //只有再次按下F0键以后才能重新操作
 108   2                  F0_sign=0;
 109   2              F2_sign=0;
 110   2              CYC_Disp();
 111   2          }
 112   1             
 113   1      }
 114          
 115          void LCDSend_Int(void)
 116          {
 117   1          lcd_init();
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 15:33:28 PAGE 3   

 118   1          send_asc16str(0,0,"**");
 119   1          send_asc16str(14,0,"**");;
 120   1          send_hz(1,0,"多路采集系统");
 121   1              send_asc16str(2,16,"F0:");
 122   1          send_hz(3,1,"通道选择");
 123   1          send_asc16str(2,32,"F1:");
 124   1              send_hz(3,2,"帮助");
 125   1      }
 126          
 127          void Help_1(void) //显示帮助内容
 128          {
 129   1          lcd_init();
 130   1          send_asc16str(0,0,"**");
 131   1          send_asc16str(14,0,"**");;
 132   1          send_hz(1,0,"按键功能定义");
 133   1          send_asc16str(2,16,"F0:");
 134   1          send_hz(3,1,"通道选择");
 135   1          send_asc16str(2,32,"F2:");
 136   1          send_hz(3,2,"选择确定");
 137   1          send_asc16str(2,48,"K1-K8:");
 138   1          send_hz(4,3,"通道");
 139   1      }
 140          
 141          void PASS_Disp(unsigned char pass_data)
 142          {
 143   1          bit exit_sign=0; //数据处理结束标志
 144   1          unsigned char TX_time=0;//数据重发次数计数
 145   1          unsigned char Verify_data=0;//接收和检验值
 146   1              unsigned char Verify_ET=0; //和校验错误发生次数
 147   1              unsigned char anew_TX[3]={0x01,0x00,0x00};//要求从机重发指令数组
 148   1              unsigned char send_Num=0; //条码显示计数
 149   1              unsigned char delay_num=0; //超时计数
 150   1          bit RX_sign=0;//接收数据是否为第一次数据标志
 151   1              unsigned int i;//定时控制变量
 152   1      
 153   1          lcd_init();
 154   1              send_asc16str(2,0,"->");
 155   1          send_hz(2,0,"采集通道");
 156   1          send_asc16str(12,0,":");
 157   1          send_ascii16(13,0,pass_data+0x30);
 158   1          send_hz(0,1,"系统处理中请稍后");
 159   1          TX[0]=0x01; //从机地址
 160   1              TX[1]=0x01; //数据采集命令字
 161   1          TX[2]=0x02; //数据长度
 162   1          TX[3]=pass_data-1;//采集通道值(0-7)
 163   1              TX[4]=pass_data-1;//和检验
 164   1              UART0_TX(TX,5);                                 
 165   1          while(exit_sign==0)
 166   1          {
 167   2                       for(i=65535;i>0;i--);
 168   2               if(ReceiveBit==0)
 169   2               {
 170   3                   UART0_TX(TX,5);
 171   3               }         
 172   2                       if(RX_sign==0)
 173   2                       {
 174   3                           send_asc16str(send_Num,32,">");//动态显示系统处理状态">>>>>>>>>>>>>>>>"
 175   3                               send_Num++;
 176   3                               if(send_Num==15)
 177   3                               {
 178   4                                   send_Num=0;
 179   4                                   send_asc16str(0,32,"                ");
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 15:33:28 PAGE 4   

 180   4                           delay_num++;
 181   4                                       if(delay_num==3)
 182   4                                       {
 183   5                                           delay_num=0;
 184   5                               lcd_init();
 185   5                               send_hz(2,1,"通讯超时");
 186   5                               send_asc16str(0,32,"->");
 187   5                               send_hz(1,2,"请检查通信网络");
 188   5                               exit_sign=1;
 189   5                                       }
 190   4                       }
 191   3                   }
 192   2               if(ReceiveBit==1) //接收到一帧数据
 193   2               {
 194   3                   ReceiveBit=0; //清除接收完成标志
 195   3                   if(RX[1]==0)  //从机要求重发数据
 196   3                   {
 197   4                                   REN0=1;//重新允许接收
 198   4                       UART0_TX(TX,5);
 199   4                       TX_time++;
 200   4                       if(TX_time==3)//重发次数超过三次报警
 201   4                       {
 202   5                           TX_time=0;
 203   5                           lcd_init();
 204   5                           send_hz(1,1,"从机通讯错误");
 205   5                           send_asc16str(0,32,"->");
 206   5                           send_hz(1,2,"请检查通讯线路");
 207   5                           exit_sign=1;
 208   5                       }   
 209   4                  }         
 210   3                  else
 211   3                  {
 212   4                      if(RX[1]==1)
 213   4                      {
 214   5                          Verify_data=Sum_verify(RX+3,4);//对接收的数据(一字节通道字节数据)进行和校验
 215   5                          if(Verify_data==RX[7]) //和校验正确,显示采集数值
 216   5                          {
 217   6                                                  if(RX_sign==0)//第一次数据发送
 218   6                                                      {
 219   7                                                          RX_sign=1;
 220   7                                                          lcd_init();
 221   7                                          send_asc16str(0,0,">>            <<");
 222   7                                      send_hz(1,0,"采集通道");
 223   7                                      send_asc16str(10,0,":");
 224   7                                      send_ascii16(12,0,RX[3]+0x30);
 225   7                                      send_hz(1,2,"采集值");
 226   7                                      send_asc16str(8,32,":");
 227   7                                      send_ascii16(9,32,RX[4]+0x30);
 228   7                                      send_ascii16(10,32,'.');
 229   7                                      send_ascii16(11,32,RX[5]+0x30);
 230   7                                      send_ascii16(12,32,RX[6]+0x30);
 231   7                                                              send_ascii16(13,32,'V');
 232   7                              }
 233   6                                                      else
 234   6                                                      {
 235   7                                                          send_ascii16(12,0,RX[3]+0x30);
 236   7                                                              send_ascii16(9,32,RX[4]+0x30);
 237   7                                      send_ascii16(11,32,RX[5]+0x30);
 238   7                                      send_ascii16(12,32,RX[6]+0x30);
 239   7                                                      }
 240   6                              for(i=65535;i>0;i--);
 241   6                              TX[0]=0x01; //从机地址
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 15:33:28 PAGE 5   

 242   6                                  TX[1]=0x01; //数据采集命令字
 243   6                              TX[2]=0x02; //数据长度
 244   6                              TX[3]=pass_data;//采集通道值
 245   6                                  TX[4]=pass_data;//和检验
 246   6                                  UART0_TX(TX,5);
 247   6                                                  REN0=1;//重新允许接收
 248   6                                                  if(key_sign==1) //有按键
 249   6                                  exit_sign=1;
 250   6                                              }
 251   5                                      else //和校验错误
 252   5                                              {
 253   6                                                  REN0=1;//重新允许接收
 254   6                                                  UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
 255   6                              Verify_ET++;
 256   6                                                      if(Verify_ET==3)

⌨️ 快捷键说明

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