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

📄 key.h

📁 4*4键盘控制程序 //分三个部分
💻 H
📖 第 1 页 / 共 2 页
字号:
                      delay600ms();
                      display_output_word(0,96,cur_wait,11,1);
                      set_current();
                   }
                   
               }
	  }
        else{}
}

//////////////////////////////////数字键部分//////////////////////////////////////
//无返回值,无输入参数,用到全局变量page_number,xposition,yposition,scroll_value//
//////////////////////////////////////////////////////////////////////////////////
void key_number(uchar m)
{
    uchar *p;
    uchar idata i;

    if(page_number==0)  //开机画面页
    {
		page_number=1;
		scroll_value=0;
		xposition=1;
		yposition=2;
            display_page(page_number,scroll_value,1);
    }     

    //对不同功能页面移动光标有不同限制限制
    if(page_number==2)  //input parameter value
    {
         //在屏幕上画数字
        p=numcode;   //由键值指向所对应的数字字模首地址
        p=p+m*16;

                if(yposition<8)//左半屏
		{
			send_command_l(xposition*2+184);//上半数字
			send_command_l(yposition*8+64);
		    for(i=0;i<8;i++)
			{
				send_data_l(*p);
				p++;
			}
			send_command_l(xposition*2+184+1);//下半数字
			send_command_l(yposition*8+64);
			for(i=0;i<8;i++)
			{
				send_data_l(*p);
				p++;
			}
		}
		else  //右半屏
		{
			send_command_r(xposition*2+184);//上半数字
			send_command_r(yposition*8);
		    for(i=0;i<8;i++)
			{
				send_data_r(*p);
				p++;
			}
			send_command_r(xposition*2+184+1);//下半数字
			send_command_r(yposition*8);
			for(i=0;i<8;i++)
			{
				send_data_r(*p);
				p++;
			}
		}
	

     //在缓冲区存储数字
     p=key_buffer; //指向键盘缓冲区
     p=p+xposition*3+yposition-5; //移动到光标位置的缓冲区
     *p=m; //存储数字

     
        if(yposition==7 && xposition<3)
        {
           yposition=5;
      
             xposition++;
     
        }
        else if(yposition<7)
        {
          yposition++;
        }
        else{}


  }
  else if(page_number==3)
  {
       if(m==8)
       {
                         //add wave display function here
                         if(wave_num>0)
                         {
                             wave_num--;
                             wave_move=0;
                             wave_display();
                         }
       }
       else if(m==9)
       {

                         //add wave display function here
                         if(wave_num<total_array-1)
                         {
                             wave_num++;
                             wave_move=0;
                             wave_display();
                         }
       }
       else if(m==4)
       {
              wave_position-=4;
              wave_display();
       }
       else if(m==5)
       {
             wave_position+=4;
             wave_display();
       }
       else{}
   }
   else{}
}


void key_measure()
{
   if(page_number==2)//begain measure
   {
       display_output_word(0,96,test_wait,11,1);
       measure();
   }
   else       //back
   {
		page_number=1;
		scroll_value=0;
		xposition=1;
		yposition=2;
                display_page(page_number,scroll_value,1);
   }
}

////////////////////////////////缓冲区清零////////////////////////////
//清零键盘缓冲区,便于读写.无返回值。                     //
//////////////////////////////////////////////////////////////////////
void clear_key_buffer(uchar n)
{
uchar idata i;
for(i=0;i<3;i++)
  {
    key_buffer[n*3+i]=11;
  }

}

/////////////////////////////读取缓冲区函数/////////////////////////////////////////
//无返回值,有三个输入变量,x表示要读取缓冲区所在的行,取值为0,1,2,3。整型指针变量p1//
//负责向输入的整型变量地址内赋值,即把缓冲区中的数据传递出去.
////////////////////////////////////////////////////////////////////////////////////
void read_key_buffer(uchar x,uint *p1)
{
	uchar  i;
	uchar *p;
      bit sign;

      sign=0;
	*p1=0;

      p=key_buffer;//移动到所要读的行位置
      p=p+x*3;
	  
	for(i=0;i<3;i++)
	{
		if(*p<10) //非小数点并且非空位
		{
                  sign=1;
			*p1=*p1*10 + *p; //累加求值
		}
		if(*p==11 && sign==1)//键盘数字输入结束
		{
			return;
		}
		p++;
	}
}

      
////////////////////////////////class key_value to fit functions////////////////////
//with out return value,with out input value,using key_value public variers.      //
////////////////////////////////////////////////////////////////////////////////////
void scan_key()
{
 if(key_value==key0)
  {
   key_number(0);
   key_value=0;
  }
else if(key_value==key1)
  {
   key_number(1);
   key_value=0;
  }
else if(key_value==key2)
  {
   key_number(2);
   key_value=0;
  }
else if(key_value==key3)
  {
   key_number(3);
   key_value=0;
  }
else if(key_value==key4)
  {
   key_number(4);
   key_value=0;
  }
else if(key_value==key5)
  {
   key_number(5);
   key_value=0;
  }
else if(key_value==key6)
 { 
   key_number(6);
   key_value=0;
 }
else if(key_value==key7)
  {
   key_number(7);
   key_value=0;
  }
else if(key_value==key8)
  {
   key_number(8);
   key_value=0;
  }
else if(key_value==key9)
  {
   key_number(9);
   key_value=0;
  }
else if(key_value==keymeasure)
  {
    key_measure();
    key_value=0;
  }
else if(key_value==keyok)
  {
      key_ok();
      key_value=0;
  }
else if(key_value==keyup)
   {
     key_up();
     key_value=0;
   }
else if(key_value==keydown)
   {
      key_down();
      key_value=0;
    }
else if(key_value==keyleft)
    {
      key_left();
       key_value=0;
    }
else if(key_value==keyright)
    {
      key_right();
      key_value=0;
    }
else
    { }
key_sign=0;
}

/////////////////////////////read key/////////////////////////////////
void key() interrupt 2
{

key_sign=1; //there is a key put down

IO_CS=0;

COM8155=0x0d;
COM8155=0x0d;

delay20ms();
key_value=PB8155;   //读键盘
key_value=PB8155;   //读键盘
delay20ms();

IO_CS=1;
     
}

⌨️ 快捷键说明

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