用C#操作IO端口2-控制液晶/荧光显示器-1

** 用 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:

Published At
Categories with Web编程
Tagged with
comments powered by Disqus