📄 play.lst
字号:
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE PLAY
OBJECT MODULE PLACED IN play.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.exe play.c DB OE
stmt level source
1 //*********************************************************************
2 #include<c8051F120.h>
3 //*********************************************************************
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define ulong unsigned long
7 //*********************************************************************
8 //*********************************************************************
9 //此处的变量均是在程序中将要修改的值。
10 #define MUL 0.0167548825//与油缸直径有关的比例系数,此值的修改要根据油缸的直径来计算
11 #define PY 805 //此值为偏移值,与MUL配合使用,确定输出压力与油缸直径的关系
12 #define BL 0.2 //此值为实时压力在显示压力中的权重值,这里取0.2,表示在显示压力时,真实值
13 //占0.2的权重,那么理论压力值的权重就为(1-0.2)=0.8,换句话说,只要
14 //设定了真实压力值的权重BL值,那么理论压力值的权重在程序中自动就会为:
15 //(1-BL)。
16 //基本上只要修改以上3个变量即可。
17 //*********************************************************************
18 //*********************************************************************
19 //在LCD Flash中的各种预置画面的调用参数设定
20 #define WELCOMESCR 0x00//欢迎界面
21 #define MENUSELECT 0x01//菜单选择画面
22 #define PIDPARASET 0x04//PID参数设定画面
23 #define CLOSSYSTEM 0x06//关机画面
24 #define PARAUPLOAD 0x07//工艺参数上载画面
25 #define SENPARASET 0x0A//传感器温度、压力设置画面
26 #define NOWATERALM 0x0C//断水警告画面
27 #define PROPARASET 0x0E//工艺参数设定画面
28 #define WORKSCREEN 0x14//工作画面
29 #define COMMUERROR 0x19//与808P表通信错误画面
30 #define PRONUMSELT 0x1B//工艺序号选择画面
31 #define POWERERROR 0x1D//压力传感器错误画面
32 #define LOADINPARA 0x1F//正在上载参数画面
33 //AI808P
34 #define AIADDR 1//808P地址定义
35 //温度、压力参数初始化
36 #define HITEMP 1200
37 #define LOTEMP 400
38 #define HIPOWER 255
39 #define LOPOWER 13
40 //*********************************************************************
41 //P0.0 is UART0 TX0,P0.1 is UART0 RX0;
42 //P0.2 is UART1 TX1,P0.3 is UART1 RX1;
43 //P0.4 is /INT0,P0.5 is /INT1
44 //P0.6 is IIC SCL, P0.7 is IIC SDA;
45 sbit LCDDTR=P0^3;//LCD DTR
46 sbit NOWATER=P0^4;//water is bad
47 sbit DISTANCE=P0^5;//行程开关
48 sbit SCL=P0^6;
49 sbit SDA=P0^7;
50 sbit KEYY0=P1^0;
51 sbit KEYY1=P1^1;
52 sbit KEYY2=P1^2;
53 sbit KEYY3=P1^3;
54 sbit KEYY4=P1^4;
55 sbit KEYY5=P1^5;
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 2
56 sbit BEEP=P1^7;//Beep pin
57 sbit WIND=P2^0;//风机
58 sbit OUT1=P2^2;
59 sbit OUT2=P2^3;
60 sbit TG=P2^4;
61 sbit KEYX0=P2^5;
62 sbit KEYX1=P2^6;
63 sbit KEYX2=P2^7;
64 sbit TR=P3^0;
65 sbit HDISTANCE=P3^1;//高位行程开关
66 sbit LDISTANCE=P3^3;//低位行程开关
67 sbit MOTOR=P3^5;//motor control
68 sbit TPFC=P3^6;//two phase four cut-through control
69 //
70 #define TPFCOFF TPFC=1
71 #define TPFCON TPFC=0
72 #define MOTORRUN MOTOR=0
73 #define MOTORSTOP MOTOR=1
74 //*********************************************************************
75 uchar xdata key_temp[3]={0x3F,0x3F,0x3F};//用来记录3排按键值的寄存器组
76 bit keyturn;//用来防止重复按键标志位
77 uchar xdata KEY=0xFF;//键值
78 //
79 uchar xdata AIBUF[10];//808P表的回送数据缓冲寄存器
80 uchar xdata AIDATNUM;//808P表接收数据计数器
81 bit AIOVERFLG;//808P转换完成标志
82 bit TIMEFLG;//时间超过标志
83 uchar xdata AITIME;//808P转换时间记录
84 uchar xdata ERRORNUM;//AI808P错误次数
85 //
86 uchar xdata GYNUM=1;//工艺号
87 //
88 uint xdata PID_P;//PID参数
89 uint xdata PID_I;
90 uint xdata PID_D;
91 float xdata PrevError=0,PrevDError=0,POWEROUT=0;//PID参数计算时用到的差值种类
92 //
93 uint xdata TEMPRATURE_hi=HITEMP;//传感器温度设定最大值
94 uint xdata TEMPRATURE_lo=LOTEMP;//传感器温度设定最小值
95 uchar xdata POWER_hi=HIPOWER;//压力传感器压力最高值
96 uchar xdata POWER_lo=LOPOWER;//压力传感器压力最小值
97 uchar xdata REALPOWER;//实时压力值无符号字节型
98 float xdata REALPOWERF;//实时压力值浮点型
99 //
100 bit AUTO_MAN;//手动、自动识别为,1表示自动,0表示手动
101 bit MANFLG=1;//手动按钮轮训识别位
102 //
103 uchar xdata T3TIME=0;//定时器3的记数器
104 bit SAMPLEN=0;//开始采样标志
105 uint xdata TEMPTIME;//每一段的运行时间
106 uchar xdata SEGMENT;//当前段号
107 bit PIDEN=0;//PID计算使能位
108 //*********************************************************************
109 struct Process
110 {
111 uchar power[20];
112 uint time[20],temperature[20];
113 };
114 struct Process xdata GY[61];//定义61个工艺,每个工艺20段时间、温度、压力
115 //*********************************************************************
116 void PID(float POWERSET)
117 {
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 3
118 1 float dderror,derror,error;
119 1 uint dacvalue;
120 1 error=POWERSET-REALPOWERF;
121 1 derror=error-PrevError;
122 1 dderror=derror-PrevDError;
123 1 POWEROUT+=(float)PID_P/1000.0*derror+(float)PID_I/1000.0*error+(float)PID_D/1000.0*dderror;
124 1 if(POWEROUT<0)
125 1 {
126 2 POWEROUT=0;
127 2 }
128 1 if(POWEROUT>196360.0)//196350
129 1 {
130 2 POWEROUT=196360.0;
131 2 }
132 1 dacvalue=(uint)(POWERSET*MUL+PY);//这里必须有一个dacvalue与POWEROUT的关系比例式
133 1 DAC0L=dacvalue%256;
134 1 DAC0H=dacvalue/256;
135 1 PrevError=error;
136 1 PrevDError=derror;
137 1 }
138 //*********************************************************************
139 //delay function
140 void delay1s()
141 {
142 1 uchar i,j,k;
143 1 for(i=0;i<214;i++)
144 1 for(j=0;j<255;j++)
145 1 for(k=0;k<125;k++)
146 1 {}
147 1 }
148 void delay100us()
149 {
150 1 uchar i,j,k;
151 1 for(i=0;i<200;i++)
152 1 for(j=0;j<1;j++)
153 1 for(k=0;k<1;k++)
154 1 {}
155 1 }
156 void delay200ms()
157 {
158 1 uchar i,j,k;
159 1 for(i=0;i<43;i++)
160 1 for(j=0;j<255;j++)
161 1 for(k=0;k<255;k++)
162 1 {}
163 1 }
164 void delay5ms()
165 {
166 1 uchar i,j,k;
167 1 for(i=0;i<1;i++)
168 1 for(j=0;j<200;j++)
169 1 for(k=0;k<100;k++)
170 1 {}
171 1 }
172 void delay4us()
173 {
174 1 uchar i,j,k;
175 1 for(i=0;i<2;i++)
176 1 for(j=0;j<1;j++)
177 1 for(k=0;k<1;k++)
178 1 {}
179 1 }
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 4
180 //*********************************************************************
181 //LCD operate
182 void LCDDAT(uchar dat)
183 {
184 1 SFRPAGE=UART1_PAGE;
185 1 while(LCDDTR){}
186 1 SBUF1=dat;
187 1 while(!TI1){}
188 1 TI1=0;
189 1 SFRPAGE=LEGACY_PAGE;
190 1 }
191 void LCDASIIC()//设置LCD为西文显示
192 {
193 1 LCDDAT(0x1B);
194 1 LCDDAT(0x24);
195 1 }
196 void LCDHANZ()//设置汉字
197 {
198 1 LCDDAT(0x1B);
199 1 LCDDAT(0x23);
200 1 }
201 void LCDGBCOLOR(uchar fc,bc)//设置光标的前景色和背景色
202 {
203 1 LCDDAT(0x1B);
204 1 LCDDAT(0x38);
205 1 LCDDAT(fc);//前景色
206 1 LCDDAT(bc);//背景色
207 1 }
208 void LCDXY(uchar x,y)//光标移动到x,y处
209 {
210 1 LCDDAT(0x1B);
211 1 LCDDAT(0x47);
212 1 LCDDAT(x);
213 1 LCDDAT(y);
214 1 }
215 void LCDFCOLOR(uchar color)//设置前景色
216 {
217 1 LCDDAT(0x1B);
218 1 LCDDAT(0x43);
219 1 LCDDAT(color);
220 1 }
221 void LCDGBOC(uchar ok)//光标显示与否
222 {
223 1 LCDDAT(0x1B);
224 1 LCDDAT(0x57);
225 1 LCDDAT(ok);//光标显示
226 1 }
227 void LCDRSFT(uchar n)//光标右移n个字符
228 {
229 1 LCDDAT(0x1B);
230 1 LCDDAT(0x52);
231 1 LCDDAT(n);
232 1 }
233 void LCDOVERLAP(uchar dat)//覆盖、重叠显示方式选择
234 {
235 1 LCDDAT(0x1B);
236 1 LCDDAT(0x58);
237 1 LCDDAT(dat);
238 1 }
239 void LCDLINE(uchar color,x1l,x1h,y1l,y1h,x2l,x2h,y2l,y2h)//绘制直线
240 {
241 1 LCDDAT(0x1B);
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 5
242 1 LCDDAT(0x46);
243 1 LCDDAT(color);
244 1 LCDDAT(x1l);
245 1 LCDDAT(x1h);
246 1 LCDDAT(y1l);
247 1 LCDDAT(y1h);
248 1 LCDDAT(x2l);
249 1 LCDDAT(x2h);
250 1 LCDDAT(y2l);
251 1 LCDDAT(y2h);
252 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -