📄 input_method.txt
字号:
//创建邮箱mbox_key_lcd计划在键盘操作中实现
#include "lcd_debug.h"
//将LCD的显示设置为输入短消息的画面
void enter_message_display()
{
LCD_clr(); //清屏,光标归零复位
LCD_puts("TO:");
}
//下面五个函数用于五种字符类型地输入
//在各个函数中,所输入地字符追加在message_info->message的后面
unsigned char input_number(SHORT_MESSAGE message_info)
{
void *msg; //接收key任务(中断)发送的void*数据
int receive; //由msg转化得来
unsigned char i;
INT8U err;
while(1)
{
msg =OSMboxPend(mbox_key_lcd, 0, &err);
receive =*(char *)msg;
uart_put_char(receive % 128); //for debug
if(receive == MENU) //是否发送短消息,MENU键临时用作发送键
return SEND_MESSAGE;
if(receive == '#') //是否切换输入字符类型
return SWITCH_INPUT_TYPE;
if((receive == OUT_MENU) && (length > 0)) //删除已输入的字符,OUT_MENU也有退格键的功能
{
for(i=cursor; i<length-1; i++)
message_info->message[i] =message_info->message[i+1];
message_info->length--;
message_info->cursor--;
display_after_del();
}
if((receive == KEY_LEFT) && (message_info->cursor > 0))
{
(message_info->cursor)--;
dispaly_after_lr();
}
if((receive == KEY_RIGHT) && (message_info->cusor < message_info->length))
{
(message_info->cursor)++;
display_after_lr();
}
if((receive >= '0') && (receive <= '9'))
{
for(i=length; i>=cursor; i--)
message_info->message[i+1] =message_info->message[i];
message_info->message[cursor] =receive - '0';
(message_info->length)++;
(message_info->cursor)++;
display_after_wr();
}
//下面代表短消息长度已经达到最大值
//输入左右键并不返回的含义:可能发送者要从短信中间删除一些字符。
//当然直接按删除键也可以,此时就不能满足length最大的条件了,所以不予考虑。
//若不按左右键,只能按发送键才能解决问题。
if((length >= MAX_MESSAGE_LENGTH) && ((receive != KEY_LEFT) || (receive != KEY_RIGHT)))
return OUT_OF_RANGE;
}
}
//输入法的主函数,处理所有的输入
int * input_method_fun()
{
SHORT_MESSAGE message_info;
unsigned char type_select =1; //用于控制输入什么类型的字符
unsigned char ret; //接收返回值,用于判断是否切换输入类型、退出输入
unsigned char length; //保存短消息的长度
memset(message_info->message, 0, MAX_MESSAGE_LENGTH);
message_info->length =0;
message_info->cursor =0;
while(1)
{
type_select =type_select % 5;
switch(type_select) //依次:汉语、数字、大写字母、小写字母、标点
{
case 0:
display_which(0); //显示现在输入汉语
ret =input_chinese(message_info); //切换至输入汉语的函数
break;
case 1:
display_which(1);
ret =input_number(message_info);
break;
case 2:
display_which(2);
ret =input_lowercase(message_info);
break;
case 3:
display_which(3);
ret =input_uppercase(message_info);
break;
case 4:
display_which(4);
ret =input_punctuation(message_info);
break;
default:
display_which(0);
ret =input_chinese(message_info);
return;
}
if(ret == SWITCH_INPUT_TYPE) //切换输入类型
type_select++;
if(ret == OUT_OF_RANGE)
continue;
if(ret == EXIT_INPUT) //退出书写,表示按发送键
break;
}
return message;
}
//对输入的信息进行处理
void deal_with_message(int * message)
{
uart_put_str("shou dao");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -