基于VB 6.0 液晶显示系统的设计
扫描二维码
随时随地手机看文章
摘要:设计利用VB提供的MSComm通讯控件完成PC机与单片机的串行通讯,由单片机控制液晶显示模块,实现通过计算机输入字符直接显示在液晶显示屏的控制系统。
0引言
液晶显示器因其具有功耗低、质量轻、体积小和超薄等优点,成为袖珍式电子产品显示系统中的主流显示技术,被广泛用于通讯、家庭娱乐、广告、仪表等领域。本文设计了一种由计算机与单片机之间的通讯来直接控制液晶显示的系统。采用vb软件编程,设计直观的人机界面,通过计算机的键盘直接输入字符和字符移动方式,利用串口通讯传送至单片机,再由单片机系统控制液晶显示模块,使字符能够在液晶屏上进行移动显示。
1主控芯片和液晶屏的选择
本系统中,主控芯片选用Atmel公司生产的AT89S51。该芯片具有4k字节可编程FLASH存储器,支持串行、并行下载程序ISP在线编程,且价格低廉,执行速度快。液晶显示屏采用点阵字符型液晶显示模块LCD162,LCD162采用标准的16脚接口,可以显示2行32个字、每行显示16个ASCII字符,并且可以自定义图形,只需要写入相对应字符的ASCII码就可以显示。
2硬件电路设计
系统硬件电路主要有液晶显示模块和通讯模块两个部分组成,电路如图1所示。
图1系统硬件电路
图1中,液晶显示部分,单片机与LCD162采用并行接口方式,单片机的P0口与液晶显示屏的数据线D0~D7进行连接,并通过8个10kΩ的上拉电阻上拉。P1。5连接LCD162的RS端,当P1。5为高电平时选择数据寄存器,低电平时选择指令寄存器。P1。6连接RW,用于控制液晶显示屏的读写操作,当P1。6为高电平时进行读操作,低电平时进行写操作。P1。7则连接到LCD162的使能端,当E由高电平跳变成低电平时,液晶模块执行命令。
V0为液晶显示器对比度调整端,通过一个10kΩ的电位器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所示。
RSBITP1。5
RWBITP1。6
EBITP1。7
LCDEQUP0
;判断是否忙碌子程序:
CHECK_BF:
MOVLCD,#0FFH
CLRRS;RS为低电平,RW为高电平时,可以读状态
SETBRW;RW=1,选择读模式
CLRE
NOP
SETBE;E=1,允许读/写LCD
NOP
JBLCD。7,CHECK_BF
RET
;写数据子程序:
WR_DATA:
SETBRS;RS=1,选择数据寄存器
CLRRW
CLRE
ACALLCHECK_BF
MOVLCD,A;将数据送入P0,
NOP;给硬件反应时间
NOP
NOP
NOP
SETBE
NOP
NOP
NOP
NOP
CLRE;E由1-->0时,液晶模块开始
执行命令
RET
图3判忙碌子程序
图4写数据子程序
3。2单片机与PC的串口通讯
单片机的串行数据发送端TXD和串行数据接收端RXD分别与MAX232的T1和R1相连。设置时应与PC机的串口设置相对应。本系统单片机串行口采用工作方式1,波特率设置为9600,由定时器T1产生。通信开始时由PC机发出握手信号,单片机收到握手信号后再向PC机发回响应信号,PC机收到响应信号,经验证正确后表示串口通信成功。
3。3PC机串行通信
计算机的通信采用VB6。0软件编写。在VB中有一个MSComm通讯控件,该控件可设置串行通信数据的发送和接收,通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。MScomm控件提供了两种通信方式:事件驱动和查询方式,本系统采用查询方式处理通信。为保证计算机和单片机的可靠通信,双方需要设置相同的数据格式和波特率。本系统采用二进制发送和接收数据。发送数据前,需将发送缓冲区清零,即MScomm控件的OutBufferCount属性值为0。对通讯端口初始化时选用串行通讯口Com1,设置其波特率为9600,无奇偶校验,8位数据传送,1位停止位。字符数据发送完毕后以回车键作为结束。
下面的程序是实现通讯的代码。其中Label1控件用于串口通讯成功时的提示标签。
PrivateSubMSComm1_OnComm()'串口设置
DimBufferAsVariant
DimHexbuffer()AsByte
IfMSComm1。PortOpen=TrueThen
SelectCaseMSComm1。CommEvent
CasecomEvReceive'有接受事件发生
MSComm1。InputLen=0
MSComm1。InputMode=comInputModeBinary
'数据收发采用二进制
Buffer=MSComm1。Input
Label1。Caption=Buffer
Hexbuffer()=Buffer
DimIAsInteger
ForI=0ToUBound(Hexbuffer)
IfHex(Hexbuffer(I))=1Then
Label1。Caption=Label1。Caption&"0"&Hex(Hexbuffer(I))
Else
Label1。Caption=Label1。Caption&Hex(Hexbuffer(I))
EndIf
NextI
EndSelect
EndIf
EndSub
在VB窗体界面中还设置了左右移动两个按钮,通过添加两个定时器timer1和timer2,在定时器的timer事件里更改控件的位置属性,从而实现字符的在窗体上的移动。图5为通过虚拟串口和Proteus软件仿真效果。图5中,左图为VB窗体界面,右图是液晶显示仿真图。在窗体文本框控件中输入字符,点击发送按钮后可以在液晶显示屏中进行显示,点击左右移按钮,液晶显示屏的内容也可以同时进行移动。
图5VB控制的液晶显示仿真
4结论
本系统以计算机作为主机,单片机作为从机,实现了计算机和单片机的串行通讯,并能够通过键盘向计算机输入字符显示在液晶显示屏上。系统结构设计简单,具有一定实用性。