📄 keycontrolmotor.h
字号:
/******************************************************************************
函数名:xshi()
函数功能描述:键盘输入程序
要调用此函数需包含
#include<reg51.h>
#include"delaynms.h"
#include"pin.h"
#include"serial_led.h"
#include"keycontrolmotor.h"
这几个头文件即可调用xshi()
返回zfcontrol,sudu两个参量
*******************************************************************************/
#include<reg51.h>
#include"delaynms.h"
#include"pin.h"
#include"serial_led.h"
/***********************************************************************************/
int main()
{
uchar shuru[5]={16,16,16,16,16},jianru,i=0,j,k,f;
uchar suducontrol[5]={16,16,16,16,16},zfzhuan[5]={16,16,16,16,16};
int zfcontrol,sudu;
uchar key();
uchar tab(uchar jian);
void clear_led(uchar n);
while(1)
{
uchar n=30;
jianru=key();
if(jianru!=0xff)
{
if(i<5)
{
shuru[i]=tab(jianru); /*将键盘输入存入shuru[]中*/
i++;
if(shuru[i-1]==10) /* 判断输入是不是清零*/
{
clear_led(4);
for(k=0;k<5;k++)
shuru[k]=16;
i=0;
}
else
{
show(shuru[i-1]);
if(shuru[i-1]==14) /* 判断输入是不是正反转控制*/
{
clear_led(4);
for(j=0;j<i;j++) //j<i-1不显示确认键E,j<i显示确认键E
{
zfzhuan[j]=shuru[j]; //将键盘输入放到zfzhuan[j]中
show(zfzhuan[j]); //显示正反输入
}
if(zfzhuan[1]==0) zfcontrol=0; //若键盘输入为0E则返回0,否则若键盘输入为*E则返回1
else zfcontrol=1;
for(f=0;f<5;f++) //清除数组zfzhuan[]、shuru[]
{
zfzhuan[f]=16;
shuru[f]=16;
}
i=0; //输入的正反转数据经确认显示后shuru[]数组返回原位,下次再从shuru[0]存储
return(zfcontrol); //将输入正反转控制返回调用函数
// show(zfcontrol);
}
else if(shuru[i-1]==15) /* 判断输入是不是转速*/
{
clear_led(4);
for(j=0;j<i-1;j++) //j<i-1不显示确认键F,j<i显示确认键F
{
suducontrol[j]=shuru[j]; //将键盘输入放到suducontrol[j]中
show(suducontrol[j]); //显示输入的转速
}
sudu=1000*suducontrol[0]+100*suducontrol[1]+10*suducontrol[2]+suducontrol[3];//将输入计算为转速存储
for(f=0;f<5;f++) //清除数组suducontrol[]、shuru[]
{
suducontrol[f]=16;
shuru[f]=16;
}
i=0; //输入的转速数据经确认显示后shuru[]数组返回原位,下次再从shuru[0]存储
return(sudu); //将输入转速返回调用函数
}
}
}
else i=0; //与if(i<5)相对应
} //与if(jianru!=0xff)相对应
delaynms(n);
} //与while(1)相对应
} //xshi()函数结束
/******************子程序****************************************/
uchar tab(uchar jian)
{
uchar i;
/*键盘对应位实际值码表**0***1****2****3****4****5****6****7****8****9***c\on*(%)***(*)**-****+****=***/
uchar a[16]={0x0d,0x08,0x09,0x0a,0x04,0x05,0x06,0x00,0x01,0x02,0x0c,0x03,0x07,0x0b,0x0f,0x0e };
for(i=0;i<16;i++)
{
if(jian==a[i]) return(i);
}
}
/******调用之前先对函数进行定义**********/
/*****************检查有没有键按下子程序***********************/
//有键按下返回1,无键按下返回0
uchar testkey();
/******************扫描是哪个键按下子程序***********************/
//找到所按键的键值,并返回
uchar keyscan(void);
/************键盘子程序,有键按下,找到所按下键,并将键值返回***********/
//无键按下返回ffH
uchar key()
{ if (testkey()==1)
return keyscan(); //返回键值
else return 0xff; //返回ffH
}
/******函数功能描述***************/
uchar testkey()
{ uchar jia=0,rejia=0;
uchar h;
dat=0x0f;
jia=dat;
if(jia==0x0f) h=0;
else
{ delaynms(30); // 延时消抖
rejia=dat;
if(rejia==jia)h=1; // 确实有键按下,返回1
else h=0; // 与键按下返回0
}
return h;
}
/******************扫描是哪个键按下子程序***********************/
uchar keyscan(void)
{ uchar pos;
uchar i,k;
bit d,z,s;
k=0;i=0;z=0;s=0;
pos=0xf7;
do{i=k;
d=1;
pos<<=1; // 查找具体是哪个键按下
pos=(pos | 0x0f);
dat=pos;
if(p00==0)
{ while(d)
{ if(p00==1)
{d=0;
i += 0; // 与硬件配合起来,对于同一列的键偏移量彼此相差4
z=1;
s=1;
}
}
}
else if(p01==0)
{ while(d)
{ if(p01==1)
{d=0;
i += 4; // 与硬件配合起来,对于同一列的键偏移量彼此相差4
z=1;
}
}
}
else if(p02==0)
{ while(d)
{ if(p02==1)
{d=0;
i += 8; // 与硬件配合起来,对于同一列的键偏移量彼此相差4
z=1;
}
}
}
else if(p03==0)
{ while(d)
{ if(p03==1)
{d=0;
i += 12; // 与硬件配合起来,对于同一列的键偏移量彼此相差4
z=1;
}
}
}
} while((++k != 4)&&(z==0));
if((i==3)&&(s==0)) return (0xff);
else return i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -