📄 cmpmnckj.lst
字号:
469 1 if ((Xzb>AN7[0]) && (Xzb<AN7[2]) && (Yzb>AN7[1]) && (Yzb<AN7[3])) {return 7;};
470 1 if ((Xzb>AN8[0]) && (Xzb<AN8[2]) && (Yzb>AN8[1]) && (Yzb<AN8[3])) {return 8;};
471 1 if ((Xzb>AN9[0]) && (Xzb<AN9[2]) && (Yzb>AN9[1]) && (Yzb<AN9[3])) {return 9;};
472 1 if ((Xzb>AN10[0]) && (Xzb<AN10[2]) && (Yzb>AN10[1]) && (Yzb<AN10[3])) {return 10;};
473 1 return 0;
474 1 }
475 //============================================================================
476 //jccmp检测触摸屏,3次采样为同一键值为有效
477 jccmp()
478 {
479 1 uint Xzb,Yzb; //X坐标在Xzb中,Y坐标在Yzb中
480 1 uchar zj[6]; //接收触摸屏数据的第2,3,4,5字节。
481 1 uchar jz[5]; //放键值(可能为:1,2,3,4,5,6,7,8,9,10)
482 1 uchar i;
483 1 while(1)
484 1 {
485 2 for(i=0;i<3;i++)
486 2 {
487 3 while(1){if(JSsj()==0xa0)break;}
488 3 zj[2]=JSsj();
C51 COMPILER V7.07 CMPMNCKJ 09/13/2007 12:26:26 PAGE 9
489 3 zj[3]=JSsj();
490 3 zj[4]=JSsj();
491 3 zj[5]=JSsj();
492 3
493 3 Xzb=zj[2];
494 3 Xzb=Xzb<<6;
495 3 Xzb=Xzb+zj[3];//X坐标在Xzb中
496 3 Yzb=zj[4];
497 3 Yzb=Yzb<<6;
498 3 Yzb=Yzb+zj[5];//Y坐标在Yzb中
499 3 jz[i]=pbAN(Xzb,Yzb);//求键值
500 3 };
501 2 if((jz[0]=jz[1]) && (jz[1]=jz[2]) && (jz[0]!=0))
502 2 {return(jz[0]);};
503 2 }
504 1 }
505 //=========================================================================================
506 void main(void)
507 {
508 1 uchar an;//
509 1 uchar m=1;//m=1,2,3,4,5,6代表当前处理的数据是那一位.
510 1 uchar sj[7]={0,1,2,3,4,5,6};
511 1
512 1 CMP_DATA=1;
513 1 ZD_BUSY=1;
514 1 ZD_DATA=1;
515 1
516 1 Xzsj=39;//6位键盘占242*86点,这是键盘区左上角的X,Y坐标.如果变更左上角的坐标,需重新校准触摸屏.
517 1 Yzsj=21;
518 1
519 1 //清屏幕(黑色)
520 1 FSsj(0X1B);
521 1 FSsj(0X51);
522 1 FSsj(0);
523 1 h6jp();//画出6位数字键盘
524 1 m=1;
525 1 xj6k(m,1,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);
526 1
527 1 //循环接收数据
528 1 while(1)
529 1 {
530 2 an=jccmp();
531 2 if((an>=1) && (an<=6))
532 2 {m=an;
533 3 xj6k(m,1,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);
534 3 }
535 2 if(an==8)//增加
536 2 {
537 3 if(sj[m]<9)
538 3 {sj[m]=sj[m]+1;}
539 3 else
540 3 {sj[m]=0;}
541 3 xj6k(m,0,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);
542 3 }
543 2 if(an==9)//减小
544 2 {
545 3 if(sj[m]==0 || sj[m]>9)
546 3 {sj[m]=9;}
547 3 else
548 3 {sj[m]=sj[m]-1;}
549 3 xj6k(m,0,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);
550 3 }
C51 COMPILER V7.07 CMPMNCKJ 09/13/2007 12:26:26 PAGE 10
551 2
552 2 if(an==7)
553 2 {
554 3 FSsj(0X1B);
555 3 FSsj(0X51);
556 3 FSsj(0);
557 3 h6jp();
558 3 m=1;
559 3 sj[1]=1;
560 3 sj[2]=2;
561 3 sj[3]=3;
562 3 sj[4]=4;
563 3 sj[5]=5;
564 3 sj[6]=6;
565 3 xj6k(m,1,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);
566 3 }//取消
567 2 if(an==10)
568 2 {
569 3
570 3 FSsj(0X1B); //调用字符集3
571 3 FSsj(0X33);
572 3 FSsj(0X1B); //设置字符旋转方向
573 3 FSsj(0X66);
574 3 FSsj(0X04);
575 3 // FSsj(0X1B);
576 3 //FSsj(0X04);
577 3 FSsj(0X1B);
578 3 FSsj('z');
579 3 FSsj(0Xc0);
580 3 FSsj(0Xcf);
581 3 FSsj(0X80);
582 3 FSsj(0Xff);
583 3 FSsj(0XF7);
584 3 FSsj(0XF8);
585 3 FSsj(0XF9);
586 3 FSsj(0XFA);
587 3 FSsj(0XFB);
588 3 FSsj(0XFC);
589 3 }//确认
590 2
591 2
592 2
593 2 /* FSsj(0X1B);//1#按键
594 2 FSsj('z');
595 2 FSsj((0X9000+Xzsj+2+4+5)>>8);
596 2 FSsj(Xzsj+2+4+5);
597 2 FSsj((0X8000+Yzsj+2+4+11)>>8);
598 2 FSsj(Yzsj+2+4+11);
599 2 FSsj(0X1B);
600 2 FSsj(0X33);
601 2 FSsj(0X1B);
602 2 FSsj(0X66);
603 2 FSsj(0X44);
604 2 FSsj('1');*/
605 2
606 2
607 2 //在左上角显示收到数据
608 2 FSsj(0X1B);
609 2 FSsj(0X33);
610 2 FSsj(0X1B);
611 2 FSsj(0X66);
612 2 FSsj(0X4);
C51 COMPILER V7.07 CMPMNCKJ 09/13/2007 12:26:26 PAGE 11
613 2 FSsj(0X1B);
614 2 FSsj('z');
615 2 FSsj(0X90);
616 2 FSsj(0);
617 2 FSsj(0X80);
618 2 FSsj(0);
619 2 FSsj('X');
620 2 FSsj('=');
621 2 FSsj(zh16(Xzb>>8));
622 2 FSsj(zh16(Xzb>>4));
623 2 FSsj(zh16(Xzb));
624 2 FSsj('H');
625 2 FSsj(',');
626 2 FSsj('Y');
627 2 FSsj('=');
628 2 FSsj(zh16(Yzb>>8));
629 2 FSsj(zh16(Yzb>>4));
630 2 FSsj(zh16(Yzb));
631 2 FSsj('H');
632 2
633 2 FSsj(an+0x30);
634 2 }
635 1 }
636
637
638
639 //用XY坐标直接划点
640 // FSsj(0X1B);//划点指令
641 // FSsj('d');
642 // FSsj(0XF0+(Xzb>>8));//划白点
643 // FSsj(Xzb&0XFF);
644 // FSsj(Yzb>>8);
645 // FSsj(Yzb&0XFF);
646
647 //XY坐标除以4后划点
648 // Xzb=Xzb/4;
649 // Yzb=Yzb/4;
650 // FSsj(0X1B);//划点指令
651 // FSsj('d');
652 // FSsj(0XF0);//划白点
653 // FSsj(Xzb);
654 // FSsj(0);
655 // FSsj(Yzb);
656
657 //=========================================================================================
658 //例1:当通讯波特率F=9.6KHz,单片机晶振Z=18.432MHz时,TIMEzq=50
659 //计算方法:
660 //当波特率为9.6KHz时,每个二进制位的宽度为104uS.振荡周期数zq=(1000/9.6)*18.432MHz=1920个振荡周期
661 //调用本函数的其它指令执行时间为(12+24*3+12*3)=120个振荡周期.
662 //执行每个循环需要(12+24=36)个振荡周期,则TIMEzq=(zq-120)/36=(1920-120)/36=50
663 //即:TIMEzq=[((1000/F)*Z)-120]/36=50
664 //-------------
665 //例2:当通讯波特率F=4.8KHz,单片机晶振Z=18.432MHz时:
666 // TIMEzq=[((1000/F)*Z)-120]/36=103
667 //-------------
668 //例3:当通讯波特率F=19.2KHz,单片机晶振Z=18.432MHz时:
669 // TIMEzq=[((1000/F)*Z)-120]/36=23
670 //-------------
671 //例4:当通讯波特率F=9.6KHz,单片机晶振Z=12.000MHz时:
672 // TIMEzq=[((1000/F)*Z)-120]/36=31
673 //-------------
674 //例5:当通讯波特率F=4.8KHz,单片机晶振Z=12.000MHz时:
C51 COMPILER V7.07 CMPMNCKJ 09/13/2007 12:26:26 PAGE 12
675 // TIMEzq=[((1000/F)*Z)-120]/36=66
676 //-------------
677 //例6:当通讯波特率F=19.2KHz,单片机晶振Z=12.000MHz时:
678 // TIMEzq=[((1000/F)*Z)-120]/36=14
679 //-------------
680 //例7:当通讯波特率F=9.6KHz,单片机晶振Z= 6.000MHz时:
681 // TIMEzq=[((1000/F)*Z)-120]/36=14
682 //-------------
683 //例8:当通讯波特率F=9.6KHz,单片机晶振Z=11.0592MHz时:
684 // TIMEzq=[((1000/F)*Z)-120]/36=28
685 //-------------
686 //例9:当通讯波特率F=9.6KHz,单片机晶振Z=22.1184MHz时:
687 // TIMEzq=[((1000/F)*Z)-120]/36=60
688 //-------------
689 //例10:当通讯波特率F=9.6KHz,单片机晶振Z=24.0000MHz时:
690 // TIMEzq=[((1000/F)*Z)-120]/36=66
691 //------------
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3524 ----
CONSTANT SIZE = 87 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 30
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 + -