本文主要介绍了NT5285键盘扫描与显示接口芯片的应用及NT5285DEMO板的使用方法和技巧。相对于一般的显示接口方案,元器件多且复杂,成本加大,导致系统可靠性降低;而采用集成显示功能的驱动芯片NT5285则使设计方案大大简化,更具经济性、可靠性。
该键盘显示接口方案具有一定的使用参考价值,同时NT5285DEMO板为PIC单片机初学者快速入门提供很好的学习平台。
1.三种键盘显示方案比较
利用单片机扩展数码管和键盘接口时,常因资源不足、I/O口不够等原因,须扩展接口芯片以满足系统的需求,从而造成系统庞大,降低了系统的可靠性。在单片机应用系统中,键盘显示通常采用以下三种方案:
a.经典方案:8279芯片
采用并行接口的键盘显示专用芯片8279,该芯片是Intel于20世纪80年代首先推出的,应用较成熟,但所需外围元件(显示驱动、译码器等)多、PCB板占用面积大、综合成本高,在中、小系统中常常大材小用。
b.自由方案:辅助单片机
在系统的主控单片机基础上增加一个辅助单片机,用作显示驱动和键盘扫描的控制。为提高串行接口的速度,辅助单片机应使用尽可能高的系统时钟,但采用低成本的外部阻容振荡很难稳定地工作在10MHz以上。实际应用中,辅助单片机容易因阻容振荡频率太高而受到干扰,甚至程序跑飞或意外死锁,优点是使用灵活,缺点是元器件多、速度慢、易受干扰、成本高。
c.新方案:NT5285芯片
NT5285芯片具有占空比可调的8级亮度LED控制驱动电路,12段×6位~11段×7位可选的多种显示模式,10×3的键盘矩阵,是一个高可靠性、低功耗的单片机外围LED驱动电路,串行数据通过4线串行接口输入到NT5285。芯片封装形式为SOP32,整机PCB布局更易优化,节省成本,工作原理图如下图所示。
2NT5285DEMo板简介
本文采用NT5285DE-MO板做系统分析。NT5285DEMO板供用户对NT5285芯片进行全面的评估,可观察在8级不同亮度下NT5285对数码管和LED进行动态扫描的效果,以及对按键的响应等,同时提供NT5285与PIC单片机接口的显示和键盘扫描子程序,可以很方便地调用子程序,无须再开发与NT5285接口的通讯程序,加快产品的研发周期。
NT5285DEMO板还可以作为一个低成本的学习MicroChip单片机、调试软件和烧录芯片的平台,在MPLAB@ICD2配合下,用户可以在演示板上对8/14/18/28/40脚、拥有在线调试和编程功能的PICFLASH单片机,进行在线调试和芯片烧录,完成诸如I/O口操作、A/D转换、PWM信号产生、数码管驱动、键盘输入等各种实验。
DEM0板实物图如下图所示,NT5285的D0、D1、CLK、STB四条控制线分别与MCU的RA3、RA1、RA2、RA4相连,可调电位器VR1调节的电压输入到A/D转换口RAO,RB3输出蜂鸣器PWM的驱动信号。
3.NT5285命令控制字
在STB端口的状态由高变低后,由DIN端口输入到NT5285的第~个字节(bO~b7)为命令字,之后输入的为数据位;当数据/命令在移动时由于某些原因使STB端口设为高时,串行通讯被初始化,则正在发送的数据/命令视为无效。NT5285的命令控制字如下表所示,
命令 | MSB LSB | |||||||
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |
命令1 | 0 | 0 | — | — | — | — | b1 | b0 |
命令2 | 0 | 1 | — | — | b3 | b2 | b1 | b0 |
命令3 | 1 | 1 | — | — | b3 | b2 | b1 | b0 |
命令4 | 1 | 0 | — | — | b3 | b2 | b1 | b0 |
应用时序如下图所示,移动显示数据最大为14字节。
4.NT5285 DEMO板演示
DEM0板样片PIC16F819已存有源程序代码,重新烧写时,打开DEM0程序项目,C语言为DEMO_C,汇编为DEMO_ASM,利用ICD2进行重新烧写,但要注意以下几点:
a.在MPLABIDE开发环境中,选择:Configure>Se-lectDevice命令,选择要烧录的芯片型号为PIC16F819。
b.配置位设定:建项目时,在Configure>Configu-rationBits设置芯片的配置字,NT5285演示程序的源文件中已通过伪指令设定好了。
c.编译器选择:在Pro-ject>SelectLanguageTool-suite命令列表中,C语言编译器选HI-TECHPICCTool-suite,汇编语言编译器选择MicrochipMPASMTool-suiteod.烧写时:在Program-mer>SelectProgrammer中选择MPLABICD2作为编程器,此时ICD2应与MPLABIDE处于连通状态,否则,在Programmer>Settings>communication中检查设置是否正确,然后再用Programmer>Connect命令重新连接,用Programmer>Program命令,将代码烧录到PIC16F819芯片中。
e.程序烧录完成后,将ICD2的水晶头拔除,确保J1~J7处于连通状态,NT5285演示程序将自动运行。
演示程序包括以下几个功能模块:(1)DEM01——8字循环显示模块;(2)DEM02——A/D转换电压值显示模块;(3)NT5285显示和键盘接口通讯模块。
演示板各键功能定义如下:S1:系统复位;NEXT:演示程序DEM01和DEM02之间切换;BRIGHT+:增加扫描亮度等级;BRIGHT-:降低扫描亮度等级,K4-K30:空,供用户自行定义。
演示时,首先确保J1~J7处于连通状态。上电时,蜂鸣器长鸣一声,所有LED点亮;然后运行DEM01的程序,7个数码管循环显示“8”字,21只LED灯不断闪烁,此时LED亮度等级默认为4,NT5285一共有8个亮度扫描等级,按“BRIGHT+”/“BRlGHT-”键可以增加/减少LED的亮度等级;按键的同时,蜂鸣器发出“BI”的一声。
按下“NE×T”键,DEM0板转入运行DEM02演示程序,此时5V电压经VR1调节和8bit的A/D转换后,通过DM1~DM3数码管显示该电压值。旋转VR1,显示的电压值相应进行改变,此时DM6、DM7数码管显示NT5285的扫描亮度等级。
用户在演示板上采用其他MCU控制NT5285时,必须检查NT5285的四条控制线是否与MCU相应I/O口连接好,否则将没有显示或按键没有响应。
在NT5285演示板上可利用ICD2上将自写程序烧录到芯片中,根据个人的喜好和实际情况选用不同的开发环境和编译器。本文使用MPLAB、IDE开发环境,针对DEM0板提供的样片对PIC16F819进行编程、调试。
对C语言编程,首先确认已安装HI-TECHPfCC8.05或以上版本,在Proiect>SelectLanguageToolsuite命令列表中选择HI-TECHPICC编译器,具体编程语法可查看PICC编译器的使用说明。
对编程实现PIC16F819及NT5285的各种功能时应注意以下几方面:
a.PWM输出脚可在配置字中设置成RB2或RB3,本文设置成RB3输出到蜂鸣器,pwm_init()初始后,在程序中只改变PR2、CCPR1L即可奏出动听的音符。
b.系统上电时,RA口默认为AD模式,通过AD-CON1将不作为AD转换的端口设为数字口。AD初始化后,GODONE置位转换开始,可通过中断或查询(1f(!GODONE))方法读取转换值,再进行显示或赋给PWM输出等操作。
cNT5285编程时,显示数据时先发送显示模式命令,接着发送数据模式命令、地址设置命令、显示数据,最后开显示。发送完一条命令接着发第二条命令时STB置高,如果接下来发显示数据,则等数据发完后再将STB置高,关于NT5285的详细资料可查看NT5285的数据手册。
对DEM0板的编程,用户可根据自己需要编写相应的功能程序,下图功能程序框图为已编成功的C语言DE-M0程序,供读者参考。
为使读者更清楚地使用NT5285芯片及PIC单片机,本文最后分析如何在DEM0板中实现七个数码管显示0~6的数字实例。
NT5285 14字节地址对应的管脚分配表 | |||
SG1···SG4 | SG5···SG8 | SG9···SG11 | |
00HL | 00HU | 01HL | DIG1 |
… | … | … | … |
0CHL | 0CHU | 0DHL | DIG7 |
a…d | e…h | led1…led3 | |
b0…b3 | b4…b7 | b0…b2 | b4…b7 |
数码管译码表 | |||||||||
原码 | h | g | f | e | d | c | b | a | 译码 |
0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0x3f |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0x06 |
2 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0x5b |
3 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0x4f |
4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0x66 |
5 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0x6d |
6 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0x7d |
7 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0x07 |
8 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x7f |
9 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0x6f |