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

📄 cmpmnckj.c

📁 该程序实现触摸屏控制,与KY系列智能液晶终端配合使用
💻 C
📖 第 1 页 / 共 2 页
字号:
        }

        if(n==1 || (n==0 && m==3))
        {
        FSsj(0X1B);//3#按键
        FSsj('j');
        if(m==3)
          {FSsj((0X9000+Xzsj+2+4+(35+4)*2+2)>>8);}
          if(m!=3)
          {FSsj((0X8000+Xzsj+2+4+(35+4)*2+2)>>8);}
        FSsj(Xzsj+2+4+(35+4)*2+2);
        FSsj(Yzsj+2+4+2>>8);
        FSsj(Yzsj+2+4+2);
        FSsj((Xzsj+2+4+35+(35+4)*2-2)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*2-2);
        FSsj(Yzsj+2+4+35-2>>8);
        FSsj(Yzsj+2+4+35-2);
        FSsj(0X1B);
        FSsj('z');
        FSsj((0Xf000+Xzsj+2+4+(35+4)*2+2+6)>>8);
        FSsj(Xzsj+2+4+(35+4)*2+2+6);
        FSsj(0X8000+Yzsj+2+4+2+10>>8);
        FSsj(Yzsj+2+4+2+10);
        FSsj(sj3+0x30);
        }

        if(n==1 || (n==0 && m==4))
        {
        FSsj(0X1B);//4#按键
        FSsj('j');
        if(m==4)
          {FSsj((0X9000+Xzsj+2+4+(35+4)*3+2)>>8);}
        if(m!=4)
          {FSsj((0X8000+Xzsj+2+4+(35+4)*3+2)>>8);}
        FSsj(Xzsj+2+4+(35+4)*3+2);
        FSsj(Yzsj+2+4+2>>8);
        FSsj(Yzsj+2+4+2);
        FSsj((Xzsj+2+4+35+(35+4)*3-2)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*3-2);
        FSsj(Yzsj+2+4+35-2>>8);
        FSsj(Yzsj+2+4+35-2);
        FSsj(0X1B);
        FSsj('z');
        FSsj((0Xf000+Xzsj+2+4+(35+4)*3+2+6)>>8);
        FSsj(Xzsj+2+4+(35+4)*3+2+6);
        FSsj(0X8000+Yzsj+2+4+2+10>>8);
        FSsj(Yzsj+2+4+2+10);
        FSsj(sj4+0x30);
        }

        if(n==1 || (n==0 && m==5))
        {
        FSsj(0X1B);//5#按键
        FSsj('j');
        if(m==5)
          {FSsj((0X9000+Xzsj+2+4+(35+4)*4+2)>>8);}
        if(m!=5)
          {FSsj((0X8000+Xzsj+2+4+(35+4)*4+2)>>8);}
        FSsj(Xzsj+2+4+(35+4)*4+2);
        FSsj(Yzsj+2+4+2>>8);
        FSsj(Yzsj+2+4+2);
        FSsj((Xzsj+2+4+35+(35+4)*4-2)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*4-2);
        FSsj(Yzsj+2+4+35-2>>8);
        FSsj(Yzsj+2+4+35-2);
        FSsj(0X1B);
        FSsj('z');
        FSsj((0Xf000+Xzsj+2+4+(35+4)*4+2+6)>>8);
        FSsj(Xzsj+2+4+(35+4)*4+2+6);
        FSsj(0X8000+Yzsj+2+4+2+10>>8);
        FSsj(Yzsj+2+4+2+10);
        FSsj(sj5+0x30);
        }

       if(n==1 || (n==0 && m==6))
        {
        FSsj(0X1B);//6#按键
        FSsj('j');
        if(m==6)
          {FSsj((0X9000+Xzsj+2+4+(35+4)*5+2)>>8);}
        if(m!=6)
          {FSsj((0X8000+Xzsj+2+4+(35+4)*5+2)>>8);}
        FSsj(Xzsj+2+4+(35+4)*5+2);
        FSsj(Yzsj+2+4+2>>8);
        FSsj(Yzsj+2+4+2);
        FSsj((Xzsj+2+4+35+(35+4)*5-2)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*5-2);
        FSsj(Yzsj+2+4+35-2>>8);
        FSsj(Yzsj+2+4+35-2);
        FSsj(0X1B);
        FSsj('z');
        FSsj((0Xf000+Xzsj+2+4+(35+4)*5+2+6)>>8);
        FSsj(Xzsj+2+4+(35+4)*5+2+6);
        FSsj(0X8000+Yzsj+2+4+2+10>>8);
        FSsj(Yzsj+2+4+2+10);
        FSsj(sj6+0x30);
        }
}

//=================================================================
//判别按键(返回键值1,2,3....10)   返回0无按键
uchar pbAN(uint Xzb,uint Yzb)  //X坐标在Xzb中,Y坐标在Yzb中
{
//        AN1  AN2  AN3  AN4  AN5  AN6
//        AN7       AN8  AN9       AN10
        uint code AN1  [4]={ 0XB8,0X100,0X116,0X175};//  1#按键左上角(X1,Y1)  右下角(X2,Y2)
        uint code AN2  [4]={0X131,0X100,0X18E,0X175};//  2#按键左上角(X1,Y1)  右下角(X2,Y2)
        uint code AN3  [4]={0X1AA,0X100,0X1FD,0X175};//  3#按键左上角(X1,Y1)  右下角(X2,Y2)
        uint code AN4  [4]={0X219,0X100,0X278,0X175};//  4#按键左上角(X1,Y1)  右下角(X2,Y2)
        uint code AN5  [4]={0X297,0X100,0X2EF,0X175};//  5#按键左上角(X1,Y1)  右下角(X2,Y2)
        uint code AN6  [4]={0X30E,0X100,0X360,0X175};//  6#按键左上角(X1,Y1)  右下角(X2,Y2)
        uint code AN7  [4]={ 0XB8,0X1A0,0X126,0X210};//  7#按键左上角(X1,Y1)  右下角(X2,Y2)
        uint code AN8  [4]={0X1AA,0X1A0,0X1FD,0X210};//  8#按键左上角(X1,Y1)  右下角(X2,Y2)
        uint code AN9  [4]={0X219,0X1A0,0X278,0X210};//  9#按键左上角(X1,Y1)  右下角(X2,Y2)
        uint code AN10 [4]={0X30E,0X1A0,0X360,0X210};// 10#按键左上角(X1,Y1)  右下角(X2,Y2)

        if  ((Xzb>AN1[0]) && (Xzb<AN1[2]) &&  (Yzb>AN1[1]) && (Yzb<AN1[3]))   {return 1;};
        if  ((Xzb>AN2[0]) && (Xzb<AN2[2]) &&  (Yzb>AN2[1]) && (Yzb<AN2[3]))   {return 2;};
        if  ((Xzb>AN3[0]) && (Xzb<AN3[2]) &&  (Yzb>AN3[1]) && (Yzb<AN3[3]))   {return 3;};
        if  ((Xzb>AN4[0]) && (Xzb<AN4[2]) &&  (Yzb>AN4[1]) && (Yzb<AN4[3]))   {return 4;};
        if  ((Xzb>AN5[0]) && (Xzb<AN5[2]) &&  (Yzb>AN5[1]) && (Yzb<AN5[3]))   {return 5;};
        if  ((Xzb>AN6[0]) && (Xzb<AN6[2]) &&  (Yzb>AN6[1]) && (Yzb<AN6[3]))   {return 6;};
        if  ((Xzb>AN7[0]) && (Xzb<AN7[2]) &&  (Yzb>AN7[1]) && (Yzb<AN7[3]))   {return 7;};
        if  ((Xzb>AN8[0]) && (Xzb<AN8[2]) &&  (Yzb>AN8[1]) && (Yzb<AN8[3]))   {return 8;};
        if  ((Xzb>AN9[0]) && (Xzb<AN9[2]) &&  (Yzb>AN9[1]) && (Yzb<AN9[3]))   {return 9;};
        if  ((Xzb>AN10[0]) && (Xzb<AN10[2]) &&  (Yzb>AN10[1]) && (Yzb<AN10[3]))   {return 10;};
        return 0;
}
//============================================================================
//jccmp检测触摸屏,3次采样为同一键值为有效
jccmp()
 {
   uint Xzb,Yzb;  //X坐标在Xzb中,Y坐标在Yzb中
   uchar zj[6];  //接收触摸屏数据的第2,3,4,5字节。
   uchar jz[5];  //放键值(可能为:1,2,3,4,5,6,7,8,9,10)
   uchar i;
   while(1)
     {
         for(i=0;i<3;i++)
          {
          while(1){if(JSsj()==0xa0)break;}
          zj[2]=JSsj();
          zj[3]=JSsj();
          zj[4]=JSsj();
          zj[5]=JSsj();
             
      	  Xzb=zj[2];
    	  Xzb=Xzb<<6;
    	  Xzb=Xzb+zj[3];//X坐标在Xzb中
    	  Yzb=zj[4];
    	  Yzb=Yzb<<6;
    	  Yzb=Yzb+zj[5];//Y坐标在Yzb中
          jz[i]=pbAN(Xzb,Yzb);//求键值
          };
          if((jz[0]=jz[1])  && (jz[1]=jz[2]) && (jz[0]!=0))
            {return(jz[0]);};
     }
}
//=========================================================================================
void main(void)
  {
        uchar an;//
        uchar m=1;//m=1,2,3,4,5,6代表当前处理的数据是那一位.
        uchar sj[7]={0,1,2,3,4,5,6};
        
        CMP_DATA=1;
        ZD_BUSY=1;
        ZD_DATA=1;
        
        Xzsj=39;//6位键盘占242*86点,这是键盘区左上角的X,Y坐标.如果变更左上角的坐标,需重新校准触摸屏.
        Yzsj=21;

//清屏幕(黑色)
        FSsj(0X1B);
        FSsj(0X51);
        FSsj(0);
        h6jp();//画出6位数字键盘
        m=1;
        xj6k(m,1,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);

//循环接收数据
        while(1)
        {
        an=jccmp();
        if((an>=1) &&  (an<=6))
          {m=an;
          xj6k(m,1,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);
          }
        if(an==8)//增加
            {
            if(sj[m]<9)
              {sj[m]=sj[m]+1;}
            else
              {sj[m]=0;}
            xj6k(m,0,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);
            }
        if(an==9)//减小
             {
             if(sj[m]==0 || sj[m]>9)
               {sj[m]=9;}
             else
               {sj[m]=sj[m]-1;}
             xj6k(m,0,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);
             }

       if(an==7)
	   {
	    FSsj(0X1B);
        FSsj(0X51);
        FSsj(0);
        h6jp();
	    m=1;
		sj[1]=1;
		sj[2]=2;
		sj[3]=3;
		sj[4]=4;
		sj[5]=5;
		sj[6]=6;
        xj6k(m,1,sj[1],sj[2],sj[3],sj[4],sj[5],sj[6]);
		}//取消
       if(an==10)
	   {

        FSsj(0X1B);   //调用字符集3 
        FSsj(0X33);
        FSsj(0X1B);   //设置字符旋转方向
        FSsj(0X66);
        FSsj(0X04);
       // FSsj(0X1B);
		//FSsj(0X04);
		FSsj(0X1B);	 
 	    FSsj('z');
        FSsj(0Xc0);
		FSsj(0Xcf);
		FSsj(0X80);
		FSsj(0Xff);
        FSsj(0XF7);
        FSsj(0XF8);
		FSsj(0XF9);
		FSsj(0XFA);
		FSsj(0XFB);
		FSsj(0XFC);
	   }//确认



 /*       FSsj(0X1B);//1#按键
        FSsj('z');
        FSsj((0X9000+Xzsj+2+4+5)>>8);
        FSsj(Xzsj+2+4+5);
        FSsj((0X8000+Yzsj+2+4+11)>>8);
        FSsj(Yzsj+2+4+11);
        FSsj(0X1B);
        FSsj(0X33);
        FSsj(0X1B);
        FSsj(0X66);
        FSsj(0X44);
        FSsj('1');*/


//在左上角显示收到数据
      FSsj(0X1B);
      FSsj(0X33);
      FSsj(0X1B);
      FSsj(0X66);
      FSsj(0X4);
      FSsj(0X1B);
      FSsj('z');
      FSsj(0X90);
      FSsj(0);
      FSsj(0X80);
      FSsj(0);
      FSsj('X');
      FSsj('=');
	  FSsj(zh16(Xzb>>8));
      FSsj(zh16(Xzb>>4));
      FSsj(zh16(Xzb));
      FSsj('H');
      FSsj(',');
      FSsj('Y');
      FSsj('=');
      FSsj(zh16(Yzb>>8));
      FSsj(zh16(Yzb>>4));
      FSsj(zh16(Yzb));
      FSsj('H');

      FSsj(an+0x30);
}
}



