📄 l8279.lst
字号:
C51 COMPILER V3.20, SN-0 L8279 05/24/04 10:40:00 PAGE 5
242 1 if(LEDRamStatus != 0x00){
243 2 if( (LEDStatus == S_P_Val) ||
244 2 (LEDStatus == S_I_Val) ||
245 2 (LEDStatus == S_P_Val) ||
246 2 (LEDStatus == S_SP_Val)||
247 2 (LEDStatus == S_F_Val) ) {
248 3 for(i=0;i<10;i++){
249 4 if(LEDRamStatus == NumInTable[i]){
250 5 Num = i;
251 5 break;
252 5 }
253 4 }
254 3
255 3 Num++; /*下一位数字*/
256 3 if((Num>=0)&&(Num<=9))
257 3 WriteLed(1,NumInTable[Num]);
258 3 else
259 3 WriteLed(1,NumInTable[0]);
260 3 } /*将第1个LED的显示内容更新*/
261 2 }
262 1 return;
263 1 }
264
265 /*********************************************************/
266 /***2号LED键***/
267 void OnLed1Down() /*循环改动一个LED的显示值*/
268 {
269 1 idata BYTE Num;
270 1 idata BYTE i;
271 1 idata BYTE LEDRamStatus;
272 1 CMD8279 = 0x62;
273 1 LEDRamStatus = DATA8279;
274 1
275 1 if(LEDRamStatus != 0x00){
276 2 if( (LEDStatus == S_P_Val) ||
277 2 (LEDStatus == S_I_Val) ||
278 2 (LEDStatus == S_P_Val) ||
279 2 (LEDStatus == S_SP_Val)||
280 2 (LEDStatus == S_F_Val)) {
281 3 for(i=0;i<10;i++){
282 4 if(LEDRamStatus == NumInTable[i]){
283 5 Num = i;
284 5 break;
285 5 }
286 4 }
287 3
288 3 Num++; /*下一位数字*/
289 3 if((Num>=0)&&(Num<=9))
290 3 WriteLed(2,NumInTable[Num]);
291 3 else
292 3 WriteLed(2,NumInTable[0]);
293 3 } /*将第1个LED的显示内容更新*/
294 2 }
295 1 return;
296 1 }
297
298 /*********************************************************/
299 /***3号LED键***/
300 void OnLed0Down() /*循环改动一个LED的显示值*/
301 {
302 1 idata BYTE Num;
303 1 idata BYTE i;
C51 COMPILER V3.20, SN-0 L8279 05/24/04 10:40:00 PAGE 6
304 1 idata BYTE LEDRamStatus;
305 1 CMD8279 = 0x63;
306 1 LEDRamStatus = DATA8279;
307 1
308 1 if(LEDRamStatus != 0x00){
309 2 if( (LEDStatus == S_P_Val) ||
310 2 (LEDStatus == S_I_Val) ||
311 2 (LEDStatus == S_P_Val) ||
312 2 (LEDStatus == S_SP_Val)||
313 2 (LEDStatus == S_F_Val) ) {
314 3 for(i=0;i<10;i++){
315 4 if(LEDRamStatus == NumInTable[i]){
316 5 Num = i;
317 5 break;
318 5 }
319 4 }
320 3
321 3 Num++; /*下一位数字*/
322 3 if((Num>=0)&&(Num<=9))
323 3 WriteLed(3,NumInTable[Num]);
324 3 else
325 3 WriteLed(3,NumInTable[0]);
326 3 } /*将第1个LED的显示内容更新*/
327 2 }
328 1 return;
329 1 }
330
331 /*********************************************************/
332 /***内部数据更新函数***/
333 void LEDDataToRAM()
334 {
335 1 idata BYTE i,j;
336 1 idata BYTE Ledram[4];
337 1 idata BYTE dat[4];
338 1 UINT result;
339 1 CMD8279 = 0x70;
340 1 for(i=0;i<4;i++){
341 2 Ledram[i] = DATA8279;
342 2 }
343 1
344 1 for(i=0;i<4;i++){
345 2 for(j=0;j<10;j++) {
346 3 if(Ledram[i] == NumInTable[j])
347 3 dat[i] = j;
348 3 }
349 2 }
350 1
351 1 result = dat[3]*1000 + dat[2]*100 + dat[1]*10 + dat[0];
352 1
353 1 switch(LEDStatus){
354 2 case S_P_Val:
355 2 p = result;
356 2 break;
357 2 case S_I_Val:
358 2 I = result;
359 2 break;
360 2 case S_D_Val:
361 2 D = result;
362 2 break;
363 2 case S_SP_Val:
364 2 SP2 = (result<=10)?10:result;
365 2 break;
C51 COMPILER V3.20, SN-0 L8279 05/24/04 10:40:00 PAGE 7
366 2 case S_F_Val:
367 2 SP1toSP2Time = result;
368 2 AlarmFlag = 0; /***改变输入时间,不报警***/
369 2 if(SP1toSP2Time == 0){
370 3 Rk = SP2;
371 3 TR1 = 0; /**输入时间为0关闭定时器1 **/
372 3 }
373 2 else {
374 3 TR1 = 1;
375 3 /***===+++++重新设定时,Rk初始值为当前温度+++++===***/
376 3 Rk=Yk;
377 3 SP_temp=Yk;
378 3 /******===+++++++++++===**********/
379 3 if (SP2 >= Rk){
380 4 SPOneStepValSign = 1;
381 4 SPOneStepVal = (SP2-Rk)/(SP1toSP2Time*6.0);
382 4 }
383 3 else {
384 4 SPOneStepValSign = 0;
385 4 SPOneStepVal = (Rk-SP2)/(SP1toSP2Time*6.0);
386 4 }
387 3 }
388 2 break;
389 2 default:
390 2 break;
391 2 }
392 1 return;
393 1 }
394
395 /*
显示部分
*/
400
401 /******************************************************/
402 /***初始化8279***/
403 void Init_8279()
404 {
405 1 CMD8279 = 0x11; /*键盘设置为译码扫描,双键锁定方式*/
406 1 /*显示8个字符,右入口*/
407 1
408 1 CMD8279 = 0x34; /*分频数为20*/
409 1
410 1 Clear_8279();
411 1 return;
412 1 }
413
414 /******************************************************/
415 /***清8279FIFO RAM和显示RAM***/
416 void Clear_8279() reentrant
417 {
418 1 idata BYTE CmdStatus; /*8279控制寄存器状态*/
419 1 CMD8279 = 0xD3; /*清显示器和键盘*/
420 1 CmdStatus = CMD8279;
421 1 while((CmdStatus&0x80)) {
422 2 CmdStatus = CMD8279;
423 2 } /*等待清零结束*/
424 1 return;
425 1 }
426
427 void Disp_A_Number(UINT times) reentrant
C51 COMPILER V3.20, SN-0 L8279 05/24/04 10:40:00 PAGE 8
428 {
429 1 idata BYTE i;
430 1 idata BYTE dispchar[4];
431 1
432 1 if(times > 9999){
433 2 return;
434 2 }
435 1
436 1 dispchar[3] = NumInTable[times/1000];
437 1
438 1 times = times%1000;
439 1 dispchar[2] = NumInTable[times/100];
440 1
441 1 times = times%100;
442 1 dispchar[1] = NumInTable[times/10];
443 1
444 1 dispchar[0] = NumInTable[times%10];
445 1
446 1 Clear_8279();
447 1 CMD8279 = 0x90;
448 1 for(i=0;i<4;i++) {
449 2 DATA8279 = dispchar[i];
450 2 }
451 1 return;
452 1 }
453
454 /******************************************************/
455 /***显示温度***/
456 void DispT() reentrant
457 {
458 1 Disp_A_Number(Yk);
459 1 LEDStatus = S_NULL;
460 1 TFlag = TRUE;
461 1 return;
462 1 }
463
464 /******************************************************/
465 /***显示字符P***/
466 void DispP()
467 {
468 1 Clear_8279();
469 1 CMD8279 = 0x80;
470 1 DATA8279 = CharP;
471 1 LEDStatus = S_P;
472 1 TFlag = FALSE;
473 1 return;
474 1 }
475
476 /******************************************************/
477 /***显示参数P的值***/
478 void DispPVal()
479 {
480 1 Clear_8279();
481 1 Disp_A_Number(p);
482 1 LEDStatus = S_P_Val;
483 1 TFlag = FALSE;
484 1 return;
485 1 }
486
487 /******************************************************/
488 /***显示字符I***/
489 void DispI()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -