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

📄 main.c

📁 拼音输入法用在单片机上.rar
💻 C
📖 第 1 页 / 共 4 页
字号:
/**************************************************************************************************
用大于32K的芯片烧写
主程序 
**************************************************************************************************/
void main(void)
{
        uchar data  i,j,c,m,n;               //第i个拼音串,第j个汉字,拼音串个数m,状态栏字符总数n
        uchar data  page,virtual_screen;     //取液晶字库中哪页汉字,编辑区翻到那一屏/页        
        uchar data  * numbers_p;             //输入拼音时指向数字串的指针
	uchar data  numbers[7];              //键盘输入的数字串
	uchar data  pinyin_buf[6][7];        //从液晶取回的拼音串
        //----------------------------------------------------------------------------------------
        //编辑缓存
	uchar idata hanzi_buf[21];           //从液晶取回的10个汉字的内码缓存
	uchar idata * save_p;                //编辑区写入字符的位置
        uchar idata save_buf[50]="见网友了吧,美女变成大头鬼了吧?";
        uchar code  bd_bj[bj_len]="!\"#$%&'()*+,-./:;<=>?@^_`{|}~[\\]";
        uchar code  bd_qj[qj_len]="αβγδεζηθικλμνξοπρστυφχψω←";
        //----------------------------------------------------------------------------------------
	serial_init();
        delay();
        delay();
        delay();
        lcd_light(0x25);
option:
        lcd_showcursor(0);//暂时关闭光标
        lcd_cls();
        lcd_string(0,"功能:1.测试\t4.查看\n\t\t\t\t\t2.编辑\t5.删除\n\t\t\t\t\t3.演示\t6.亮度");
        //lcd_string(0,"5.删除\n\t\t\t\t\t\t3.演示\t6.亮度\n\t\t\t\t\t\t7.发送");
        c=getchar();
        lcd_cls();
        if(c=='1')goto test_option;
        if(c=='2')goto edit_option;
        if(c=='3')goto demo_option;
        if(c=='4')goto view_option;
        if(c=='5')goto delete_option;
        if(c=='6')goto light_option;
        //if(c=='7')goto send_option;
        else      goto option;
light_option:
        i=0x25;
light_cycle:
        lcd_cursor(0,0);
        lcd_string(0,"1.加亮\t2.变暗\t\n3.全黑\t4.全亮");
        c=getchar();
        if(c==0x0d)goto option;
        if(c=='3')i=63;
        else if(c=='4')i=0;
        else if(c=='1')
        {
                if(i<64)
                        i++;
        }
        else if(c=='2')
        {
                if(i)
                        i--;
        }
        lcd_light(i);
        goto light_cycle;

/*********************************************************
1.测试键盘的好坏
*********************************************************/
test_option:
        lcd_showcursor(0);//暂时关闭光标
        lcd_cls();
        while(1)
        {
                lcd_cursor(0,0);
                lcd_string(0,"键盘测试,请按键:");
                lcd_string(0,"");
                c=getchar();
                lcd_cursor(0,2);
                lcd_string(0,"输入的是 ");
                if(c>(0x2F)&&(c<0x3A))
                {       
                        lcd_byte(0,c);
                        lcd_string(0,"   ");
                }
                else if(c=='e') lcd_string(0,"前移");
                else if(c=='d') lcd_string(0,"后移");
                else if(c=='s') lcd_string(0,"上页");
                else if(c=='f') lcd_string(0,"下页");
                else if(c==0x0d)
                {
                        lcd_string(0,"确定");
                        lcd_string(0,"\n\n按 取消 退出!");
repeat_enter:           c=getchar();
                        if(c==0x08)
                                goto option;
                        else
                                goto repeat_enter;
                }
                else if(c==0x08)
                {
                        lcd_string(0,"取消");
                        lcd_string(0,"\n\n按 确定 退出!");
repeat_esc:             c=getchar();
                        if(c==0x0d)goto option;
                        else
                                goto repeat_esc;
                }
                else
                {
                        lcd_cursor(0,2);
                        lcd_string(0,"其它键盘输入!\n\n");
                        lcd_string(0,"1.退出 2.继续");
                        c=getchar();
                        if(c=='1')goto option;
                        lcd_cls();
                }
        }
/*********************************************************
3.数字取拼音、汉字的演示,没有安排按键中断,
  所以只有按复位或等待循环255次退出
**********************************************************/

demo_option:
        lcd_showcursor(0);//暂时关闭光标
        numbers[0]='7';
        numbers[1]='4';
        numbers[2]='2';
        numbers[3]='6';
        numbers[4]='0';
        while(1)
        {

                lcd_cls();
                lcd_string(0,"这是数字键7426输入取拼音、汉字的演示:");
                lcd_num2pinyin(numbers,pinyin_buf);//取拼音
                //参数:反显拼音位置,汉字是否反显及位置 汉字页码
                for(i=0;i<=5;i++)
                {
                        //第i个拼音反显选择
                        pinyin_display(i,6,pinyin_buf);//显示拼音
                        page=1;
                        for(;page<=2;page++)
                        {
                                n=lcd_pinyin2hz(page,pinyin_buf[i],hanzi_buf);//取汉字
                                for(j=1;j<=10;j++)//选择第j个汉字,j=0不选择
                                {
                                        hanzi_display(j,hanzi_buf);//显示汉字
                                        if(j==n)j=10;
                                }
                        }
                }
                lcd_cls();
                lcd_string(0,"演示完毕! 1.退出\n\t\t\t\t\t\t\t\t\t\t2.继续 ");
                c=getchar();
                if(c=='1')
                        goto option;
                
        }
/*********************************************************
4.查看短消息
**********************************************************/
view_option:
        save_p=save_buf;
        virtual_screen=0;
        screen_display(save_p,virtual_screen,save_buf);
view_cycle:
        c=getchar();
        if((c=='s')||(c=='e'))
        {
                if(virtual_screen>0)
                        virtual_screen--;
                if(virtual_screen==0)save_p=save_buf;
                if(virtual_screen==1)save_p=save_buf+36;
        }
        else if((c=='f')||(c=='d'))
        {
                if(virtual_screen<2)
                        virtual_screen++;
                if(virtual_screen==1)save_p=save_buf+36;
                if(virtual_screen==2)save_p=save_buf+72;
        }
        else if(c==0x0d||c==0x08)
                goto option;
        screen_display(save_p,virtual_screen,save_buf);
        goto    view_cycle;
/*********************************************************
5.删除短消息
**********************************************************/
delete_option:
        lcd_cls();
        lcd_string(0,"要删除吗(Enter/Esc)?");
        lcd_cursor(0,2);
        c=getchar();
        if(c==0x0d)
        {
                for(i=0;i<50;i++)
                        save_buf[i]='\0';
                lcd_string(0,"编辑内容已删除!");
        }
        else
                lcd_string(0,"无操作,任意键返回");
        getchar();
        goto option;
/*********************************************************
6.发送短消息
**********************************************************/
/*
send_option:
        c++;;//ch1++;
send_cycle:
		lcd_cls();
                getchar();
                lcd_string(0,"暂无此功能!请返回");
                getchar();
                lcd_cursor(0,0);
		lcd_string(0,"暂无此功能!请返回");
        c=getchar();
        if((c==0x0d)||(c==0x08))
                goto option;
        else 
                goto send_cycle;
*/
/*********************************************************
2.编辑对话模块
**********************************************************/

edit_option:
        //getchar();//分步测试
        lcd_cls();
        //-------------------------------------------------------------
	i = 0;
        j = 0;
        page=1;
        numbers_p=numbers;
        virtual_screen=0;
        save_p=save_buf;
        while(*save_p!='\0')save_p++;
        chinese_input_state = 1;
        english_input_state = 0;
        numbers_input_state = 0;
        edit_5_state = 0;//全角特殊符号输入
        edit_4_state = 0;//标点符号待选择
        edit_3_state = 0;//插入字符
        edit_2_state = 0;//编辑2状态
        edit_1_state = 0;//编辑1状态
        edit_0_state = 1;//编辑0状态
        //-------------------------------------------------------------
        virtual_screen=which_screen(save_p,save_buf);
        //getchar();//分步测试
        //-------------------------------------------------------------
	while(1)
	{
		//------------------------------------------------------------------

wait_for_input:
                lcd_showcursor(0);//暂时关闭光标
		//------------------------------------------------------------------
                //输入法状态提示
                lcd_cursor(16,2);
                if(chinese_input_state)
                        lcd_string(0,"拼音");
                else if(english_input_state)
                        lcd_string(0,"英文");
                else if(numbers_input_state)
                        lcd_string(0,"数字");
		//------------------------------------------------------------------
                //闪烁编辑区光标
                //刷新编辑区显示
                screen_display(save_p,virtual_screen,save_buf);
                //------------------------------------------------------------------
                c = getchar();//从键盘接受一个字符
                lcd_showcursor(0);//暂时关闭光标
                //------------------------------------------------------------------
                if((c>0x2F)&&(c<0x40))//按键是数字键0~9时,对数字键的综合处理
                                      //这样switch(c)里就少写了很多代码
                {
                        //----------------------------------------------------------
                        //对数字键0、1提前综合处理
                        if(edit_2_state)//数字选汉字(英文),标点符号的状态
                        {
                                if(!numbers_input_state)//拼音,英文输入状态
                                {
                                        if(j==(c-0x30)||(c=='0'&&j==10))//重复选择相当于按回车
                                                goto  enter_input_proceess1;
                                        if(c>0x30)
                                                j=c-0x30;//改变选择
                                        if(c==0x30)
                                                j=10;//按0表示选择第10个
                                        if(j>n) //n为当前获得的汉字(英文)总数
                                                j=1;//修正数字选汉字(英文)时可能产生的错误
                                        goto  display_process3;//状态栏汉字(英文),标点符号显示处理
                                }
                        }
                        if(edit_0_state)
                        {
                                if(numbers_input_state)//数字输入的处理,直接保存数字
                                {
save_number_process:                    hanzi_buf[0]= c;
                                        save_p = edit_save_send0(1,save_p,hanzi_buf,save_buf);//保存数字
                                        virtual_screen=which_screen(save_p,save_buf);
                                        goto  wait_for_input;
                                }
                        }

                }
		//------------------------------------------------------------------
		switch(c)
		{
                        case '0': 
        		      // 键值0 在中文、英文输入发状态时为空格键
        		      //在编辑区光标向后移动一个字母的距离,编辑存储区添加一个'空格'字符
				if(edit_0_state)
                                        if(!numbers_input_state)
        				{
                                                c=0x20;
        					goto save_number_process;//直接保存空格
        				}
				goto  wait_for_input;//此句会不会执行待测试
        		      //------------------------------------------------------------------
			case '1':
        		      // 键值1 在中文、英文输入状态时为标点符号

⌨️ 快捷键说明

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