APP下载

带按键的旋转编码开关与C8051F020单片机的接口设计

2015-11-02岳巍李杰文方哲马让奎

机电产品开发与创新 2015年2期
关键词:键值手柄电平

岳巍,李杰,文方哲,马让奎

(陕西宝成航空仪表有限责任公司,陕西 宝鸡 721006)

带按键的旋转编码开关与C8051F020单片机的接口设计

岳巍,李杰,文方哲,马让奎

(陕西宝成航空仪表有限责任公司,陕西 宝鸡 721006)

介绍了一种带按键的旋转编码开关的使用方法,给出了与C8051F020单片机的接口电路,以及旋钮转向判断和按键处理程序。

旋转编码开关;单片机;接口

0 引言

在单片机系统的人机接口设计中,我们常用按键式键盘作为人与设备进行信息交流的主要工具。通过按压不同的按键,进行菜单的选择和数字的输入等功能。使用按键进行信息输入具有效率高、使用方便等优点,但也有不足之处。比如要方便地完成数字的输入,需要0~9共10个数字按键和确认键、删除键等功能按键。在单片机系统中,这种按键信息处理电路通常设计为矩阵式电路,直接连接到单片机的I/O端口,以3×4键盘为例要占用7个I/O端口,单片机通过软件每隔20ms~50ms对这些I/O端口进行定时行列扫描,根据返回的扫描键值,判断是哪一个按键按下。所以使用键盘方式具有占用的I/O端口较多,键盘扫描程序耗时较长,占用单片机资源多的缺点。

在一些特殊的应用场合,如飞机仪表的面板,因为尺寸所限,通常没有地方安排较多的按键,按键太小还不利于飞行员的操作,这时就迫切需要一种体积较小、使用方便的器件来替代按键键盘实现信息的输入功能。带按键的旋转编码开关就是这样一种理想的器件。

带按键的旋转编码开关是将旋转编码开关和一个按键集成在一起,通过两者的配合使用,再结合相应的处理软件,就可以完成信息的输入,并且还具有使用快捷、灵活、占用单片机资源少的优点。

C8051F020单片机具有100个引脚,64个数字I/O端口,和2路独立的12位D/A、4路独立的电压比较器端口。数字I/O端口可以根据需要,用软件对内部的3个交叉开关寄存器编程设置为读/写、定时器、串口、A/ D等多种功能端口,因此该单片机功能强大,很适合在功能复杂、需要较多单片机资源的场合应用。

1 接口电路设计

1.1带按键的旋转编码开关工作原理

带按键的旋转编码开关由旋转编码开关和按键两部分组成,它包括5个信号引脚,分别是编码开关输出端A和B,编码开关公共端C,按键输入输出端S1、S2,如图1所示。转动编码开关手柄,编码开关输出端A和 B反复与公共端C接通、断开,通过后续电路分别输出有一定相位差的脉冲信号,如图2所示。按下编码开关手柄,按键输入输出端S1、S2接通,松开手柄,输出端S1、S2断开。

图1 引脚图

当顺时针转动编码开关手柄时,输出端A和B输出的波形为图2(a),逆时针转动编码开关手柄时,输出端A和B输出的波形为图2(b)。

图2 输出波形图

1.2与单片机接口电路设计

带按键的旋转编码开关与单片机的接口电路如图3所示。在带按键的旋转编码开关的输出端用3只10k电阻上拉,使得带按键的旋转编码开关在旋转、按压、松开时能产生高低电平。为了消除开关信号波形的干扰和抖动,使用3只10k电阻和3只10nF电容组成RC滤波电路进行滤波,再使用74HC14施密特触发器进一步改善信号波形为较为理想的矩形波,以使单片机能对信号可靠采样。

图3 与单片机接口电路图

C8051F020单片机电源为+3.3V,但I/O端口可以直接和+5V电源电路相接。在本接口电路中,将旋转编码开关的输出端A、B分别与单片机的P1.0和P1.1相连,按键S2端与P1.2相连。

2 软件编程

2.1单片机端口设置

单片机通过对交叉开关寄存器XBR0、XBR1和XBR2相应位的设置来确定各端口的功能。在本接口设计中,将与旋转编码开关输出端A相连的P1.0端口设计为中断输入端/INT0,端口P1.1和P1.2设置为通用I/O口。此时,XBR1.2应置1,XBR1寄存器其余位置0。考虑到已经将UART1、UART 2和SDA、SCL总线等特殊功能端口配置到P0口,所以对交叉开关设置为XBR0=0xc1,XBR1=0x04,XBR2=0x04即可满足要求。

2.2旋转编码开关转向判断

单片机是通过检测旋转编码开关输出信号的状态来判断旋转方向,在程序设计中,采用下降沿边沿触发中断方式,为此需置TCON.0=1。当旋转编码开关信号触发中断,则进入端口A中断服务程序,如果此时输出端B信号为高电平,则为顺时针旋转,反之,为逆时针旋转,如图2所示。中断服务程序如下:

#define TRUE1

#define FALSE0

unsigned char xdata Key_direct_R,Key_direct_L;

