引言
液晶顯示器因其具有功耗低、質量輕、體積小和超薄等優點,成為袖珍式電子產品顯示系統中的主流顯示技術,被廣泛用于通訊、家庭娛樂、廣告、儀表等領域。本文設計了一種由計算機與單片機之間的通訊來直接控制液晶顯示的系統。采用vb 軟件編程,設計直觀的人機界面,通過計算機的鍵盤直接輸入字符和字符移動方式,利用串口通訊傳送至單片機,再由單片機系統控制液晶顯示模塊,使字符能夠在液晶屏上進行移動顯示。
1 主控芯片和液晶屏的選擇
本系統中,主控芯片選用Atmel 公司生產的AT89S51.該芯片具有4k 字節可編程FLASH 存儲器,支持串行、并行下載程序ISP 在線編程,且價格低廉,執行速度快。液晶顯示屏采用點陣字符型液晶顯示模塊LCD162,LCD162 采用標準的16 腳接口,可以顯示2 行32 個字、每行顯示16 個ASCII字符,并且可以自定義圖形,只需要寫入相對應字符的ASCII 碼就可以顯示。
系統硬件電路主要有液晶顯示模塊和通訊模塊兩個部分組成,電路如圖1 所示。
圖1 系統硬件電路
圖1 中,液晶顯示部分,單片機與LCD162 采用并行接口方式,單片機的P0 口與液晶顯示屏的數據線D0~D7 進行連接,并通過8 個10 kΩ 的上拉電阻上拉。P1.5 連接LCD162 的RS 端,當P1.5為高電平時選擇數據寄存器,低電平時選擇指令寄存器。P1.6 連接RW,用于控制液晶顯示屏的讀寫操作,當P1.6 為高電平時進行讀操作,低電平時進行寫操作。P1.7 則連接到LCD162 的使能端,當E 由高電平跳變成低電平時,液晶模塊執行命令。
V0為液晶顯示器對比度調整端,通過一個10 kΩ的電位器R9為V0提供可調的液晶驅動電壓,實現顯示對比度的調節。
本系統需要將微機鍵盤鍵入的字符顯示在液晶屏上,因此利用51 單片機的異步串行通信接口與計算機進行串行通信,再由單片機控制液晶顯示模塊。計算機有一個串行通訊端口RS-232, 其邏輯電平用正負電壓表示,且信號使用負邏輯,邏輯0 的電壓范圍是+5~+15V, 邏輯1 的電壓范圍是-5~-15V.而51 單片機的輸出信號實際并不符合RS-232 的標準,其串行通信管腳上的電壓為TTL 標準,即0~5V 之間的兩個狀態。因此,51 單片機與MODEM 連接時,中間必須插入一個電平和邏輯轉換環節。這里利用MAX232 芯片實現TTL電平和RS-232 電平之間的轉換任務。
3 軟件設計與開發
軟件部分包括單片機控制的液晶顯示子程序、單片機和PC 機間通訊子程序以及VB 程序設計部分。
3.1 液晶顯示
LCD162 液晶模塊內部有一個字符發生器CGRAM,存儲了160 個不同點陣字符圖形,每個字符有一個固定代碼,通過標準字庫表查找其對應代碼即可。顯示字符時需要先送地址(寫命令),然后再送字符(寫數據)。如果要顯示字符庫外的字符,則需要利用CGRAM 編制顯示。本系統液晶顯示模塊包括LCD 的初始化、光標定位、顯示字符等模塊,其程序流程圖如圖2 所示。
圖2 液晶顯示控制主程序
初始化時需要設置初始狀態、顯示光標、清屏、顯示模式等,這里設置LCD162 為8 位數據,5×7 字符點陣,兩行顯示,即將P0 口寫入38H.LCD162 有寫命令、讀狀態、寫數據和讀數據4 種操作,4 種操作由P1.5,P1.6,P1.7 的狀態確定。在進行寫命令、寫數據和讀數據3 種操作前需先進行讀狀態操作,通過查詢方式查詢忙標志,當忙標志為0 時才可以進行其他3 類操作。送顯示字符時,需將顯示數據寫在相應的DDRAM 地址中,用以確定顯示字符的顯示位置。以下是忙碌狀態判斷子程序和寫數據子程序,其子程序流程如圖3 和圖4 所示。
RS BIT P1.5
RW BIT P1.6
E BIT P1.7
LCD EQU P0
;判斷是否忙碌子程序:
CHECK_BF:
MOV LCD,#0FFH
CLR RS ; RS 為低電平,RW 為高電平時,可以讀狀態
SETB RW ; RW=1,選擇讀模式
CLR E
NOP
SETB E ;E=1,允許讀/寫LCD
NOP
JB LCD.7,CHECK_BF
RET
;寫數據子程序:
WR_DATA:
SETB RS ;RS=1,選擇數據寄存器
CLR RW
CLR E
ACALL CHECK_BF
MOV LCD,A ;將數據送入P0,
NOP ;給硬件反應時間
NOP
NOP
NOP
SETB E
NOP
NOP
NOP
NOP
CLR E ;E 由1-->0 時,液晶模塊開始
執行命令
RET
圖3 判忙碌子程序
圖4 寫數據子程序
3.2 單片機與PC 的串口通訊
單片機的串行數據發送端TXD 和串行數據接收端RXD 分別與MAX232 的T1 和R1 相連。設置時應與PC 機的串口設置相對應。本系統單片機串行口采用工作方式1,波特率設置為9 600,由定時器T1 產生。通信開始時由PC 機發出握手信號,單片機收到握手信號后再向PC 機發回響應信號,PC機收到響應信號,經驗證正確后表示串口通信成功。
3.3 PC 機串行通信
計算機的通信采用VB6.0 軟件編寫。在VB 中有一個MSComm 通訊控件,該控件可設置串行通信數據的發送和接收,通過對此控件的屬性和事件進行相應編程操作,就可以輕松地實現串口通訊。MScomm 控件提供了兩種通信方式:事件驅動和查詢方式,本系統采用查詢方式處理通信。為保證計算機和單片機的可靠通信,雙方需要設置相同的數據格式和波特率。本系統采用二進制發送和接收數據。發送數據前,需將發送緩沖區清零,即MScomm 控件的OutBufferCount 屬性值為0.對通訊端口初始化時選用串行通訊口Com1,設置其波特率為9 600, 無奇偶校驗,8 位數據傳送,1 位停止位。字符數據發送完畢后以回車鍵作為結束。
下面的程序是實現通訊的代碼。其中Label1 控件用于串口通訊成功時的提示標簽。
Private Sub MSComm1_OnComm()' 串口設置
Dim Buffer As Variant
Dim Hexbuffer() As Byte
If MSComm1.PortOpen = True Then
Select Case MSComm1.CommEvent
Case comEvReceive ' 有接受事件發生
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary
' 數據收發采用二進制
Buffer = MSComm1.Input
Label1.Caption = Buffer
Hexbuffer() = Buffer
Dim I As Integer
For I = 0 To UBound(Hexbuffer)
If Hex(Hexbuffer(I)) = 1 Then
Label1.Caption = Label1.Caption & "0" &Hex(Hexbuffer(I))
Else
Label1.Caption = Label1.Caption & Hex(Hexbuffer(I))
End If
Next I
End Select
End If
End Sub
在VB 窗體界面中還設置了左右移動兩個按鈕,通過添加兩個定時器timer1 和timer2,在定時器的timer 事件里更改控件的位置屬性,從而實現字符的在窗體上的移動。圖5 為通過虛擬串口和Proteus 軟件仿真效果。圖5 中,左圖為VB 窗體界面,右圖是液晶顯示仿真圖。在窗體文本框控件中輸入字符,點擊發送按鈕后可以在液晶顯示屏中進行顯示,點擊左右移按鈕,液晶顯示屏的內容也可以同時進行移動。
圖5 VB 控制的液晶顯示仿真
4 結論
本系統以計算機作為主機,單片機作為從機,實現了計算機和單片機的串行通訊,并能夠通過鍵盤向計算機輸入字符顯示在液晶顯示屏上。系統結構設計簡單,具有一定實用性。
-
存儲器
+關注
關注
38文章
7484瀏覽量
163767 -
液晶顯示
+關注
關注
6文章
586瀏覽量
40291 -
AT89S51
+關注
關注
3文章
229瀏覽量
34081
發布評論請先 登錄
相關推薦
評論