(浦晓明)TANGO V3.16电路板设计软件,使用方便,功能强劲,唯一缺憾是没有汉字功能。但由于TANGO的元件库是开放式的,因此可以将汉字做成元件,让TANGO调用汉字象调用元件一样。进入电原理图中的汉字也可以移动和旋转,这样在所绘制出的电原理图中,即可实现汉字的标题、名称和说明。
要建立汉字元件库并不难,方法如下:
在西文方式的GWBASIC环境下,运行本文所提供的TGHZ.BAS,它完成将汉字的点阵模向TANGO元件库源文件格式的转换,以便TANGO再进一步将它编译成元件库文件。关于TGHZ.BAS运行时的含义,在程序清单中说明。在运行TGHZ.BAS时,请注意两点:
(1)要选择一个16×16点阵的汉字库,拷入当前目录,作为待转换的原版,根据笔者经验,选择2.13汉字系统的HZK16汉字库较为合适,尤其是2.13版的HZK16更佳,其字符图集和汉字比较丰富齐全。
(2)由于TANGO对一个元件库的元件数限制在2000内,而HZK16中所含二级汉字及图符共81732个,因此只能分库建立汉字元件库。考虑到TANGO可同时调入三个元件库操作的特点,所以将字符图集及一级汉字分为三个库,其余二级汉字归入另外两个库。这样建库制作比较容易,以后使用比较方便。
TGHZ.BAS在运行时会动态显示正在转换的汉字区位码,整个转换工作数据处理量较大,完成一个库的转换大约需要10分钟(与CPU主频速度有关)。当5个分库转换结束以后,在磁盘上即产生5个*.SRC元件库的源文件。
然后退出GWBASIC,再启动TANGO的SLM程序,执行COMILE命令,将*.SRC编译成*.LIB文件。至此,建库工作即告完成。
在使用TANGO绘制电路图调用汉字时,应明确:汉字是以4位数字的区位码为名调用的,为防止与某些电子元件名称重复(比如CMOS元件有不少都用4位数字命名),可考虑汉字加入集中进行,此时将一级汉字的3个库一起调入使用。另外,手头上应准备一份区位码表供查阅,此项工作可用汉字系统打印完成。
根据实践,具体分库及编译完成情况如表1所示。

表中的压缩库是指将*.LIB文件经LHA.EXE压缩软件处理后形成*.LZH文件,备份在软盘上时将大大节约空间,5个压缩库文件不足一张360K的低密盘。
顺便提一下有关此项操作的命令(以其中一库为例,其余类似)。
将元件库文件压缩备份到A:盘上:
LHA A A: HZK—1 HZK—1.LIB <回车>
将A:盘压缩库文件恢复当前目录:
LHA E A:HZK—1<回车>
TGHZ.BAS程序清单见表2。
表2:TGHZ.GAS程序清单
g禕g
10 REN 本程序为TANGO/PROTEL软件制作汉字元件库源文件
20 CLEAR:CLS:OPTION BISE 1:DIM A%(16,16):D=1
25 PRINT"*****CREATE TANGO/PROTEL CHINESE LIBRARY*****"
30 REM 输入原汉字系统16×16阵字库文件名
31 INPUT"NAME OF CHINESE BASE:":F1¥
32 REM输入起始汉字区位码(0101~8794)
33 INPUT" INPUT START NUMBER *0101~8794):";C1
34 IF C1><101 OR C1>8794 THEN 33
35 REM 输入结汉字区位码(<8794)
36 INPUT:INPUT END NUMBER(<=8794):" ;C2
37 IF C2<C1 OR C2>8794 THEN 36
38 REM 将生成汉字元件库源文件取名为(*.SRC)
39 INPUT"INPUT CREATE NEW FILE’S NAME(*.SRC):" ;F2¥
40 PRINT"****OF!****" :PRINT" START:";STR¥(C1):PRINT" END:" ;STR¥(C2)
50 OPEN F1¥AS #1 LEN=32:FIELD #1,32 AS A¥
55 OPEN" R" ,# 2,F2¥,1:FIELD #2,1 AS B¥
60 QM%=C1\100:WM%+C1-QM%*100
65 LOCATE 9,1:PRINT" TRANSLATED;" ;STR¥(C1)
70 REM 根据区位码获取汉字点阵信息,存入数组A%(I%,J%)之中
80 RE%=(QM%-1)*94+WM%:GET #1,RE%: W¥=A¥
100 FOR K%=32 TO 1 STEP-1:B%=ASC(MID¥(W¥,K%,1)):I%-(K%-1)\2+1
110 FOR L%=8 TO 1 STEP-1:J%=(((K%-1)*8+L%-1)MOD 16)+1
120 A%(I%,J%)= B% MOD 2: B%=B%\2:NEXT L%:NEXT K%
130 D1=C1\1000:D2=(C1-D1*1000)\100:rem"\"表示整除运算
140 D3=(C1-D1*1000-D2*100)\10:D4=(C1-D1*1000-D2*200-D3*10)
150 LSET B¥=CHR¥(39):GOSUB 500
151 LSET B¥=CHR¥(D1+48);GOSUB 500
152 LSET B¥=CHR¥(D2+48):GOSUB 500
153 LSET B¥=CHR¥(D3+48):GOSUB 500
154 LSET B¥=CHR¥(D4+48):GOSUB 500
155 LSET B¥=CHR¥(39):GOSUB 500
160 LSET B¥=CHR¥(32):GOSUB 500
161 LSET B¥=CHR¥(80):GOSUB 500
162 LSET B¥=CHR¥(79):GOSUB 500
163 LSET B¥=CHR¥(87):GOSUB 500
164 LSET B¥=CHR¥(69):GOSUB 500
165 LSET B¥=CHR¥(82):GOSUB 500
166 LSET B¥=CHR¥(13):GOSUB 500
167 LSET B¥=CHR¥(10):GOSUB 500
170 LSET B¥=CHR¥(50):GOSUB 500
171 LSET B¥=CHR¥(32):GOSUB 500
172 LSET B¥=CHR¥(50):GOSUB 500
173 LSET B¥=CHR¥(32):GOSUB 500
174 LSET B¥=CHR¥(49):GOSUB 500
175 FOR R=1 TO 11:LSET B¥=CHR¥(32):GOSUB 500:NEXT R
176 LSET B¥=CHR¥(13):GOSUB 500
177 LSET B¥=CHR¥(10):GOSUB 500
180 LSET B¥=CHR¥(66):GOSUB 500
181 LSET B¥=CHR¥(73):GOSUB 500
182 LSET B¥=CHR¥(84):GOSUB 500
183 LSET B¥=CHR¥(77):GOSUB 500
184 LSET B¥=CHR¥(65):GOSUB 500
185 LSET B¥=CHR¥(80):GOSUB 500
186 LSET B¥=CHR¥(13):GOSUB 500
187 LSET B¥=CHR¥(10):GOSUB 500
190 LSET B¥=CHR¥(123): GOSUB 500: LSET B¥=CHR¥(32):GOSUB 500:GOSUB 500
191 LSET B¥=CHR¥(48): GOSUB 500: LSET B¥=CHR¥(125):GOSUB 500:GOSUB 600
200 FOR I%=1 TO 16
210 LSET B¥=CHR¥(123): GOSUB 500:LSET B¥=CHR¥(32):GOSUB 500
211 IF I%=1 THEN GOSUB 500:LSET B¥=CHR¥(49):GOSUB 500
212 IF I%=2 THEN GOSUB 500:LSET B¥=CHR¥(50):GOSUB 500
213 IF I%=3 THEN GOSUB 500:LSET B¥=CHR¥(51):GOSUB 500
214 IF I%=4 THEN GOSUB 500:LSET B¥=CHR¥(52):GOSUB 500
215 IF I%=5 THEN GOSUB 500:LSET B¥=CHR¥(53):GOSUB 500
216 IF I%=6 THEN GOSUB 500:LSET B¥=CHR¥(54):GOSUB 500
217 IF I%=7 THEN GOSUB 500:LSET B¥=CHR¥(55):GOSUB 500
218 IF I%=8 THEN GOSUB 500:LSET B¥=CHR¥(56):GOSUB 500
219 IF I%=9 THEN GOSUB 500:LSET B¥=CHR¥(57):GOSUB 500
220 IF I%=10 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(48):GOSUB 500
221 IF I%=11 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(49):GOSUB 500
222 IF I%=12 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(50):GOSUB 500
223 IF I%=13 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(51):GOSUB 500
224 IF I%=14 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(52):GOSUB 500
225 IF I%=15 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(53):GOSUB 500
226 IF I%=16 THEN LSET B¥=CHR¥(49): GOSUB 500:LSET B¥=CHR¥(54):GOSUB 500
230 LSET B¥=CHR¥(125):GOSUB 500
250 FOR J%=1 TO 16
260 LSET B¥=CHR¥(46-A%(I%,J%)*11):GOSUB 500
270 NEXT J%
280 FOR K=1 TO 5:LSET B¥=CHR¥(46):GOSUB 500:NEXT K
285 LSET B¥=CHR¥(13):GOSUB 500
286 LSET B¥=CHR¥(10):GOSUB 500
290 NEXT I%
300 LSET B¥=CHR¥(123);GOSUB 500:LSET B¥=CHR¥(32):GOSUB 500
301 LSET B¥=CHR¥(49) :GOSUB 500:LSET B¥=CHR¥(55):GOSUB 500
302 LSET B¥=CHR¥(125):GOSUB 500:GOSUB 600
303 LSET B¥=CHR¥(123):GOSUB 500:LSET B¥=CHR¥(32):GOSUB 500
304 LSET B¥=CHR¥(49) :GOSUB 500:LSET B¥=CHR¥(56):GOSUB 500
305 LSET B¥=CHR¥(125):GOSUB 500:GOSUB 600
306 LSET B¥=CHR¥(123):GOSUB 500: LSET B¥=CHR¥(32):GOSUB 500
307 LSET B¥=CHR¥(49) :GOSUB 500: LSET B¥=CHR¥(57):GOSUB 500
308 LSET B¥=CHR¥(125):GOSUB 500:GOSUB 600
309 LSET B¥=CHR¥(123):GOSUB 500: LSET B¥=CHR¥(32):GOSUB 500
310 LSET B¥=CHR¥(50) :GOSUB 500: LSET B¥=CHR¥(48):GOSUB 500
311 LSET B¥=CHR¥(125):GOSUB 500: GOSUB 600
320 LSET B¥=CHR¥(13) :GOSUB 500: LSET B¥=CHR¥(10):GOSUB 500
330 C1=C1+1:IF C1=995 THEN C1=1601
340 CC=C1-(C1\100)*100:IF CC>94 THEN C1=C1+6
350 IF C1>C2 THEN CLOSE:END
360 GOTO 60
500 PUT #2,D:D=D+1:RETURN
600 FOR R=1 TO 21:LSET B¥=CHR¥(46):GOSUB500:NEXT R
610 LSET B¥=CHR¥(13): GOSUB 500:LSET B¥=CHR¥(10):GOSUB 500:RETURN