⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keycontrolmotor.h

📁 键盘输入程序,很好用得,使用AT89S52单片机
💻 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 + -