天天看点

关于TC图形界面下的汉字显示

首先声明我在此之前从来没有写过图形界面的dos程序。下面是我的一些心得。

有一次一个同事的朋友需要写短程序是在工控机上运行的。该工控机安装的是DOS6.0当好时我写了一段程序是在arm单片机上运行的程序。想移植过去,发现非常方便,以前的东西很轻松就可以实现了。

后来总觉得奇怪,程序看起来总有一些不对劲仔细想了想原来是英文界面。

本来觉得安装上ucdos就可以了,不过找了半天都没有成功,因为他的工控机上使用的doc(16M)没有办法考进去程序,找不到合适的软驱。同时我也不能确定ucdos下是否就能正常显示汉字。于是放弃了。

之后联想到在arm单片机上的汉字显示。就决定使用画点的方法显示汉字。于是很顺利的实现了汉字的显示。

今天晚上在家顺便写了这篇心得。改日有空将代码上传进来。

该代码实现了趋势图的显示。

忘记了今天穿代码上来

调用方法

int out16hz(int   x,int   y,int   z,int   color,char   *p);
int convert(unsigned   char   ch,int   n);

Byte *Str1[]={"双组份气体分析仪器"};

out16hz(200,30,10,18,*Str1);
           

汉字显示子函数 ucdos下使用

int out16hz(int x,int y,int z,int color,char *p)
  {
      unsigned   int   i,qm,wm,f=0;
      int   flag16;
      int   record,i1,i2,i3;
      long   pointer;
      char   bit[32];
      flag16=open("HZK16",O_RDWR|O_BINARY);
      if(flag16==-1)
	  exit(1);
      while((i=*p++)!=0)
      {
	  if(i>0xa1)
	      if(f==0)
	      {
	      qm=(i-0xa1)&0x07f;
	      f=1;
	      }
	      else
	      {
  wm=(i-0xa1)&0x07f;
  f=0;
  record=qm*94+wm;
  pointer=record*32L;
  lseek(flag16,pointer,SEEK_SET);
  read(flag16,bit,32);
  for(i1=0;i1<16;i1++)
  for(i2=0;i2<2;i2++)
  for(i3=0;i3<8;i3++)
  if(convert(bit[i1*2+i2],7-i3))
	putpixel(x+i2*8+i3,y+i1,color);
	x=x+16+z;
	      }
      }
      close(flag16);
      return(1);
  }

  int   convert(unsigned   char   ch,int   n)
  {
      return((ch>>n)&0x01);
  }