📄 input.c
字号:
/******************************************************************
** 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 + -