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

📄 cmpmnckj.c

📁 该程序实现触摸屏控制,与KY系列智能液晶终端配合使用
💻 C
📖 第 1 页 / 共 2 页
字号:
//本程序为Franklin/keil  C51源程序,可以在所有51系列(或兼容)单片机中运行。
//完成功能:使用任意2个引脚模拟串行接口,实现对触摸屏控制器数据的接收
//          和对KY系列智能液晶终端进行控制.
//程序中给出了设计方法,通过修改TIMEzq使本程序适用于各种晶振及各种波特率.
//本例为:当通讯波特率=9600Hz,单片机晶振=18.432MHz时,TIMEzq=50
//        使用P3.0模拟串口输入,使用P3.1模拟串口输出,使用P1.2检测"忙"信号.
//本程序在Wave For windows ver 2.80仿真软件编译成功。
//在AT89C51(9600Hz,18.432MHz)中运行通过.运行结果是:可更改6位十进制数的触摸键盘.
//本程序运行需以下8个汉字,应运行前下载到字符集3中(12*12,代码为B8H-BFH)
//    "取消"(B8H B9H)  "增加"(BAH BBH)  "减少"(BCH BDH)   "确认"(BEH BFH)
//=========================================================================================
#include "reg51.h"
#define  uchar     unsigned char
#define  uint     unsigned int
sbit     CMP_DATA   =P1^7; //由此接收触摸屏发出的串行数据,可以使用任一引脚.
sbit     ZD_DATA   =P1^1; //向液晶终端输出串行数据,使用模拟串口输出数据时,可以使用任一引脚.
sbit     ZD_BUSY   =P1^3; //接收液晶终端发来的"忙"(BUSY)信号,可以连接于任意一位输入引脚上.
//=========================================================================================
bdata char  DATA;
sbit    mb0=DATA^0;
sbit    mb1=DATA^1;
sbit    mb2=DATA^2;
sbit    mb3=DATA^3;
sbit    mb4=DATA^4;
sbit    mb5=DATA^5;
sbit    mb6=DATA^6;
sbit    mb7=DATA^7;
//=========================================================================================
#define  TIMEzq    29   //修改TIMEzq可使本程序适用于各种晶振及各种波特率.计算方法见文件尾。
//本例:AT89C51(9600Hz,11.0592MHz)时 TIMEzq=29
        uint Xzsj,Yzsj;
//=========================================================================================
        uint Xzb,Yzb;//X坐标在Xzb中,Y坐标在Yzb中
//延时函数TIME()
//为了得到精确的延时时间,不要修改本函数的形式,绝对不要修改!
void     TIME(void)
  {
  uchar i;
  for(i=0;i<TIMEzq;i++);
  }
//=========================================================================================
//延时函数TIME1B()
//为了得到精确的延时时间,不要修改本函数的形式,绝对不要修改!
void     TIME1B(void)
  {
  uchar i;
  for(i=0;i<(TIMEzq/2);i++);
  }
//=========================================================================================
//将sj(仅低4位有效)转换为对应的ASCII码
uchar zh16(uint sj)
{
  uchar sj1;
  sj1=sj&0x0f;
  if (sj1>=0x0a) sj1=sj1+7;
  sj1=sj1+0x30;
  return sj1;
}
//=========================================================================================
//向终端发送一字节数据
//为了得到精确的延时时间,不要修改本函数的形式,绝对不要修改!
void FSsj(uchar sj)
  {
	 while(ZD_BUSY);
	 ZD_DATA =0;       //起始位=0
	 TIME();
	 ZD_DATA =sj&1;    //D0;12+24+24+24
	 TIME();
	 ZD_DATA =sj&2;    //D1
	 TIME();
	 ZD_DATA =sj&4;    //D2
	 TIME();
	 ZD_DATA =sj&8;    //D3
	 TIME();
	 ZD_DATA =sj&0x10; //D4
	 TIME();
	 ZD_DATA =sj&0x20; //D5
	 TIME();
	 ZD_DATA =sj&0x40; //D6
	 TIME();
	 ZD_DATA =sj&0x80; //D7
	 TIME();
	 ZD_DATA =0;       //奇偶位=0
	 TIME();
	 ZD_DATA =1;       //停止位=1
	 TIME();
  }
//=========================================================================================
//用CMP_DATA模拟串口接收数据
//为了得到精确的延时时间,不要修改本函数的形式,绝对不要修改!
//读触摸屏1个字节
uchar JSsj(void)
{
  	while(CMP_DATA);	//CMP_DATA=1,则等待.
    	TIME1B();
    	TIME();
    	mb0=CMP_DATA;	//D0
    	TIME();
    	mb1=CMP_DATA;	//D1
    	TIME();
    	mb2=CMP_DATA;	//D2
    	TIME();
    	mb3=CMP_DATA;	//D3
    	TIME();
    	mb4=CMP_DATA;	//D4
    	TIME();
    	mb5=CMP_DATA;	//D5
    	TIME();
    	mb6=CMP_DATA;	//D6
    	TIME();
    	mb7=CMP_DATA;	//D7
    	TIME();
    	TIME();
        return DATA;
}

//===========================================
uchar h6jp(void)//画出6位数字键盘
{
        FSsj(0X1B);//最大矩形 'j' 的ASCII码为6A
        FSsj('j');
        FSsj((0X9000+Xzsj)>>8);   //定义矩形的左上角坐标
        FSsj(Xzsj);
        FSsj(Yzsj>>8);
        FSsj(Yzsj);
        FSsj((Xzsj+242)>>8);
        FSsj(Xzsj+242);
        FSsj((Yzsj+86)>>8);
        FSsj(Yzsj+86);

        FSsj(0X1B);//矩形
        FSsj('j');
        FSsj((0X9000+Xzsj+2)>>8);
        FSsj(Xzsj+2);
        FSsj(Yzsj+2>>8);
        FSsj(Yzsj+2);
        FSsj((Xzsj+242-2)>>8);
        FSsj(Xzsj+242-2);
        FSsj((Yzsj+86-2)>>8);
        FSsj(Yzsj+86-2);

        FSsj(0X1B);//1#按键
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4)>>8);
        FSsj(Xzsj+2+4);
        FSsj(Yzsj+2+4>>8);
        FSsj(Yzsj+2+4);
        FSsj((Xzsj+2+4+35)>>8);
        FSsj(Xzsj+2+4+35);
        FSsj(Yzsj+2+4+35>>8);
        FSsj(Yzsj+2+4+35);

        FSsj(0X1B);//2#按键
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4+35+4)>>8);
        FSsj(Xzsj+2+4+35+4);
        FSsj(Yzsj+2+4>>8);
        FSsj(Yzsj+2+4);
        FSsj((Xzsj+2+4+35+35+4)>>8);
        FSsj(Xzsj+2+4+35+35+4);
        FSsj(Yzsj+2+4+35>>8);
        FSsj(Yzsj+2+4+35);

        FSsj(0X1B);//3#按键
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4+(35+4)*2)>>8);
        FSsj(Xzsj+2+4+(35+4)*2);
        FSsj(Yzsj+2+4>>8);
        FSsj(Yzsj+2+4);
        FSsj((Xzsj+2+4+35+(35+4)*2)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*2);
        FSsj(Yzsj+2+4+35>>8);
        FSsj(Yzsj+2+4+35);

        FSsj(0X1B);//4#按键
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4+(35+4)*3)>>8);
        FSsj(Xzsj+2+4+(35+4)*3);
        FSsj(Yzsj+2+4>>8);
        FSsj(Yzsj+2+4);
        FSsj((Xzsj+2+4+35+(35+4)*3)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*3);
        FSsj(Yzsj+2+4+35>>8);
        FSsj(Yzsj+2+4+35);

        FSsj(0X1B);//5#按键
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4+(35+4)*4)>>8);
        FSsj(Xzsj+2+4+(35+4)*4);
        FSsj(Yzsj+2+4>>8);
        FSsj(Yzsj+2+4);
        FSsj((Xzsj+2+4+35+(35+4)*4)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*4);
        FSsj(Yzsj+2+4+35>>8);
        FSsj(Yzsj+2+4+35);

        FSsj(0X1B);//6#按键
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4+(35+4)*5)>>8);
        FSsj(Xzsj+2+4+(35+4)*5);
        FSsj(Yzsj+2+4>>8);
        FSsj(Yzsj+2+4);
        FSsj((Xzsj+2+4+35+(35+4)*5)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*5);
        FSsj(Yzsj+2+4+35>>8);
        FSsj(Yzsj+2+4+35);

        FSsj(0X1B);   //调用字符集3 
        FSsj(0X33);
        FSsj(0X1B);   //设置字符旋转方向
        FSsj(0X66);
        FSsj(0X04);

        FSsj(0X1B);//7#按键:"取消"(B8H B9H)
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4)>>8);
        FSsj(Xzsj+2+4);
        FSsj(Yzsj+2+4+35+4>>8);
        FSsj(Yzsj+2+4+35+4);
        FSsj((Xzsj+2+4+35)>>8);
        FSsj(Xzsj+2+4+35);
        FSsj(Yzsj+2+4+35+35+4>>8);
        FSsj(Yzsj+2+4+35+35+4);
        FSsj(0X1B);
        FSsj('z');//设置系统坐标及字体颜色
        FSsj((0X9000+Xzsj+2+4+5)>>8);
        FSsj(Xzsj+2+4+5);
        FSsj((0X8000+Yzsj+2+4+35+4+11)>>8);
        FSsj(Yzsj+2+4+35+4+11);
        FSsj(0XB8);
        FSsj(0XB9);

        FSsj(0X1B);//8#按键:"增加"(BAH BBH)
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4+(35+4)*2)>>8);
        FSsj(Xzsj+2+4+(35+4)*2);
        FSsj(Yzsj+2+4+35+4>>8);
        FSsj(Yzsj+2+4+35+4);
        FSsj((Xzsj+2+4+35+(35+4)*2)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*2);
        FSsj(Yzsj+2+4+35+35+4>>8);
        FSsj(Yzsj+2+4+35+35+4);
        FSsj(0X1B);
        FSsj('z');
        FSsj((0X9000+Xzsj+2+4+5+(35+4)*2)>>8);
        FSsj(Xzsj+2+4+5+(35+4)*2);
        FSsj((0X8000+Yzsj+2+4+35+4+11)>>8);
        FSsj(Yzsj+2+4+35+4+11);
        FSsj(0XBA);
        FSsj(0XBB);

        FSsj(0X1B);//9#按键:"减少"(BCH BDH)
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4+(35+4)*3)>>8);
        FSsj(Xzsj+2+4+(35+4)*3);
        FSsj(Yzsj+2+4+35+4>>8);
        FSsj(Yzsj+2+4+35+4);
        FSsj((Xzsj+2+4+35+(35+4)*3)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*3);
        FSsj(Yzsj+2+4+35+35+4>>8);
        FSsj(Yzsj+2+4+35+35+4);
        FSsj(0X1B);
        FSsj('z');
        FSsj((0X9000+Xzsj+2+4+5+(35+4)*3)>>8);
        FSsj(Xzsj+2+4+5+(35+4)*3);
        FSsj((0X8000+Yzsj+2+4+35+4+11)>>8);
        FSsj(Yzsj+2+4+35+4+11);
        FSsj(0XBC);
        FSsj(0XBD);

        FSsj(0X1B);//10#按键:"确认"(BEH BFH)
        FSsj('j');
        FSsj((0X9000+Xzsj+2+4+(35+4)*5)>>8);
        FSsj(Xzsj+2+4+(35+4)*5);
        FSsj(Yzsj+2+4+35+4>>8);
        FSsj(Yzsj+2+4+35+4);
        FSsj((Xzsj+2+4+35+(35+4)*5)>>8);
        FSsj(Xzsj+2+4+35+(35+4)*5);
        FSsj(Yzsj+2+4+35+35+4>>8);
        FSsj(Yzsj+2+4+35+35+4);
        FSsj(0X1B);
        FSsj('z');
        FSsj((0X9000+Xzsj+2+4+5+(35+4)*5)>>8);
        FSsj(Xzsj+2+4+5+(35+4)*5);
        FSsj((0X8000+Yzsj+2+4+35+4+11)>>8);
        FSsj(Yzsj+2+4+35+4+11);
        FSsj(0XBE);
        FSsj(0XBF);
		
}

//======================  n=1:全划  n=0:仅m
xj6k(uchar m,uchar n,uchar sj1,uchar sj2,uchar sj3,uchar sj4,uchar sj5,uchar sj6)
{
        FSsj(0X1B);
        FSsj(0X33);
        FSsj(0X1B);
        FSsj(0X66);
        FSsj(0X44);

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

        if(n==1 || (n==0 && m==2))
        {
        FSsj(0X1B);//2#按键
        FSsj('j');
        if(m==2)
          {FSsj((0X9000+Xzsj+2+4+35+4+2)>>8);}
        if(m!=2)
          {FSsj((0X8000+Xzsj+2+4+35+4+2)>>8);}
        FSsj(Xzsj+2+4+35+4+2);
        FSsj(Yzsj+2+4+2>>8);
        FSsj(Yzsj+2+4+2);
        FSsj((Xzsj+2+4+35+35+4-2)>>8);
        FSsj(Xzsj+2+4+35+35+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+2+6)>>8);
        FSsj(Xzsj+2+4+35+4+2+6);
        FSsj(0X8000+Yzsj+2+4+2+10>>8);
        FSsj(Yzsj+2+4+2+10);
        FSsj(sj2+0x30);

⌨️ 快捷键说明

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