0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

汉字显示怎么搞?小白裸跪求知识

想在小屏上显示汉字。不知道要怎么搞。有没大虾给个详细点的流程?小弟在此裸跪搓衣板求知识了。
提问者:Green_LJ 地点:- 浏览次数:7271 提问时间:02-24 03:53
我有更好的答案
提 交
11条回答
ickey_feng 02-27 19:56
http://www.51c51.com/test/test/16hanzi.htm 点阵式汉字LED显示屏的原理与制作
石学军
汉字显示屏广泛应用与汽车报站器,广告屏等。本文介绍一种实用的汉字显示屏的制作,考虑到电路元件的易购性,没有使用8*8的点阵发光管模块,而是直接使用了256个高量度发光管,组成了16行16列的发光点阵。同时为了降低制作难度,仅作了一个字的轮流显示,实际使用时可根据这个原理自行扩充显示的字数。
1汉字显示的原理:
我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。即国标汉字库中的每一个字均由256点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素
范围内的任何图形。


hex格式文件下载(点右键,目标另存为hex即可直接烧写)


[/td]
我们以显示汉字“大”为例,来说明其扫描原理:
在UCDOS中文宋体字库中,每一个字由16行16列的点阵组成显示。如果用
8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。
一般我们把它拆分为上部和下部,上部由8*16点阵组成,下部也由8*16点阵组成。
在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00---p07口。方向为p00到p07 ,显示汉字“大”时,p05点亮,由上往下排列,为p0.0 灭,p0.1 灭, p0.2 灭p0.3 灭, p0.4 灭, p0.5 亮,p0.6 灭,p0.7 灭。即二进制00000100,转换为16进制为04h.。
上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮,即为00000000,16进制则为00h。
然后单片机转向上半部第二列,仍为p05点亮,为00000100,即16进制04h.
这一列完成后继续进行下半部分的扫描,p21点亮,为二进制00000010,即16进制02h.
   依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“大”
的扫描代码为:
04H,00H,04H,02H,04H,02H,04H,04H
04H,08H,04H,30H,05H,0C0H,0FEH,00H
05H,80H,04H,60H,04H,10H,04H,08H
04H,04H,0CH,06H,04H,04H,00H,00H
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。
   不过现在有很多现成的汉字字模生成软件,我们就不必自己去画表格算代码了。

软件打开后输入汉字,点“检取”,十六进制数据的汉字代码即可自动生成,把我们所需要的竖排数据复制到我们的程序中即可。
   我们把行列总线接在单片机的i0口,然后把上面分析到的扫描代码送入总线,就可以得到显示的汉字了。在这个例子里,由于一共用到16行,16列,如果将其全部接入89c51
单片机,一共使用32条io口,这样造成了io资源的耗尽,系统也再无扩充的余地。实际应用中我们使用4-16线译码器74ls154来完成列方向的显示。而行方向16条线则接在
p0口和p2口。

程序清单:
ORG
00H
LOOP: MOV A,#0FFH ;开机初始化,清除画面
MOV P0,A
;清除P0口
       ANL P2,#00
;清除P2口
MOV R2,#200

D100MS: MOV R3,#250 ;延时100毫秒
       DJNZ R3,$
       DJNZ R2,D100MS
       MOV 20H,#00H ;取码指针的初值
l100:
MOV R1,#100 ;每个字的停留时间
L16:
MOV R6,#16 ;每个字16个码
       MOV R4,#00H ;扫描指针清零
       MOV R0,20H ;取码指针存入R0
L3:
MOV A,R4
;扫描指针存入A
       MOV P1,A
;扫描输出
       INC R4
;扫描指针加1,扫描下一个
       MOV A,R0
;取码指针存入A
       MOV DPTR,#TABLE ;取数据表的上半部分的代码
       MOVC A,@A+DPTR
       MOV P0,A
;输出到P0
       INC R0
;取码指针加1,取下一个码。
       MOV A,R0
       MOV DPTR,#TABLE ;取数据表下半部份的代码
       MOVC A,@A+DPTR
       MOV P2,A
;输出到P2口
       INC R0
MOV R3,#02
;扫描1毫秒
DELAY2:
MOV R5,#248

       DJNZ R5,$
       DJNZ R3,DELAY2
       MOV A,#00H
;清除屏幕
       MOV P0,A
       ANL P2,#00H


DJNZ R6,L3
;一个字16个码是否完成?
       DJNZ R1,L16
;每个字的停留时间是否到了?
       MOV 20H,R0
;取码指针存入20H
       CJNE R0,#0FFH,L100 ;8个字256个码是否完成?
       JMP LOOP ;反复循环
     

TABLE :
;汉字“倚”的代码
db 01H,00H,02H,00H,04H,00H,1FH,0FFH
db 0E2H,00H,22H,00H,22H,0FCH,26H,88H
db 2AH,88H,0F2H,88H,2AH,0FAH,26H,01H
db 63H,0FEH,26H,00H,02H,00H,00H,00H
;以下分别输入天,一,出,宝,刀,屠,龙,的代码,略。
end


电路中行方向由p0口和p2口完成扫描,由于p0口没有上拉电阻,因此接一个4.7k*8的排阻上拉。如没有排阻,也可用8个普通的4.7k 1/8w电阻。为提供负载能力,接16个2n5551的NPN三极管驱动。
列方向则由4—16译码器74LS154完成扫描,它由89C51的P1.0---P1.3控制。同样,驱动部分则是16个2N5401的三极管完成的。
电路的供电为一片LM7805三端稳压器,耗电电流为100Ma左右。
采用一块12*20cm的万能电路板,应当选用质量好些的发光管,(否则有坏点现象,更换起来较麻烦)首先将256个发光管插入电路板,注意插入方向,同时使高度一致,行方向直接焊接起来,列方向则搭桥架空焊接,完成后用万用表测试一下如有不亮的更换掉。
    然后找一个电脑硬盘的数据线,截取所需的长度,分别将行,列线引出至电路的相关管脚即可。原理图为了简洁,故只画出了示意图,行列方向只画出了2个三极管,屏幕只画出4个发光管,实际上发光管为256只,三极管行列方向各16只,一共32只。焊接过程认真仔细一天时间即可完成全部制作。将程序编译后烧写入89c51, 插入40pin Ic座,即可看到屏幕轮流显示:“倚天一出宝刀屠龙”。
    当然,你可将程序的汉字代码部分更换为您所需要的代码即可显示你所需要的汉字。

上图为实物的照片,对本文感兴趣的读者可在本期无线电杂志的配套光盘中找到他的完成程序,或者到作者网站www.51c51.com下载。
元件清单:
名称
[td=1,1,60]数量
[td=1,1,180]规格
[/td] 4.7k 1/8w
[td=1,1,60]32
[td=1,1,180]电阻
[/td] 4.7k*8排阻
[td=1,1,60]1
[td=1,1,180]
[/td] 2n5551
[td=1,1,60]16
[td=1,1,180]小功率NPN三极管
[/td] 2n5401
[td=1,1,60]16
[td=1,1,180]小功率PNP三极管
[/td] led
[td=1,1,60]256
[td=1,1,180]3mm白发红高亮度
[/td] 22P
[td=1,1,60]2
[td=1,1,180]瓷片电容
[/td] 10uf/50v
[td=1,1,60]1
[td=1,1,180]电解电容
[/td] 100uf/25v
[td=1,1,60]2
[td=1,1,180]电解电容
[/td] AT89C51
[td=1,1,60]1
[td=1,1,180]或AT89S51
[/td] 40pin Ic座
[td=1,1,60]1
[td=1,1,180]插89c51用
[/td] 12M
[td=1,1,60]1
[td=1,1,180]晶体
[/td] 74LS154
[td=1,1,60]1
[td=1,1,180]或74HC154
[/td] LM7805
[td=1,1,60]1
[td=1,1,180]稳压IC
[/td] 电源插座
[td=1,1,60]1
[td=1,1,180]
[/td] 稳压电源
[td=1,1,60]1
[td=1,1,180]9-12V/200Ma稳压电源
[/td] 万用电路板
[td=1,1,60]1
[td=1,1,180]12*20(cm)
nnvywerwer 03-04 02:01
先明白显示屏是怎么显示东东的 然后下个字模慢慢研究
puzhang549 02-25 17:16
看你显示的汉字多不多?要不要支持操作的?如果固定几个汉字显示的话,就自己写点阵代码。写进程序了,也不用什么字库。就把它当图形编。如果很多或者要支持操作的话,就要下个字库了。自己研究的话下盗版的没关系,烤进FLASH上单片机搞一下就知道了。如果公司开发的话,我看你还是找家字库芯片公司算了,免得惹麻烦,推荐高通半导体,www.genitop.com。人家直接烤好存在ROM里,价格比空白flash还便宜。你直接跟程序挂钩,连上芯片引脚就好了。
胡政鹏测试bbs2 03-02 02:20
楼主的小屏是什么屏?LCM还是LED屏?还是液晶屏?一般点阵在12*12 16*16
24*24 32*32这些就算小屏了。另外还要看你想简单显示(点阵)?还是要显示的好看点(矢量)?都没说清楚嘛。楼上说的也对。点阵的简单,适合菜鸟。想要特效显示一般得用LCD屏了。
test_user2 02-25 22:16
不管什么屏,你首先要有“含字库的flash(可以是楼上说的字库芯片或者ROM,ROM比较稳定)”。其次要有MCU或者FPGA或者DSP。然后把汉字内码索引跟点阵码对应起来,CODE存在程序存储器里。转换方面比如用VB调用汉字库(VB)有这个功能,然后就可得到16*16(调用HAK16)的点阵二进制,然后将他转换为16进制就可以了,如果要在单片机里处理,可能要麻烦一点,你说的要进行的显示我做过,不管是从左到右,或者从上到下,都不是很难的!
60user66 02-24 15:57
哦 谢谢楼上们 还有家做字库的芯片公司叫高通啊,见识了
qwe043 02-26 11:37
51单片机应该就可以的,我用AT89C52也做了,可是我们老板要求很高,我们的目标是大屏幕的显示,所以我就自学了AVR,然后做的,数据我是通过VB做的,数据处理要看自己的硬件电路!多看点别人做的,自然就明白了!
wyywerw2 02-24 05:51
这种处理办法太麻烦,如果字库庞大你怎么办?!我觉的还是直接用汉字库公司提供字库ROM或者芯片比较好,他们搭配的程序直接能在短时间内完成庞大的字库内容。如果你是小白学习就算了。但如果是公司要批量产品不如直接买,成品跟时间都能下来好多。
吔屎拉雷 02-29 04:30
没有字库自己搞麻烦死
邱艳yyxx 02-24 08:20
多国语言显示解决方案:http://blog.sina.com.cn/wujianguo789

unicode 字库转换工具 + 点阵字库解析c源码+多国语言转换工具
sagafa 02-29 13:34
阿拉伯文显示解决方案 :
http://blog.sina.com.cn/s/blog_5d8cc6410100tggx.html
撰写答案
提 交
1 / 3
1 / 3