访问电脑版页面

导航:老古开发网手机版Pic单片机PIC16系列单片机

PIC16F877单片机的图形液晶显示模块接口技术

导读:
关键字:
PIC16F877单片机的图形液晶显示模块接口技术 重庆大学电气工程学院严利平卓清锋刘和平 摘要详述PIC16F877单片机的MG\ 12232图形点阵式液晶显示器的硬件接口电路特点和接口软件编程方法。 关键词PIC16F877LCD接口 引言 由于液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄等其他显示器无法比拟的优点,它广泛用于各种智能型仪器和低功耗电子产品中。点阵式(或图形式)LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能,用途十分广泛。本文在简介液晶显示器MG\ 12232的驱动器SED1520F0A的结构、功能的基础上,介绍了PIC16F877单片机的LCD硬件接口电路和软件编程特点。 一、 PIC16F877与MG\ 12232的 硬件接口电路1 SED1520F0A的接口信号 SED1520F0A属行列驱动及控制合一的小规模液晶显示驱动芯片,电路简单,经济实用,内含振荡器,只须外接振荡电阻即可工作。模块工作的稳定性好。SED1520F0A与微处理器的接口信号如下。 DB0~DB7:数据总线。 A0:数据/指令选择信号。A0=1,表示出现在数据总线上的是数据;A0=0,表示出现在数据总线上的是指令或读出的状态。 RES:接口时序类型选择。RES=1为M6800时序,其操作信号是E和R/W;RES=0为Intel 8080时序,操作信号是RD和WR。 RD(E):在Intel 8080时序时为读,低电平有效;在M6800时序时为使能信号,是个正脉冲,在下降沿处为写操作,在高电平时为读操作。 WR(R/W):在Intel 8080时序时为写,低电平有效;在M6800时序时为读、写选择信号,R/W=1为读,R/W=0为写。 SED1520F0A与两种总线的接口信号和时序的详细资料见液晶显示模块使用手册。 2 MG\ 12232模块的引脚说明 MG\ 12232模块共有18个引脚,各引脚定义如表1所列。 表1MG\ 12232模块的引脚定义 序号〖〗符号〖〗状态〖〗功能说明1〖〗VCC〖〗-〖〗逻辑电源正2〖〗GND〖〗-〖〗逻辑电源地3〖〗V0〖〗-〖〗液晶显示驱动电源4〖〗RES〖〗-〖〗接口时序类型选择5〖〗E1〖〗输入〖〗主工作方式IC使能信号6〖〗E2〖〗输入〖〗从工作方式IC使能信号7〖〗R/W〖〗输入〖〗读/写选择信号8〖〗A0〖〗输入〖〗寄存器选择信号9~16〖〗DB0~DB7〖〗三态〖〗数据总线(低位)17〖〗SLA〖〗-〖〗18〖〗SLK〖〗-〖〗背光灯负电源3 PIC16F877与MG\ 12232模块的接口电路 现以功能强、价格低的PIC16F877为例说明PIC与MG\ 12232模块的硬件接口电路。其接口控制时序采用M6800操作时序,这样 SED1520F0A引出的控制信号R/W,A0,E1和E2由PIC16F877的I/O端口portb的4个脚控制。接口电路如图1所示。图中利用可调电阻R3实现液晶的背光亮度调节,直接用电阻R2驱动液晶的背光灯。由于PIC16F877的位操作指令丰富,所以用软件不难模拟出M6800操作时序。 表2SED1520F0A指令集 指令名称〖〗控制信号[]控制代码R/W〖〗A0[]D7〖〗D6〖〗D5〖〗D4〖〗D3〖〗D2〖〗D1〖〗D0显示开/关指令〖〗0〖〗0〖〗1〖〗0〖〗1〖〗0〖〗1〖〗1〖〗1〖〗I/O显示起始行设置〖〗0〖〗0〖〗1〖〗1〖〗0〖〗显示起始行(0~31)设置页地址〖〗0〖〗0〖〗1〖〗0〖〗1〖〗1〖〗1〖〗0〖〗页地址(0~3)设置列地址〖〗0〖〗0〖〗0〖〗列地址(0~79)读状态指令〖〗1〖〗0〖〗BUSY〖〗ADC〖〗OFF/ON〖〗RESET〖〗0〖〗0〖〗0〖〗0写数据〖〗0〖〗1〖〗显示的数据读数据〖〗1〖〗1〖〗显示的数据ADC选择指令〖〗0〖〗0 〖〗1〖〗0〖〗1〖〗0〖〗0〖〗0〖〗0〖〗0/1静态驱动开/关〖〗0〖〗0〖〗1〖〗0〖〗1〖〗0〖〗0〖〗1〖〗0〖〗0/1占空比选择〖〗0〖〗0 〖〗1〖〗0〖〗1〖〗0〖〗1〖〗0〖〗0〖〗0/1改写开始指令〖〗0〖〗0 〖〗1〖〗1〖〗1〖〗0〖〗0〖〗0〖〗0〖〗0改写结束指令〖〗0〖〗0〖〗1〖〗1〖〗1〖〗0〖〗1〖〗1〖〗1〖〗0复位〖〗0〖〗0〖〗1〖〗1〖〗1〖〗0〖〗0〖〗0〖〗1〖〗0图1PIC16F877与MG\ 12232模块的接口电路二、 接口软件编程 1 SED1520F0A指令集 SED1520F0A液晶显示驱动器有13条指令。表2所列为以与M6800系列MPU接口为例(RES=1)而总结出的指令。 2 MG\ 12232模块的编程 下面是以图1的接口电路为例编写的只含E1主方式的程序(表1中E1=1,E2=0)。E2从方式(表1中E1=0,E2=1)的程序类推。 在系统程序的初始化部分应该对程序中用到的寄存器和临时变量作说明,如:lcdflag〖〗equ〖〗0x20〖〗;存放标志位〖〗sbdata〖〗equ〖〗 lcdflag+1〖〗;存放显示数据〖〗clmadd〖〗equ〖〗sbdata+1〖〗;存放列地址〖〗pageadd〖〗equ〖〗clmadd+1〖〗;存放页地址〖〗pagenum〖〗equ〖〗pageadd+1〖〗;存放总页数〖〗clmsum〖〗equ〖〗pagenum+1〖〗;存放总列数〖〗intscode〖〗 equ〖〗clmsum+1〖〗;存放指令代码读液晶显示器状态子程序 Ste〖2〗bsf〖〗STATUS,RP0〖〗;选中存储区1〖2〗movlw〖〗0xff〖2〗movwf〖〗TRISD〖〗;设置D口为输入〖2〗bcf〖〗STATUS,RP0〖〗;选中存储区0〖2〗bsf〖〗PORTB,4〖〗;E1=1〖2〗bsf〖〗PORTB,1〖〗;R/W=1〖2〗bcf〖〗PORTB,0〖〗;A0=0〖1〗Tae〖〗movf〖〗PORTD,0〖〗;将状态字读入W中〖2〗movwf〖〗lcdflag〖〗;将W中的状态字存入lcdflag中〖2〗btfsc〖〗lcdflag,7〖〗;判断D7位是否为0〖2〗goto〖〗Tae〖〗;D7=1,为忙状态〖2〗return对液晶显示器发指令子程序(指令保存在W寄存器中) Cwe〖〗〖2〗movwf〖〗intscode〖〗;指令暂存intscode〖2〗bcf〖〗PORTB,1〖〗;R/W=0〖2〗bcf〖〗PORTB,0〖〗;A0=0〖2〗movf〖〗intscode,0〖2〗movwf〖〗PORTD〖2〗bcf〖〗PORTB,4〖〗;E1=0写入指令〖2〗return对液晶显示器写数据子程序(数据保存在W寄存器中) Dwe〖〗〖2〗movwf〖〗sbdata〖〗;数据暂存sbdata〖2〗movf〖〗clmadd,0〖2〗Call〖〗Cwe〖〗;设置列地址〖2〗Call〖〗Ste〖2〗bsf〖〗STATUS,RP0〖2〗clrf〖〗TRISD〖〗;设置D口为输出方式〖2〗bcf〖〗STATUS,RP0〖2〗bsf〖〗PORTB,4〖〗;E1=1〖2〗bcf〖〗PORTB,1〖〗;R/W=0〖2〗bsf〖〗PORTB,0〖〗;A0=1〖2〗movf〖〗sbdata,0〖2〗movwf〖〗PORTD〖2〗bcf〖〗PORTB,4〖〗;E1=0,写入数据〖2〗call〖〗Ste〖2〗incf〖〗clmadd,1〖〗;列地址加1〖2〗return液晶显示器开显示、关显示和清屏子程序 Disp〖4〗;开E1显示〖2〗movlw〖〗0xaf〖〗;将控制命令放在W中〖2〗call〖〗Cwe〖2〗bsf〖〗PORTB,4〖〗;E1=1〖2〗call〖〗Ste〖〗;判是否忙〖2〗bsf〖〗STATUS,RP0〖2〗clrf〖〗TRISD〖〗;设置D口输出方式〖2〗bcf〖〗STATUS,RP0〖2〗bsf〖〗PORTB,4〖〗;E1=1〖2〗bsf〖〗PORTB,1〖〗;R/W=1〖2〗bcf〖〗PORTB,0〖〗;A0=0〖2〗bsf〖〗STATUS,RP0〖2〗movlw〖〗0xff〖2〗movwf〖〗TRISD〖〗;设置D口输入方式〖2〗bcf〖〗STATUS,RP0〖2〗movf〖〗PORTD,0〖2〗movwf〖〗lcdflag〖〗;读入状态并查询〖2〗btfsc〖〗lcdflag,5〖〗;是否确实打开〖2〗goto〖〗Disp〖2〗return〖1〗Disoff〖4〗;关 E1显示〖2〗movlw〖〗0xae〖〗;控制命令放在W中〖2〗call〖〗Cwe〖2〗bsf〖〗PORTB,4〖〗;E1=1〖2〗bsf〖〗PORTB,1〖〗;R/W=1〖2〗bcf〖〗PORTB,0〖〗;A0=0〖2〗bsf〖〗STATUS,RP0〖2〗movlw〖〗0xff〖2〗movwf〖〗TRISD〖2〗bcf〖〗STATUS,RP0〖2〗movf〖〗PORTD,0〖2〗movwf〖〗lcdflag〖〗;读入状态并查询〖2〗btfss〖〗lcdflag,5〖〗;判是否关闭〖2〗goto〖〗Disoff〖2〗return〖1〗Cler〖4〗;清屏〖2〗movlw〖〗0xb8〖〗;设置页地址代码〖2〗movwf〖〗pageadd〖2〗movlw〖〗 0x04〖2〗movwf〖〗pagenum〖〗;设置总页数〖1〗clr1〖〗movf〖〗pageadd,0〖2〗call〖〗Cwe〖2〗movlw〖〗0x50〖〗;设置总列数 〖2〗movwf〖〗clmsum〖〗;80或60列〖2〗movlw〖〗0x00〖2〗movwf〖〗clmadd〖〗;设置起始列〖1〗clr2〖〗movlw〖〗0x00〖2〗call〖〗Dwe〖〗;写入00H〖1〗clar〖〗decfsz〖〗clmsum,1〖〗;本页未清完〖2〗goto〖〗clr2〖〗;返回继续〖2〗incf〖〗pageadd,1〖〗;页号增1〖2〗decfsz〖〗pagenum,1〖〗;4页未清完〖2〗goto〖〗clr1〖〗;返回继续〖2〗return有了以上的通用子程序,就可以构造出各种显示程序,如字符、汉字、曲线等。当然,在这些程序执行前必须对液晶进行初始化。初始化的顺序为:关显示→正常显示驱动设置→占空比设置→复位→ADC选择→清屏→开显示。程序如下: 初始化子程序 Lcdinit〖〗〖2〗call〖〗Disoff〖〗;关显示〖2〗movlw〖〗0xa4〖〗;静态显示驱动〖2〗call〖〗Cwe〖2〗movlw〖〗0xe2〖〗;复位〖2〗call〖〗Cwe[] 〖2〗movlw〖〗0xa0〖〗;ADC选择正常输出〖2〗call〖〗Cwe〖2〗movlw〖〗0xa9〖〗;占空比为1/32〖2〗call〖〗Cwe〖2〗call〖〗Cler〖〗;清屏〖2〗call〖〗Disp〖〗;开显示〖2〗return对于字符、汉字和曲线显示的原理是类似的。它们都是以字节为单位进行显示。关键在于形成字模库时必须保证每个字节数据的最高位是与每一列最下面一个点相对应,最低位与每一列最上面点相对应。当然,这可以用专门的软件来生成相应的代码,然后再将这些代码逐字节地写到相应的页和列。 结束语 PIC单片机与液晶模块的接口只要在硬件上满足液晶模块的接口要求,软件上能够模拟出要求的时序,并且初始化正确后,就可以随心所欲地显示信息了。 以上接口电路和程序在PIC试验板上调试通过,可作为其他单片机与LCD接口的参考。MES 参考文献 1Microchip Company.PIC16F87x Data Sheet 2Peatman B John. Design with PIC Microcontrollers 3SED1520F0A液晶显示驱动器的编程.成都,1998
来源:单片机与嵌入式系统应用   作者:重庆大学电气工程学院 严利平 卓清锋 刘和平  2006/2/12 0:00:00
栏目: [ PIC16系列单片机]

相关阅读

PIC16F631/677是从8/14引脚单片机向20引脚器件移植的理想选择

PIC16F877A的T0定时器制作的电子钟程序

基于PIC16F73微处理器和RS485总线实现感应式智能电子门锁系统的设计

如何利用PIC16F877A单片机读写AT24C系列储存器

nRF24L01无线模块在PIC16F877单片机上的应用解析

PIC16F87X系列单片机引起内部复位的条件和原因分析

PIC16F874单片机为中心处理器的直流电机调速设计

PIC16F877单片机原理图设计及应用

基于PIC16F628单片机的PVS控制系统设计

基于PIC16F877的新型二线制温度变送器

PIC16F84单片机控制电风扇的设计

PIC16F877A单片机对24X24点点阵屏的驱动设计

PIC16F877A PICC AD转换程序

基于PIC16F877单片机的电子秤包装机控制系统

pic16f877a c语言时钟程序

全球主流8位MCU芯片详细解剖No.3:微芯 PIC16F877

基于PIC16F628A的入侵探测装置

PIC16F877的矩阵键盘

基于PIC16F628单片机的便携式电子秤

PIC16F877A开发板 SPI总线驱动74595实验