//用XY坐标直接划点
//      FSsj(0X1B);//划点指令
//      FSsj('d');
//      FSsj(0XF0+(Xzb>>8));//划白点
//      FSsj(Xzb&0XFF);
//      FSsj(Yzb>>8);
//      FSsj(Yzb&0XFF);

//XY坐标除以4后划点
//        Xzb=Xzb/4;
//        Yzb=Yzb/4;
//        FSsj(0X1B);//划点指令
//        FSsj('d');
//        FSsj(0XF0);//划白点
//        FSsj(Xzb);
//        FSsj(0);
//        FSsj(Yzb);

//=========================================================================================
//例1:当通讯波特率F=9.6KHz,单片机晶振Z=18.432MHz时,TIMEzq=50
//计算方法:
//当波特率为9.6KHz时,每个二进制位的宽度为104uS.振荡周期数zq=(1000/9.6)*18.432MHz=1920个振荡周期
//调用本函数的其它指令执行时间为(12+24*3+12*3)=120个振荡周期.
//执行每个循环需要(12+24=36)个振荡周期,则TIMEzq=(zq-120)/36=(1920-120)/36=50
//即:TIMEzq=[((1000/F)*Z)-120]/36=50
//-------------
//例2:当通讯波特率F=4.8KHz,单片机晶振Z=18.432MHz时:
//     TIMEzq=[((1000/F)*Z)-120]/36=103
//-------------
//例3:当通讯波特率F=19.2KHz,单片机晶振Z=18.432MHz时:
//     TIMEzq=[((1000/F)*Z)-120]/36=23
//-------------
//例4:当通讯波特率F=9.6KHz,单片机晶振Z=12.000MHz时:
//     TIMEzq=[((1000/F)*Z)-120]/36=31
//-------------
//例5:当通讯波特率F=4.8KHz,单片机晶振Z=12.000MHz时:
//     TIMEzq=[((1000/F)*Z)-120]/36=66
//-------------
//例6:当通讯波特率F=19.2KHz,单片机晶振Z=12.000MHz时:
//     TIMEzq=[((1000/F)*Z)-120]/36=14
//-------------
//例7:当通讯波特率F=9.6KHz,单片机晶振Z= 6.000MHz时:
//     TIMEzq=[((1000/F)*Z)-120]/36=14
//-------------
//例8:当通讯波特率F=9.6KHz,单片机晶振Z=11.0592MHz时:
//     TIMEzq=[((1000/F)*Z)-120]/36=28
//-------------
//例9:当通讯波特率F=9.6KHz,单片机晶振Z=22.1184MHz时:
//     TIMEzq=[((1000/F)*Z)-120]/36=60
//-------------
//例10:当通讯波特率F=9.6KHz,单片机晶振Z=24.0000MHz时:
//     TIMEzq=[((1000/F)*Z)-120]/36=66
//------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -