用C#操作IO端口2-控制液晶/熒光顯示器<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
作者: Levent S。 翻譯:Aweay
題外話
上面文章發表之後,很多朋友都說這太簡單了,還以爲使用c#來編寫代碼完成IO操作呢,不就是調用現有DLL嗎?相反這篇文章在Codeproject上卻得到了所有讀者的厚愛(得分4。82分,這個分數還在升高),不知道這是不是外國程序員都比中國程序員的水平低呢?好了閒話少說,開始本次的討論:
完成後的演示圖片:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
什麼是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結構的信息, 如果你想了解這方面知識, 可以查閱如下地址:
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條引線。 |
針腳引線
根據上面的表格, 我把第一針(Vss), 第二(Vdd/Vo), 第三(Vee/Vo)叫做電源接線。第一根是地線,你必須把他接到地上;第二根是+5V的電源線。在我的程序裏使用機箱內的IDE電源接口線提供電壓。第三根線是LCD對比對的調整,我使用一個電壓計來改變LCD的對比度。
Pin4(RS),5(R/W),6(E)是用來控制LCD的。Pin4是選擇寄存器,如果該針是低電平,則LCD通過發送命令可以感知到數據;如果是高電平,則LCD可以發送或者接收8/4位的字符數據。Pin5讀寫線,如果該針是低電平,你可以向LCD寫字符,如果是高電平你可以讀取字符數據或者狀態信息。在我的程序裏,沒有任何讀取的操作,所以我把它接地保持低電平。Pin6是保護,它被用於初始化在LCD這數據針腳間進行實際的命令或者數據交換。
這8條線是數據線,可以從LCD傳輸或者獲取數據,每次8位或者4位。在我的程序裏使用8位傳輸模式,因爲我是使用並行口,所以他本來就可以使用8位的數據線。
這兩根針是爲了LCD的背光設計的,背光非常適合於用在昏暗的環境,我們經常可以看到多種背光顏色的LCD。
電路
我們的電路到底需要一些什麼東西呢?下面的表格就是了:
No: |
描述 |
1。 |
|
2。 |
|
3。 |
|
4。 |
|
5。 |
|
6。 |
|
7。 |
|
8。 |
數字萬用表 |
9。 |
花點功夫編寫我的程序:) |
* |
10K的電壓計 |
電路圖(電壓計)
電路圖(無壓計)
如果你的連接正確,將會得到下面這樣的顯示:
<未完> 由於CSDN文章系統好像不能放下太多的內容, 沒有辦法我斷開了...