📄 c_code.lst
字号:
185 2 ACC = ACC & 0x0fE; //模拟电路休眠控制位,1休,0工作
186 2 Regstr = ACC;
187 2 PortA000 = ACC;
188 2
189 2 while(1)
190 2 {
191 3 AD_A0 = 0;
192 3 AD_A1 = 0;
193 3 new_value[0] = ad_convert(); //模拟输入路1测量
194 3 do
195 3 {
196 4 C = AD_BUSY;
197 4 }while(C == 0);
198 3 Port10F4 = ACC; //启动模拟转换上一路,锁存第当前路
199 3
200 3 do
201 3 {
202 4 C = AD_BUSY; //等待以前路转换
203 4 }while(C == 0);
204 3 Port10F4 = ACC; //启动模拟转换第当前路,锁存第当前路
205 3
206 3 do
207 3 {
208 4 C = AD_BUSY;
209 4 }while(C == 0); //等待当前路转换结束;
210 3 ACC = Port10FF; //读yiqian转换的低字节;
211 3 new_value[1] = new_value[1] & ACC; //需要将赋给new_value[1]的低字节
212 3 ACC = Port10FB; //读yiqian转换的高字节
213 3 //做移位,将其赋给new_value[1]的高字节
214 3
215 3 AD_A0 = 1;
216 3 new_value[1] = ad_convert(); //模拟输入路2测量
217 3
218 3 AD_A0 = 0;
219 3 AD_A1 = 1;
220 3 new_value[2] = ad_convert(); //模拟输入路3测量
221 3
222 3 AD_A0 = 1;
223 3 new_value[3] = ad_convert(); //模拟输入路4测量
224 3
225 3 Delay(1);
226 3 Delay(1);
227 3 FS = 1;
228 3 Delay(1);
229 3 Delay(1);
230 3
231 3 FS = 0; //ad_sample();
232 3 ACC = Port6000;
233 3 ACC = ACC & 0x80;
234 3 if(ACC != 0x80)
235 3 {
236 4
237 4 ACC = Regstr; //poweroff();
238 4 ACC = ACC | 0x01; //模拟电路休眠控制位,1休,0工作
239 4 Regstr = ACC;
240 4 PortA000 = ACC;
241 4 ACC = Regstr;
C51 COMPILER V8.02 C_CODE 10/25/2006 07:30:58 PAGE 5
242 4 ACC = ACC & 0x7F; //模拟电路电源控制位,1供电,0断电
243 4 Regstr = ACC;
244 4 PortA000 = ACC;
245 4
246 4 FPWR = 0;
247 4 iflag[0] = 1;
248 4 break;
249 4 }
250 3 calibration(new_value);
251 3 deoutlier(new_value, value, 10); //数据处理
252 3 LcmDynWriteData(0,0,0x11,ihexs); //显示
253 3 DelayKey(2);
254 3
255 3 PortA000 = 0x08;
256 3 ACC = Port6000;
257 3 ACC = ACC & 0x10;
258 3 if(ACC == 0x10) //若SET键按下,可弹出上面的菜单
259 3 {
260 4 }
261 3 ACC = Port6000;
262 3 ACC = ACC & 0x08;
263 3 if(ACC == 0x08) //若FIND键按下,为查询
264 3 {
265 4 }
266 3 ACC = Port6000;
267 3 ACC = ACC & 0x04;
268 3 if(ACC == 0x04) //DELETE键按下
269 3 {
270 4 }
271 3 PortA000 = 0x04;
272 3 ACC = Port6000;
273 3 ACC = ACC & 0x04;
274 3 if(ACC == 0x04) //SAVE键按下
275 3 {
276 4 }
277 3 ACC = Port6000;
278 3 ACC = ACC & 0x08;
279 3 if(ACC == 0x08) //ALARM键按下
280 3 {
281 4 }
282 3 }
283 2 }while(iflag[0] != 0);
284 1 }
285
286 // hex to bcd 转换程序
287 void hextobcd(unsigned int hexs,unsigned char j)
288 {
289 1 unsigned int va;
290 1 unsigned char i;
291 1 va = 10000; //最大数级万位
292 1 for (i=j-1;i;i--) {
293 2 disp_buffer[i] = 0; //目标数组清零
294 2 while ((hexs>=va)&&(va>9)) {
295 3 hexs -= va; //减除数
296 3 disp_buffer[i]++; //商位加1
297 3 }
298 2 va /= 10; //除数除10,指向低一位
299 2 }
300 1 disp_buffer[0]=hexs; //最后个位数
301 1 }
302
303 //数据处理程序
C51 COMPILER V8.02 C_CODE 10/25/2006 07:30:58 PAGE 6
304 void deoutlier(unsigned int x[4], unsigned int x0[4][2], char Bound) //野点剔除
305 {
306 1 for(i=0;i<4;i++)
307 1 value[i][0] = value[i][1];
308 1 for(i=0;i<4;i++)
309 1 {
310 2 if(x[i]-x0[i][0]> Bound||x0[i][0]-x[i]>Bound)
311 2 value[i][1] = 2*x0[i][0] - x0[i][1];
312 2 else
313 2 value[i][1] = x[i];
314 2 }
315 1 }
316
317 void calibration(unsigned int x[4])//温度校正公式见说明文档
318 {
319 1 for(i=0;i<4;i++)
320 1 new_value[i] = x[i]; //
321 1 }
322
323 //指令&数据读写状态
324 void CheckRWCD(void){
325 1 while((LcmCmdPort & 0x03) != 0x03); //低电平忙
326 1 }
327 //数据自动写状态
328 void CheckAutoWrite(void){
329 1 while((LcmCmdPort & 0x08) == 0); //低电平忙
330 1 }
331 //屏读/屏考贝出错状态
332 //void CheckScreen(void){
333 // while(LcmCmdPort & 0x40); //1出错,0正确
334 //}
335 //一个数据子写入函数
336 void LcmWriteData(unsigned char uData) {
337 1 LcmDataPort = uData;
338 1 }
339 //一个数据读出函数
340 //unsigned char LcmReadData( void ){
341 // unsigned char uData;
342 // uData = LcmDataPort;
343 // return uData;
344 //}
345 //无参数指令写入函数
346 void LcmWriteCommand(unsigned char Command) {
347 1 CheckRWCD(); //检测指令读写状态
348 1 LcmCmdPort = Command;
349 1 }
350 //单参数指令写入函数
351 void LcmWriteCommandWith1Par(unsigned char Parameter,unsigned char Command){
352 1 CheckRWCD(); //检测指令读写状态
353 1 LcmDataPort = Parameter;
354 1 CheckRWCD();
355 1 LcmCmdPort = Command;
356 1 }
357 //双参数指令写入函数
358 void LcmWriteCommandWith2Par(unsigned char Parameter1,unsigned char Parameter2,unsigned char Command){
359 1 CheckRWCD(); //检测指令读写状态
360 1 LcmDataPort = Parameter1;
361 1 CheckRWCD();
362 1 LcmDataPort = Parameter2;
363 1 CheckRWCD();
364 1 LcmCmdPort = Command;
365 1 }
C51 COMPILER V8.02 C_CODE 10/25/2006 07:30:58 PAGE 7
366 //LCM初始化函数
367 void LcmInit( void ){
368 1 LcmWriteCommandWith2Par(0x00,0x00,0x40); //设置文本显示区首地址
369 1 LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x41); //设置文本显示区宽度
370 1 LcmWriteCommandWith2Par(0x00,0x08,0x42); //设置图形显示区首地址0x0800
371 1 LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x43); //设置图形显示区宽度
372 1 LcmWriteCommand(0xA7); //设置光标形状 8x8方块
373 1 LcmWriteCommand(0x81); //显示方式设置 文本xor图形(异或)
374 1 LcmWriteCommand(0x9C); //显示开关设置 文本开,图形开,光标闪烁关
375 1 }
376 //延时函数
377 void Delay(unsigned int MS){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -