单片机速通教程
用PIC16C58单片机控制VFD显示和键盘

🏠 首页 《无线电》杂志 2001年 🔗 第11期 🔗 第31页 分类:电脑与单片机 🔗 陈伟 🔗

本期教程将通过用PIC16C58单片机控制VFD显示和键盘的应用实例,帮助读者了解PIC16C5×系列单片机的内部功能部件如RTCC定时器、内部RAM和I/O口的使用,熟悉PIC单片机的相关指令系统。

一、 硬件特点

本应用实例是利用PIC16C58单片机扩展一片VFD驱动芯片,完成键盘扫描和动态VFD显示功能,它可应用于影碟机、AV功放、仪器仪表和工控产品等设备中,由于PIC单片机指令兼容性好,可根据需要选用其他型号的PIC单片机,软件移植很方便。

图1
图1 🔍原图 (850×495)

VFD显示屏有两种显示形式,一种是动态显示(如影碟机和部分高档功放机的显示屏),另一种是静态显示(如一些低价位的功放机、组合音响的显示屏)。这两种显示驱动是不一样的。静态显示屏就是真空二极管,驱动软件比较简单,硬件电路比较复杂;动态显示屏就是真空三极管,是通过控制栅极电压来完成显示的动态扫描,显示的内容更丰富。如果动态VFD的驱动完全由软件来实现,则软件量比较大,占用程序执行时间也比较长,所以本例采用一片专用的VFD驱动芯片PT6311来完成动态扫描,而且该芯片还具有键盘扫描功能,这样大大地节省了单片机的软件工作量和单片机的硬件资源,使系统的软、硬件工作分配更合理。

二、硬件设计原理

例子中PIC16C58的主要功能是定时地更新驱动芯片的显示数据和读取键盘扫描结果,并根据按键的功能,完成相应的控制操作和更新显示。PIC16C58通过3根I/O口线读写PT6311的数据,完成VFD显示和读取键值。其余I/O口可用于其他控制,电路原理如图1所示。

PT6311芯片是用来驱动8位(20段)到16位(12段)的VFD显示,内置键盘扫描电路(最大12×4阵列)、显示亮度调节电路(8步)。PT6311由显示存储器、段位驱动器、键盘电路和接口控制等部分组成。它有显示存储器,用来存放由串行口发送来的显示数据,容量为20位×16字,8位为1个单元。它的键盘电路由键盘扫描同步信号发生器和键值数据存储器组成。键盘阵列由Key1~Key4作为行线,KS1~KS12作为列线。每个键值的数据被存储到PT6311的键值数据存储器中。可通过读PT6311的命令从中读出键值,最低位在前。PT6311的命令是用于设置显示驱动器的显示模式和状态。共有4个命令:显示模式设置命令、数据设置命令、地址设置命令、显示控制命令。PIC16C58通过这4个命令设置和控制PT6311芯片。PT6311详细资料可查询网站:http://www.princeton.com.tw/vfd.htm。

三、 软件设计

图2为软件的操作流程图,从中可以看出,程序的重点为对定时器的设置、查询和对PT6311的显示数据更新、读取键值。PIC16C5×系列的单片机在编程时应注意几个问题:硬件堆栈只有两级,数据存储器的分区,页面跨页等。这些问题的处理在PIC16C58的资料中均有叙述,可到http://www.microchip.com.cn上下载其pdf格式的产品数据手册。下面详细介绍此应用实例的软件设计。


1. 对定时器RTCC的编程

对定时器有影响的两个特殊功能寄存器是RTCC和OPTION。PIC16C58定时/计数器RTCC,可用于对外加在RTCC引脚上的脉冲计数或内部时钟计数(起定时器的作用)。RTCC采用递增方式计数,当计数至FFH时,在下一个计数发生后,将自动复零,重新开始计数,如此循环下去。由于PIC16C5×系列单片机无中断功能,所以必须通过查询的方式来检查定时到否或计数到否。OPTION特殊功能寄存器中RTS位是选择RTCC信号源位,为0,选择内部指令时钟;为1,选择外部触发。RTE位是选择RTCC信号触发沿位,为0,从低到高触发;为1,从高到低触发。PSA位是预分频器分配位,为0,分给RTCC用;为1,分给WDT用。RTCC可通过设置预分频器来增加定时周期。当预分频器分配给RTCC后,最大分频比为256,如果是4MHz时钟(内部指令时钟为1μs),最大RTCC定时时间为256×256×1μs=65536μs。本例中要定时100ms,可以设置RTCC定时50ms,查询两次。定时查询程序如下:

MOVLW 07H

OPTION ;预分频器给RTCC,内部时钟,分频比256

DINGSHI MOVLW 3CH ;给RTCC置初值

MOVWF RTCC ;设置50ms定时

CHECK NOP

MOVLW 0

XORWF RTCC,0

BTFSS STATUS,Z ;检测RTCC是否为0

GOTO CHECK ;不是,再次检测

MOVLW 1 ;是的,判断是50ms还是100ms

SUBWF TIME-COUNTER,0

BTFSC STATUS,Z

GOTO DO-XIANSHI ;定时100ms到,转到读写 PT6311

INCF TIME-COUNTER,1 ;定时50ms到,再定时50ms

GOTO DINGSHI

DO_XIANSHI……


2. 显示数据缓存区的设置

PIC16C5×把数据存储器RAM都当作寄存器来使用,寻址方便,不同型号芯片数据存储器用作通用寄存器的数量是不同的,PIC16C58有80个,分为4个寄存器体(BANK0~BANK3),每个体的低16位寄存器的物理位置是相同的,当特殊功能寄存器FSR的第4位为“1”时,则要根据FSR的5、6位来选择某个寄存器体中的某一个高16位的寄存器。通过F0和FSR间接相对寻址,完成对寄存器的读写,寻址F0实际上意味着间接寻址,实际地址为FSR的内容,而存取数据是通过FSR实现的。应用例子中选用的VFD为11位16段,它需要33个字节的显示数据缓存区(可参考PT6311的显示RAM地址及格式),把0FH寄存器BANK0的16个字节加上BANK1的16个字节作为显示数据缓存区。如果修改显示内容,直接修改相应的显示数据缓存区的字节即可,然后把显示数据缓存区写到PT6311中。在编程时要注意对寄存器体的设置及恢复,以保证读写的寄存器是正确的。


3. VFD显示控制子程序(VFD显示屏为11位16段)

PIC16C58与PT6311的接口通过3根I/O口线连接,主要操作为:初始化设置PT6311的工作模式、给PT6311写显示数据、读PT6311的键盘扫描值。发送的数据格式要符合PT6311的时序图(可参考PT6311资料)。下面给出了对PT6311操作的写数据和读键盘的子程序,由于版面限制,源程序的规范汇编格式和其他部分详细程序,请读者到《无线电》网站上查阅,网址:www.radio.com.cn。

写显示数据到PT6311子程序:
=

WR-VFD ;写显示数据至PT6311

BCF PORTA,VFD_STB

MOVLW 70H ;设置命令字:正常工作、地址加1方式、写显示数据

MOVWF SEND-BUF ;

CALL OUTDATA ;调用输出一个字节子程序(OUTDATA)

BSF PORTA,VF

NOP

BCF PORTA,VFD-STB

MOVLW 0C0H ;地址设置命令字:从地址0开始

MOVWF SEN

CALL OUTDATA

MOVLW 11H ;先发送BANK0的数据

MOVWF COUNTER1

MOVLW 0FH ;显示数据放在单片机的RAM 0FH~1FH

MOVWF FSR ;BANK0寄存器

WR_VFD1

MOVF F0,0 ;通过F0、FSR间接寻址,把RAM 0FH~1FH的内容发送给PT6311

MOVWF SEND-BUF ;

CALL OUTDATA

INCF FSR,1 ;FSR内容加1,指向下一个寄存器

DECFSZ COUNTER1,1

GOTO WR-VFD1

MOVLW 10H ;再发送BANK1的数据

MOVWF COUNTER1

MOVLW 30H ;显示数据放在单片机的RAM 30H~3FH中

MOVWF FSR ;BANK1寄存器

WR-VFD2

MOVF F0,0 ;通过F0、FSR间接寻址,把RAM 30H~3FH的内容发送给PT6311

MOVWF SEND-BUF ;

CALL OUTDATA

INCF FSR,1 ;FSR内容加1,指向下一个寄存器

BECFSZ COUNTER1,1

GOTO WR-VFD2

BCF FSR,5 ;恢复到BANK0

BCF FSR,6

BSF PORTA,VF

NOP

BCF PORTA,VFD-STB

MOVLW 0BFH ;显示控制命令字:显示开、脉冲宽度14/16

MOVWF SEN

CALL OUTDATA

BSF PORTA,VFD-STB

RETLW 0

读PT6311键值子程序:

RD-KEY ;读PT6311键盘数据(17键)

BCF PORTA,VFD-STB

MOVLW 76H

MOVWF SEN

CALL OUTDATA

CALL INDATA ;从PT6311读一个字节数据(INDATA为读一个字节子程序)

MOVF RECEIVE-BUF,0

MOVWF KEY-BUF1 ;键位数据存储器的第一字节给KEY-BUF1

CALL INDATA

MOVF RECEIVE-BUF,0

MOVWF KEY-BUF2 ;键位数据存储器的第二字节给KEY-BUF2

CALL INDATA

MOVF RECEIVE-BUF,0

MOVWF KEY-BUF3 ;键位数据存储器的第三字节给KEY-BUF3

BSF PORTA,VFD-STB

BCF PORTA,VFD-STB

RETLW 0

此例中,大家重点要掌握RTCC的使用、F0和FSR的间接寻址等编程方式。下期,我们将为大家介绍带A/D转换器的PIC16C7×单片机系列,通过用PIC16C71单片机设计一个多路数据采集系统的实例,介绍其片内A/D转换器的使用。

(陈伟)