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

📄 input.c

📁 带五种输入方式的编辑框
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************
** Copyright (c) 2004- 
** 文件名: menu.c      CPU Type: S3C44B0  Compiler: arm-elf-tools-20040427
** 创建人: YZM      版    本: V0      日    期: 2006-11-15
** 描  述: 系统参数设置
** 修改人: 
** 描  述: 
*******************************************************************/
#include "global.h"

u8 addkey[2];               //模拟一个按键
_INPUT_PARA ginput_para;    //输入法的全局参数;

extern void Uart_test(u8 *buf, u8 len);
//
extern u8 const zimu_table1[10] = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4};
EXTERN char const zimu_table2[10][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}, {'a', 'b', 'c', 0}, 
    {'d', 'e', 'f', 0}, {'g', 'h', 'i', 0}, {'j', 'k', 'l', 0}, {'m', 'n', 'o', 0}, 
    {'p', 'q', 'r', 's'}, {'t', 'u', 'v', 0}, {'w', 'x', 'y', 'z'}};
extern u8 const fuhao_table[17] = { ',', '.', '!', '?', ':', '"', '*', 
                                   '#', '+', '-', '/', '@', '$', '%',
                                   '&', '(', ')'};
#define FUHAO_NUM 17 
/*******************************************************************
函数名称: fuhaomain
函数功能: 输入符号
相关调用: 
入口参数: 键值,输出字符, 当前的符号位置;
返 回 值: 键值
备    注:  
创建信息: YZM  2006-12-05
修改信息: 
********************************************************************/
void fuhaomain_disp(u8 page)
{
    u8 start, i, k;
    char dispbuf[32];
    
    memset(dispbuf, ' ', 21);
    dispbuf[21] = 0;
    
    start = page*7;
    k = 0;
    for(i = 0; i < 7; i ++){
        if(start == FUHAO_NUM){
            break;
        }
        dispbuf[k] = i+0x31;
        k ++;
        dispbuf[k] = fuhao_table[start];
        start ++;
        k += 2;
    }
    LcdClearRowRam(LINE5);
    LcdFillRowRam(LINE5, 0, dispbuf, FDISP);
    LcdBrushScreen();
}
u8 fuhaomain(u8 key, char *outtemp, u16 *fuhaopage)
{
    u8 num=0, seat;
    
    switch(key){
        case DIGITAL7:
            num ++;
        case DIGITAL6:
            num ++;
        case DIGITAL5:
            num ++;
        case DIGITAL4:
            num ++;
        case DIGITAL3:
            num ++;
        case DIGITAL2:
            num ++;
        case DIGITAL1:
            seat = ((*fuhaopage)*7)+num;    //7个一行
            if(seat < FUHAO_NUM){
                outtemp[0] = fuhao_table[seat];
            }
            break;
        case UP:
            if(*fuhaopage){
                *fuhaopage -= 1;
            }
            fuhaomain_disp(*fuhaopage);
            break;
        case DOWN:
            if(((*fuhaopage+1)*7) < FUHAO_NUM){
                *fuhaopage += 1;
            }
            fuhaomain_disp(*fuhaopage);
            break;
        default:
            return key;
            break;
    }
    return 0;
}
/*******************************************************************
函数名称: tpi_input_cursor
函数功能: 处理光标闪烁消息
相关调用: 
入口参数: 
返 回 值:
备    注:  
创建信息: YZM  2006-11-17
修改信息: 
********************************************************************/
u8 tpi_input_zimutime(MSG *msg)
{
    CloseTimer(msg->WParam); //首先关闭定时器
    if(ginput_para.zimuatt.key != 0){  //如果有字母按键就加一个字母的确认
        addkey[1] = ENTER;
    }
    return MSG_OUT;
}
/*******************************************************************
函数名称: zimumain
函数功能: 输入字母
相关调用: 
入口参数: 键值,输出字符,字母参数
返 回 值: 键值
备    注:  
创建信息: YZM  2006-11-24
修改信息: 
********************************************************************/
void zimumain_opentime(void)
{
    gTpiTimePwdPadCb.MsgPriority = MSG_NORMAL;				//一般消息              
    gTpiTimePwdPadCb.Status = MSG_SERVICE;					//服务
    gTpiTimePwdPadCb.MsgDest = TPI;                     	//至TPI层                   
    gTpiTimePwdPadCb.Msg = TPI_INPUT_ZIMUTIME;
    gTpiTimePwdPadCb.WParam = TIMER_ZIMULAST;
    gTpiTimePwdPadCb.LParam = 0;
    OpenTimer(TIMER_ZIMULAST,18,(u32)&gTpiTimePwdPadCb);    //打开定时器
}
u8 zimumain(u8 key, u8 mode, char *outtemp, ZIMUATT *zimuatt)
{
    u8 num=0, dispbuf[2];
    
    switch(key){
        case DIGITAL9:
            num ++;
        case DIGITAL8:
            num ++;
        case DIGITAL7:
            num ++;
        case DIGITAL6:
            num ++;
        case DIGITAL5:
            num ++;
        case DIGITAL4:
            num ++;
        case DIGITAL3:
            num ++;
        case DIGITAL2:
            num += 2;
            CloseTimer(TIMER_ZIMULAST);
            zimumain_opentime();    //打开时间
            if(zimuatt->key == num){
                zimuatt->times ++;
                if(zimuatt->times >= zimu_table1[num]){
                    zimuatt->times = 0;
                }
            }
            else{
                outtemp[0] = zimuatt->word;
                zimuatt->key = num;
                zimuatt->times = 0;
            }
            break;
        case ENTER:
            CloseTimer(TIMER_ZIMULAST);
            if(zimuatt->key == 0){      //无输入
                return ENTER;
            }
            else{
                zimuatt->key = 0;
                outtemp[0] = zimuatt->word;
            }
            break;
        case CLEAR:
            CloseTimer(TIMER_ZIMULAST);
            if(zimuatt->key == 0){      //无输入
                return key;
            }
            else{
                zimuatt->key = 0;
            }
            break;
        case ESC:
            CloseTimer(TIMER_ZIMULAST);
            return ESC;
            break;
        case SHIFTKEY:
            CloseTimer(TIMER_ZIMULAST);
            return SHIFTKEY;
            break;
        default:
            return key;
            break;
    }
    zimuatt->word = zimu_table2[zimuatt->key][zimuatt->times];
    if((mode == 2)&&(zimuatt->word)){    //大写字母
        zimuatt->word -= 0x20;
    }
    if(zimuatt->word == 0){
        dispbuf[0] = ' ';
    }
    else{
        dispbuf[0] = zimuatt->word;
    }
    dispbuf[1] = 0;
    LcdFillRowRam(LINE4, 60, dispbuf, FDISP);
    LcdBrushScreen();
    return 0;
}
/*******************************************************************
函数名称: shuzimain
函数功能: 输入数字
相关调用: 
入口参数: 键值,输出字符
返 回 值: 键值
备    注:  
创建信息: YZM  2006-11-24
修改信息: 
********************************************************************/
u8 shuzimain(u8 key, char *outtemp)
{
    u8 num=0;
    
    switch(key){
        case DIGITAL9:
            num ++;
        case DIGITAL8:
            num ++;
        case DIGITAL7:
            num ++;
        case DIGITAL6:
            num ++;
        case DIGITAL5:
            num ++;
        case DIGITAL4:
            num ++;
        case DIGITAL3:
            num ++;
        case DIGITAL2:
            num ++;
        case DIGITAL1:
            num ++;
        case DIGITAL0:
            outtemp[0] = num+0x30;
            return 0;
            break;
        default:
            return key;
            break;
    }
}
/*******************************************************************
函数名称: tpi_input_disp
函数功能: 输入字符的时候的显示程序
相关调用: 
入口参数: 
返 回 值:
备    注: 只留有上面三行显示
创建信息: YZM  2006-11-24
修改信息: 
********************************************************************/
void tpi_input_disp(void)
{
    u8 row, len, rownum, strtbl[10];
    char dispbuf[32];
    u16 i;
    
    ginput_para.edittail = strlen(ginput_para.str);   //显示的时候整理
    
    rownum = 0; //显示区有几行
    for(i = ginput_para.startline; i <= ginput_para.endline; i ++){
        LcdClearRowRam(i);
        rownum ++;
    }
    //建立本页面显示行起始位置的表,标记每行的开始位置;
    creat_disp_text_bable(ginput_para.str, ginput_para.dispstartline, strtbl);
    //校验当前光标位置是否正常
    while(ginput_para.editseat < strtbl[0]){        //落到显示区前
        ginput_para.dispstartline --;
        creat_disp_text_bable(ginput_para.str, ginput_para.dispstartline, strtbl);
    }
    while(ginput_para.editseat >= strtbl[rownum]){  //落到显示区后
        ginput_para.dispstartline ++;
        creat_disp_text_bable(ginput_para.str, ginput_para.dispstartline, strtbl);
    }
    
    //得到光标参数
    for(row = 0; row < 5; row ++){
        if(ginput_para.editseat < strtbl[row]){  //找到光标所在的行
            break;
        }
    }
    row --;
    ginput_para.cursorrow = ginput_para.startline+row;  //光标的行
    
    i = strtbl[row];    //光标行的开头
    do{
        if(i == ginput_para.editseat){ //正常
            break;
        }
        //
        if(ginput_para.str[i] > 0x80){
            i += 2;

⌨️ 快捷键说明

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