📄 编辑1.c
字号:
else {return 0x20;}
}
j=keyvartab[x1][i];
P1=0xff;
P2=0x1f;
Delay5Ms();
Delay5Ms();
do{
key_date = P1;
x = P2;
key_date &= 0x0f;
x &= 0x1f;
Delay5Ms();
Delay5Ms();
}while(key_date!=0xff && x!=0x1f);
return j;
}
return (0x20);
}*/
///////////////////////////////////
//初始化端口函数
/*void initkeyvariable()
{
P1=0x00;
P2=0x1f;
}
///////////////////////////////////
//获取键值函数
unsigned char readkeyvar(void)
{
unsigned char i,j;
unsigned char x;
unsigned char x1;
unsigned char key_date;
key_date = P1; //把行置0列置1
x = P2;
key_date &= 0xff;
if(key_date!=0x00) //判断行是否有高
{
delay(50);
if(key_date!=0x00) //判断行是否有高
{
delay(50);
if(key_date!=0x00) //判断行是否有高
{
if(key_date==0x01)x1=0; //返回行号
else if(key_date==0x02)x1=1;
else if(key_date==0x04)x1=2;
else if(key_date==0x08)x1=3;
else if(key_date==0x10)x1=4;
else if(key_date==0x20)x1=5;
else if(key_date==0x40)x1=6;
else if(key_date==0x80)x1=7;
else {return 0x20;}
}
}
}
P1 = 0xff; //重新附值判断列号
P2 = 0x00;
x = P2;
x &= 0x1f;
if(x!=0x00) //判断列是否有高
{
delay(50);
if(x!=0x00) //判断列是否有高
{
delay(50);
if(x!=0x00) //判断列是否有高
{
if(x==0x01)i=0; //返回列号
else if(x==0x02)i=1;
else if(x==0x04)i=2;
else if(x==0x08)i=3;
else if(x==0x10)i=4;
else {return 0x20;}
}
}
}
j=keyvartab[x1][i]; //读取键值
buzzer = 1; //打开蜂鸣器
delay(20);
buzzer = 0;
P1=0x00;
P2=0x1f;
Delay5Ms();
biaozhuiflag = 1; //置位小键盘有键按下标志位
return (j);
}*/
///////////////////////////////////
unsigned char readkeyvar(void)
{
line1 = 1;
if(hang1 == 1)
{ delay(60);
if(hang1 == 1)
delay(60);
if(hang1 == 1)
return (A);
}
if(hang2 == 1)
{ delay(60);
if(hang2 == 1)
delay(60);
if(hang2 == 1)
return (F);
}
if(hang3 == 1)
{ delay(60);
if(hang3 == 1)
delay(60);
if(hang3 == 1)
return (K);
}
if(hang4 == 1)
{ delay(60);
if(hang4 == 1)
delay(60);
if(hang4 == 1)
return (P);
}
if(hang5 == 1)
{ delay(60);
if(hang5 == 1)
delay(60);
if(hang5 == 1)
return (1);
}
if(hang6 == 1)
{ delay(60);
if(hang6 == 1)
delay(60);
if(hang6 == 1)
return (4);
}
if(hang7 == 1)
{ delay(60);
if(hang7 == 1)
delay(60);
if(hang7 == 1)
return (7);
}
if(hang8 == 1)
{ delay(60);
if(hang8 == 1)
delay(60);
if(hang8 == 1)
return (~);
}
line1 = 0;
line2 = 1;
if(hang1 == 1)
{ delay(60);
if(hang1 == 1)
delay(60);
if(hang1 == 1)
return (B);
}
if(hang2 == 1)
{ delay(60);
if(hang2 == 1)
delay(60);
if(hang2 == 1)
return (G);
}
if(hang3 == 1)
{ delay(60);
if(hang3 == 1)
delay(60);
if(hang3 == 1)
return (L);
}
if(hang4 == 1)
{ delay(60);
if(hang4 == 1)
delay(60);
if(hang4 == 1)
return (Q);
}
if(hang5 == 1)
{ delay(60);
if(hang5 == 1)
delay(60);
if(hang5 == 1)
return (2);
}
if(hang6 == 1)
{ delay(60);
if(hang6 == 1)
delay(60);
if(hang6 == 1)
return (5);
}
if(hang7 == 1)
{ delay(60);
if(hang7 == 1)
delay(60);
if(hang7 == 1)
return (8);
}
if(hang8 == 1)
{ delay(60);
if(hang8 == 1)
delay(60);
if(hang8 == 1)
return (0);
}
line2 = 0;
line3 = 1;
if(hang1 == 1)
{ delay(60);
if(hang1 == 1)
delay(60);
if(hang1 == 1)
return (C);
}
if(hang2 == 1)
{ delay(60);
if(hang2 == 1)
delay(60);
if(hang2 == 1)
return (H);
}
if(hang3 == 1)
{ delay(60);
if(hang3 == 1)
delay(60);
if(hang3 == 1)
return (M);
}
if(hang4 == 1)
{ delay(60);
if(hang4 == 1)
delay(60);
if(hang4 == 1)
return (R);
}
if(hang5 == 1)
{ delay(60);
if(hang5 == 1)
delay(60);
if(hang5 == 1)
return (3);
}
if(hang6 == 1)
{ delay(60);
if(hang6 == 1)
delay(60);
if(hang6 == 1)
return (6);
}
if(hang7 == 1)
{ delay(60);
if(hang7 == 1)
delay(60);
if(hang7 == 1)
return (9);
}
if(hang8 == 1)
{ delay(60);
if(hang8 == 1)
delay(60);
if(hang8 == 1)
return (!);
}
line3 = 0;
line4 = 1;
if(hang1 == 1)
{ delay(60);
if(hang1 == 1)
delay(60);
if(hang1 == 1)
return (D);
}
if(hang2 == 1)
{ delay(60);
if(hang2 == 1)
delay(60);
if(hang2 == 1)
return (I);
}
if(hang3 == 1)
{ delay(60);
if(hang3 == 1)
delay(60);
if(hang3 == 1)
return (N);
}
if(hang4 == 1)
{ delay(60);
if(hang4 == 1)
delay(60);
if(hang4 == 1)
return (S);
}
if(hang5 == 1)
{ delay(60);
if(hang5 == 1)
delay(60);
if(hang5 == 1)
return (U);
}
if(hang6 == 1)
{ delay(60);
if(hang6 == 1)
delay(60);
if(hang6 == 1)
return (W);
}
if(hang7 == 1)
{ delay(60);
if(hang7 == 1)
delay(60);
if(hang7 == 1)
return (Y);
}
if(hang8 == 1)
{ delay(60);
if(hang8 == 1)
delay(60);
if(hang8 == 1)
return ;
}
line4 = 0;
line5 = 1;
if(hang1 == 1)
{ delay(60);
if(hang1 == 1)
delay(60);
if(hang1 == 1)
return (E);
}
if(hang2 == 1)
{ delay(60);
if(hang2 == 1)
delay(60);
if(hang2 == 1)
return (J);
}
if(hang3 == 1)
{ delay(60);
if(hang3 == 1)
delay(60);
if(hang3 == 1)
return (O);
}
if(hang4 == 1)
{ delay(60);
if(hang4 == 1)
delay(60);
if(hang4 == 1)
return (T);
}
if(hang5 == 1)
{ delay(60);
if(hang5 == 1)
delay(60);
if(hang5 == 1)
return (V);
}
if(hang6 == 1)
{ delay(60);
if(hang6 == 1)
delay(60);
if(hang6 == 1)
return (X);
}
if(hang7 == 1)
{ delay(60);
if(hang7 == 1)
delay(60);
if(hang7 == 1)
return (Z);
}
if(hang8 == 1)
{ delay(60);
if(hang8 == 1)
delay(60);
if(hang8 == 1)
return ;
}
line5 = 0;
}
//////////////////////////////////////
//数字键到编码的转换函数
void numbertocode(void)
{
unsigned char i;
unsigned char TempCyc;
unsigned char Keydata;
unsigned char ASCII_code;
biaozhiflag = 0; //清有键标志位
if (DisNum > 15)
{
DisplayListChar(0, 1, Cls);//清LCD第二行
DisNum = 0;
}
Keydata = readkeyvar();
if(Keydata == '!') //判断是否是ENTER键
{
if(atxtflag == 1) //判断是AX还是XT
{ SEND_byte(0x5A); } //发送编码到PC机
else
{ SEND_byte(0x1C); }
inhibit = 1; //打开标准键盘
return ; //返回
}
else if(Keydata == '~') //判断是否是back键
{
if(bit1_6flag == 1) //清1位数据
{
if(DisNum==0); //判断当前显示位置是否是0位
else{
--DisNum; //当前位置向左移一位
if(DisNum<16) //判断是否是小于16个字母
{ DisplayOneChar(DisNum, 1, 0x20); } //清除一位数据
}
if(if(atxtflag == 1) //判断是AX还是XT
{ SEND_byte(0x66); } //发送编码到PC机
else
{ SEND_byte(0x0E); }
}
else //清6为数据
{
for(i=0;i<6;i++)
{
if(DisNum==0); //判断当前显示位置是否是0位
else
{
--DisNum; //当前位置向左移一位
if(DisNum<16) //判断是否是小于16个字母
{ DisplayOneChar(DisNum, 1, 0x20); } //清除一位数据
}
if(if(atxtflag == 1) //判断是AX还是XT
{ SEND_byte(0x66); } //发送编码到PC机
else
{ SEND_byte(0x0E); }
} //结束清6位数据
} //结束清6位数据
} //结束BACK键
else //数字键或字母键
{
if(atxtflag == 1) //AT下的数字键或字母键
{
for(TempCyc = 0;(ATunshift[TempCyc][1]!=Keydata)&&(TempCyc<50); TempCyc++); //查表显示
if (ATunshift[TempCyc][1] == Keydata)
{
if(numberflag == 1)
{ DisplayOneChar(DisNum, 1, ATunshift[TempCyc][1]); }
else
{ DisplayOneChar(DisNum, 1, '*'); }
ASCII_code = ATunshift[TempCyc][0];
SEND_byte(ASCII_code);
DisNum++;
} //结束解码
} //结束AT下的发送和显示数字键或字母键
else //XT下的数字键或字母键
{
for(TempCyc = 0;(XTunshift[TempCyc][1]!=Keydata)&&(TempCyc<50); TempCyc++); //查表显示
if (XTunshift[TempCyc][1] == Keydata)
{
if(numberflag == 1)
{ DisplayOneChar(DisNum, 1, XTunshift[TempCyc][1]); }
else
{ DisplayOneChar(DisNum, 1, '*'); }
ASCII_code = XTunshift[TempCyc][0];
SEND_byte(ASCII_code);
DisNum++;
} //结束解码
} //结束XT下的发送和显示数字键或字母键
} //结束发送和显示数字键或字母
} //结束解码程序
/* case 0x66: // back 键
{
if(DisNum==0);
else {
--DisNum;
if(DisNum<16) DisplayOneChar(DisNum, 0, 0x20);
else{ DisNum-=16;
DisplayOneChar(DisNum, 1, 0x20);
DisNum+=16;
}
}
}
break;*/
//////////////////////////小键盘扫描驱动程序开始///////////////////////////
void main(void)
{
unsigned char TempCyc;
inhibit = 1;
Delay5Ms(); //延时片刻(可不要)
initkeyvariable();
Delay400Ms(); //启动等待,等LCM讲入工作状态
LCMInit(); //LCM初始化
Delay5Ms(); //延时片刻(可不要)
DisplayListChar(0, 0, cdle_net); //第一行显示 WELCOME!
DisplayListChar(0, 1, email); //第二行显示we do our best!
for (TempCyc=0; TempCyc<4; TempCyc++)
Delay400Ms(); //延时
DisplayListChar(0, 1, Cls); //清显示
IT1 = 0; //设外部中断1为低电平触发
EA = 1;
EX1 = 1; //开中断
do
{
if (BF)
{
Decode(KeyV);
inhibit = 0;
if(biaozhiflag)
{
i=0;
do{
numbertocode();
i++;
}while(i<100);
else
{
inhibit = 1;}
}
else
{
inhibit = 1;
EA = 1; //开中断
}
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -