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

📄 anjian.c

📁 按键的识别算法
💻 C
字号:
#include <reg52.h>
#include<string.h>
#include<math.h>
#define uint  unsigned int
#define uchar unsigned char

#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm  0
#define dat   1
sbit cs   = P2^5;
sbit std  = P2^6;
sbit sclk = P2^7;

uchar number=0;
uchar count=0;
uchar list=0;
//uchar idata tt[10]={0x07,0x06,0x06,0x17,0x25}; 
uchar idata tab1[64];
uchar idata buffer[12];

uchar code tab2[]={
"  时间          "
"  电压设置      "
"  电压值        "
"  电压统计量    "
};

uchar idata tab3[]={
"2007-05-31 16:33"
"2007-05-30 16:33"
"电压值: 220.5V  "
"电压值: 220.5V  "
};

uchar code tab4[]={
"*-------------* "
"上限电压: 107%  "
"下限电压:  90%  "
"*-------------* "
};

uchar code tab5[]={
"  整点电压值    "
"上限电压时间间隔"
"下限电压时间间隔"
"  停电时间间隔  "
};

void wr_lcd (uchar dat_comm,uchar content);
void delay (uint us);
//uchar keywork(uchar p,uchar k);

/*------------------初始化-----------------*/
void init_lcd (void)
{
  
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  delay (100);
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
}

/*---------------显示汉字----------------*/
void chn_disp (uchar code *chn)
{
 uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  for (j=0;j<4;j++)
  {
    for (i=0;i<16;i++)
    wr_lcd (dat,chn[j*16+i]);
  }
}

/*---------------显示字----------------*/
void chn_disp1 (uchar idata *chn)
{
 uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  j=0;
  {
    for (i=0;i<16;i++)
    wr_lcd (dat,chn[j*16+i]);
  }
}

/*---------------显示电压----------------*/
void chn_disp2 (uchar idata *chn)
{
 uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  for (j=0;j<4;j++)
  {
    for (i=0;i<16;i++)
    wr_lcd (dat,chn[j*16+i]);
  }
}
/*--------------显示点阵----------------*/
void lat_disp (uchar data1,uchar data2)
{
  uchar i,j,k,x;
  x=x1;
  for(k=0;k<2;k++)
  {
    for(j=0;j<16;j++)
    {
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,y+j*2);
        wr_lcd (comm,x+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data1);
        wr_lcd (dat,data1);
      }
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,y+j*2+1);
        wr_lcd (comm,x+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data2);
        wr_lcd (dat,data2);
      }
    }
    x=x2;
  }
  wr_lcd (comm,0x36);
}

/*---------------反白 ---------------------*/
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
  uchar i,j;
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y0+j);
      wr_lcd (comm,x0+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,data1);
      wr_lcd (dat,data2);
    }
  }
  wr_lcd (comm,0x36);
}

/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
  uchar a,i,j;
  delay (50);
  a=content;
  cs=1;
  sclk=0;
  std=1;
  for(i=0;i<5;i++)
  {
    sclk=1;
    sclk=0;
  }
  std=0;
  sclk=1;
  sclk=0;
  if(dat_comm)
    std=1;   //data
  else
    std=0;   //command
  sclk=1;
  sclk=0;
  std=0;
  sclk=1;
  sclk=0;
  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)
    {
      a=a<<1;
      std=CY;
      sclk=1;
      sclk=0;
    }
    std=0;
    for(i=0;i<4;i++)
    {
      sclk=1;
      sclk=0;
    }
  }
}

/*-----------------------------------*/
void delay (uint us)   //delay time
{
  while(us--);
}

/*---------------数据处理--------------------*/
void transfer(uchar idata tt[])
{ uchar i, time;
   for(i=0;i<6;i++)
  {
     time=tt[i];
     buffer[2*i+1]=time&0x0f;
     buffer[2*i]=time>>4;
  }
}

void convent( uchar idata buffer[])
{  uchar i, time; 
   uchar idata pp[]={"-- :"};
   uchar idata buffer1[12];
   for(i=0;i<12;i++) 
  { time=buffer[i];
    switch(time)
	  { case 0:buffer1[i]='0'; break;
	    case 1:buffer1[i]='1'; break;
		case 2:buffer1[i]='2'; break;
		case 3:buffer1[i]='3'; break;
	    case 4:buffer1[i]='4'; break;
		case 5:buffer1[i]='5'; break;
		case 6:buffer1[i]='6'; break;
	    case 7:buffer1[i]='7'; break;
		case 8:buffer1[i]='8'; break;
		case 9:buffer1[i]='9'; break;
		default: break;
	  }
   }
  for(i=0;i<4;i++)
    { tab1[i]=buffer1[i];
      tab1[3*i+4]=pp[i];
      tab1[3*i+5]=buffer1[2*i+4];
      tab1[3*i+6]=buffer1[2*i+5];
	}
 }

/*-----------------1#键------------------*/
void key1(uchar flag[])
{  
     number++;
     if(number==3)
      number=1;
    flag[1]=number;
  if(flag[1]==1)
     {  flag[3]=1;
        flag[2]=1;
		init_lcd ();
        lat_disp (0x00,0x00);
        chn_disp (tab2);
     }
  if(flag[1]==2)
     {  if(flag[4]==1)
           { init_lcd ();
             lat_disp (0x00,0x00);
             convent(buffer);
             chn_disp1 (tab1);
		     flag[5]=1;
           }
        if(flag[4]==2)
           { init_lcd ();
             lat_disp (0x00,0x00);
             chn_disp2 (tab3);
	     }
	   if(flag[4]==3)
         { init_lcd ();
           lat_disp (0x00,0x00);
           chn_disp (tab4);
	     }
	   if(flag[4]==4)
         { init_lcd ();
           lat_disp (0x00,0x00);
           chn_disp (tab5);
	     }
	    flag[1]=1;
		
    }
}

/*-----------------2#键------------------*/
void key2(uchar  flag[])
{    count++;
     if(count==5)
      count=1;
    flag[4]=count;
   
  if(flag[2]==1)
  {   if(flag[4]==1) 
      {  con_disp (0x00,0x00,0x98,0x90,8,16); 
	     con_disp (0xff,0xff,0x80,0x80,8,16); 
	  } 
	  if(flag[4]==2) 
	   { con_disp (0x00,0x00,0x80,0x80,8,16);
 	     con_disp (0xff,0xff,0x90,0x90,8,16);
	   }
	  if(flag[4]==3)
	   { con_disp (0x00,0x00,0x90,0x90,8,16);
 	     con_disp (0xff,0xff,0x88,0x80,8,16);
	   }
     if(flag[4]==4)
		{ con_disp (0x00,0x00,0x88,0x80,8,16); 
		  con_disp (0xff,0xff,0x98,0x90,8,16);  
		}
   }         
}

/*-----------------3#键------------------*/
void key3(uchar flag[])
{ 
    list++;
  if(list==15)
    list=1;
     flag[6]=list;
 if(flag[5]==1)
  {    lat_disp (0x00,0x00);
	   chn_disp1 (tab1);
      if(flag[6]==1) 
	    { con_disp (0x00,0x00,0x87,0x80,1,16);
		  con_disp (0xff,0x00,0x80,0x80,1,16);
		}
    if(flag[6]==2)
        {   con_disp (0x00,0xff,0x80,0x80,1,16);}
	  if(flag[6]==3)
	    {  con_disp (0x00,0x00,0x80,0x80,1,16);
           con_disp (0xff,0x00,0x81,0x80,1,16);
	    } 
    if(flag[6]==4)
	    { con_disp (0x00,0xff,0x81,0x80,1,16); } 
      if(flag[6]==5)
	    {  con_disp (0x00,0x00,0x81,0x80,1,16);   
   	       con_disp (0xff,0x00,0x82,0x80,1,16); 
	    }  
    if(flag[6]==6)
	  {  con_disp (0x00,0xff,0x82,0x80,1,16); }
      if(flag[6]==7)
	  {  con_disp (0x00,0x00,0x82,0x80,1,16);   
   	     con_disp (0xff,0x00,0x83,0x80,1,16); 
	  } 
    if(flag[6]==8)
	  {  con_disp (0x00,0xff,0x83,0x80,1,16); } 
      if(flag[6]==9)
	  {  con_disp (0x00,0x00,0x83,0x80,1,16);   
   	     con_disp (0xff,0x00,0x84,0x80,1,16); 
	  }
    if(flag[6]==10)
	  {  con_disp (0x00,0xff,0x84,0x80,1,16); } 
	  if(flag[6]==11)
	  {  con_disp (0x00,0x00,0x84,0x80,1,16);   
   	     con_disp (0xff,0x00,0x85,0x80,1,16); 
	  }
 	if(flag[6]==12)
	  {  con_disp (0x00,0xff,0x85,0x80,1,16); } 
	  if(flag[6]==13)
	  {  con_disp (0x00,0x00,0x85,0x80,1,16);   
   	     con_disp (0xff,0x00,0x86,0x80,1,16); 
	  } 
    if(flag[6]==14)
	  {  con_disp (0x00,0xff,0x86,0x80,1,16); } 
	  if(flag[6]==15)
	  { con_disp (0x00,0x00,0x86,0x80,1,16);   
   	    con_disp (0xff,0x00,0x87,0x80,1,16); 
	  } 
    if(flag[6]==16)
	  { con_disp (0x00,0xff,0x87,0x80,1,16);} 
   }
}
/*-----------------4#键------------------*/
 key4(uchar flag[],uchar idata tt[])
{  uchar i, time,hour;
   
   if(flag[6]==1)
    {    buffer[0]++;
        if(buffer[0]>9)
	       buffer[0]=0;
    }
 
   if(flag[6]==2)
    {    buffer[1]++;
	     if(buffer[1]>9)
	        buffer[1]=0;
    }
   if(flag[6]==3)
    {    buffer[1]++;
	     if(buffer[1]>9)
	        buffer[1]=0;
    }
	if(flag[6]==4)
    {    buffer[1]++;
	     if(buffer[1]>9)
	        buffer[1]=0;
    }
   if(flag[6]==6)
    {    buffer[2]++;
        if(buffer[2]>1)
	       buffer[2]=0;
    }
  
   if(flag[6]==7)
    {     buffer[3]++;
	    if(buffer[3]>9)
	       buffer[3]=0;
    }

   if(flag[6]==9)
    {   buffer[4]++;
	    if(buffer[4]>3)
	    buffer[4]=0;
    }
 
   if(flag[6]==10)
     {   buffer[5]++;
	    if(buffer[5]>9)
         buffer[5]=0;
	 }

   if(flag[6]==12)
     {    buffer[6]++;
	     if(buffer[6]>2)
	        buffer[6]=0;
     }
    if(flag[6]==13)
    {    buffer[7]++;
	    if(buffer[7]>9)
         buffer[7]=0;
    }
   if(flag[6]==15)
    {   buffer[8]++;
	   if( buffer[8]>5)
	     buffer[8]=0;
    }
  if(flag[6]==16)
    {  buffer[9]++;
	    if( buffer[9]>9)
	    buffer[9]=0;
    }
    for(i=0;i<5;i++)
    {  time=buffer[2*i];
	   time=time<<4;
       hour=buffer[2*i+1];
	   tt[i]=time|hour;
	}
    for(i=0;i<6;i++)
    {  time=buffer[2*i];
	   time=time<<4;
       hour=buffer[2*i+1];
	   tt[i]=time|hour;
	}
    convent(buffer);
    chn_disp1 (tab1);

  }
