摘要:介绍一种利用GMS97C2051单片机设计的智能化键盘系统,给出其硬件电路及软件设计,并简要阐述其在便携式产品设计中的应用。
关键词:智能化键盘 单片机 键值 I2C 便携式产品 GMS97C2051
键盘(keyboard)是智能化测控系统主要的信息输入方式,是实现人机对话的重要途径,因此如何有效地控制键盘并为系统服务是每个设计者需要切实考虑的问题。在由单片机系统构成的便携式产品设计中,由于单片机硬件资源比较紧张,而键盘控制又需要占用大量的硬件资源(I/O口)。为此,笔者利用低价位的单片机GMS97C2051设计了一种智能化的键盘,键盘(key
value)通过串行接口I2C传送给主机,节省了大量的主机CPU硬件资源。这种键盘外围元件少,扩充灵活,而且功耗低,符合便携式产品设计的要求。
1 硬件电路及其工作原理
GMS97C2051是由LG公司和武汉力源公司共同研制开发的低价位单片机芯片,采用CMOS工艺,功耗低,外部20个引脚:VCC、GND、RST、P1.0~P1.7、P3.0~P3.5、P3.7。GMS97C2051是一个有2K字节可编程EPROM(E2PROM)的高性能微控制器(microcontroller)。本器件与工业标准MCS-51 TM的指令系统和功能引脚兼容。GMS97C2051是一种功能强大的微控制器,为很多嵌入式控制应用提供了一个高度灵活的、有效的解决方案。GMS97C2051有如下特点:2K字节的E2PROM,128字节RAM,15根I/O线,2个16位定时/计数器,5个向量二级的中断结构,1个全双向的串行口,1个精密的模拟比较器、片内振荡器和时钟电路。此外,GMS97C2051支持两种软件可选的节电方式。空闲方式:停止CPU,而让RAM、定时/计数器、串行口和中断系统继续有效;掉电方式:保存RAM的内容,但振荡器停振,以静止芯片所有的其它功能直到下一次硬件复位。有关GMS97C2051的详细内容请参阅文献[1]。利用GMS97C2051设计的智能化键盘的硬件电路如图1所示。
由图1可以看了,该键盘为4行4列(4×4)共16个键,使用8条I/O口作为控制线,其P1.2、P1.3、P3.4、P3.7为行扫描线,P1.4~P1.7作为列加复线。其工作原理是,首先,使P1.4~P1.7为低电平,P1.2、P1.3、P3.4、P3.7为高电平,读取P1.4~P1.7的状态并存放在某个存储器的4低位中,而高4位位置零。然后,使P1.4~P1.7为高电平,P1.2、P1.3、P3.4、P3.7为低电平,读取P1.2、P1.3、P3.4、P3.7的状态并存放在另一个存储器的高4位中,而低4位置零。最后,将这两个寄存器存放的数值取逻辑或,再判断其结果生产按键的键值。单片机外接晶振11.0592MHz和看门狗电路(watchdog),使单片机上复位后自动运行。当然,根据实际情况GMS97C2051的晶振输入端和复位端可与主机CPU共用。主机CPU对键值的摄取采用申请中断方式,GMS97C2051在中断服务程序中,将扫描到的键值按照一定的软件协议(software
protocol)通过I2C接口传送给主机CPU,由主机完成相应的按键功能。
2 串行接口I2C协议
I2C总线是一种串行数据总线,只有2根信号线:一根是双向的数据线SDA(Serial Data),另一根是时钟控制线SCL(Serial Clock)。在I2C总线上传送的每个数据字节由8位(bit)组成。总线对每次传送的字节数没有限制,但每个字节后必须跟1位应答位(acknowledge bit)。数据从最高位(MSB)开始传送。首先,由主机发出启动信号“S”(SDA在SCL高电平期间由高电平跳变为低电平),然后,由主机发送1个字节的数据。启动信号后的第1个字节数据具有特殊含义:高7位是从机的地址,第8位是传送方向位,0表示主机发送数据(写),1表示主机接收数据(读)。被寻址到的从机设备按传送方向设置为对应工作方式。标准I2C总线的设备都有一个7位地址,所有连接在I2C总线上的设备都接收启动信号后的第1个字节,并将接收到的地址与自己的地址进行比较,如果地址相符则为主机要寻访的从机,应在第9位答时钟脉冲时向SDA线送出低电平作为应答。除了第1字节是通用呼叫地址或十位从机地址之外,第2字节开始即为数据字节。数据传送完毕,由于主机发出停止信号“P”(SDA在SCL高电平期间由低电平跳变为高电平)。I2C接口是与SPI相对应的一种接口标准,它仅用1条双向数据线和1条时钟控制线即可进行数据传输,大大节省了硬件资源。
由于本文所使用的单片机没有直接支持I2C协议的硬件资源,因此,必须用其普通I/O来软件模拟I2C协议,从而实现主机对GMS97C2051的键值读取。主机CPU定义发送数据方为发送器,接收数据方为接收器。发送器初始化并启动数据传输,为发送数据方和接收数据方提供同步时钟信号。数据传输由发送器发送1个启动信号开始,然后进行数据传输,最后由发送器发个停止信号结束本次操作。其中接收器每收到1个字节,必须给发送器1个应答信号。传输数据过程中,SDA、SCL信号的变化如图2所示。使用这种方式读取键值,主机CPU还可以通过这2个I/O口对其它支持I2C接口协议的器件进行操作,实现端口的复用(multiplexing)。
此外,在使用单片机软件模拟I2C协议时,时序一定要正确,而且还要注意通信双方的同步。
3 软件设计
GMS97C2051 CPU上电后一直处于扫描状态,一旦检测到有键按下,进行行列查询找到按下的键,计算出键值,在中断程序中按照一定的软件协议,通过I2C接口将键值传送给主机,其流程如图3所示。
部分源程序如下:PROFC PRESS_KEY
PRESS_KEY: ;扫描键盘
MOV P1,#0F0H
CLR P3.7
CLR P3.4
NOP
NOP
MOV A,P1
ANL A,#0F0H
MOV R1,A
NOP
MOV P1,#0CH
SETB P3.7
SETB P3.4
NOP
NOP
MOV A,P1
MOV C,P3.4
MOV ACC.1,C
MOV C,P3.7
MOV ACC.1,C
ANL A,#R1
ORL A,R1
MOV R1,A
MOV P1,#0FFH
SETB P3.4
SETB P3.7
MOV A,R1
CJNE A,#0FFH,KEY_VALUE
RET
KEY_VALUE: ;处理键值
……
RET
END
PROC I2C
IIC: ;发送键值
……
MOV 10H,#8
MOV A,1FH
LOPI1:JB SCL,LOPI2
LOPI2:JNB SCL,LOPI2
RLC A
MOV SDA,C
DJNZ 10H,LOPI1
NOP
LOPI3:JB SCL,LOPI3
MOV 1FH,#0FFH
NOP
NOP
SETB SDA
……
RET
END
结束语
本文所介绍的智能化键盘设计方法已用在便携抄表终端——“便携式无线抄收仪”中,其与主机(W78E58)的I2C接口连接如图4所示。这种主机和键盘分开设计,不仅简化了主机设计,也方便了主机硬件软件的调试。此外,若将GMS97C2051的键值输出端信号通过接口电路转换为RS232信号或RS485信号,可与具有RS232、RS485电平接口的控制系统相连作为远程键盘。
上一篇:基于PIC16F877单片机的电子秤包装机控制系统
下一篇:基于AT90S8515单片机的瞬变信号捕获与存储器
- 热门资源推荐
- 热门放大器推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况