LED显示屏控制系统 第8页
22
MFC的绘图都是通过Device Context(它是设备与数据之间的媒介,
可以缩写为DC)来将绘图输出到一个设备上。DC中存储设备的属性与输
出绘图的数据。在MFC中要输出绘图数据至一个设备上,必须准备一个
针对此设备的DC对象,它是继承于CDC的类的对象。这个DC对象可以
使用CDC类的一些绘图函数(如画线、圆、方形等)。每个DC必须附着一
些所谓的GDI object(GDI对象,如常见的画笔、画刷、字形、位图等
画图工具)以配合DC的绘图函数。
系统通过编写Line()函数画直线、Rectangle()函数画矩形、
Ellipse()函数画椭圆、Circle()函数完成图形的编辑
[2][3]
。
需要指出的是将newPen析构:调用newPen.DeleteObject()方法。
GDI对象的析构很重要,特别是自己创建的对象,一定要在适当的时机
(GDI对象已经不在附着在DC时)去掉。解除附着的方法只有以
SelectObject函数选择别的新的对象(旧的对象会自动被消除)。可以选择
MFC预存的对象来解除对象的依附关系,因为MFC预存的对象会在不
用的时候自动析构。DeleteObject是CGdiObject类公开的成员函数,所
以它的子类都可以使用。
文字的输入:通过CFontDialog类生成一个选择字体类型(font)
的对话框。
CDC*pDC=GetDC();
LOGFONT m_lFont;
COLORREF m_cTextColor;
CFont myFont;
CFont*pOldFont;
CFontDialog FontDlg;
FontDlg.m_cf.lpLogFont=&m_lFont;
FontDlg.m_cf.rgbColors=m_cTextColor;
FontDlg.m_cf.Flags!=CF_INITTOLOGFONTSTRUCT;
if(FontDlg.DoModal()==IDOK)
{
FontDlg.GetCurrentFont(&m_lFont);
m_cTextColor=FontDlg.GetColor();吉林大学硕士学位论文
23
}调用系统自带的输入法,包括文字的字体、字形、颜色、效果
等。
系统加载TextDialog对话框,以文本编辑区左上顶点为坐标原点,
向右为X轴正方向,向下为Y轴正方向建立逻辑坐标系,实现文字指定
位置的编辑:
CString str;
CTextDlg TextDlg;
//CRect rect(TextDlg.m_ctrEdit.GetClientRect());
if(TextDlg.DoModal()==IDOK)
{
CRect rect(TextDlg.m_iPosX,TextDlg.m_iPosY,
TextDlg.m_iPosX+1000,TextDlg.m_iPosY+1000);
str=TextDlg.m_sText;
myFont.CreateFontIndirect(&m_lFont);
pOldFont=pDC->SelectObject(&myFont);
pDC->SetTextColor(m_cTextColor);
pDC->DrawText(str,rect,0);
pDC->SelectObject(pOldFont);
SaveInStack();}
在OnFont()函数中嵌入TextDialog()函数,
DDX_Text(pDX,IDC_POS_X,m_iPosX);//文本区内文字输入X轴
DDX_Text(pDX,IDC_POS_Y,m_iPosY);//文本区内文字输入Y轴
颜色的控制:
在Windows系统中,色彩是以ture color来定义的,即COLORREF
它是一个四字节字,其中的3个字节分别代表红,绿,蓝三种基本单色,
也就是每一个基本单色由一个字节来表示,亦即每一个基本单色有256
种色阶。所以True color有16777216种色彩变化。虽然计算机内定义
了这么多颜色,但是对于应用与现实生活中的LED显示屏来说无须也无
法达到。因为人眼对不同颜色光线的敏感程度不同,并且红、绿和黄三
种颜色是人眼视觉细胞最敏感的,所以这三种颜色成为基色,通过其不
同比例的混合就能实现从白到黑的各种颜色。所以也正是应用于交通警吉林大学硕士学位论文
24
视最为普遍的颜色。
LED显示屏应用于交通指挥大厅的法律宣传,为公众传输信息以及服
务,基于特殊的应用领域,图文显示屏都只有三种颜色的变化。所以控
制系统在工具栏内只添加了以上三种颜色满足今后扩展的要求。
§4.2字模提取
4.2.1字模简介
文字的字模是一组数字,但它的意义却与数字的意义有着根本的变
化,它是用数字的各位信息来记载英文或汉字的形状
[1]
。
在电脑硬件中,根本没有汉字这个概念,也没有英文的概念,其认
识的概念只有——内码(将ASCII表的高128个很少用到的数值以两个
为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符
使用,即英文的内码)。如果你用启动盘启动系统后用DIR命令可能得到
一串串莫名其妙的字符,但那确确实实是汉字,如果你启动UCDOS或其
他的汉字系统后,就会看到那是一个个熟悉的汉字。在硬件系统内,英
文的字模信息一般固化在ROM里,即使在没有进入系统的CMOS里,也可
以让你看到英文字符。而在DOS下,中文的字模信息一般记录在汉字库
文件里(将制作好的字模放到一个个标准的库中,这就是点阵字库文件)。
4.2.2 LED显示屏领域字模实现技术
在通过软件实现的技术中,目前有许多字模生成软件,软件打开后
输入汉字,点“检取”,十辣进制数据的汉字代码即可自动生成,把我们
所需要的竖排数据复制到我们的程序中即可。在通过硬件实现字模提取
的技术中,有在单片机系统中增加硬汉字库的方法,主控器发送的汉字
是其机内码,用两个字节来表示一个汉字。根据机内码,显示单元控制
模块从汉字库中查取显示字模,实现汉字显示。由于带有硬汉字库,进
行动态文字显示时,通用智能显示单元仅接受汉字的机内码即可,这样
数据通讯量大大减少。因此,“动态文字显示速度快”。
4.2.3软件控制系统字模提取的分析与设计
而在LED显示屏控制系统 第8页具体应用的Windows操作系统下如何提取吉林大学硕士学位论文
字模信息是设计的核心。软件控制系统在实际编辑过程中,要求各种字
体、字号的文字都能被编辑、保存。所以系统在设计时,把文本区理解
为由众多的象素点构成,而把不同字体、字号的文字理解为一幅图像。
因为所开启的文本区大小与LED显示屏的大小对应,所以采用16*16点
阵为单位,把文本区内的每个像素点都看成一个二文数组,由于系统中
各种颜色都有对应的值,赋予每个不同颜色的像素点不同的对应值,再
把每个点赋予一个int型的值,这样保存下来的信息就是二进制数据。
通过这样的设计,我们不仅可以把任何字型,任何大小的文字保存下来,
还可以显示以256个像素点阵为单位的任何图形。在软件控制系统中实
现字模的提取,也就避免了在单片机中加载硬汉字库模块,从而简化了
硬件模块的设计。
以下以单色屏为例,介绍系统采用字模保存的算法设计
定义COLORREF zimo_color//像素点的颜色,判断某个点的颜色
值。如果值为0xffffff,说明此点为白色,赋予此点值0。由于单色屏
只有红色和不显色两种,所以可以简单赋值为除白色外其余点赋值为1。
CClientDC dc(this);
CFile myfile;
unsigned int zimo[192][384]={0};
unsigned char zimo_data[192][48]={0};
COLORREF zimo_color;
int row,col;
this->HideCaret();
for(row=0;row<192;row++){
for(col=0;col<384;col++){
zimo_color=dc.GetPixel(col,row);
if(zimo_color==0xffffff)
{zimo[row][col]=0;}else
{zimo[row][col]=1;}}}
定义unsigned int zimo[192][384]={0};//文本区像素点
以8位为一字节(因为在随后的串行通讯中,传输的数据是8位的
二进制数据)定义unsigned char zimo_data[192][48]={0};
this->ShowCaret();
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>
LED显示屏控制系统 第8页下载如图片无法显示或论文不完整,请联系qq752018766