本帖最后由 jinglixixi 于 2020-7-18 08:32 编辑
前面介绍了以区位码显示汉字的方法,在此基础上可以通过按键来选取字库的内容进行模拟输入。 在使用中文字库的情况下,使用区位码可以实现汉字的模拟输入,其输入界面如图1所示。 图1 汉字模拟输入界面
实现模拟输入的主程序为: - void main(void)
- {
- unsigned char t,q,w,u;
-
- GPIO_Init(GPIO0, GPIO_PIN_4,GPIO_MODE_OUT_PP);
- GPIO_WriteLow(GPIO0, GPIO_PIN_4);
- GPIO_Init(GPIO0, GPIO_PIN_5, GPIO_MODE_IN_PU);
- GPIO_Init(GPIO0, GPIO_PIN_6, GPIO_MODE_IN_PU);
- GPIO_Init(GPIO0, GPIO_PIN_7, GPIO_MODE_IN_PU);
- OLED_ShowCHineseS(0,2,0xB0A1);
- x=0;
- no=0;
- while(1)
- {
- if(GPIO_ReadPin(GPIO0, GPIO_PIN_7)==0)
- {
- while(GPIO_ReadPin(GPIO0, GPIO_PIN_7)==0); //K1
- OLED_ShowCHinesey(x,6, no*2);
- x=x+16;
- if(x>113) x=0;
- }
-
- if(GPIO_ReadPin(GPIO0, GPIO_PIN_6)==0)
- {
- while(GPIO_ReadPin(GPIO0, GPIO_PIN_6)==0); // K2
- if(no<9) no++;
- else no=0;
- if(no<9) OLED_ShowChar (96,0,no+'1',16);
- else OLED_ShowChar (96,0,'A',16);
- OLED_ShowCHinesey(8,0, no*2);
- }
- mdelay(500);
- }
- }
复制代码
模拟输入界面显示函数为: - void OLED_ShowCHineseS(unsigned char x,unsigned char y,unsigned int no)
- {
- unsigned char t,q,w,u;
-
- no=0xB0A2;
- q=(unsigned char) no&0xff;
- q=(q-0xA1)*2;
- x=x+8;
- OLED_ShowString(48,0,"no:B0A1",16);
- OLED_ShowCHinesey(8,0,0);
- w=0;
- for(u=0;u<10;u++)
- {
- if(u<5)
- {
- OLED_ShowChar(u*24,2,u+'0',16);
- OLED_ShowChar(u*24,4,u+'5',16);
- }
-
- OLED_Set_Pos(x,y);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[w][t],OLED_DATA);
- }
- w=w+1;
- OLED_Set_Pos(x,y+1);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[w][t],OLED_DATA);
- }
- x=x+24;
- w=w+1;
- if(u==4)
- {
- x=x-120;
- y=y+2;
- }
- }
- }
复制代码
在下载程序后,按K2 键进行汉字的选择;当按K1 键时,则录入该汉字。经验证功能正常,其效果图2 所示。图2汉字模拟输入
|