** 用 C#操作IO端口2-控制液晶/荧光显示器 **
作者 : **Levent S。 ** 翻译: Aweay
题外话
上面文章发表之后,很多朋友都说这太简单了,还以为使用 c#来编写代码完成IO操作呢,不就是调用现有DLL吗?相反这篇文章在Codeproject上却得到了所有读者的厚爱(得分4。82分,这个分数还在升高),不知道这是不是外国程序员都比中国程序员的水平低呢?好了闲话少说,开始本次的讨论:
演示下载
源代码下载
完成后的演示图片:
什么是 LCD? 它是做什么用的 ?
不要害怕, 我不会像其他文章那样给你上一堂历史课,而是告诉你为什么从 LCD( Liquid Crystal Displays, 液晶显示器) 被发明至今我仍然在使用LCD? 起初我们使用LED(发光二极管), 到了70时代就出现了我们现在使用的LCD, LCD的最大特点就是它不仅可以显示数字, 还可以显示字符和各种各样的符号。 点击 这里 查看基于LCD的数据表,这些数据表给出了LCD的规格信息。 LCD有一个HD44780(日立)兼容的KS0066U控制器, 三星生产这样的控制器, 如果你对电子原材料感兴趣可以到 这里 下载控制器信息。这里的控制器不像今天的图形LCD的控制器那么复杂, 但它同样被广泛用于商业/工业产品中。
再让我们来解释一下什么是 VFD, VFD(Vacuum Fluorescent Displays, 真空荧光显示器)非常的类似于LCD。 它们通常被用于微波和便携计算器中。这里有一幅 VFD的图片 。关键在于HD44780控制器同样适用于VFD。 与LCD相比, 我更喜欢VFD, 因为它比LCD更亮一些, 当然VFD也更昂贵一些, 在我的这篇文章里以LCD为例。
LCD是什么样子呢? 在我的文章里使用2x16的LCD, 就像上面的图像显示的那样。 还用很多其他类型的LCD, 比如: 1x8, 2x8, 1x16, 2x20, 1x40等, 不同的LCD也有不同供应商。如果你需要大于80字符的LCD, 你可以使用2个控制器。 我不再讨论任何关于LCD结构的信息, 如果你想了解这方面知识, 可以查阅如下地址:
l 三星的LCD结构和类型
l 夏普的LCD技术原理
LCD 的连接
大部分的 LCD都有14根连线, 他们是D0-D7(数据线), E(使能信号), R/W(读写信号), RS(寄存器选择), Vee或者Vo(对比度), Vdd或者Vcc(+5伏电源), Vss(地线)。 因此对于一个标准的无背光LCD有8条数据线, 3条电源线和3条控制线。 如果LCD拥有背光, 则需要附加2条线,分别是(VB+)和(VB-或者地线), 下面有一个表格列举里这些针脚的定义:
** 标准 LCD针脚排布 (Character number <80) **
** Pin **
|
** Symbol/Alternate Symbol **
|
** Possibility **
|
** Function **
---|---|---|---
1
|
Vss
|
-
|
Power supply (GND)
2
|
Vdd/Vcc
|
-
|
Power supply (+5V)
3
|
Vee/Vo
|
-
|
Contrast adjust
4
|
RS
|
0/1
|
0 = Instruction input / 1 = Data input
5
|
R/W
|
0/1
|
0 = Write to LCD module / 1 = Read from LCD module
6
|
E
|
1, 1-->0
|
Enable signal
7
|
DB0
|
0/1
|
Data pin 0
8
|
DB1
|
0/1
|
Data pin 1
9
|
DB2
|
0/1
|
Data pin 2
10
|
DB3
|
0/1
|
Data pin 3
11
|
DB4
|
0/1
|
Data pin 4
12
|
DB5
|
0/1
|
Data pin 5
13
|
DB6
|
0/1
|
Data pin 6
14
|
DB7
|
0/1
|
Data pin 7
** If your LCD has more than 80 characters (like 4x40) **
15
|
E2
|
1, 1->0
|
Enable signal row 2 & 3
---|---|---|---
16
|
|
|
Not used mostly
这是 LCD的背面:
HY1602B (Hyper 1602B) with KS0065 controller (compatible with HD44780) and backlight。
1602-04 with KS0066U controller (compatible with HD44780) and backlight。
上面是 2个不同的具有背光的LCD(背面), 他们都拥有第15/16条引线。
针脚引线
1,2,3针
根据上面的表格, 我把第一针 (Vss), 第二(Vdd/Vo), 第三(Vee/Vo)叫做电源接线。第一根是地线,你必须把他接到地上;第二根是+5V的电源线。在我的程序里使用机箱内的 IDE电源接口 线提供电压。第三根线是LCD对比对的调整,我使用一个电压计来改变LCD的对比度。
4,5,6针
Pin4(RS),5(R/W),6(E)是用来控制LCD的。Pin4是选择寄存器,如果该针是低电平,则LCD通过发送命令可以感知到数据;如果是高电平,则LCD可以发送或者接收8/4位的字符数据。Pin5读写线,如果该针是低电平,你可以向LCD写字符,如果是高电平你可以读取字符数据或者状态信息。在我的程序里,没有任何读取的操作,所以我把它接地保持低电平。Pin6是保护,它被用于初始化在LCD这数据针脚间进行实际的命令或者数据交换。
7,8,9,10,11,12,13,14针
这 8条线是数据线,可以从LCD传输或者获取数据,每次8位或者4位。在我的程序里使用8位传输模式,因为我是使用并行口,所以他本来就可以使用8位的数据线。
15,16针
这两根针是为了 LCD的背光设计的,背光非常适合于用在昏暗的环境,我们经常可以看到多种背光颜色的LCD。
电路
我们的电路到底需要一些什么东西呢?下面的表格就是了:
No:
|
描述
---|---
1。
|
与HD44780兼容的并行端口的LCD
2。
|
一般的并口打印机电缆
3。
|
Normal twin power cable
4。
|
10 way housing and the PCB header
5。
|
6 way housing and the PCB header
6。
|
IDE接口
7。
|
16终端的的PCB
8。
|
数字万用表
9。
|
花点功夫编写我的程序:)
<TD style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: