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

📄 menu.c

📁 这是一个成熟的用于驱动步进马达的程序,我们用于调试螺钉的.
💻 C
字号:
#include <reg52.h>
#include "TypeDefines.h"
#include "delay.h"
#include "MENU.h"
#include "1335c51.h"


uchar idata KeyFuncIndex = 0;
uchar idata LastKeyIndex = 0;
void (*KeyFuncPtr)();		//按键功能函数指针

void (*ptr)();

typedef struct
{
	uchar KeyStateIndex;	//当前状态索引号
    uchar KeyEsState;		//按下“ESC”键时转向的状态索引号
	uchar KeyMeState;		//按下“MENU”键时转向的状态索引号
    uchar KeyLeState;		//按下“LEFT”键时转向的状态索引号
    uchar KeyUpState;		//按下“UP”键时转向的状态索引号
	uchar KeyDnState;		//按下“DOWN”键时转向的状态索引号 	
	uchar KeyRiState;		//按下“RIGHT”键时转向的状态索引号
	uchar KeyCrState;		//按下“ENTER”键时转向的状态索引号	
	void (*CurrentOperate)();//当前状应该执行的功能操作
}KbdTabStruct;


KbdTabStruct code KeyTab[SIZE_OF_KEYBD_MENU]=
{
  //   E   M    L   U   D   R   C    *
  
  {0,  0, 1,   0,  0,  0,  0, 0, &operation0},
  {1,  0, 13, 10, 2,  3,  4, 13, &operation1},
  {2,  0, 13, 10, 2,  3,  4, 13, &operation2},
  {3,  0, 13, 10, 2,  3,  4, 13, &operation3},
  {4,  0, 13, 1,  5,  6,  7, 13, &operation4},
  {5,  0, 13, 1,  5,  6,  7, 13, &operation5},
  {6,  0, 13, 1,  5,  6,  7, 13, &operation6},
  {7,  0, 13, 4,  8,  9,  10,13, &operation7},
  {8,  0, 13, 4,  8,  9,  10,13, &operation8},
  {9,  0, 13, 4,  8,  9,  10,13, &operation9},
  {10, 0, 13, 7,  11, 12, 1, 13, &operation10},
  {11, 0, 13, 7,  11, 12, 1, 13, &operation11},
  {12, 0, 13, 7,  11, 12, 1, 13, &operation12},

  {13, 0, 25, 22, 14, 15, 16,25, &operation13},
  {14, 0, 25, 22, 14, 15, 16,25, &operation14},
  {15, 0, 25, 22, 14, 15, 16,25, &operation15},
  {16, 0, 25, 13, 17, 18, 19,25, &operation16},
  {17, 0, 25, 13, 17, 18, 19,25, &operation17},
  {18, 0, 25, 13, 17, 18, 19,25, &operation18},
  {19, 0, 25, 16, 20, 21, 22,25, &operation19},
  {20, 0, 25, 16, 20, 21, 22,25, &operation20},
  {21, 0, 25, 16, 20, 21, 22,25, &operation21},
  {22, 0, 25, 19, 23, 24, 13,25, &operation22},
  {23, 0, 25, 19, 23, 24, 13,25, &operation23},
  {24, 0, 25, 19, 23, 24, 13,25, &operation24},
											 
  {25, 0, 0, 34, 26, 27, 28,0, &operation25},
  {26, 0, 0, 34, 26, 27, 28,0, &operation26},
  {27, 0, 0, 34, 26, 27, 28,0, &operation27},
  {28, 0, 0, 25, 29, 30, 31,0, &operation28},
  {29, 0, 0, 25, 29, 30, 31,0, &operation29},
  {30, 0, 0, 25, 29, 30, 31,0, &operation30},
  {31, 0, 0, 28, 32, 33, 34,0, &operation31},
  {32, 0, 0, 28, 32, 33, 34,0, &operation32},
  {33, 0, 0, 28, 32, 33, 34,0, &operation33},
  {34, 0, 0, 31, 35, 36, 25,0, &operation34},
  {35, 0, 0, 31, 35, 36, 25,0, &operation35},
  {36, 0, 0, 31, 35, 36, 25,0, &operation36}	   
	
};

uchar GetKeyInput(void)                  //按键扫描及处理程序
{
	uchar KeyValue;
/*
	if(STOP==0)
	{
		delay_xms(30);
		if(STOP==0)
		{
			return KEY_STOP;
		}
	}
	else if(START==0)
	{
		delay_xms(30);
		if(START==0)
		{
			return KEY_START;
		}
	}
	
	else if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==0)&&(STOP==0)&&(START==0))
	{
		delay_xms(30);
		if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==0)&&(STOP==0)&&(START==0))
		{
			return KEY_ADJUST;
		}
	}

*/
	if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==1))          //按下“ESC”键
	    {
            delay_xms(30);
            if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==1))
            {
	            KeyValue = 1;
            }
	    }
	else if((KEY_1==1)&&(KEY_2==1)&&(KEY_3==0))     //按下“MENU”键
	    {
            delay_xms(30);
            if((KEY_1==1)&&(KEY_2==1)&&(KEY_3==0))
            {
	            KeyValue = 2;
            }
	    }
	else if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==0))     //按下“LEFT”键
	    {
            delay_xms(30);
            if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==0))
            {
	            KeyValue = 3;
            }
	    }
	else if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==1))      //按下“UP”键
	    {
            delay_xms(30);
            if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==1))
            {
	            KeyValue = 4;
            }
	    }
	else if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==1))      //按下“DOWN”键
	    {
            delay_xms(30);
            if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==1))
            {
	            KeyValue = 5;
            }
	    }
	else if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==0))      //按下“RIGHT”键
	    {
            delay_xms(30);
            if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==0))
            {
	            KeyValue = 6;
            }
	    }
	else if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==0))          //按下“ENTER”键
	    {
            delay_xms(30);
            if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==0))
            {
	            KeyValue = 7;
            }
	    }
    else
        {
            KeyValue = 0;
        }
	    	    	    	    	    	    	    	    	    	    	    	    	
	switch(KeyValue)
	{
        case 0:                         //没有键按下
            {
                return 0;
            }
		case 1:                         //按下“ESC”键,找出新的状态索引号
			{	
				KeyFuncIndex = KeyTab[KeyFuncIndex].KeyEsState;
				break;
			}
		case 2:                         //按下“MENU”键,找出新的状态索引号
			{
				KeyFuncIndex = KeyTab[KeyFuncIndex].KeyMeState;
				break;
			}
		case 3:                         //按下“LEFT”键,找出新的状态索引号
			{
				KeyFuncIndex = KeyTab[KeyFuncIndex].KeyLeState;
				break;
			}
		case 4:                         //按下“UP”键,找出新的状态索引号
			{
				KeyFuncIndex = KeyTab[KeyFuncIndex].KeyUpState;
				break;
			}
		case 5:                         //按下“DOWN”键,找出新的状态索引号
			{
				KeyFuncIndex = KeyTab[KeyFuncIndex].KeyDnState;
				break;
			}
		case 6:                         //按下“RIGHT”键,找出新的状态索引号
			{
				KeyFuncIndex = KeyTab[KeyFuncIndex].KeyRiState;
				break;
			}
		case 7:                         //按下“ENTER”键,找出新的状态索引号
			{
				KeyFuncIndex = KeyTab[KeyFuncIndex].KeyCrState;
				break;
			}
		default:		                //按键出错处理
		    return 1;
	}
	KeyFuncPtr = KeyTab[KeyFuncIndex].CurrentOperate;
	(*KeyFuncPtr)();	                //执行当前按键操作
	LastKeyIndex=KeyFuncIndex;
	return 0;					
}

⌨️ 快捷键说明

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