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

📄 input_method.txt

📁 实现ucos任务调度时保存LCD上的显示信息
💻 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 + -