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

📄 main.c.bak

📁 拼音输入法用在单片机上.rar
💻 BAK
📖 第 1 页 / 共 2 页
字号:
        //delay();
        //delay();
        //delay();
        //delay();
        //lcd_string(0,"测试显示效果:\n\r");
        //delay();
        delay();
        */
/*
        //进入编辑界面
while(1)
{
        if(ch2)
                {
                lcd_string(0,"异常退出!");
                getchar();
                }
        else    lcd_string(0,"初始化赋值");
                getchar();
        lcd_cls();
        lcd_cursor(0,0);
        lcd_string(0,save_buf);
	i=0;					//i=0,第0个拼音串pinyin_buf[i]反显
	j=0;					//j=0,无汉字反显,1<=j<=10,反显第j个汉字
	page=1;					//设置拼音串pinyin_buf[i]返回汉字页码
        edit_0_state=1;
        ch2 = 1;
        //状态级别判断
        //0级状态 拼音栏无字母的状态,可退格删除编辑区输入的状态edit_0_state
        //1级状态 拼音栏有拼音字母输入,汉字不反显的状态
        //2级状态 拼音栏有拼音字母输入,汉字反显的状态
        //3级状态 编辑区插入字符状态
	//开始执行


	while(1)
	//while(1) 前括号
	{

		//------------------------------------------------------------------
wait_for_input:	lcd_cursor(0,2);
                lcd_string(0,"等待输入拼音:");
                c = getchar();
		//------------------------------------------------------------------
		if(c=='u')c=10;//向上
		if(c=='d')c=11;//向下
		if(c=='-')c=12;//前页
		if(c=='=')c=13;//后页
		if(c=='e')c=14;//回车
		if(c=='.')c=15;//退格
		if(c=='b')c=16;//返回
		if(c=='m')c=17;//菜单
                ch1++;
                //------------------------------------------------------------------
                //组成有效拼音串的数字键输入 暂存在缓存中 以便下次一起发送,末尾加结束符号'\0'
                if((c>0x31)&&(c<0x40))
                {
                	if((numbers_p-numbers)>=6)
                        {
                                numbers_p=numbers;
                                goto wait_for_input;
                        }
                        if(edit_0_state||edit_1_state)//拼音输入状态
                        {       
                                *numbers_p++=c;
                                *numbers_p='\0';
                        }
                        if(edit_2_state)c=c-0x2F;//数字选汉字
                }
		//------------------------------------------------------------------
		switch(c)
		//switch 前括号
		{
			case '0': 
        		// 键值0 在拼音、英文输入发状态时为空格键
        		//在编辑区光标向后移动一个字母的距离,存储区添加一个'空格'字符
				if(edit_0_state)
				{
					if(chinese_input_state||english_input_state)
					{
						c=0x20;
						goto save_number_process;
					}	
					//输入一个空格保存起来string_save(c);
					if(number_input_state);//输入一个0保存起来string_save(c);
						goto save_number_process;
				}
				else goto  wait_for_input;
save_number_process:    	*save_p = c;
				lcd_cursor(0 , 0);
				lcd_string(0,save_buf);
                                delay();
				goto  wait_for_input;
        		//------------------------------------------------------------------
			case '1':
        		// 键值1 在拼音、英文输入发状态时为标点符号
				if(edit_0_state)
				{
					;//标点符号
				}
				goto  wait_for_input;;
        		//-------------------------------------------------------------------------
        		//数字键处理
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':

				//-------------------------------------------------------------------------
				ch1++;
                                if(edit_0_state)edit_0_state=0;edit_1_state=1;//编辑0状态清除编辑1状态置位
                                //void pinyin_display(uchar i,uchar numbers[6],uchar pinyin[6][7])
display_process0:		pinyin_display(i,numbers,pinyin_buf);
                                if(numbers_delete_sign)
                                {
                                        numbers_p--;
                                        numbers_p='\0';
                                }
display_process1:               hanzi_display(i,j,page,pinyin_buf,hanzi_buf);
				goto wait_for_input;
				//-------------------------------------------
                                //功能键处理
			case 10:
                                ch1++;
				if(edit_1_state&&(i>0))
				{	i--;//拼音选择UP
					goto display_process0;
				}
				if(edit_2_state&&(j>1))
                                {
                                        j--;//汉字选择up
                                        goto display_process1;
                                }        
				if(edit_0_state&&(save_p-save_buf))
				{
					save_p--;//光标前移
					if(*save_p>0x80)save_p--;//若为汉字,光标移动2个字节
                                        //显示光标
                                        edit_3_state = 1 ;//插入字符状态
				}
				goto wait_for_input;
				//-------------------------------------------
			case 11:
                                ch1++;
				if(edit_1_state)
				{	if(i<6)i++;//拼音选择DOWN
					goto display_process0;
				}
				if(edit_2_state)
				{
                                	if(j>0&&j<10)j++;//汉字选择DOWN
					goto display_process0;
				}
				if(edit_0_state&&(*save_p!='\0'))//光标后移
				{
					if(*save_p>0x80)save_p=save_p+2;
					else save_p++;
                                        edit_3_state = 1;//插入字符状态
                                        if(*save_p=='\0')edit_3_state=0;
                                        lcd_showcursor(1);//显示光标
				}
				goto  wait_for_input;
				//-------------------------------------------
			case 12:
                                ch1++;
				if(edit_1_state||edit_2_state)
				{	if(page>1)page--;//翻页选择汉字-
					goto display_process0;
				}
				else break;
				//-------------------------------------------
			case 13:
                                ch1++;
				if(edit_1_state||edit_2_state)
				{	if(page>1)page++;//翻页选择汉字+
					goto display_process0;
				}
				else break;
				//-------------------------------------------
			case 14:
				//确定键 输入处理
				if(edit_1_state)//选择汉字
				{
					edit_1_state=0;
					edit_2_state=1;//汉字被选择的状态
					j=1;//默认第一个汉字反黑,表示被选择
					goto display_process0;
				}
				if(edit_2_state)//取选择汉字到save_buf,并在编辑区显示
				{	
                                        edit_save_display(j,save_p,hanzi_buf,save_buf);//汉字保存并在编辑区显示
                                        save_p=save_p+2;
                                        i = 0;  j = 0; page = 1;
                                        numbers_p = numbers;for(c=0;c<6;c++)numbers[0]='\0';
                                        lcd_cursor(0,3);lcd_string(0,"                                        ");
                                        edit_2_state=0;edit_0_state=1;
                                        goto wait_for_input;
				}
				if(edit_0_state)ch1++;
                                {       lcd_cursor(0,2);lcd_string(0,"保存,然后退出!");
					//判断有没有内容,有则保存,然后退出
					//汉字汉字内码保存并退出
                                        break;
                                }
                                break;
				//-------------------------------------------
			case 15:
                                ch1++;
				//退格键输入处理undo;
				if(edit_2_state)//汉字被选择的状态
				{
					edit_2_state=0;
					edit_1_state=1;//字母被选择的状态

                                        lcd_cursor(0,2);lcd_string(0,"取消反黑");

					j=0;//取消反黑显示
					goto display_process0;
				}
				if(edit_1_state)//字母被选择的状态
				{
                                        if((numbers_p-numbers)>0)
					{       numbers_p--;
					        *numbers_p='\0';
                                        }
					if(numbers_p==numbers)
					{
						edit_1_state=0;edit_0_state=1;
                                                i=0;j=0;page=1;
                                                lcd_cursor(0,3);lcd_string(0,"                                        ");
                                                goto wait_for_input;
					}
					goto display_process0;
				}
				if(edit_0_state)
				{
                                        *(save_p-1)='\0';
                                	if((*save_p>0x80)&&(save_p>save_buf))save_p=save_p-2;
                                        else save_p--;
					*save_p='\0';
                                        lcd_cursor(0,0);
					lcd_string(0 ,save_buf);//从保存区中取字符串显示

				}
				goto  wait_for_input;
				//-------------------------------------------
			case 16:
                                ch1++;
                                if(edit_0_state||edit_1_state||edit_2_state)
                                break;
               			//返回键输入处理 
				//-------------------------------------------
			default:
                                ch1++;
                                lcd_cursor(0,2);
                                lcd_string(0,"error!");
                                goto wait_for_input;
		}
        
        }

}
*/

//*//
        //------------------------------------------------------------------
        //数字取拼音 拼音取汉字 循环测试
        while(inbufsign)getbyte();
        lcd_cls();
        while(!inbufsign);
        //lcd_cursor(0,0);
/*
        lcd_string(0,"进入编辑对话:\n\r");
        //delay();
        //delay();
        lcd_string(0,"没有任何问题:\n\r");
        //delay();
        //delay();
        //delay();
        //delay();lcd_cls();
        //lcd_cursor(0,2);
        lcd_string(0,"不太对劲儿呢:\n\r");
        //delay();
        //delay();
        //delay();
        //delay();
        //lcd_string(0,"测试显示效果:\n\r");
        //delay();
        delay();
*/
        while(1)
        {
        //------------------------------------------------------------------
                //参数:反显拼音位置,汉字是否反显及位置 汉字页码
                for(i=0;i<=5;i++)
                {
                //第i个拼音反显选择
                //----------------------------------------------------------
                        for(page=1;page<=1;page++)
                        {

                                m=lcd_num2pinyin(numbers,pinyin_buf);//取拼音
                                pinyin_display(i,m,pinyin_buf);//显示拼音
                                for(j=0;j<=2;j++)
                                {
                                //选择第j个汉字,j=0不选择
                                //--------------------------------------------------
                                        lcd_pinyin2hz(page,pinyin_buf[i],hanzi_buf);//取汉字
                                        hanzi_display(j,hanzi_buf);//显示汉字
                                //-------------------------------------------------
                                ch1++;
                                //这个是10个汉字循环的括号
                                //-------------------------------------------------
                                }
                        //这个是汉字页码循环的括号
                        //---------------------------------------------------------
                        }
                //---------------------------------------------------------
                ch1++;
                //拼音选择循环的括号
                }
        //-----------------------------------------------------------------
        }
//*/


/*
        while(1)
        {
                lcd_cls();
		lcd_string(0,"您好!欢迎使用汉显液晶模块!");
		delay();delay();
               
		lcd_string(1,"反显效果");
		delay();delay();

		lcd_cls();
		lcd_string(0,"现在打开光标闪烁:");
		lcd_showcursor(0x01);
		delay();

		lcd_cls();
		lcd_string(0,"现在将光标移到(8,3)位置:");
		lcd_cursor(8, 3);
		delay();

		lcd_string(0,"您好!");
		delay();

		lcd_cls();
		lcd_string(0,"现在关闭光标闪烁:");
		lcd_showcursor(0x00);
		delay();
/*
		lcd_cls();
		lcd_string(0,"在(20,40)位置画一个点:");
		lcd_dot(1,20,40); 
		delay();

		lcd_cursor(0, 0);
		lcd_string(0,"再以直径为15画一个圆: ");
		lcd_circle(1,20,40,15);
		delay();

		lcd_cursor(0, 0);
		lcd_string(0,"再画两条线,一条实线,一条虚线:");
		lcd_line(1,10,5,100,60);
		lcd_line(2,10,55,100,10);
		delay();

		lcd_cls();
		lcd_string(0,"画一个图片'马到成功'");
		lcd_picture(0,30,20,pic);
		delay();
//
		lcd_cls();
		lcd_string(0,"现在取'7426'的拼音串");
		while(inbufsign) getbyte();	//清空接收缓冲区
		lcd_string(0,"返回的结果:");
		j=lcd_num2pinyin(numbers, pinyin_buf);

		lcd_cursor(0, 3);
		for(i=0;i<j;i++)
		{
			if(i==0) lcd_string(1,pinyin_buf[i]);//默认反显第一个拼音
			else lcd_string(0,pinyin_buf[i]);
			lcd_string(0," ");
		}
		delay();

		lcd_cls();
		lcd_cursor(0, 0);
		lcd_string(0,"反显第二个拼音:");//比如通过按键选到了第二个	
		lcd_cursor(0, 3);
		for(i=0;i<j;i++)
		{
			if(i==1) lcd_string(1,pinyin_buf[i]);//反显第一个拼音
			else lcd_string(0,pinyin_buf[i]);
			lcd_string(0," ");
		}
		delay();

		lcd_cls();
		lcd_string(0,"取这个拼音的汉字串:\r\n");
		
		while(inbufsign) getbyte();	//清空接收缓冲区
		lcd_pinyin2hz(1, pinyin_buf[1],pinyin_buf[0]);//借用拼音的缓冲区pinyin_buf放汉字串,以节省内存
		lcd_cursor(0, 4);
		lcd_string(0,pinyin_buf[0]);
		delay();delay();delay();
	}
*/

}

⌨️ 快捷键说明

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