⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpmnckj.lst

📁 该程序实现触摸屏控制,与KY系列智能液晶终端配合使用
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -