打印

请问能否将汉字赋予给变量的编程思想

[复制链接]
2430|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
saimax|  楼主 | 2011-7-12 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 saimax 于 2011-7-12 16:21 编辑

比如我现在做一个12864液晶驱动(带中文字库),驱动程序模块我写好了,比如说我现在要显示“我”这个字,我的编程思想是,如何将“我”这个字,赋予给某一变量,然后驱动模块访问变量就能显示出“我”这个字。      或者我的表达不清除,就是我要做一个显示系统,以前如果显示内容比较简单的话就做几个表格,表格里就是显示内容。要显示哪个内容就去读取哪个表格。
如:unsigned char code uctech[] = {"我"};
      unsigned char code uctech1[] = {"你"};
      unsigned char code uctech2[] = {"他"};

但问题是,现在有多层菜单,而且每一层菜单显示的内容,要么就没怎么改变,要么就改变幅度很大。这样在显示中要判断读取哪个表格时内容会十分繁琐不说。单要建表格都要建好几十个甚至上百个.所以我在想有没有一种更简单方法去读实现。如uchar或者uint a="我"。这样我a的值就可以随时改变,而不需要建如此多的表格。望个位大侠能提供一下思路。

相关帖子

沙发
liang7143| | 2011-7-12 16:30 | 只看该作者
完全可以

使用特权

评论回复
板凳
huangqi412| | 2011-7-12 16:35 | 只看该作者
汉字是16位常量,
#define  wo  0xaaaa  //假设我字是0XAAAA
#define  ni    0xbbbb

main()
{
u16  hanzi;

hanzi = wo;
~~~~~~~~
hanzi=ni;
~~~~~~~~

}

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
saimax + 1
地板
huangqi412| | 2011-7-12 16:37 | 只看该作者
还要区分大小端

使用特权

评论回复
5
joyme| | 2011-7-12 16:38 | 只看该作者
需要编辑器支持,才能转换成unicode码

使用特权

评论回复
6
saimax|  楼主 | 2011-7-12 18:48 | 只看该作者
3# huangqi412

区分大小端是什么意思啊?我用pic单片机,不知可不可以。大侠#define  wo  0xaaaa这个0xaaaa是指什么啊?可否详细一点说明啊?本人悟性较低!

使用特权

评论回复
7
原野之狼| | 2011-7-12 19:55 | 只看该作者
估计是在LCD上显示汉字 用来实现菜单的功能
努力实现这么个函数:
int showstr(int x,int y,char *text);
若是不知道如何实现再上来讨论。

使用特权

评论回复
8
sysdriver| | 2011-7-12 23:29 | 只看该作者
相对于其他人提问题,LZ描述得很好,直观。而且你的这个问题也不是好描述的。
我的方法跟3楼的相似,本质上是一样的思想。

字符定义放在一个文件里面word_def.h,把所有用到的汉字弄成一个数组大表,调用一个汉字时,调用它的数组标号就可以了,但是为了编程方便,为了容易调用,以宏定义的方式来替代数组标号。

unsigned char code uctech[] = {
"我",
"你",
"他",
-----,
-----
};


define      "我"      0
define      "你"        1
define      "他"        2
---------------------

如果你想显示“我”,则char   a =  "我",想显示“年”,则 a = "年"
分析一下,建一个大表很容易,就是粘贴复制的事情,不要有多余和重复的汉字就行。
宏定义常量形成一定的规范,建立起来也不复杂。我看你举例子是可以a = "我";的,说明编译器应该支持吧,不然就麻烦了,用英文表示的话多音字不好处理。编辑器用ue列模式,一切都很快。
再看一下调用方式,其实这个表建好之后,写程序根本就不用看,想显示“家”就写display("家")就行了,方便。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
saimax + 1
9
saimax|  楼主 | 2011-7-13 08:21 | 只看该作者
8# sysdriver 你的思路很好,建立一个大型表格。
unsigned char code uctech[] = {
"我",
"你",
"他",

};

不过关键是c编译的支持问题,如uctech[0],是否能代表“我”这个字。

使用特权

评论回复
10
saimax|  楼主 | 2011-7-13 08:22 | 只看该作者
如三楼的说是如果汉字是16位的话那用char就不行了,要用int吧!

使用特权

评论回复
11
huangqi412| | 2011-7-13 09:03 | 只看该作者
呵呵,他只是给个总的思路给LZ,细节问题让LZ自己去考虑。LZ自己去多摸索一下就出来了。 10# saimax

使用特权

评论回复
12
baiyunfei.k.f| | 2011-7-13 10:52 | 只看该作者
汉字是有内码的,你赋给变量一个汉字,其实也就是赋给这个变量汉字的内码值,
显示的时候根据内码显示汉字,所以你要实现7楼所说的int showstr(int x,int y,char *text);就可以在指定的位置显示一个或多个汉字而不比整个刷屏,例如showstr(0,0,"参数修改")

使用特权

评论回复
13
coreduo| | 2011-7-13 16:17 | 只看该作者
很正常阿。
你打汉字进去就好了,以内码的格式存在。你画图程序能解析内码就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我就喜欢搞电子,怎么着?

28

主题

176

帖子

1

粉丝