?? hw.lst
字號:
296 4 TR0=1;//打開定時器0
297 4 }
298 3 sound=0;
299 3 code_dis[5]=3;
300 3 display();
301 3 break;
302 3 case 4:
C51 COMPILER V8.08 HW 12/26/2008 22:19:58 PAGE 6
303 3 if(pulse==26)
304 3 {
305 4 delay(0xff);
306 4 pulse=0;
307 4 memcpy(hw+13,hw_4,12);
308 4 TH0=0xff-hw[pulse];
309 4 TL0=0xe0;
310 4 pulse++;
311 4 hw_send=0;
312 4 EA=1;//允許中斷
313 4 TR0=1;//打開定時器0
314 4 }
315 3 sound=0;
316 3 code_dis[5]=4;
317 3 display();
318 3 break;
319 3 case 5:
320 3 if(pulse==26)
321 3 {
322 4 delay(0xff);
323 4 pulse=0;
324 4 memcpy(hw+13,hw_5,12);
325 4 TH0=0xff-hw[pulse];
326 4 TL0=0xe0;
327 4 pulse++;
328 4 hw_send=0;
329 4 EA=1;//允許中斷
330 4 TR0=1;//打開定時器0
331 4 }
332 3 sound=0;
333 3 code_dis[5]=5;
334 3 display();
335 3 break;
336 3 case 6:
337 3 if(pulse==26)
338 3 {
339 4 delay(0xff);
340 4 pulse=0;
341 4 memcpy(hw+13,hw_6,12);
342 4 TH0=0xff-hw[pulse];
343 4 TL0=0xe0;
344 4 pulse++;
345 4 hw_send=0;
346 4 EA=1;//允許中斷
347 4 TR0=1;//打開定時器0
348 4 }
349 3 sound=0;
350 3 code_dis[5]=6;
351 3 display();
352 3 break;
353 3 case 7:
354 3 if(pulse==26)
355 3 {
356 4 delay(0xff);
357 4 pulse=0;
358 4 memcpy(hw+13,hw_7,12);
359 4 TH0=0xff-hw[pulse];
360 4 TL0=0xe0;
361 4 pulse++;
362 4 hw_send=0;
363 4 EA=1;//允許中斷
364 4 TR0=1;//打開定時器0
C51 COMPILER V8.08 HW 12/26/2008 22:19:58 PAGE 7
365 4 }
366 3 sound=0;
367 3 code_dis[5]=7;
368 3 display();
369 3 break;
370 3 case 8:
371 3 if(pulse==26)
372 3 {
373 4 delay(0xff);
374 4 pulse=0;
375 4 memcpy(hw+13,hw_8,12);
376 4 TH0=0xff-hw[pulse];
377 4 TL0=0xe0;
378 4 pulse++;
379 4 hw_send=0;
380 4 EA=1;//允許中斷
381 4 TR0=1;//打開定時器0
382 4 }
383 3 sound=0;
384 3 code_dis[5]=8;
385 3 display();
386 3 break;
387 3 default:
388 3 if(pulse==26)
389 3 {
390 4 sound=1;
391 4 hw_send=1;
392 4 TR0=0;//關定時器0
393 4 EA=0;
394 4 }
395 3 break;
396 3 }
397 2 }
398 1 }
399
400 void delay(uchar delay_temp)//延時子程序
401 {
402 1 uchar i,j;
403 1 for(i=0;i<delay_temp;i++)
404 1 {
405 2 for(j=0;j<255;j++);
406 2 }
407 1 }
408
409 void delaym(uchar delaym_temp)//延時子程序
410 {
411 1 uchar i;
412 1 for(i=0;i<delaym_temp;i++);
413 1 }
414
415 void disp(uchar dis)//送顯示命令子程序
416 {
417 1 uchar dis_i,dis_temp;
418 1 dis_temp=0x01;
419 1 for(dis_i=0;dis_i<8;dis_i++)
420 1 {
421 2 sm1623_clk=0;
422 2 delaym(1);
423 2 if((dis&dis_temp)==0){sm1623_din=0;}
424 2 else{sm1623_din=1;}
425 2 sm1623_clk=1;//上升沿輸入數據
426 2 delaym(1);
C51 COMPILER V8.08 HW 12/26/2008 22:19:58 PAGE 8
427 2 dis_temp=dis_temp<<1;
428 2 }
429 1 }
430
431 void display()//顯示子程序
432 {
433 1 uchar code_dis_d[6];
434 1 uchar i;
435 1 for(i=0;i<6;i++)//計算顯示碼
436 1 {
437 2 switch(code_dis[i])
438 2 {
439 3 case 1:
440 3 code_dis_d[i]=0x06;
441 3 break;
442 3 case 2:
443 3 code_dis_d[i]=0x5b;
444 3 break;
445 3 case 3:
446 3 code_dis_d[i]=0x4f;
447 3 break;
448 3 case 4:
449 3 code_dis_d[i]=0x66;
450 3 break;
451 3 case 5:
452 3 code_dis_d[i]=0x6d;
453 3 break;
454 3 case 6:
455 3 code_dis_d[i]=0x7d;
456 3 break;
457 3 case 7:
458 3 code_dis_d[i]=0x07;
459 3 break;
460 3 case 8:
461 3 code_dis_d[i]=0x7f;
462 3 break;
463 3 case 9:
464 3 code_dis_d[i]=0x6f;
465 3 break;
466 3 case 10://顯示黑
467 3 code_dis_d[i]=0x00;
468 3 break;
469 3 case 11://顯示A
470 3 code_dis_d[i]=0x77;
471 3 break;
472 3 case 12://顯示d
473 3 code_dis_d[i]=0x5e;
474 3 break;
475 3 case 13://顯示-
476 3 code_dis_d[i]=0x40;
477 3 break;
478 3 case 14://顯示8.
479 3 code_dis_d[i]=0xff;
480 3 break;
481 3 default://顯示0
482 3 code_dis_d[i]=0x3f;
483 3 break;
484 3 }
485 2 }
486 1 sm1623_stb=0;
487 1 disp(0x02);//顯示模式6位12段
488 1 sm1623_stb=1;
C51 COMPILER V8.08 HW 12/26/2008 22:19:58 PAGE 9
489 1 delaym(1);
490 1 sm1623_stb=0;
491 1 disp(0x40);//設置數據
492 1 sm1623_stb=1;
493 1 delaym(1);
494 1 sm1623_stb=0;
495 1 disp(0xc0);//設置地址
496 1 disp(code_dis_d[0]);//1
497 1 disp(0x00);
498 1 disp(code_dis_d[1]);//2
499 1 disp(0x00);
500 1 disp(code_dis_d[2]);//3
501 1 disp(0x00);
502 1 disp(code_dis_d[3]);//4
503 1 disp(0x00);
504 1 disp(code_dis_d[4]);//5
505 1 disp(0x00);
506 1 disp(code_dis_d[5]);//6
507 1 disp(0x00);
508 1 sm1623_stb=1;
509 1 delaym(1);
510 1 sm1623_stb=0;
511 1 disp(0x8a);//控制顯示
512 1 sm1623_stb=1;
513 1 }
514
515 uchar key(void)//按鍵讀數據子程序
516 {
517 1 uchar key_i,key_temp,key_re;
518 1 key_temp=0x00;
519 1 for(key_i=0;key_i<8;key_i++)
520 1 {
521 2 sm1623_clk=0;//下降沿輸出數據
522 2 delaym(1);
523 2 if(sm1623_dout==0){key_temp=key_temp&0x7f;}
524 2 else{key_temp=key_temp|0x80;}
525 2 key_re=key_temp;
526 2 sm1623_clk=1;
527 2 delaym(1);
528 2 key_temp=key_temp>>1;
529 2 }
530 1 return key_re;
531 1 }
532
533 uchar key_deal(void)//按鍵處理子程序,返回按鍵編號
534 {
535 1 uchar temp_k1,temp_k2;
536 1 sm1623_stb=0;
537 1 disp(0x42);//讀鍵掃數據指令
538 1 temp_k1=key()&0x1b;
539 1 temp_k2=key()&0x1b;
540 1 sm1623_stb=1;//取消片選,如果沒有此語句按鍵5時,會出現按鍵1被按下的現象
541 1 if(temp_k1!=0x00)
542 1 {
543 2 switch(temp_k1)
544 2 {
545 3 case 0x01:
546 3 return 0x01;
547 3 break;
548 3 case 0x02:
549 3 return 0x02;
550 3 break;
C51 COMPILER V8.08 HW 12/26/2008 22:19:58 PAGE 10
551 3 case 0x08:
552 3 return 0x03;
553 3 break;
554 3 case 0x10:
555 3 return 0x04;
556 3 break;
557 3 default:
558 3 return 0x00;
559 3 break;
560 3 }
561 2 }
562 1 if(temp_k2!=0x00)
563 1 {
564 2 switch(temp_k2)
565 2 {
566 3 case 0x01:
567 3 return 0x05;
568 3 break;
569 3 case 0x02:
570 3 return 0x06;
571 3 break;
572 3 case 0x08:
573 3 return 0x07;
574 3 break;
575 3 case 0x10:
576 3 return 0x08;
577 3 break;
578 3 default:
579 3 return 0x00;
580 3 break;
581 3 }
582 2 }
583 1 return 0x00;
584 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1824 ----
CONSTANT SIZE = 133 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 46 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -