如何在C程序中显示12或16点的点阵汉字

单片机控制4个8X8点阵拼接成的16X16点阵滚动显示汉字 题目要求: 控制16X16点阵滚动显示:中国加油! 仿真电路图: 仿真效果: 电路关键元件介绍: 74LS138: ================================================================ 引脚说明: A0~A2:地址输入端 STA(E1):选通端 /STB(/E2)、/STC(/E3):选通端(低电平有效) /Y0~/Y7:输出... 阅读详情

在c程序中显示汉字

郭胜德

  在许多c程序设计中,要用到汉字进行提示或人机交互,而现行的turbo c集成开发环境不是汉化的,如何编制能显示汉字的c程序呢?

  下面的方法可以帮你在西文环境下显示汉字。这种方法是调用中文汉字库进行汉字显示。国家标准规定:汉字库分94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中有确定的区和位编号,这就是汉字的区位码。每个汉字在库中是以点阵字模形式存储的,一般采用16×16点阵(32字节)、24×24点阵(72字节),每个点用一个二进制位(0或1)表示,对应在屏幕上显示出来,就是相应的汉字。

  由于在中文环境下,输入的是汉字的内码,我们必须将之转换成区位码,算出偏移量,从字库中找到对应的汉字,将其字模显示即可。

  内码转换成区位码方法如下:

   qh=c1-0xa0 wh=c2-0xa0

  其区位码就是:

   qw=qh*0xff+wh

  该汉字在字库中离起点的位置是:

   offset=(94*(qh-1)+(wh-1))*32l

  程序例:

  #include 〈graphics.h〉

  #include 〈stdio.h〉

  #include 〈fcntl.h〉

  #include 〈io.h〉

  #include 〈stdlib.h〉

  #include 〈conio.h〉

  #define row 1 //纵坐标放大倍数

  #define col 2 //横坐标放大倍数

  void main()

  {

   int x,y;

   char *s=″汉字显示程序″;

   file *fp;

   char buffer[32]; //buffer用来存储一个汉字

   register m,n,i,j,k;

   unsigned char qh,wh;

   unsigned long offset;

   int gd=detect,gm; //图形屏幕初始化

   initgraph(&gd,&gm,″ ″);

   if ((fp=fopen(″hzk16″,″rb″))==null)

  //打开汉字库,该字库可以在ucdos中找到

   { printf(″can't open haz16,please add it″);

  getch(); closegraph(); exit(0);

   }

   x=20; y=100; //显示位置设置

   while(*s)

   { qh=*(s)-0xa0; //汉字区位码

   wh=*(s+1)-0xa0;

   offset=(94*(qh-1)+(wh-1))*32l; //计算该汉字在字库中偏移量

   fseek(fp,offset,seek_set);

   fread(buffer,32,1,fp); //取出汉字32字节的点阵字模存入buffer中(一个汉字)

   for (i=0;i〈16;i++) //将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字

  for(n=0;n〈row;n++)

   for(j=0;j〈2;j++)

   for(k=0;k〈8;k++)

   for(m=0;m〈col;m++)

  if (((buffer[i*2+j]〉〉(7-k))&0x1)!=null)

  putpixel(x+8*j*col+k*col+m,y+i*row+n,green);

   s+=2; //因为一个汉字内码占用两个字节,所以s必须加2

   x+=30;

   }

   getch();

   closegraph();

  }

  上述程序在turbo c 2.0编译系统下运行成功,它可以将汉字放大显示,读者可以将它改成函数用在您的程序中显示汉字。

 


GBA上的范例:

// 首先你要有HZK12的字库,写个程序把它里面每个数据传换成*.h文件里的unsigned char,定义一个
// 大数组const u8 ZKDATA[]
void CDraw::DrawHZText(char *str,int x,int y,u8 color)
{   
  char *buffer; // buffer用来存储一个汉字
  char *s=str;
  register int i,j,k;
  unsigned char qh,wh;
  unsigned long offset;
     while(*s)
  {
   qh=*(s)-0xa0;
   wh=*(s+1)-0xa0;
   offset=(94*(qh-1)+(wh-1))*24l;
   buffer=(char*)(ZKDATA+offset);
   for(i=0;i<12;i++)
   for(j=0;j<2;j++)
   for(k=0;k<8;k++)
   if(((buffer[i*2+j]>>(7-k))&0x1)!=0)
     SetPixel(x+8*j+k,y+i,color);
   s+=2;
   x+=12;
  }
}

基于STM32的16×16汉字点阵广告牌显示系统设计 *单片机设计介绍,基于STM32的16×16汉字点阵广告牌显示系统设计。 阅读详情

相关推荐

点阵汉字的字模读取与显示

我们用之前的方法一个IO口只能控制一个led,如果需要用更少的IO口控制更多的led怎么办?于是,就有了点阵。例如:8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个亮,则1脚接高电平a脚接低电平,则第一个就亮了。实物图借助取模软件,即可将我们所需要的文字字母,以点阵的形式呈现出来。我们知道英文字母数量比较少,我们只要用一个字节(8位)就足以表达。但是汉字非常多。要怎么表达呢?

m0_64363794的博客 3240

繁体big5编码12点阵字库c语言格式

繁体big5编码12点阵字库c语言格式,可以用于台湾繁体字液晶LED显示用。经过测试可以正常使用。决对是BIG5的,非GB2312的繁体版。内部附有big5编码定位说明。

单片机控制16*16LED点阵显示汉字

51单片机点阵显示

m0_73684406的博客 8254

单片机c代码5110液晶模块12×12点阵汉字显示

单片机c代码5110液晶模块12×12点阵汉字显示~~好东西分享啦

c语言点阵字库12*16,用C语言编程16点阵字库

#include #include#include #include #include #include #include #define GETADR(n,str) (str *) calloc (n,sizeof(str)) // 申请N个指定字符串长度的地址#define W16 16#define C16 32unsigned char bit[8]={0x80,0x40,0x20,0x1...

weixin_32260467的博客 889

固定点阵字库缩放

我所使用的点阵字库是由一个bit控制一个像素,也就是说,只有高亮和不亮(背景色)两种,然后项目中运用了关于固定点阵字库缩放的算法,主要用了几种方法,效果达不到很完美,主要有,等比例放大,邻插值算法缩放,对三次插值算法,后面为了防止缩小时造成部分笔画丢失,我还用一个超采样技术减少缩放过程中笔画的丢失。

m0_66108445的博客 975

光盘显示0字节可用_正原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验

1)实验平台:正原子水星 STM32F4/F7 开发板2)摘自《STM32F7 开发指南(HAL 库版)》关注官方微信号公众号,获取更多资料:正原子3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-13912-1-1.html第四十六章 汉字显示实验汉字显示在很多单片机系统都需要用到,少则几个字,多则整个汉字库的支持,更有甚者还要支持多国字库,那...

weixin_39583222的博客 614

HZK16汉字16*16点阵字库的使用及实例程序

前言:最近有个关于泰国文字识别并打印的项目。之前对泰文的了解只听过“萨瓦迪卡”-_-!!,所以前两天在学习泰文的排版规范及unicode编码,了解之后开始学习文字点阵打印的原理及代码编写。今天学习了汉字16*16点阵字库的使用。 这里首先感谢陪她去流浪大佬的文章(这个大佬的id一听就是有女朋友的,羡慕o.o),文章简介明了、通俗易懂,代码讲解也非常的详细。 原理: HZK16字库是符合GB2312...

故事就酒的博客 3万+

51单片机教程:51单片机驱动四个8*8点阵,拼凑16*16点阵显示标准汉字

看此篇博文之前建议先看博主的上一篇博文: 51单片机教程:8*8 点阵显示字符、数字、简单汉字 教你如何用4个8乘8点阵拼成一个1616点阵 一、点阵原理 市面上有很多种类的点阵,但是最常用的还是这种88点阵 内部结构如下图 可以发现点阵就是由led构成,并且有一排是阳极,另一排是阴极,有一排是控制行,另一排是控制列。 打开proteus搜索MATRIX,看到各种型号的点阵,选择88即可 任意选择一个颜色的点阵,我们发现引脚没有做任何标记,默认上排:阴极、控制列;下排:阳极、控制行 什么意思呢,也

mbs706的博客 2万+

单片机8×8点阵显示简单汉字程序_【Proteus】1616点阵滚动播放

前言1616点阵是比较常用的汉字显示工具,我们知道显示器都是由一个个组成的,也可以理解成像素,显示显示图案文字的原理与点阵并无多大区别,我们只需理解其中原理便可举一反三。因为英文字母及符号的显示最小单位为6乘8像素,就是说,要比较完整的显示英文字母,需要一个至少8行6列的矩形空间;而汉字则需要至少1616的空间才能比较完整的显示常用汉字。因此使用1616点阵驱动来滚动显示汉字是比较有学习...

weixin_39768917的博客 7501

【Proteus仿真】51单片机16×16点阵显示汉字,附程序

【Proteus仿真】51单片机16*16点阵显示汉字,附程序

m0_47179951的博客 1万+

汉字点阵用C#实现读取和调用

包括应用程序、完整源代码、工程文件。对于研究使用汉字点阵和在LED上显示调用等很有借鉴意义。

GB2312 12*12 点阵

自己用软件生成的12*12点阵字库C文件,包括常用的1级/2级约6千多个汉字

C源代码:12x12汉字点阵库(支持GBK)及其处理

C源代码:12x12汉字点阵库(支持GBK)及其处理

使用C语言以点阵的方式显示汉字

使用C语言以点阵的方式显示汉字,压缩包里自带所需要工具文件以及完整代码,新手学习可参考。

16*16点阵显示汉字

51单片机,16*16点阵显示汉字,经过测试。

51单片机教程:8*8 点阵显示字符、数字、简单汉字

点阵显示实验 一、什么是点阵? 我们用之前的方法一个IO口只能控制一个led,如果需要用更少的IO口控制更多的led怎么办呢,于是就有了点阵。 8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个亮,则1脚接高电平a脚接低电平,则第一个就亮了; 二、点阵原理图 可以看到点阵是由led按照一定的排列组成 ...

mbs706的博客 15万+

点阵显示汉字程序

【51单片机】点阵显示汉字程序 原理图 源代码 /* 以下是取到的字模 {0x08,0x7E,0x48,0x9C,0x08,0x08,0x7E,0x00},/"?",0/ {0x00,0x1E,0x22,0x3E,0x22,0x22,0x3E,0x00},/"?",1/ {0x48,0x5C,0x2A,0xFE,0x48,0x4C,0x54,0x62},/"?",2/ {0x00,0x3E,0x48,0x7E,0x08,0x2C,0x4A,0x10},/"?",3/ 字模有逐行取模、逐列取模;阴码、阳码 *

mxkshhh的博客 2277
上一篇: 浅谈如何做一个编译器?
下一篇: GBA探索日记(-)
HashCodeWithJava
博客等级 码龄26年 623粉丝 201原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值