📄 tracert.h
字号:
/**********************************Copyright (c)*********************************
;** 文件名: tracert.h
;** 功能: 数据处理头文件,接收和处理键盘发送到主机的数据
;** 包含头文件: 无
*********************************************************************************/
sbit Data_Line=P3^4; //数据线P3_4
sbit Clock_Line=P3^2; //时钟线P3_2
/***********************定义位变量***************************/
unsigned char bdata Temp_Buffer; //接收字节
sbit D_Buf0=Temp_Buffer^0; //Temp_Buffer第0位
sbit D_Buf1=Temp_Buffer^1; //Temp_Buffer第1位
sbit D_Buf2=Temp_Buffer^2;
sbit D_Buf3=Temp_Buffer^3;
sbit D_Buf4=Temp_Buffer^4;
sbit D_Buf5=Temp_Buffer^5;
sbit D_Buf6=Temp_Buffer^6;
sbit D_Buf7=Temp_Buffer^7; //Temp_Buffer第7位0
/************************************************************/
unsigned char Buffer[11]; //缓冲数组 缓存设备到主机的数据
unsigned char Rec_ptr=0x00; //接收数据指针
unsigned char Rec_data=0xFF; //接收数据
unsigned char Buffer_ptr=0x00; //缓冲区数据指针
unsigned char ptr_data=0; //接收数据计数
unsigned char flag_e0=0; //扩展数据E0标志 有E0位1 否则为0
/*******************************************************
名称: 奇偶校验模块
功能: 对接收到的数据进行奇偶校验
参数: 无
返回值:校验正确 1
校验错误 0
*******************************************************/
unsigned char Checkout(void)
{
ACC=Temp_Buffer; //将数据送A寄存器
if(~P==Buffer[9]) //将奇偶校验位于A寄存器奇偶标志进行比较
return 1;
else
return 0;
}
/*******************************************************
名称: 组合数据模块
功能: 将接收到的数据为组合成数据
参数: 无
返回值:无
*******************************************************/
void CombinData(void)
{
/*********将接收到的各位赋值给Temp_Buffer对应的位***********/
D_Buf0=Buffer[1];
D_Buf1=Buffer[2];
D_Buf2=Buffer[3];
D_Buf3=Buffer[4];
D_Buf4=Buffer[5];
D_Buf5=Buffer[6];
D_Buf6=Buffer[7];
D_Buf7=Buffer[8];
/************************************************************/
if(Checkout()) //如果奇偶校验正确
{
if(Temp_Buffer!=0xF0)
{
if(ptr_data==0) //处理接收到的第一个数据
{
if(Temp_Buffer==0xE0) //如果接收到的第一个数据为E0
{
flag_e0=1; //置E0标志
ptr_data=1; //允许要求再接收第二个数据
}
else
{
flag_e0=0; //否则清楚FO标志与E0标志
Rec_data=Temp_Buffer; //接收缓冲区中的数据
ptr_data=0;
return; //跳出此次处理 准备处理下一组数据
}
}
else if(ptr_data==1) //处理接收到的第二个数据
{
if(Temp_Buffer==0xF0) //如果接收到的第二个数据为F0
return;
else
{
Rec_data=Temp_Buffer;
ptr_data=0;
return;
}
}
else //处理接收到的第三个数据
{
Rec_data=Temp_Buffer; //接收缓冲区中的数据
ptr_data=0; //准备处理下一组数据
}
}
}
}
/*******************************************************
名称: 外部中断0服务程序
功能: 接收键盘发送到主机的各个数据位
参数: 无
返回值:无
*******************************************************/
void ReceiveData(void) interrupt 0
{
if(Rec_ptr<=10)
{
do{
}while(Clock_Line==0); //等待设备拉高时钟线
Buffer[Rec_ptr++]=Data_Line; //接收数据
}
else
{
CombinData(); //组合接收到的数据
do{
}while(Clock_Line==0); //等待设备拉高时钟线
Buffer[0]=Data_Line; //接收数据
Rec_ptr=0x01;
}
}
/*******************************************************
名称: 显示模块
功能: 将键盘的案件在点阵显示模块上显示出来
参数: 无
返回值:无
*******************************************************/
void Display(void)
{
if(flag_e0!=1) //处理简单数据 无断码标志 无E0标志
{
switch(Rec_data)
{
case 0x1C:
ChoiceData(char_A);
break;
case 0x32:
ChoiceData(char_B);
break;
case 0x21:
ChoiceData(char_C);
break;
case 0x23:
ChoiceData(char_D);
break;
case 0x24:
ChoiceData(char_E);
break;
case 0x2B:
ChoiceData(char_F);
break;
case 0x34:
ChoiceData(char_G);
break;
case 0x33:
ChoiceData(char_H);
break;
case 0x43:
ChoiceData(char_I);
break;
case 0x3B:
ChoiceData(char_J);
break;
case 0x42:
ChoiceData(char_K);
break;
case 0x4B:
ChoiceData(char_L);
break;
case 0x3A:
ChoiceData(char_M);
break;
case 0x31:
ChoiceData(char_N);
break;
case 0x44:
ChoiceData(char_O);
break;
case 0x4D:
ChoiceData(char_P);
break;
case 0x15:
ChoiceData(char_Q);
break;
case 0x2D:
ChoiceData(char_R);
break;
case 0x1B:
ChoiceData(char_S);
break;
case 0x2C:
ChoiceData(char_T);
break;
case 0x3C:
ChoiceData(char_U);
break;
case 0x2A:
ChoiceData(char_V);
break;
case 0x1D:
ChoiceData(char_W);
break;
case 0x22:
ChoiceData(char_X);
break;
case 0x35:
ChoiceData(char_Y);
break;
case 0x1A:
ChoiceData(char_Z);
break;
case 0x45:
ChoiceData(char_0);
break;
case 0x16:
ChoiceData(char_1);
break;
case 0x1E:
ChoiceData(char_2);
break;
case 0x26:
ChoiceData(char_3);
break;
case 0x25:
ChoiceData(char_4);
break;
case 0x2E:
ChoiceData(char_5);
break;
case 0x36:
ChoiceData(char_6);
break;
case 0x3D:
ChoiceData(char_7);
break;
case 0x3E:
ChoiceData(char_8);
break;
case 0x46:
ChoiceData(char_9);
break;
case 0x70:
ChoiceData(char_0);
break;
case 0x69:
ChoiceData(char_1);
break;
case 0x72:
ChoiceData(char_2);
break;
case 0x7A:
ChoiceData(char_3);
break;
case 0x6B:
ChoiceData(char_4);
break;
case 0x73:
ChoiceData(char_5);
break;
case 0x74:
ChoiceData(char_6);
break;
case 0x6C:
ChoiceData(char_7);
break;
case 0x75:
ChoiceData(char_8);
break;
case 0x7D:
ChoiceData(char_9);
break;
case 0x05:
ChoiceData(char_F1);
break;
case 0x06:
ChoiceData(char_F2);
break;
case 0x04:
ChoiceData(char_F3);
break;
case 0x0C:
ChoiceData(char_F4);
break;
case 0x03:
ChoiceData(char_F5);
break;
case 0x0B:
ChoiceData(char_F6);
break;
case 0x83:
ChoiceData(char_F7);
break;
case 0x0A:
ChoiceData(char_F8);
break;
case 0x01:
ChoiceData(char_F9);
break;
case 0x09:
ChoiceData(char_F10);
break;
case 0x78:
ChoiceData(char_F11);
break;
case 0x07:
ChoiceData(char_F12);
break;
case 0x5A:
ChoiceData(char_ET);
break;
case 0x12:
ChoiceData(char_SH);
break;
case 0x29:
ChoiceData(char_SP);
break;
case 0x11:
ChoiceData(char_AT);
break;
case 0x14:
ChoiceData(char_CT);
break;
case 0x0D:
ChoiceData(char_TB);
break;
case 0x58:
ChoiceData(char_CP);
break;
case 0x59:
ChoiceData(char_SH);
break;
case 0x54: //左中括号
ChoiceData(char_LKuo);
break;
case 0x5B: //右中括号
ChoiceData(char_RKuo);
break;
case 0x66: //退格键
ChoiceData(char_Back);
break;
case 0x79: //加号
ChoiceData(char_Add);
break;
case 0x7B: //减号
ChoiceData(char_Sub);
break;
case 0x7C: //乘号
ChoiceData(char_Mul);
break;
case 0x4C: //分号
ChoiceData(char_Fen);
break;
case 0x41: //逗号
ChoiceData(char_Dou);
break;
case 0x49: //句号
ChoiceData(char_Jue);
break;
case 0x4A: //斜杠
ChoiceData(char_Sla);
break;
case 0x52: //分割号
ChoiceData(char_Jian);
break;
case 0x0E: //点号
ChoiceData(char_Dian);
break;
case 0x4E: //下划线
ChoiceData(char_DLine);
break;
case 0x55: //等号
ChoiceData(char_Den);
break;
case 0x5D: //反斜杠
ChoiceData(char_FSla);
break;
case 0x76: //ESC键
ChoiceData(char_Esc);
break;
case 0x71: //ESC键
ChoiceData(char_Jue);
break;
default:
ChoiceData(char_NULL);
break;
}
}
else //处理带E0标志的数据
{
switch(Rec_data)
{
case 0x5A:
ChoiceData(char_ET);
break;
case 0x11:
ChoiceData(char_AT);
break;
case 0x14:
ChoiceData(char_CT);
break;
case 0x75:
ChoiceData(char_Upper);
break;
case 0x6B:
ChoiceData(char_Left);
break;
case 0x72:
ChoiceData(char_Down);
break;
case 0x74:
ChoiceData(char_Right);
break;
case 0x4A:
ChoiceData(char_Sla);
break;
case 0x1F:
ChoiceData(char_Win);
break;
case 0x27:
ChoiceData(char_Win);
break;
case 0x2F:
ChoiceData(char_Apps);
break;
case 0x71:
ChoiceData(char_Jue);
break;
default:
ChoiceData(char_NULL);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -