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

📄 key.c

📁 lcd16x2的驱动程序,另外有proteus制作的模型,万年历
💻 C
字号:
#include "16x2_main.h"
#include "16x2_lcd.h"



bit Menu_State=0;                   //为1时进入设定状态
unsigned char Position;
const unsigned char C_Position[14]={5,6,7,8,10,11,13,14,5,6,8,9,11,12};


void Key_Initial()
{
	EA=1;
	EX1=1;
}


void Key_Menu_server()
{
  Menu_State=!Menu_State;      //当用时钟计时是记得关中断
  Position=0;
  
  if(Menu_State)
      {
   	  Lcd_CodeWrite(0x0f); //显示开,光标开,闪   //进入

	  }

  else
      {
      Lcd_CodeWrite(0x0c); //显示开,光标关,闪     //退出

	  }

}
void Key_Set_server()
{ 
  //移动光标,更新输入 
  if(Menu_State)
   {
    Position++;
    if(Position==14)Position=0;
    if(Position>=8)
       {
        while(Lcd_StateRead());
        Lcd_CodeWrite(0xc0|C_Position[Position]);  //输入地址
	    }
     else
       {
        while(Lcd_StateRead());
        Lcd_DataWrite(0x80|C_Position[Position]); 
	    }
     }

     Lcd_FramDisplay();
}


void Key_Up_server()
{
   if(Menu_State)
   {
     switch (Position)
	  {
        case 0:
		case 1:
		case 2:
		case 3:
	    case 5:
		case 7:
		case 9:
		case 11:
		case 13: datatime[Position]=(++datatime[Position])%10;break;
        case 4:  datatime[Position]=(++datatime[Position])%2;break;
		case 6:  datatime[Position]=(++datatime[Position])%4;break;
		case 8:  datatime[Position]=(++datatime[Position])%3;break;
		case 10:
		case 12: datatime[Position]=(++datatime[Position])%7;break;
	  }

   }

  Lcd_FramDisplay();

}
void Key_Down_server()
{
    if(Menu_State)
   {
     switch (Position)
	  {
        case 0:
		case 1:
		case 2:
		case 3:
	    case 5:
		case 7:
		case 9:
		case 11:
		case 13: datatime[Position]--;if(datatime[Position]==255)datatime[Position]=9;break;
        case 4:  datatime[Position]--;if(datatime[Position]==255)datatime[Position]=1;break;
		case 6:  datatime[Position]--;if(datatime[Position]==255)datatime[Position]=3;break;
		case 8:  datatime[Position]--;if(datatime[Position]==255)datatime[Position]=2;break;
		case 10:
		case 12: datatime[Position]--;if(datatime[Position]==255)datatime[Position]=6;break;
	  }

   }
     Lcd_FramDisplay();
}



void Key_int() interrupt 2
{
	unsigned char key;
	EA=0;
	EX1=0;

	key=KEY_VALUE;
	Delay(500);
	if(key!=KEY_VALUE) goto keyend;
	Delay(500);
   	switch(key)
	{
		case 0xe: Key_Menu_server();  //menu  1110
			break;
		case 0xd: Key_Set_server();   //set   1101
			break;
		case 0xb: Key_Up_server();    //up   1011
			break;
		case 0x7: Key_Down_server();  //down  0111
			break;
		default: ;
	 }
keyend: Delay(10);
	    EA=1;
	    EX1=1;
} 


⌨️ 快捷键说明

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