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

📄 main.c

📁 拼音输入法用在单片机上.rar
💻 C
📖 第 1 页 / 共 4 页
字号:
				if(edit_0_state)
				{
                                        if(!numbers_input_state)
                                        {
                                                edit_0_state=0;
                                                edit_1_state=0;
                                                edit_2_state=1;
                                                j=1;n=10;//默认选择第一个标点符号,总数为10
biaodian_process0:                              biaodian_process(page,hanzi_buf,bd_bj,bd_qj);//标点符号输入处理
                                                goto  display_process3;
                                        }
				}
				goto  wait_for_input;

        		      //-------------------------------------------------------------------------
        		      //数字键处理
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
				//-------------------------------------------------------------------------
                                //if() //笔画输入时
                                //......
                                //goto display_process3;
                                if(english_input_state)//英文输入处理
                                {
                                        if(edit_0_state)
                                        {
                                                english_letters(c,hanzi_buf);
                                                n=6;
                                                if(c=='7'||c=='9')n=8;
                                                j=1;
                                                edit_0_state=0;
                                                edit_1_state=0;//英文输入下不存在这个状态
                                                edit_2_state=1;
                                                goto display_process3;//状态栏汉字,标点符号及英文显示
                                        }

                                }
                                if(chinese_input_state)//中文编辑0状态或中文编辑1状态处理
                                {
                                        if(edit_0_state)
                                        {
                                                edit_0_state=0;
                                                edit_1_state=1;//编辑0状态清除编辑1状态置位
                                        }
                                        *numbers_p++ =  c;
                                        *numbers_p   ='\0';
                                        //暂存数字键输入 末尾加'\0' 以备下次发送
                                }
                                //--------------------------------------------
display_process0:		m=lcd_num2pinyin(numbers, pinyin_buf);//数字串取拼音
                                if((m&0x80)==0x80)//无效数字被液晶丢弃时,对输入缓存的处理
                                {
                                        *(--numbers_p)='\0';
                                        m=m&0x7f;
                                }
display_process1:               pinyin_display(i,m,pinyin_buf);//拼音串显示
                                //--------------------------------------------
display_process2:               n=lcd_pinyin2hz(page, pinyin_buf[i],hanzi_buf);//拼音串取汉字
                                //--------------------------------------------
display_process3:               if(edit_1_state)
                                                j=0;
                                if(edit_2_state)
                                        if(j>n)
                                                j=1;//如果翻页后汉字总数n小于10个
                                hanzi_display(j,hanzi_buf);//状态栏汉字,标点符号及英文显示
				goto wait_for_input;
				//-------------------------------------------
                                //功能键处理
			case 'e':
                                //前移
				if(edit_1_state)
				{
                                        page = 1;//防止拼音选择时页码过多取到空白汉字的情况
                                        if(i==0||i>=m)i=m-1;
                                        else if(i>0&&i<m)i--;//拼音选择UP
 					goto display_process1;
				}
				if(edit_2_state)
                                {
                                        if(j==1)j=n;
                                        else if(j>1)j--;//汉字,英文,标点符号 前移选择
                                        goto display_process3;
                                }        
				if(edit_0_state)
				{
                                        if(save_p==save_buf)
                                                goto wait_for_input;
                                        if(save_p==(save_buf+1))
                                        {
                                                if(*(--save_p)!='\0')
                                                        edit_3_state=1;//插入字符状态
                                                goto wait_for_input0;
                                        }
                                        if(save_p>(save_buf+1))
                                        {
                                                if((*(save_p-1)>0x80)&&(*(save_p-2)>0x80))
                                                        save_p-=2;//若为汉字,光标移动2个字节
                                                else if(*(save_p-1)<0x80)
                                                        save_p--;//半角字符,光标移动1个字节
                                                edit_3_state=1;//插入字符状态
                                        }
wait_for_input0:                        virtual_screen=which_screen(save_p,save_buf);
				}
				goto wait_for_input;
				//-------------------------------------------
			case 'd':
                                //后移
				if(edit_1_state)
				{
                                        if(i>=(m-1))i=0;
                                        else if(i<(m-1))i++;//拼音选择DOWN
                                        page = 1;//防止拼音选择时页码过多取到空白汉字的情况
					goto display_process1;
				}
				if(edit_2_state)
				{
                                        if(j>=n)j=1;
                                	else if(j<n)j++;//汉字,英文,标点符号 后移选择
					goto display_process3;
				}
				if(edit_0_state)//光标后移
				{
                                        if(*save_p=='\0')
                                                *(++save_p)=0x20;//光标后移,赋值为空格
                                        else
                                        {
                                                if((*(save_p)>0x80)&&(*(save_p+1)>0x80))
                                                        save_p+=2;
                                                else if(*save_p<0x80)
                                                        save_p++;
                                                if(*save_p=='\0')
                                                        edit_3_state=0;
                                        }
                                        virtual_screen=which_screen(save_p,save_buf);
				}
				goto  wait_for_input;
				//-------------------------------------------
			case 's':
                                //前页
                                if(edit_0_state)
                                {
                                        if(virtual_screen>0)
                                                virtual_screen--;
                                        goto  wait_for_input;
                                }
                                if(edit_4_state)
                                        if(page>1)
                                        {
                                                page--;//翻页选择汉字、标点符号
                                                goto  biaodian_process0;
                                        }
				if(edit_1_state||edit_2_state)
                                        if(chinese_input_state)
                                                if(page>1)
                                                {       page--;//翻页选择汉字、标点符号
				                        goto display_process2;//状态栏汉字获取、显示
                                                }
                                goto  wait_for_input;
				//-------------------------------------------
			case 'f':
                                //后页
                                if(edit_0_state)
                                {
                                        if(virtual_screen<2)
                                                virtual_screen++;
                                        goto  wait_for_input;
                                }
                                if(edit_4_state)
                                {
                                        if((hanzi_buf[18]=='\0')||(page>=10))page=1;//翻页到头返回
                                        else  page++;
                                        goto  biaodian_process0;
                                }

				if(edit_1_state||edit_2_state)
                                {
                                        if(chinese_input_state)
                                        {
                                                if((hanzi_buf[18]=='\0')||(page>=10))
                                                        page=1;//所有翻页限制//翻页到头返回
                                                else if((page>=1)&&(page<10))
                                                        page++;//翻页选择汉字+
                                                goto display_process2;
                                        }
                                        
                                }
                                goto wait_for_input;
				//-------------------------------------------
			case 0x0d:
				//确定键 输入处理
				if(edit_0_state)//进行输入法切换
                                {
                                        lcd_cursor(0,3);
                                        lcd_string(0,"1.英文 2.数字 3.中文");
                                        lcd_cursor(0,4);
                                        lcd_string(0,"4.退出 5.全角 6.半角");
                                        c=getchar();
                                        if(c=='4'||c=='f')goto  option;
                                        if(c=='5')edit_5_state=1;
                                        if(c=='6')edit_5_state=0;
                                        if(c=='1'||c=='e')//英文输入状态
                                        {
                                                chinese_input_state = 0;
                                                english_input_state = 1;
                                                numbers_input_state = 0;
                                        }
                                        else if(c=='2'||c=='d')//数字输入状态
                                        {
                                                chinese_input_state = 0;
                                                english_input_state = 0;
                                                numbers_input_state = 1;
                                        }
                                        else if(c=='3'||c=='s')//中文输入状态
                                        {
                                                chinese_input_state = 1;
                                                english_input_state = 0;
                                                numbers_input_state = 0;
                                        }
                                        lcd_cursor(0,3);
                                        lcd_clear_bytes(40);//消去状态栏显示
                                        goto wait_for_input;
                                }
                                if(edit_1_state)//选择汉字
				{
					edit_1_state=0;
					edit_2_state=1;//汉字被选择的状态
					j=1;//默认第一个汉字反黑,表示被选择
					goto display_process3;
				}
