圖(1)
本系統(tǒng)關(guān)鍵的器件是AT89C51單片機(jī),一方面利用AT89C51單片機(jī)自身具有的串行通訊口,可以與微機(jī)的RS232(9針)串行通訊口直接通訊。另一方面通過(guò)單片機(jī)控制液晶顯示模塊。AT89C51單片機(jī)系統(tǒng)在硬件設(shè)計(jì)上具有簡(jiǎn)單、方便等優(yōu)點(diǎn)。但由于微機(jī)的RS232標(biāo)準(zhǔn)接口的電平與AT89C51單片機(jī)接口的TTL電平規(guī)范不一致,所以采用MAXIM公司的MAX232電平轉(zhuǎn)換器,實(shí)現(xiàn)這兩種接口的電平相互轉(zhuǎn)換。
字符型液晶顯示模塊是一種用5x7點(diǎn)陣圖形來(lái)顯示字符的液晶顯示器。根據(jù)顯示的容量可以分為1行16個(gè)字、2行16個(gè)字、2行20個(gè)字等等。這里采用2行16個(gè)字的TC1602A液晶模塊。TC1602A采用標(biāo)準(zhǔn)的16腳接口,其中VSS為地電源,VDD接5V正電源,V0為液晶顯示器對(duì)比度調(diào)整端,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。RS為寄存器選擇:RS=1選擇數(shù)據(jù)寄存器;RS=0選擇指令寄存器。R/W為讀寫信號(hào)線:R/W=1進(jìn)行讀操作;R/W=0進(jìn)行寫操作。當(dāng)RS=0,R/W=0時(shí),可以寫入指令或者顯示地址;當(dāng)RS=0,R/W=1時(shí),可以讀忙信號(hào);當(dāng)RS=1,R/W=0時(shí),可以寫入數(shù)據(jù)。E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。D0~D7為8位雙向數(shù)據(jù)線。 TC1602A液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等。每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。 TC1602A液晶模塊內(nèi)部的控制器共有11條控制指令,它的讀寫操作、屏幕和光標(biāo)的操作都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的。
一、軟件設(shè)計(jì)
1、微機(jī)串口發(fā)送、接收的VB程序設(shè)計(jì)
VB程序設(shè)計(jì)包括人機(jī)界面設(shè)計(jì)如圖(2),主要利用VB6.0提供的串口控件MSCOMM32.OCX。該控件可方便地對(duì)串口狀態(tài)與89C51單片機(jī)之間串口通訊的格式和協(xié)議進(jìn)行設(shè)置。MSCOMM控件的屬性預(yù)設(shè)置為:Commport=2,Settings=“9600,n,8,1”,Rthreshold=1,Sthreshold=1。
VB程序設(shè)計(jì)如下:
Private Sub CmdExit_Click() '使用命令按鈕控件
MSComm1.PortOpen = False '關(guān)閉通訊端口
End '結(jié)束系統(tǒng)
End Sub
Private Sub CmdSend_Click() '使用命令按鈕控件
MSComm1.Output = textsend.Text & Chr(13) '將發(fā)送區(qū)數(shù)據(jù)傳送出去
End Sub
Private Sub Command4_Click() '使用命令按鈕控件
MSComm1.Settings = Trim(Text3.Text) '改變通訊參數(shù)設(shè)置
End Sub
Private Sub ComReceive_Click() '使用命令按鈕控件
textreceive.Text = "" '清除接收區(qū)數(shù)據(jù)
End Sub
Private Sub Form_Load()
Text3.Text = CStr(MSComm1.Settings) '顯示通訊參數(shù)設(shè)置
MSComm1.CommPort = 2 '判斷串行口
On Error Resume Next
Opcom(1).Value = True
If MSComm1.PortOpen Then
MsgBox "COM2被用,請(qǐng)選COM1!", vbExclamation + vbOKOnly, "系統(tǒng)信息"
Exit Sub
Else
MSComm1.PortOpen = True '打開通訊端口
End If
End Sub
Private Sub MSComm1_OnComm() 'MSComm1_OnComm事件
Select Case MSComm1.CommEvent '自動(dòng)接收數(shù)據(jù)
Case comEvReceive
textreceive.Text = textreceive.Text + Trim(MSComm1.Input)
Case comEvSend
End Select
End Sub
Private Sub Opcom_Click(Index As Integer)
On Error Resume Next
MSComm1.PortOpen = False '選擇串行口
MSComm1.CommPort = Index + 1
If MSComm1.PortOpen Then
MsgBox "COM2被用,請(qǐng)選COM1!", vbExclamation + vbOKOnly, "系統(tǒng)信息"
Exit Sub
Else
MSComm1.PortOpen = True
End If
End Sub
Private Sub txtSend_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii))) '按Enter鍵發(fā)送數(shù)據(jù)
If KeyAscii = 13 Then
MSComm1.Output = textsend.Text & Chr(13)
End If
End Sub
圖(2)
使用方法:
(1)運(yùn)行軟件,選擇串口com1或com2。
(2)在參數(shù)設(shè)置下框設(shè)置波特率須與單片機(jī)設(shè)置相同,點(diǎn)擊“參數(shù)設(shè)置”有效。
(3)在發(fā)送區(qū)輸入字符,最后要以“%!睘榻Y(jié)束標(biāo)志,再點(diǎn)擊“發(fā)送”或按Enter鍵即可。正常情況下,在接收區(qū)和液晶屏上會(huì)同時(shí)顯示出發(fā)送區(qū)輸入的字符。
(4)、點(diǎn)擊“清除”可清除接收區(qū)的所有字符;點(diǎn)擊“結(jié)束”即退出本軟件。
2、單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)
單片機(jī)程序采用MCS-51的匯編語(yǔ)言編程。包括二部分:①.與微機(jī)的串口通訊軟件。②.對(duì)字符液晶顯示模塊的顯示控制軟件。
(1)、程序設(shè)計(jì)如下:
RS BIT P3.4
R_W BIT P3.5
ENABLE BIT P3.3
DB0_DB7 DATA P1
ORG 0000H
LJMP START
ORG 0023H
LJMP UART1
ORG 0030H
START: CLR 00H ;清串行通訊結(jié)束標(biāo)志位00H
MOV R0, #40H ;接收字符代碼首地址為40H
MOV TMOD, #20H
MOV TH1, #0FDH ;設(shè)置波特率為9600
MOV TL1, #0FDH
MOV SCON, #50H ;設(shè)串行口方式1,允許接收
MOV IE, #90H ;允許串行口中斷
SETB TR1
LOOP: JNB 00H, LOOP ;等待串行通訊結(jié)束
CLR ES ;關(guān)串行中斷
LCALL LCD ; 液晶顯示接收的字符
WAIT: SJMP START ; 返回
;串行通訊中斷子程序
UART1: PUSH PSW
PUSH ACC
CLR RI
MOV A, SBUF ;接收串行數(shù)據(jù)
MOV @R0, A ;存放到40H
INC R0
CJNE A, #23H, UART2 ;是否為結(jié)束字符#,23H為#的ASCⅡ碼
SETB 00H ;置位結(jié)束標(biāo)志
SJMP UART4
UART2: MOV SBUF, A ;回傳所收數(shù)據(jù)
UART3: JNB TI, UART3 ;等待發(fā)送完畢
CLR TI
UART4: POP ACC
POP PSW
RETI
;LCD顯示字符子程序
ORG 0100H
LCD: MOV SP, #60H
CALL Initial
CALL CLS
MOV A, #80H ;設(shè)顯示行為第一行
CALL Write
MOV R1, #40h ;取數(shù)據(jù)地址送R1
CALL STRING ;調(diào)顯示字符子程序
RET
;啟動(dòng)LCM顯示子程序
Initial: ACALL DELAY
MOV A, #38H
CALL Write
MOV A, #0EH
CALL Write
MOV A, #06H
CALL Write
RET
;查忙子程序
Busy: PUSH ACC
BusyLoop: CLR ENABLE
SETB R_W
CLR RS
SETB ENABLE
MOV A, DB0_DB7
CLR ENABLE
JB ACC.7, BusyLoop
POP ACC
CALL DELAY
RET
;寫顯示器控制指令到IR寄存器子程序
Write: CALL Busy
CLR ENABLE
CLR R_W
CLR RS
SETB ENABLE
MOV DB0_DB7, A
CLR ENABLE
RET
;寫數(shù)據(jù)到DR寄存器子程序
LCDData: CALL Busy
CLR ENABLE
CLR R_W
SETB RS
SETB ENABLE
MOV DB0_DB7, A
CLR ENABLE
RET
CLS: MOV A, #01H
CALL Write
RET
;顯示字符子程序
STRING: PUSH ACC
LOOP1: CLR A
MOV A, @R1 ;取顯示數(shù)據(jù)
CJNE A, #25H, PR ;是否為結(jié)束字符“%”,25H為%的ASCⅡ碼
POP ACC
RET ; 結(jié)束返回
PR: CALL LCDData ;顯示字符
INC R1
ACALL DELAY
SJMP LOOP1 ;繼續(xù)顯示
; 延時(shí)子程序
DELAY: MOV R6, #100
D1: MOV R7, #100
DJNZ R7, $
DJNZ R6, D1
RET
END
(2)、程序設(shè)計(jì)的流程圖如下:
①、主程序 ②、串行通訊中斷服務(wù)子程序

③、LCD控制顯示子程序 ④、字符顯示子程序

一、總結(jié)
本文給出的硬件和軟件均經(jīng)過(guò)實(shí)踐檢驗(yàn),制作簡(jiǎn)單,調(diào)試方便。對(duì)于目前廣泛應(yīng)用的液晶顯示技術(shù)的學(xué)習(xí)研究和開發(fā)有一定參考價(jià)值。對(duì)初學(xué)者來(lái)說(shuō),由字符型LCD入手比較容易,學(xué)成之后,可再進(jìn)一步開發(fā)用VB實(shí)現(xiàn)微機(jī)控制其它LCD模塊。