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

📄 config.c

📁 240128液晶底层驱动以及键盘操作编写菜单
💻 C
📖 第 1 页 / 共 4 页
字号:
 key_xd_delay();////键消抖延时/////
 if((P07&P06&P05&P04)==0)
 {
//////////////////////////////////////////////////////////////////////////////////
////模块功能:确定出按下的键在那一行,通过变量row的值去体现/////////////////////////////////////////////////////////////////////////
   P0=0xfe;
   while(1)
   {
    if((P07&P06&P05&P04)==1)
	{
      row++;
	  if(row>=4){row=0;P0=0xfe;}
	  P0=_crol_(P0,1);//|0x08)&0xe8;////#include <intrins.h>//将数据向左循环移动1位////
	  continue;	
	}   
   else  break;     
   }
////////////////////////////////////////////////////////////////////////////////
/////模块功能:确定出按下的键在那一列,由此确定按下的键,返回键号key_code////////////////////////////////////////////////////////////////////////
    switch(row)
        {
		    case  0:  if(P07==0) key_code=0x04;
			          else{
					         if(P06==0) key_code=0x08;
		   				     else{
		                          if(P05==0) key_code=0x0B;
		                            else key_code=0x0F;
		                         }
					      }
					   break;
		    case  1:  if(P07==0) key_code=0x03;
			          else{
					         if(P06==0) key_code=0x07;
		   				     else{
		                          if(P05==0) key_code=0x00;
		                            else key_code=0x0E;
		                         }
					      }
					   break;
		    case  2:  if(P07==0) key_code=0x02;
			          else{
					         if(P06==0) key_code=0x06;
		   				     else{
		                          if(P05==0) key_code=0x09;
		                            else key_code=0x0D;
		                         }
					      }
					   break;
		   case  3:  if(P07==0) key_code=0x01;
			          else{
					         if(P06==0) key_code=0x05;
		   				     else{
		                          if(P05==0) key_code=0x0A;
		                            else key_code=0x0C;
		                         }
					      }
					   break;
		   }
   }
  else  key_code=0xff;////键盘干扰返回0xff///
  P0=0xf0;        /////////////恢复正常赋值//////////////
  while((P07&P06&P05&P04)==0) ;/////等待键释放/////
  return(key_code);//////正常键盘的返回值0-15///    
}
//////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
//键消抖延时函数//
void key_xd_delay(void)
{
	uchar i;
	for(i=300;i>0;i--);
}
/////////////////////写入数字函数/0-9////调用该函数的前提是: 必须有键按下/////////////////////////////////////////////
uchar Key_Write_shuzi(uchar LCM_x,uchar LCM_y)/////并返回写入的数字////////////////
{//////获取按下的键值//在液晶上显示//并将获取的键值返回/////
  uchar keynum1,kt;
  keynum1=Get_KeyNum();
 // while((P07&P06&P05&P04)==0) ;/////等待键释放后执行键功能函数//如果键盘扫描函数中没有做处理//这里不可少///
  switch(keynum1)
   {
   case 0x00: LCD_Write_word(LCM_x,LCM_y,"0%",1);///光标显示//
              kt=0;
		      break;
   case 0x01: LCD_Write_word(LCM_x,LCM_y,"1%",1);
              kt=1;
		      break;
   case 0x02: LCD_Write_word(LCM_x,LCM_y,"2%",1);
              kt=2;
		      break;
   case 0x03: LCD_Write_word(LCM_x,LCM_y,"3%",1);
              kt=3;
		      break;
   case 0x04: LCD_Write_word(LCM_x,LCM_y,"4%",1);
              kt=4;
		      break;
   case 0x05: LCD_Write_word(LCM_x,LCM_y,"5%",1);
              kt=5;
		      break;
   case 0x06: LCD_Write_word(LCM_x,LCM_y,"6%",1);
              kt=6;
		      break;
   case 0x07: LCD_Write_word(LCM_x,LCM_y,"7%",1);
              kt=7;
		      break;
   case 0x08: LCD_Write_word(LCM_x,LCM_y,"8%",1);
              kt=8;
		      break;
   case 0x09: LCD_Write_word(LCM_x,LCM_y,"9%",1);
              kt=9;
		      break;  
    default :
              kt=250;////按下非数字键返回数值250///
		      break;////////
  }
  return(kt);
}
/////////////////操作模式函数/////调用该函数的前提是: 必须有键按下////////////////////
/////////多个功能//确定//箭头标向下移动/////////////////////////////////////////
uchar Operate_Model(void)
{
   uchar keynum,kt;
   keynum=Get_KeyNum();
   //while((P07&P06&P05&P04)==0);/////等待键释放后执行键功能函数//如果键盘扫描函数中没有做处理//这里不可少///
   switch(keynum)
	 {
       case 0x0C: kt=44;////向前翻////
			      break;
       case 0x0D: kt=11;////向上翻///
                  break;
       case 0x0E: kt=33;////向下翻////
			      break;
       case 0x0F: kt=66;////向后翻////
                  break;		              
       case 0x0A: kt=77;////取消////
			      break;
       case 0x0B: kt=88;////确定////
                  break;		              		                   			               
         default: break;			      
	  }
  return(kt);
}

///////////////////光标设置函数////////////////////////////////////////////
void Cursor_configure(uchar LCM_x,uchar LCM_y,uchar flash_time,uchar high,uchar disp)
{
  LCD_Write_Funtion(0x60,LCM_x);//光标地址定位
  LCD_Write_Funtion(0x70,LCM_y);//光标地址定位
  LCD_Write_Funtion(0x80,flash_time) ;//光标闪烁时间
  LCD_Write_Funtion(0x11,high);//光标高度和行距设定
  LCD_Write_Funtion(0x10,disp);//写光标是否自动移位//光标是否显示//光标是否闪烁//光标是否自适应宽度//  
}

////////////////////光标提示显示输入1位的数据函数////调用该函数的前提是: 必须有键按下/////////////////////////////////////////////////////
uchar Disp_inputdata_1(uchar LCM_x1,uchar LCM_y1,uchar LCM_x2,uchar LCM_y2,y_data)////y_data是要输入的数字//
{///uchar LCM_x1,uchar LCM_y1指定位置输入1位数字//uchar LCM_x2,uchar LCM_y2指定下一个需要输入数据的地方///////
/////////////////并返回输入的数据//////////
  uchar datt;
  a1=Key_Write_shuzi(LCM_x1,LCM_y1);
  LCD_Disp_Frame_S();
  Cursor_configure(LCM_x2,(LCM_y2+16),0x20,0x20,0x6f);//光标配置//光标显示//
  if(a1==250)  datt=y_data;
  if(a1!=250)  datt=a1;
  a1=0;
  return(datt);//正常情况//应该是0-9的数据//
}
////////////////////光标提示显示输入2位的数据函数////调用该函数的前提是: 必须有键按下/////////////////////////////////////////////////////
uchar Disp_inputdata_2(uchar LCM_x1,uchar LCM_y1,uchar LCM_x2,uchar LCM_y2,y_data)///////光标跳到下一个需要输入数据的地方//
{
  uchar datt;
  if(gg==0)///gg是全局变量///
   {
    a1=Key_Write_shuzi(LCM_x1,LCM_y1);
    LCD_Disp_Frame_S();
    Cursor_configure((LCM_x1+1),(LCM_y1+16),0x20,0x20,0x6f);//光标配置//
    gg=1;  
    return(a1);////////
   }
  else
  {
   b1=Key_Write_shuzi((LCM_x1+1),LCM_y1);
   LCD_Disp_Frame_S();
   Cursor_configure(LCM_x2,(LCM_y2+16),0x20,0x20,0x6f);//光标配置// 
   if((a1==250)&&(b1==250)) datt=y_data;
   if((a1==250)&&(b1!=250)) datt=10*(y_data/10)+b1;
   if((a1!=250)&&(b1==250)) datt=10*a1+y_data%10;
   if((a1!=250)&&(b1!=250)) datt=10*a1+b1;
   a1=0;b1=0;gg=0;
   return(datt);
  }
}
///////////////////////////////////////////////////////////////////////////////////////
////////////////////光标提示显示输入3位的数据函数////调用该函数的前提是: 必须有键按下/////////////////////////////////////////////////////
uint Disp_inputdata_3(uchar LCM_x1,uchar LCM_y1,uchar LCM_x2,uchar LCM_y2,y_data)/////////
{////////uchar LCM_x1,uchar LCM_y1//表示输入3位数据的位置////uchar LCM_x2,uchar LCM_y2//光标跳到下一个需要输入数据的位置//
  uint datt;
  if(gg==0)///gg是全局变量///
   {
	a1=Key_Write_shuzi(LCM_x1,LCM_y1);
	LCD_Disp_Frame_S();
	Cursor_configure((LCM_x1+1),(LCM_y1+16),0x20,0x20,0x6f);//光标配置//
    gg=1;  
    return(a1);////////
   }
  else
  {
   if(gf==0)///gf是全局变量///
    {
	   b1=Key_Write_shuzi((LCM_x1+1),LCM_y1);
	   LCD_Disp_Frame_S();
	   Cursor_configure((LCM_x1+2),(LCM_y1+16),0x20,0x20,0x6f);//光标配置//
       gf=1;  
       return(b1);////////
    }
   else
    {
	  c1=Key_Write_shuzi((LCM_x1+2),LCM_y1);
	  LCD_Disp_Frame_S();
      Cursor_configure(LCM_x2,(LCM_y2+16),0x20,0x20,0x6f);//光标配置//
      if((a1==250)&&(b1==250)&&(c1==250)) datt=y_data;                              ////000//
      if((a1==250)&&(b1==250)&&(c1!=250)) datt=100*(y_data/100)+10*(y_data%100/10)+c1; //001
      if((a1==250)&&(b1!=250)&&(c1==250)) datt=100*(y_data/100)+10*b1+y_data%100%10;   //010
      if((a1==250)&&(b1!=250)&&(c1!=250)) datt=100*(y_data/100)+10*b1+c1;             //011
      if((a1!=250)&&(b1==250)&&(c1==250)) datt=100*a1+y_data%100/10+y_data%100%10;     //100//
      if((a1!=250)&&(b1==250)&&(c1!=250)) datt=100*a1+10*(y_data%100/10)+c1;         ///101//
      if((a1!=250)&&(b1!=250)&&(c1==250)) datt=100*a1+10*b1+y_data%100%10;           ///110//
      if((a1!=250)&&(b1!=250)&&(c1!=250)) datt=100*a1+10*b1+c1;        
	  a1=0;b1=0;c1=0;gg=0;gf=0;
      return(datt);
	}
  } 
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////


⌨️ 快捷键说明

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