📄 cmpmnckj.c
字号:
//本程序为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 + -