用C#操作IO端口2-控制液晶/荧光显示器
作者: Levent S。 翻译:Aweay
上面文章发表之后,很多朋友都说这太简单了,还以为使用c#来编写代码完成IO操作呢,不就是调用现有DLL吗?相反这篇文章在Codeproject上却得到了所有读者的厚爱(得分4。82分,这个分数还在升高),不知道这是不是外国程序员都比中国程序员的水平低呢?好了闲话少说,开始本次的讨论:
完成后的演示图片:
不要害怕, 我不会像其他文章那样给你上一堂历史课,而是告诉你为什么从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结构的信息, 如果你想了解这方面知识, 可以查阅如下地址:
大部分的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。 |
|
2。 |
|
3。 |
|
4。 |
|
5。 |
|
6。 |
|
7。 |
|
8。 |
数字万用表 |
9。 |
花点功夫编写我的程序:) |
* |
10K的电压计 |
如果你的连接正确,将会得到下面这样的显示:
本文地址:http://com.8s8s.com/it/it45269.htm