enter_input_proceess1:          if(edit_2_state)//取选择汉字到save_buf,并在编辑区显示
				{	
                                        save_p=edit_save_send0(j,save_p,hanzi_buf,save_buf);//汉字保存在编辑区
edit_0_state_start:                     for(c=0;c<6;c++)
                                                numbers[c]='\0';
edit_0_state_start1:                    lcd_cursor(0,3);
                                        lcd_clear_bytes(40);//消去状态栏显示
                                        edit_0_state=1;
                                        edit_1_state=0;
                                        edit_2_state=0;
                                        edit_4_state=0;
                                        numbers_p = numbers;
                                        i=0;j= 0;page=1;
                                        virtual_screen=which_screen(save_p,save_buf);
				}
                                goto wait_for_input;
				//-------------------------------------------
			case 0x08:
				//退格键输入处理undo;
				if(edit_0_state)//退格时save_p变化引起screen的变化
				{
                                        if(save_p==save_buf)goto  wait_for_input;
                                	if((*(save_p-1)>0x80)&&(*(save_p-2)>0x80)&&(save_p>(save_buf+1)))
                                        {
                                                if(edit_3_state)
                                                        save_p=move_string(2,save_p);
                                                else
                                                {
                                                        *(--save_p)='\0';
                                                        *(--save_p)='\0';//退格定要删除
                                                }
                                        }
                                        else if((*(save_p-1)<0x80)&&(save_p>save_buf))
                                        {
                                                if(edit_3_state)
                                                        save_p=move_string(1,save_p);
                                                else
                                                        *(--save_p)='\0';//退格定要删除
                                        }
                                        virtual_screen=which_screen(save_p,save_buf);
                                        goto  wait_for_input;
				}
				if(edit_1_state)//字母被选择的状态
				{
                                        if(numbers_p<(numbers+2)||numbers_p>(numbers+6))//剩下最后一个拼音的时候
                                                goto edit_0_state_start;
                                        if(numbers_p>(numbers+1))
                                        {
                                                *(--numbers_p)='\0';
                                                goto  display_process0;
                                        }
				}
				if(edit_2_state)//汉字被选择的状态
				{
					if(edit_4_state||english_input_state)
                                                goto edit_0_state_start1;
					edit_1_state=1;//字母被选择的状态
                                        edit_2_state=0;
					j=0;//取消反黑显示
					goto display_process3;
				}
				goto  wait_for_input;
				//-------------------------------------------
                        default:
                                //lcd_cursor(0,0);
                                //lcd_string(0,"无效输入!\nswitch(c) {default:}");
                                goto edit_end_process;
		}
edit_end_process:
                goto edit_option;
        
        }

}





⌨️ 快捷键说明

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