首先声明我在此之前从来没有写过图形界面的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);
}