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

📄 keyprocess.c

📁 LT-1B msp430 程序原理图集合
💻 C
字号:
#include "InputNumber.h"
#include "InputChar.h"
#include "SMG1602.h"

//<<<<<<<<输入法标志位>>>>>>>>
unsigned char b_InputMode=0xff;	//0表示是数字输入法,1表示是字母输入法。
			        //默认是字母输入法。
//<<<<<<<<<显示介绍>>>>>>>>>>>>
extern unsigned char b_Introduce;

void vIntroduce(void);
//<<<<<<<<连续按键计数>>>>>>>>>
unsigned char uc_KeyTemp=0;	//按键键码暂存。

unsigned char uc_ClickCount=1;	//同一个按连续按下的次数。

extern unsigned char uc_CleanCount;//清除按键计数时间计数。

unsigned char b_CleanClick=0;	//为1时启用清除。


//<<<<<<<<大小写模式>>>>>>>>>
extern unsigned char b_CapStatus;//0--大写;1--小写。(默认为0:大写)


//<<<<<<<<<刷新字符显示>>>>>>>>>
unsigned char uca_CharBox[]={"                "};  //存储刷新字符。	 
							
unsigned char uc_CharPointer=0;	//刷新字符末位计数,指向字符光标位置。


/*******************************************
函数名称:vCleanAll
功    能:清除输入行的所有字符
参    数:无
返回值  :无
********************************************/
void vCleanAll(void)
{
    unsigned char ucCount;

    for(ucCount=0;ucCount<uc_CharPointer;ucCount++)
        uca_CharBox[ucCount]=' ';

    uc_CharPointer=0;
    DispStr(0,1,"                ");
    LocateXY(0,1);
}
/*******************************************
函数名称:vCleanOne
功    能:向前清除输入行的一个字符
参    数:无
返回值  :无
********************************************/
void vCleanOne(void)
{
    if(uc_CharPointer>0)
    {
        uc_CharPointer--;
        uca_CharBox[uc_CharPointer]=' ';
        LocateXY(uc_CharPointer,1);
        LcdWriteData(' ');
        LocateXY(uc_CharPointer,1);
    }
}
/*******************************************
函数名称:vCharAdd
功    能:向输入行的末尾追加显示一个字符
参    数:ucChar--要显示的字符的ASCII码
返回值  :无
********************************************/
void vCharAdd(unsigned char ucChar)						   //接收的是ASC字符。
{
    unsigned char ucCount;
    
    if(uc_CharPointer<16)
    {
        LocateXY(uc_CharPointer,1);
        LcdWriteData(ucChar);
        
        uca_CharBox[uc_CharPointer]=ucChar; //将字符写入uca_CharBox。	
        uc_CharPointer++;	            //使ucCharPoint指向下一个位置。
        if(uc_CharPointer == 16)
        {
            LocateXY(0,1);    
        }
    }
    else
    {					    //如字符超出16个则全部清除,把光标移到最左边。
        
        DispStr(0,1,"                ");
        Disp1Char(0,1,ucChar);		    //写入输入字符。
    
        for(ucCount=1;ucCount<16;ucCount++)
                uca_CharBox[ucCount]=' ';   //同时清空uca_CharBox。
        uca_CharBox[0]=ucChar;
        uc_CharPointer=1;
    }

    b_CleanClick=1;
    uc_CleanCount=0;
}
/*******************************************
函数名称:ucGetChar
功    能:获取按键对应的数字或者字母
参    数:ucChar--键值
返回值  :对应的ASCII码
********************************************/
unsigned char ucGetChar(unsigned char ucChar)
{
    if(b_InputMode==0)
        return ucGetNum(ucChar);	//获取数字字符
    else
        return ucGetLetter(ucChar);     //获取字母字符
}
/*******************************************
函数名称:vCharProcess
功    能:对字母状态下字母和符号进行处理的函数
参    数:ucKeyCode--键值
返回值  :无
********************************************/
void vCharProcess(unsigned ucKeyCode)	       
{
    if(!b_InputMode)								 //如果是数字输入,就直接输出。
        vCharAdd(ucGetChar(ucKeyCode));
    else
    {
        if(ucKeyCode!=22)	//如果不是标点'!'
        {
            if(uc_ClickCount == 0)
            {
                vCharAdd(ucGetChar(ucKeyCode));	//如果是只连续按了1次就直接输出。
            }
            else
            {
                uc_CharPointer--;		//否则光标前移,然后再输出。
                vCharAdd(ucGetChar(ucKeyCode));
            }
        }
        else
        {
            vCharAdd('!');                      //追加显示!
        }
    }
    b_CleanClick=1;
    uc_CleanCount=0;
}
/*******************************************
函数名称:vKeyProcess
功    能:按键处理的主函数
参    数:ucKeyCode--键值
返回值  :无
********************************************/
void vKeyProcess(unsigned char ucKeyCode)
{
    if(uc_KeyTemp==ucKeyCode)	//判断按键与上一次所按的键是否相同。
    {
        if(uc_ClickCount<255)	//同一个按连续按下的次数:1~255。
            uc_ClickCount++;
    }
    else
    {
        uc_KeyTemp=ucKeyCode;
        uc_ClickCount=0;
    }

    /*根据键值分别进行处理*/
    switch(ucKeyCode)
    {
    case 11:		//*****显示介绍****
            b_Introduce=1;
            vIntroduce();
            break;

    case 32:		//****输入空白****
            vCharAdd(' ');				
            break;

    case 31:	        //****大小写切换****
            if(b_InputMode)
            {
                b_CapStatus=~b_CapStatus;
                if(!b_CapStatus)    //大写
                {
                    
                    Disp1Char(14,0,'B');
                    LocateXY(uc_CharPointer,1);
                }
                else                //小写
                {
                    Disp1Char(14,0,'S');
                    LocateXY(uc_CharPointer,1);
                }
            }
            break;

    case 41:	    //****删除所有字符****
            vCleanAll();
            break;

    case 42:	    //****删除1个字符****
            vCleanOne();
            break;

    case 21:	    //****输入法切换****
            b_InputMode=~b_InputMode;
            if(b_InputMode)
            {
                if(b_CapStatus==0)	          //切换到字符输入法时在右上角显示“C”
                {
                    DispStr(14,0,"BC");		  //大写显示“BC”
                    LocateXY(uc_CharPointer,1);
                }
                else
                {
                    DispStr(14,0,"SC");		 //小写显示“SC”
                    LocateXY(uc_CharPointer,1);
                }
            }
            else
            {
                	  
                DispStr(14,0," N"); //切换到数字输入法时在右上角显示“N”
                LocateXY(uc_CharPointer,1);
            }	
            break;
    case 12:	 //获得键码
    case 13:
    case 14:
    case 22:	 
    case 23:
    case 24:
    case 33:	 
    case 34:
    case 43: 
    case 44:
            vCharProcess(ucKeyCode);
            break;
    default:
            break;
    }
}

⌨️ 快捷键说明

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