📄 fpj5.lst
字号:
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 + -