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

📄 fpj5.lst

📁 一个用到ZLG7289的实际项目
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 1   


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

line level    source

   1          //程序做了较大改动
   2          //完成初始化:读取所有参数ABCDEF数据,并判断有效,无效修改。最终显示参数A2500.0
   3          //ok
   4          //除数据输入外ok
   5          //除脉冲输出外OK
   6          //除看门狗OK
   7          #include "ZLG7289.h"  
   8          #include "X5045.h"
   9          #include        <intrins.h>
  10          #define uchar unsigned char
  11          #define uint unsigned int
  12          #define ulong unsigned long
  13                  
  14          #define FH              10
  15          #define DP              11
  16          #define CLR     12
  17          #define ENT     13
  18          #define STOP    14
  19          #define RUN     15
  20          #define OFF             15
  21          #define LOFF    1
  22          #define LON             0
  23          #define CON_DAT1        60.0
  24          #define CON_DAT2        1E9
  25          
  26          //端口定义
  27          sbit TOUT=P1^0;/*脉冲输出*/
  28          sbit LA=P3^7;
  29          sbit LB=P3^6;
  30          sbit LC=P3^5;
  31          sbit LD=P3^4;
  32          sbit LE=P3^3;
  33          sbit LF=P2^3;
  34          sbit LG=P2^2;
  35          sbit LRUN=P2^1;
  36          sbit LSTOP=P2^0;
  37          //*******************************************
  38          uchar   k; 
  39          uchar   k_new,k_old;
  40          bit                     dpend_b;
  41          bit                     f_key;  
  42          uchar           k_cnt;//=0表示第一位按键值
  43          uchar           dp_cnt;
  44          uchar           dat[6]={0,0,0,0,0,0};
  45          bit                     dp_b;   //表示有小数点
  46          bit             fh_b;//表示有负号
  47          bit                     out_b;
  48          bit                     f_10ms;
  49          bit                     f_20ms;
  50          uchar           cnt_20ms;
  51          bit                     f_100ms;
  52          uchar           cnt_100ms;
  53          uchar           ent_state;//回车状态
  54          uchar           xstate;//总状态
  55          float   dat_a;
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 2   

  56          float   dat_b;
  57          float   dat_c;
  58          float   dat_d;
  59          float   dat_e;
  60          float   dat_f;
  61          float           result;
  62          ulong   tout_cnt;//输出时间计数器(0.1S减1,减到0脉冲输完)
  63          //*******************************************
  64          void    init_dat(void);//读取所有参数ABCDEF数据,并判断有效,无效修改。
  65          float calc(void);
  66          void    set_off(void);
  67          void    stor_dat(uchar  addr);
  68          void    stor1_dat(uchar addr,float temp1);//计算存储
  69          float   read_dat(uchar  addr);
  70          void    disp_out(void); //根据dat[0-5]内容显示
  71          void    dispg_out(void);//根据dat[0-5]内容显示 正数 没有符号位 
  72          void    calcg(void);
  73          void    main_init(void);//主程序初始化
  74          void    time_mainloop(void);//时间处理
  75          void    keypd_mainloop(void);//按键判断20ms一次
  76          void    keycl_mainloop(void);//有键值处理
  77          void    tout_mainloop(void);//脉冲输出处理
  78          //*******************************************
  79          void main() 
  80          {       
  81   1              main_init();
  82   1              init_dat();
  83   1              disp_out();     //输出A参数显示
  84   1              ent_state=0;LA=0;//在输入A参数状态      
  85   1              k_cnt=0;//无键
  86   1              fh_b=0;dp_b=0;//无负号,无小数点
  87   1              k_old=ENT;//上次是回车
  88   1              xstate=0;
  89   1              TR1=1;EA=1;
  90   1              while(1)
  91   1              { 
  92   2                      time_mainloop();
  93   2                      keypd_mainloop();
  94   2                      keycl_mainloop();
  95   2                      tout_mainloop();
  96   2              }
  97   1      } 
  98          
  99          //**************************
 100          void    keycl_mainloop(void)//有键值处理
 101          {
 102   1      //xstate=0 检验态
 103   1      //xstate=1 输入态
 104   1      //xstate=2 运行态
 105   1      //xstate=3 停止态       
 106   1              float   temp;
 107   1              uchar   datok_b;
 108   1              if(!f_key)return;
 109   1              f_key=0;
 110   1              switch(xstate)
 111   1              {
 112   2                              case 0://验证态, 只响应ENT RUN CLR
 113   2                                      switch(k_new)
 114   2                                      {
 115   3                                              case ENT://状态不变,读取下一个参数,并更新显示
 116   3                                                              switch(ent_state)
 117   3                                                              {
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 3   

 118   4                                                                      case 0:dat_b=read_dat(0x10);disp_out(); LA=1;LB=0;ent_state=1;break;
 119   4                                                                      case 1:dat_c=read_dat(0x20);disp_out(); LB=1;LC=0;ent_state=2;break;
 120   4                                                                      case 2:dat_d=read_dat(0x30);disp_out(); LC=1;LD=0;ent_state=3;break;                                                                                                            
 121   4                                                                      case 3:dat_e=read_dat(0x40);disp_out(); LD=1;LE=0;ent_state=4;break;
 122   4                                                                      case 4:dat_f=read_dat(0x50);disp_out(); LE=1;LF=0;ent_state=5;break;
 123   4                                                                      case 5:dat_a=read_dat(0x00);disp_out(); LF=1;LA=0;ent_state=0;break;
 124   4                                                              }
 125   3                                                              break;
 126   3                                              case CLR://清除显示,并准备输入数据,更改参数
 127   3                                                              set_off();k_cnt=0;fh_b=0;dp_b=0;dat[0]=0;dat[1]=0;dat[2]=0;dat[3]=0;dat[4]=0;dat[5]=0;
 128   3                                                              xstate=1;
 129   3                                                              break;
 130   3                                              case RUN://根据ABCDEF参数进行计算,开始运行
 131   3                                                              calcg();dispg_out();//正数 一位小数 无符号位 最大(18760.0)                                                      
 132   3                                                              LA=1;LB=1;LC=1;LD=1;LE=1;LF=1;LSTOP=1;
 133   3                                                              LG=0;LRUN=0;
 134   3                                                              xstate=2;
 135   3                                                              tout_cnt=result*10;TOUT=0;out_b=1;cnt_20ms=2;cnt_100ms=5;
 136   3                                                              break;                                          
 137   3                                              default://其它键不响应,直接退出
 138   3                                                              break;
 139   3                                      }       
 140   2                                      break;
 141   2                              case 1://输入态 只响应0-9 负号 dp ENT CLR
 142   2                                      switch(k_new)//改为只能有一位小数
 143   2                                      {
 144   3                                              case 0:
 145   3                                                      
 146   3                                                      if(dp_b)//只能有一位小数
 147   3                                                      {       
 148   4                                                              if(dpend_b==0) break;
 149   4                                                              dpend_b=0;
 150   4                                                      }
 151   3                                                      if((k_cnt==1)&&(dat[k_cnt-1]==0)&&(dp_b==0))break; 
 152   3                                                      if(k_cnt==6)break;//123456
 153   3                                                      if((fh_b)&&(k_cnt==5))break;//-12345
 154   3                                                      //0.00000和-0.0000格式不对!
 155   3                                                      if((k_cnt==5)&&(dat[0]==0)&&(dat[1]==0)&&(dat[2]==0)&&(dat[3]==0)&&(dat[4]==0))break;
 156   3                                                      if(((fh_b)&&(k_cnt==4))&&(dat[0]==0)&&(dat[1]==0)&&(dat[2]==0)&&(dat[3]==0))break;
 157   3                                                      //0.0 0.00应该正确输入!
 158   3                                                      //01--1 !
 159   3                                                      dat[k_cnt]=k_new;ZLG7289_SHL(); ZLG7289_Download(0,5,0,k_new);
 160   3                                                      k_cnt++;
 161   3                                                      break;
 162   3                                              case 1:
 163   3                                              case 2:
 164   3                                              case 3:
 165   3                                              case 4:
 166   3                                              case 5:
 167   3                                              case 6:
 168   3                                              case 7:
 169   3                                              case 8:
 170   3                                              case 9:
 171   3                                                      if(dp_b)//只能有一位小数
 172   3                                                      {       
 173   4                                                              if(dpend_b==0) break;
 174   4                                                              dpend_b=0;
 175   4                                                      }
 176   3                                                      if(k_cnt==6)break;//123456
 177   3                                                      if((fh_b)&&(k_cnt==5))break;//-12345
 178   3                                                      if((k_cnt==1)&&(dat[0]==0)&&(dp_b==0))
 179   3                                                      {
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 4   

 180   4                                                              dat[k_cnt-1]=k_new;ZLG7289_Download(0,5,0,k_new);
 181   4                                                      }
 182   3                                                      else
 183   3                                                      {
 184   4                                                              dat[k_cnt]=k_new;ZLG7289_SHL(); ZLG7289_Download(0,5,0,k_new);

⌨️ 快捷键说明

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