字符的点阵显示
电子科技大学软件学03级02班 周银辉
一, 效果
![LCD.PNG](https://i-blog.csdnimg.cn/blog_migrate/a552bfb8e1679b75a5cb8e1dd370ae8f.png)
二 关于C#读取字符点阵的代码
(原理就不再阐述了,到Baidu里面搜一下,很多,不过一般都是C/C++的)
(说明:对于一个字符,GetWordLattics函数返回的bool[,]表示一个16*8或16*16点阵,对应值为true表示该点应该被点亮)
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.IO;
using
System.Windows.Forms;
![](/Images/OutliningIndicators/None.gif)
namespace
ShowWord
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 字符解析器
/// </summary>
public class WordPaser
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
private static byte[] bytesOfASC;
private static byte[] bytesOfHanZi;
private static string pathOfASC = Application.StartupPath + Path.DirectorySeparatorChar + "ASC16";
private static string pathOfHanZi = Application.StartupPath + Path.DirectorySeparatorChar + "HZK16";
![](/Images/OutliningIndicators/InBlock.gif)
static WordPaser()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
bytesOfASC = File.ReadAllBytes(pathOfASC);
bytesOfHanZi = File.ReadAllBytes(pathOfHanZi);
}
catch (Exception ex)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
MessageBox.Show(ex.Message);
}
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 获取指定的字符的点阵
/// </summary>
/// <param name="c">字符</param>
/// <param name="lines">点阵行数</param>
/// <param name="columns">点阵列数</param>
/// <returns>点阵数据,对应值为true表示该点应该被显示,否则对应点不应该被显示</returns>
public static bool[,] GetWordLattics(Char c, out int lines,out int columns)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
lines = 16;
columns = 8;
bool[,] lattics = new bool[lines, columns];
![](/Images/OutliningIndicators/InBlock.gif)
int intValue = (int)c;
long offset = 0;
![](/Images/OutliningIndicators/InBlock.gif)
if (intValue <= 255)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
offset = intValue * 16L;
for (int i = 0; i < lines; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for (int j = 0; j < columns; j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
byte byteValue = bytesOfASC[offset + i];
lattics[i, j] = ((byteValue >> (7 - j)) & 0x1) != 0;
}
}
![](/Images/OutliningIndicators/InBlock.gif)
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
lines = 16;
columns = 16;
lattics = new bool[lines, columns];
![](/Images/OutliningIndicators/InBlock.gif)
byte[] bytes = System.Text.Encoding.GetEncoding("gb2312").GetBytes(c.ToString());
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
int zone = bytes[0];//刚好是“区”的值,机内码
int num = bytes[1];//刚即时“位”的值 ,机内码
![](/Images/OutliningIndicators/InBlock.gif)
int area = (zone & 0x00ff) - 0xa0; //根据机内码取得区码
int bit = (num & 0x00ff) - 0xa0; //根据机内码取得位码
![](/Images/OutliningIndicators/InBlock.gif)
offset = (94 * (area - 1) + (bit - 1)) * 32L;
for (int i = 0; i < lines; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for (int j = 0; j < 2; j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for (int k = 0; k < 8; k++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
byte byteValue = bytesOfHanZi[offset + i * 2 + j];
lattics[i,8 * j + k] = ((byteValue >> (7 - k)) & 0x1) != 0;
}
}
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
return lattics;
}
}
}
3 字库文件下载
代码中用到的两个字库文件(或者你可以在TurboC安装目录下中找到他们) http://files.cnblogs.com/zhouyinhui/zk.rar