unsigned int xdata Time1=0;;

void INT0_ISR(void)interrupt 0 using 1//中断服务程序

EX0=0;//关中断

EX1=0;

ET0=0;

if(Port_B==1)//判断端口B(P1.1)的电平

Key_direct_R=TRUE;//顺时针旋转时,Key_direct_R=1

else

Key_direct_L=TRUE;//逆时针旋转时,Key_direct_L=1

Time1=0;//等待时间清零

EX0=1;//开中断

EX1=1;

ET0=1;

2.3按键判断

旋转编码开关的按键的状态,采用定时查询的方式检测,定时时间为35ms,程序采用两次查询的按键去抖方式。此处提供一经过实际验证的程序如下:

#define TRUE1

#define FALSE0

bit Key=FALSE;

bit Key_ok=FALSE;

unsigned char xdata Key_ok=0x00;

unsigned char xdata KeyData=0x00;

unsigned char xdata KeyDataSave=0x00;

void TIMER0()interrupt 1 using 1

unsigned char Te;

TF0=0;

ET0=0;

EX0=0;

EX1=0;

KeyData=0x04;//先将没有按键按下时KeyData的值存下

P1=0xff;//向P1发送0xff测试电平

KeyData=P1;//读取P1的电平

KeyData&=0x04;//将读取的P1电平存入KeyData

if(KeyData!=0x04)//如果有键按下KeyData!=0x04时,说明有按键按下

if(KeyDataSave==KeyData)//将按压后的电平情况存到KeyDataSave

{//循环判断有无键按下,Te==1,表示有1个键

for(Te=0;(Te<1)&&(KeyDataSave!= TabKey[Te]);Te++);

if(Te==1)//如果查后没有按键按下

KeyDataSave=0xff;

Key=FALSE;

else//如果按键按下

Key=TRUE;

KeyBuf=Te+1;//存入键值

else//如果键未按下,或第二次去抖判断键值与去抖前键值不同

{KeyDataSave=KeyData;//将此次键值存下Key=FALSE;//认为没有键按下

else//如果没有按键按下,或是按键按下后的松开动作,即键松开

if(Key==TRUE)//确认是按键按下后的松开动作

{Key_ok=TRUE;//对按键结果做处理,此处仅对Key_ok置1,表示“确定”KeyDataSave=0xff;//一次按键动作处理完毕,重置KeyDataSave的状态Key=FALSE;//此次按键动作处理完毕,将Key设置为FALSE,即无键按下

TH0=0x00;

TL0=0x00;

ET0=1;

EX0=1;

EX1=1;

2.4数据处理

带按键的旋转编码开关的旋转方向和按键状态确定后,即可在主程序main()中进行相应的处理。以0~9999m的飞机高度数值设定为例,用带按键的旋转编码开关可对个位、十位、百位、千位上的数值分别设定。按压旋钮时,按键起作用,循环选择个位、十位、百位、千位;旋转旋钮时,数值在0~9内循环增加或减小。主程序的流程图如图4所示。

图4 主程序流程图

3 结束语

本文对一种带按键的旋转编码开关与C8051F020单片机的接口电路的软硬件设计进行了说明,给出了具体的接口电路以及单片机的端口设置、编码器正反转判断、按键处理等程序代码。带按键的旋转编码器开关的应用,为单片机系统的信息输入提供了一种新的方法,减少了单片机的资源占用,另外接口程序编程简单、易用,降低了人机接口设计的复杂程度,有利于缩短设计的周期,降低设计和制造成本。经实践验证,该接口电路及程序工作稳定、可靠,完全满足实际使用要求,有一定的推广价值。

[1]何立民.单片机应用系统设计[M].北京航空航天大学出版社,1990.

Interface of Rotary Encoder Switch with a Button Based on C8051 MCU

YUE Wei,LI Jie,WEN Fang-Zhe,MA Rang-Kui
(Shaanxi Baocheng Aviation Instrument Co.,Ltd.,Baoji Shaanxi 721006,China)

A rotary encode switch with a button is introduced.Interface based on C8051F020 and program code of the rotate direction and button press determine are given.Practical application shows that the interfacing circuit is stable,effective and reliable.

rotary encode switch;MCU;inerface

TB47

A

10.3969/j.issn.1002-6673.2015.02.043

1002-6673(2015)02-113-03

2015-03-14

岳巍(1966-),男,高级工程师。研究方向:现从事机载仪表技术方面的设计与研究工作;李杰(1981-),男,工程师。研究方向:现从事机载仪表技术方面的设计与研究工作。

猜你喜欢

键值手柄电平
基于PLC控制的手柄座钻孔攻丝一体机的研发
非请勿进 为注册表的重要键值上把“锁”
一种多功能无线手柄的设计
一键直达 Windows 10注册表编辑高招
NPC五电平Z源逆变器的设计研究
基于三电平光伏并网逆变器控制系统的研究与实践
为什么厨具的手柄不是金属的?
银行家
基于NPC三电平变换器的STATCOM研究
一种多电平逆变器及其并网策略