/*-----------------5#键------------------*/
/*void key4(uchar  flag[],uchar idata tab1[])
{  
   if(flag[6]==1)
  {  tab1[1]++;
     if(tab1[1]>9)
	 tab1[1]=0; 
     chn_disp1 (tab1);
  }
   if(flag[6]==2)
  {  tab1[2]++;
     if(tab1[2]>9)
	 tab1[2]=0; 
     chn_disp1 (tab1);
  }
  if(flag[6]==4)
  {  tab1[4]++;
     if(tab1[4]>1)
	 tab1[4]=0; 
     chn_disp1 (tab1);
  }
   if(flag[6]==5)
  {  tab1[5]++;
     if(tab1[5]>9)
	 tab1[5]=0; 
     chn_disp1 (tab1);
  }
   if(flag[6]==7)
  {  tab1[7]++;
     if(tab1[7]>3)
	 tab1[7]=0; 
     chn_disp1 (tab1);
  }
   if(flag[6]==8)
  {  tab1[8]++;
     if(tab1[8]>9)
	 tab1[8]=0; 
     chn_disp1 (tab1);
  }
   if(flag[6]==10)
  {  tab1[10]++;
     if(tab1[10]>2)
	 tab1[10]=0; 
     chn_disp1 (tab1);
  }
   if(flag[6]==11)
  {  tab1[11]++;
     if(tab1[11]>9)
	 tab1[11]=0; 
     chn_disp1 (tab1);
  }
   if(flag[6]==13)
  {  tab1[13]++;
     if(tab1[13]>5)
	 tab1[13]=0; 
     chn_disp1 (tab1);
  }
   if(flag[6]==14)
  {  tab1[14]--;
     if(tab1[14]>9)
	 tab1[14]=0; 
     chn_disp1 (tab1);
  }
  flag[8]=1;
}*/

/*--------------检测键---------------------*/
uchar testkey(void)
{ uchar i,p;
  P0=0xff;
  for(i=0;i<8;i++)
    { P0=0xff;
      delay(100);
      if((P0&0xff)!=0xff)
          p=P0;
	     return (p);
    }
}

/*----------得键值------------*/
void obtain( uchar keycode, uchar tt[],uchar idata pp[])
{
   switch(keycode)
        { case 0xfe: key1(tt); break;
          case 0xfd: key2(tt); break;
		  case 0xfb: key3(tt); break;
		  case 0xf7: key4(tt,pp); break;
		  //case 0xef: key5(tt); break;
		  //case 0xdf: key6(tt); break;
		 // case 0xbf: key7(tt); break;
		 // case 0x7f: key8(tt); break;
	      default: break;
	   }
}

/*------------------------------------------------*/
void main()
{   uchar idata tt[6]={0x20,0x07,0x06,0x06,0x17,0x25}; 	               
    uchar  flag[9]={0,1,1,1,0,0,0,0,0};
    uchar keycode;
    while(1)
	{   transfer(tt);
	    keycode=testkey();
        obtain(keycode, flag,tt);
    }
}   





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -