PIC16C5X系列单片机具有可靠性高、功耗低、实用、低价、易学等特点,尤其是OTP产品有与掩模型产口几乎相同的性能和价格,因此被广泛用于工业和民用产品。在应用系统设计中,对于多位数码管(LED)的显示驱动,传统的驱动方式有两种:一是每个LED单独译码驱动,这需要大量的I/O线;二是段驱动,即采用公共数据线进行位驱动单独扫描,这种方法在软件上需定时扫描,否则显示就会混乱。为了既用很少I/O线,又减少软件设计的工作量,采用串行数据译码驱动电路不失为最佳选择。MC14499是比较理想的器件,但价格昂贵,目前已停产。TEC9607为国产电路,售价低,很适合在各种电子产品上使用。本文介绍了TEC9607的工作时序及与PIC系列单片机的接口电路,并给出了程序清单,软件不作任何改动即可直接应用到PIC系列单片机中。
1. TEC9607功能描述
TEC9607是天潼公司生产的串行共阳极CMOS 5×8段LED数码管显示驱动电路,为全定制专用集成芯片,它由开机自清电路、振荡电路、位扫描驱动电路、5×8位移位寄存器电路、5×8位数据锁存器电路、多路选择器、共阳极段驱动电路组成。可以与各种型号的微控制器(计算机)串行口或并行口连接,专供驱动5位十进制八段(每段至多串联3个LED)共阳极LED数码管或共阴极5×8点阵LED使用。TEC9607的管脚排列如图1所示,各引脚说明如下:
SI(5脚):串行数据输入脚,数据的输入由微控制器(计算机)程序给出。
SCP(6脚):串行移位时钟,用于驱动串行数据的输入。
CS(4脚):片选信号,高电平有效。CS=1,允许SI、SCP把数据移到5×8位移位寄存器;否则移位禁止。内部有上拉电阻到电源。CS在用于一个微处理器带多片TEC9607时做片选使用。
SO(14脚):5×8位串行移位寄存器数据输出。一个微处理器带多片TEC9607时,除了用CS方法扩展外,也可用SO串出的方法扩展。
LCP(3脚):把5×8位移位寄存器中的数据存到5×8位段数据锁存器的脉冲,高电平有效。加入数据锁存器的目的是上一个数据的显示和下一个数据的准备(移位)可同时进行,且能防止数据移位过程中显示数据的闪烁,内部已有上拉电阻到源,平时悬空时为高电平1,表示5×8位串行移位寄存器的数据总是送5×8位数据锁存器。
OEN(13脚):段输出允许信号,高电平有效。OEN=1时,允许段输出显示;OEN=0,段输出为高阻态。内部已有上拉电阻到电源,悬空时为高电平1。
OSC1、OSC2(2、1脚):振荡电路输入和输出端。OSC1为输入,OSC2为输出。微控制器产生的移位脉冲与显示扫描信号S1~S5是异步工作的。OSC1、OSC2外接电容C可使OSC2输出约2kHz,因此作为该器件的位扫描频率,电容推荐值为1000pF。
A、B…DP(22~15脚):段输出信号,为开路门输出,接LED负载。
S1~S5(11~7脚):位扫描驱动,S1为第一位(个位),S5为第五位(万位)。
R(23脚):开机自清信号引脚,低电平有效。外接电容C到地,可增大开机自清的时间。
TEC9607的工作时序如图2所示,按图2的工作时序传递数据时,先将SCP拉成低电平,随后把第一位数据放在SI线上,在SCP的上升沿,TEC9607将数据采集进去,其它位传送过程是相同的。在5×8位数据传送后,就完成了显示控制过程。40位数据的串行顺序如图3所示。
2.TEC9607与单片机的接口电路
图4是TEC9607与PIC16C5X系列单片机的接口电路。设计时,首先构成单片机最小系统,包括PIC16C5X系列单片机、外复位电路和振荡电路。该接口电路采用PIC16C57RC,它内含2k×12位OTP型程序存储器、内置式硬件看门狗电路(WDT)、33条精简单字节指令,并具有二极堆栈,工作频率为0~20MHz,有四种振荡方式可选。PIC16C5X系列单片机具有片内上电电路(POR)可将VDD与MCLR相连,即可使用POR,但要求VDD的上升速度不低于0.05V/ms,并且VDD要从0V开始上升,否则不能正确复位。为了可靠,应外接RC复位电路。
当多片TEC9607扩展使用时,可用片选CS进行选择,亦可用第一片TEC9607的SO输出接第二片TEC9607的SI,依次串联的方法。且应考虑SCP的驱动能力。
3.显示程序设计
TEC9607可驱动任意位LED数码管显示。少于5位(比如2位)时,第一种方法是5×8位串行移位寄存器的低2×8位移入要显示的段码,而高3×8位全移入“0”,此时只接两位数码管。SI驱动个位,S2驱动十位,S3~S5悬空即可。第二种方法是5×8位串行移位寄存器的高2×8位移入要显示的段码,低3×8位不管它,此时只接两位数码管。S4驱动个位,S5驱动十位,S3~S1悬空。
软件设计中,应使RA口工作在输出状态。下面以四位LED数码管显示为例描述该电路的软件设计,其显示驱动程序如下:TRBUF EQV OAH;数据暂存器和循环次数寄存器
SIEQU 1 ;RA1为串行数据输入端
SCPEQU 2;RA2为时钟端
BUFF EQU 10H ;数据缓存
MBUF EQU 13H ;13H,14H,15H,16H四个寄存器为显示缓存
;13H最低位显示段码
;14H次低位显示段码
;15H次高位显示段码
;16H最高位显示段码
;17H为任意数
DISBUF EQU OEH ;OEH,OFH为压缩式显示数据
;OEH高两位显示数据
;OFH低两位显示数据
BITEQU9;每字节位数(8)
FSREQU4;文件选择寄存器
RAEQU5;I/O端口A
CONVERTMOVWF2 ;PC=W
TABLERETLW0FCH;“0 "
RETLW 60H;“1”
RETLW0DAH; “2”
RETLW0F2H;“3 "
RETLW66H; “4”
RETLW0B6H ; “5"
RETLW0BEH;“6"
RETLW0E4H ;“7"
RETLW0FEH ;“8"
RETLW0F6H ;“9"
RETLW00H ;“"
ETLW7CH; “U"
RETLW9EH;“E"
RETLW00H ;“"
RETLW00H ;“"
RETLW00H ;“"
DISMOVLW MBUF;将显示段码寄存器首址(f13)送f4
MOVWFFSR
MOVLWTABLE;把段码表起始地址 送BUFF
MOVWFBUFF
MOVF 0FH,0;取出最低位待显数据
ANDLW0FH
ADDWF BUFF,0;BUFF+W→W取得段码表中的偏移地址
CALLCONVERT;转段码查询子程序
MOVWF0 ;段码值送W
INCFFSR ;WF13
;以下依次完成高三位数据段码值的转换
MOVLWTABLE
MOVWFBUFF
MOVF0FH,0
MOVWFTRBUF
SWAPFTRBUF,0
ANDLW0FH
ADDWFBUFF,0
CALLCONVERT
MOVWF0
INCFFSR
MOVLW TABLE
MOVWF BUFF
MOVFOEH,0
ANDLW0FH
ADDWFBUFF,0
CALLCONVERT
MOVWF 0
INCF FSR
MOVLW TABLE
MOVWF BUFF
MOVF0EH,0
MOVWF TRBUF
SWAPF TRBUF,0
ANDLW 0FH
ADDWF BUFF,0
CALLCONVERT
MOVWF0
MOVLW30H ;使RA1,RA2为输出状态
TRISRA
BCF RA,SI
BCFRA,SCP
MOVLWMBUF
MOVWFFSR
MOVLW5 ;传送5字节数据
MOVWFTRBUF
DIS1 MOVF 0,0;码段值W
MOVWFBUFF;W送数据暂存器BUFF
INCFFSR
MOVLW8
MONWFBIT ;一字节有8位
DIS2 BSF RA,CLK ;CLK端拉成高电平BTFSC BUFF,7
BSF RA,SDA ;数据暂存器D7位送data线
BTFSS BUFF,7
BCF RA,SDA
RLF BUFF;数据暂存器左移一位
BCF RA,CLK;CLK端被拉成低电平,在其下降沿把data线上的数据采集进去
DECFSZ BIT
GOTO DIS2;一字节未送完,返回
DECFSZ TRBUF
GOTO DIS1 ;三字节未送完,返回
BSF RA,CL;器件操作结束
BSF RA,EN
RETLW 0