📄 51lcd1602+=
字号:
/**********************************************************
按键相关处理程序
**********************************************************/
#include <reg52.h>
#include "work.h"
//=========================================================
void jiahander(void);
void jianhander(void);
void chenghander(void);
void chuhander(void);
//==========================================================
//键盘扫描函数 返回键值 1-16
//==========================================================
uchar keys(void)
{
unsigned char recode,i,j;
for(i=0;i<4;i++)
{
KEY=~(0x01<<i);
recode=KEY>>4;
if(recode<0x0f)
{
for(j=0;j<4;j++)
{if(!(recode&0x01<<j))break;}
return (i<<2)+(j+1); //返回键值 1-16
}
delayms(5); //延时5ms
}
return 0; //无按键返回
}
//=======================================================
//给键值定义值
//=======================================================
uchar scanzhi(void)
{
uchar zhi,k;
k=keys();
switch(k)
{
case 0: zhi=27;break;
case 1: zhi=7;break;
case 2: zhi=8;break;
case 3: zhi=9;break;
case 4: zhi=24;break; // /
case 5: zhi=4;break;
case 6: zhi=5;break;
case 7: zhi=6;break;
case 8: zhi=23;break; //*
case 9: zhi=1;break;
case 10: zhi=2;break;
case 11: zhi=3;break;
case 12: zhi=22;break; //-
case 13: zhi=26;break; //nc
case 14: zhi=0;break;
case 15: zhi=25;break; //=
case 16: zhi=21;break; //+
}
return(zhi);
}
//============================================================
void keyscan(void)
{
uchar key;
key=scanzhi();
if(key!=27) //------有无按键
{
if(key<=9) //-----------------------数字输入------------------
{
pflag=1;
sfflag|=0x01;
if(qflag==1)
{
k=0;
clearplay(3);
bczs=0;
qflag=0;
}
pbuffer1[k++]=0x30+key;
bczs=bczs*10+key;
} //-----------------------------------------------------------
else if(key>20)//------符号输入
{
pflag=1;
switch(key)
{
case 21: jiahander();break; //+
case 22: jianhander();break; //-
case 23: chenghander(); break; //*
case 24: chuhander(); break; // /
case 25: if(sfflag==0x01) break;
if(qflag==1) {sfflag=0; break; }
czshu=bczs;jishuan();sfflag=0x01;pbuffer1[k++]='=';break; //=
case 26: bczs=0;jguo=0;bczshu=0;czshu=0;sfflag=0;
clearplay(3);k=0;qflag=0;jsfuhao=0; break; //nc
}
}
while(scanzhi()!=27);
}
}
//=======================================================
//等号处理函数
//=======================================================
void jishuan(void)
{
switch(jsfuhao)
{
case 1: jguo=bczshu+czshu;jchangep();break;
case 2: jguo=bczshu-czshu;jchangep();break;
case 3: jguo=bczshu*czshu;jchangep();break;
case 4: jguo=bczshu/czshu;jchangep();break;
}
jsfuhao=0;
qflag=1;
}
//=======================================================
//加号处理函数
//=======================================================
void jiahander(void)
{
if(sfflag>=0x82) return;
if((sfflag&0x80)!=0)
{
k--;
pbuffer1[k++]='+';
jsfuhao=1;
return;
}
if(qflag==1)
{
qflag=0;exchangexx();
bczshu=jguo; bczs=0;pbuffer1[k++]='+';
}
else
{
bczshu=bczs;bczs=0;pbuffer1[k++]='+';
}
sfflag|=0x80;
sfflag+=0x01;
jsfuhao=1;
}
//=======================================================
//减号处理函数
//=======================================================
void jianhander(void)
{
if(sfflag>=0x82) return;
if((sfflag&0x80)!=0)
{
k--;
pbuffer1[k++]='-';
jsfuhao=2;
return;
}
if(qflag==1)
{
qflag=0;exchangexx();
bczshu=jguo; bczs=0;pbuffer1[k++]='-';
}
else
{
bczshu=bczs;bczs=0;pbuffer1[k++]='-';
}
sfflag|=0x80;
sfflag+=0x01;
jsfuhao=2;
}
//=======================================================
//乘号处理函数
//=======================================================
void chenghander(void)
{
if(sfflag>=0x82) return;
if((sfflag&0x80)==0x80)
{
k--;
pbuffer1[k++]='*';
jsfuhao=3;
return;
}
if(qflag==1)
{
qflag=0;exchangexx();
bczshu=jguo; bczs=0;pbuffer1[k++]='*';
}
else
{
bczshu=bczs;bczs=0;pbuffer1[k++]='*';
}
sfflag|=0x80;
sfflag+=0x01;
jsfuhao=3;
}
//=========================================================
//除号处理函数
//=========================================================
void chuhander(void)
{
if(sfflag>=0x82) return;
if((sfflag&0x80)!=0)
{
k--;
pbuffer1[k++]='/';
jsfuhao=4;
return;
}
if(qflag==1)
{
qflag=0;exchangexx();
bczshu=jguo; bczs=0;pbuffer1[k++]='/';
}
else
{
bczshu=bczs;bczs=0;pbuffer1[k++]='/';
}
sfflag|=0x80;
sfflag+=0x01;
jsfuhao=4;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -