[BR]用VB实现微机控制字符型液晶显示詹小杏
[BR] 液晶显示器(LCD)以低电压、微功耗、超薄轻巧、接口简单、显示内容丰富诸多优点,在袖珍式
电子产品的显示系统中得到广泛应用。为此,本文介绍一种由微机与
单片机之间通讯直接控制液晶显示
电路。微机在控制中,采用Visual Basic(简称VB)编程,做出十分直观的人机界面,操作方便,可直接将字符由微机的键盘输入通过串行通讯口传送到单片机,再由单片机系统控制液晶显示模块,将字符显示在液晶屏上。另外,单片机系统又将字符发送回到微机的人机界面上显示,用于字符传送过程的实时监测。一、 硬件设计系统电路如图(1)。图(1)本系统关键的器件是AT89C51单片机,一方面利用AT89C51单片机自身具有的串行通讯口,可以与微机的RS232(9针)串行通讯口直接通讯。另一方面通过单片机控制液晶显示模块。AT89C51单片机系统在硬件设计上具有简单、方便等优点。但由于微机的RS232标准接口的电平与AT89C51单片机接口的TTL电平规范不一致,所以采用MAXIM公司的MAX232电平转换器,实现这两种接口的电平相互转换。字符型液晶显示模块是一种用5x7点阵图形来显示字符的液晶显示器。根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等。这里采用2行16个字的TC1602A液晶模块。TC1602A采用标准的16脚接口,其中VSS为地
电源,VDD接5V正电源,V0为液晶显示器对比度调整端,使用时可以通过一个10K的电位器调整对比度。RS为寄存器选择:RS=1选择数据寄存器;RS=0选择指令寄存器。R/W为读写信号线:R/W=1进行读操作;R/W=0进行写操作。当RS=0,R/W=0时,可以写入指令或者显示地址;当RS=0,R/W=1时,可以读忙信号;当RS=1,R/W=0时,可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0~D7为8位双向数据线。 TC1602A液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等。每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。 TC1602A液晶模块内部的控制器共有11条控制指令,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。二、 软件设计1、 微机串口发送、接收的VB程序设计VB程序设计包括人机界面设计如图(2),主要利用VB6.0提供的串口控件MSCOMM32.OCX。该控件可方便地对串口状态与89C51单片机之间串口通讯的格式和协议进行设置。MSCOMM控件的属性预设置为:Commport=2,Set
tings=“9600,n,8,1”,Rthreshold=1,Sthreshold=1。VB程序设计如下:Private Sub CmdExit_Click() '使用命令按钮控件MSComm1.PortOpen = False '关闭通讯端口End '结束系统End SubPrivate Sub CmdSend_Click() '使用命令按钮控件MSComm1.Output = textsend.Text & Chr(13) '将发送区数据传送出去End SubPrivate Sub Command4_Click() '使用命令按钮控件MSComm1.Settings = Trim(Text3.Text) '改变通讯参数设置End SubPrivate Sub ComReceive_Click() '使用命令按钮控件 textreceive.Text = "" '清除接收区数据End SubPrivate Sub Form_Load()Text3.Text = CStr(MSComm1.Settings) '显示通讯参数设置 MSComm1.CommPort = 2 '判断串行口 On Error Resume Next Opcom(1).Value = True If MSComm1.PortOpen Then MsgBox "COM2被用,请选COM1!", vbExclamation + vbOKOnly, "系统信息"Exit SubElse MSComm1.PortOpen = True '打开通讯端口 End IfEnd SubPrivate Sub MSComm1_OnComm() 'MSComm1_OnComm事件Select Case MSComm1.CommEvent '自动接收数据Case comEvReceivetextreceive.Text = textreceive.Text + Trim(MSComm1.Input)Case comEvSendEnd SelectEnd SubPrivate Sub Opcom_Click(Index As Integer)On Error Resume NextMSComm1.PortOpen = False '选择串行口MSComm1.CommPort = Index + 1If MSComm1.PortOpen Then MsgBox "COM2被用,请选COM1!", vbExclamation + vbOKOnly, "系统信息"Exit SubElse MSComm1.PortOpen = TrueEnd IfEnd SubPrivate Sub txtSend_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) '按Enter键发送数据 If KeyAscii = 13 Then MSComm1.Output = textsend.Text & Chr(13) End IfEnd Sub图(2)使用方法:(1)运行软件,选择串口com1或com2。(2)在参数设置下框设置波特率须与单片机设置相同,点击“参数设置”有效。(3)在发送区输入字符,最后要以“%#”为结束标志,再点击“发送”或按Enter键即可。正常情况下,在接收区和液晶屏上会同时显示出发送区输入的字符。(4)、点击“清除”可清除接收区的所有字符;点击“结束”即退出本软件。2、单片机汇编语言程序设计单片机程序采用MCS-51的汇编语言编程。包括二部分:①.与微机的串口通讯软件。②.对字符液晶显示模块的显示控制软件。(1)、程序设计如下: 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 ;清串行通讯结束标志位00H MOV R0, #40H ;接收字符代码首地址为40H MOV TMOD, #20H MOV TH1, #0FDH ;设置波特率为9600 MOV TL1, #0FDH MOV SCON, #50H ;设串行口方式1,允许接收 MOV IE, #90H ;允许串行口中断 SETB TR1 LOOP: JNB 00H, LOOP ;等待串行通讯结束 CLR ES ;关串行中断 LCALL LCD ; 液晶显示接收的字符 WAIT: SJMP START ; 返回 ;串行通讯中断子程序 UART1: PUSH PSW PUSH ACC CLR RI MOV A, SBUF ;接收串行数据 MOV @R0, A ;存放到40H INC R0 CJNE A, #23H, UART2 ;是否为结束字符#,23H为#的ASCⅡ码 SETB 00H ;置位结束标志 SJMP UART4 UART2: MOV SBUF, A ;回传所收数据 UART3: JNB TI, UART3 ;等待发送完毕 CLR TI UART4: POP ACC POP PSW RETI ;LCD显示字符子程序 ORG 0100H LCD: MOV SP, #60H CALL Initial CALL CLS MOV A, #80H ;设显示行为第一行 CALL Write MOV R1, #40h ;取数据地址送R1 CALL STRING ;调显示字符子程序 RET ;启动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 ;写数据到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 ;取显示数据 CJNE A, #25H, PR ;是否为结束字符“%”,25H为%的ASCⅡ码 POP ACC RET ; 结束返回 PR: CALL LCDData ;显示字符 INC R1 ACALL DELAY SJMP LOOP1 ;继续显示 ; 延时子程序 DELAY: MOV R6, #100 D1: MOV R7, #100 DJNZ R7, $ DJNZ R6, D1 RETEND(2)、程序设计的流程图如下:①、主程序 ②、串行通讯中断服务子程序
[BR]
[BR]
[BR] ③、LCD控制显示子程序 ④、字符显示子程序 三、 总结 本文给出的硬件和软件均经过实践检验,制作简单,调试方便。对于目前广泛应用的液晶显示技术的学习研究和开发有一定参考价值。对初学者来说,由字符型LCD入手比较容易,学成之后,可再进一步开发用VB实现微机控制其它LCD模块。
[BR]
[BR]
0