7279键盘显示.docx
《7279键盘显示.docx》由会员分享,可在线阅读,更多相关《7279键盘显示.docx(10页珍藏版)》请在冰豆网上搜索。
7279键盘显示
2.芯片内部结构及原理——74922芯片
74922芯片是专用编码键盘接口芯片,当按下某一按键时,该芯片能自动给出相应的编码信息,并可自动消除抖动,从而可使设计者免除一部分软件编程。
74922芯片有16键IC和20键IC,图1所示为4×4(16键)扫描式编码键盘原理图。
图1扫描式编码键盘
这种键盘的按键排成矩阵形式,以减少按键联线。
如图中有16个键,排列成4行4列,仅需8根引线。
时钟发生器的输出送给4位计数器进行计数,计数器的低2位经译码后作为行扫描,高2位经译码后作为列扫描。
若没有检出有键闭合,则计数器周而复始反复计数,即反复进行扫描,一旦检出有键闭合,就发出一个脉冲使时钟振荡器停振,计数器随即停止计数。
单片机通过读取计数器的计数值来获取闭合键所在的行列位置,然后从ROM中查表
得到按键读数。
如果有两个键同时按下,则扫描到第一个闭合键时就停止扫描,把该键当作有效按键进行处理。
74922芯片(16键IC)的引脚排列如图2所示:
X1~X4:
列线。
Y1~Y4:
行线。
OSC:
接振荡电容0.1μ,以便扫描矩阵键盘KM:
键盘消除抖动电路,并发出两种信号
(1)内计数器停止计数。
(2)若有键按下,使DA脚由未按键时的低电平变为高电平,若按键未放开则一直保持高电平,当按键放开时,才转为低电平。
此引脚外接一个电容是OSC所接电容的10倍。
图274922(16键)引脚排列
七段译码器7447
7447有4个BCD码输入端A、B、C和D,其中D为最高有效位,A为最低有效位,它们分别与输出端口中的4位相连。
7447的7个输出引脚a~g直接与LED的相应引脚相连,每个段中都串接一个限流电阻,其阻值为100Ω。
当灭灯输入/动态灭灯输出(BI/RBO)开路或为高电平而试灯输入为低电平,则所有输出端都为1。
BI/RBO是线与逻辑,作灭灯输入(BI)或动态灭灯(RBO)之用,或者兼为二者之用。
图7
表2
[1].要求0—15时,灭灯输入(BI)必须开路或保持高电平,如果不要灭十进制数零,则动态灭灯输入(RBI)必须开路或为高电平。
[2].将一低电平直接输入BI端,则不管其他输入为何电平,所有的输出端均输出为低电平。
[3].当动态灭灯输入(RBI)和A,B,C,D输入为低电平而试灯输入为高电平时,所有各段输出都为0,并且动态灭灯输出(RBO)为低电平(响应条件)。
[4].当灭灯输入/动态灭灯输出(BI/RBO)开路或为高电平而试灯输入为低电平,则所有输出端都为1。
表中1=高电平,0=低电平。
BI/RBO是线与逻辑,作灭灯输入(BI)或动态灭灯(RBO)之用,或者兼为二者之用。
二.理论分析与计算
1.设计思想
在设计单片机系统时,为了实现系统所需的多按键多位十进制数显示的和节约I/O口资源,简化硬件电路要求,在串行口被用于其它用途的情况下,我们选用了一种新型的键盘、显示接口电路。
其设计思想为:
在显示部分:
用7根I/O线通过七段译码器(7447)和3-8线译码器(74LS138)外接了8个LE数码管即可完成动态显示。
其中,段码采用硬件译码,单片机读到的键盘值送到P0口的低4位,经7447七段译码器译成段码送数码管。
而位线由P0口的P0.4~P0.6三位经4LS138译码器控制。
在键盘部分:
键盘扫描由74922芯片来完成。
设计中用了5个I/O线于74922芯片相接。
其中根I/O线(P1.0~P1.3)接74922的A、B、C、D引脚,向单片机传送键值的BCD码。
P1.4接74922的DA引脚,作为是否有键按下和按键是否放开的识别端。
程序中只要检测D脚由低电平→高电平(有键按下)、高电平→低电平(键放开),就将74922的D、C、B、A(键值的BCD码)读入T89C51。
这个键值再由P0口的低4位送给七段译码器7447,硬件译码后的段码送给数码管显示。
使得键盘控制程序相当简单,减轻了CPU用软件去扫描键盘,读取键值的负担,从而提高了CPU的利用率。
2.设计流程
三.电路与程序设计
1.硬件电路设计
键盘、显示硬件电路如图3所示。
图3 键盘、显示接口电路
本电路的特点是:
不采用通常的总线接口方式,而是采用了非总线结构。
其优点在于减少了扩展I/O口部分的芯片使用,用单片机的I/O线直接与外部芯片连接,使得硬件设计和软件编程相对简单。
同时在外部芯片的选用中,采用硬件译码和硬件编码键盘控制芯片,实现了用尽可能少的I/O线设计出尽可能大的键盘显示接口电路。
电路中,在4×4键盘中每个按键的值是固定的,具体位置如图4所示,所以编程时只要建立一个TABLE表,就可根据需要设计各种键盘。
图4 键盘值示意图
2.程序设计
;*********************
;主程序
;**********************
ORG0000H
AJMPMAIN
ORG0003H
AJMPLOOP1
ORG0030H
MAIN:
MOVTCON,#00H
MOVIE,#85H
MOVP3,#0FFH
JBP1.4,KEY
AJMPMAIN
KEY:
JBP1.4$
MOVP2,#00H
MOVA,P1
ANLA,#0FH
MOVDPTR,#TABLE
MOVCA,@A+DPTR
;*********************
;显示子程序
;**********************
A0:
CJNEA,#00H,A1
SETBP2.0
MOVP0,A
JBP1.4,KEY
JNBP0.4,AA0
CLRP2.0
ACALLD_1S
SETBP2.0
ACALLD_1S
AA0:
SJMPA0
A1:
CJNEA,#01H,A2
SETBP2.1
MOVP0,A
JBP1.4,KEY
SJMPA1
A2:
CJNEA,#02H,A3
SETBP2.2
MOVP0,A
JBP1.4,KEY
SJMPA2
A3:
CJNEA,#03H,A4
SETBP2.3
MOVP0,A
JBP1.4,KEY
SJMPA3
A4:
CJNEA,#04H,A5
SETBP2.4
MOVP0,A
JBP1.4,KEY
SJMPA4
A5:
CJNEA,#05H,A6
SETBP2.5
MOVP0,A
JBP1.4,KEY
SJMPA5
A6:
CJNEA,#06H,A7
SETBP2.6
MOVP0,A
JBP1.4,KEY
SJMPA6
A7:
CJNEA,#07H,A8
SETBP2.7
MOVP0,A
JBP1.4,KEY
SJMPA7
TABLE:
;查表
DB00H,01H,02H,03H
DB04H,05H,06H,07H
DB08H,09H
;**********************
;加法和减法中断子程序
;**********************
LOOP1:
JNBP3.0,AAA
JNBP3.1,BBB
SJMPLOOP2
BBB:
DECA
MOVP0,A
ACALLD_1S
LOOP2:
JBP1.4,NEG
JNBP3.1,BBB
SJMPLOOP1
AAA:
INCA
A8:
MOVP0,A
ACALLD_1S
JNBP3.0,AAA
SJMPLOOP1
NEG:
RETI
;*****************
;延时子程序
;*****************
D_1S:
MOVR6,#100
D10:
CALLD10MS
DJNZR6,D10
RET
D10MS:
MOVR5,#10
D1MS:
MOVR4,#249
DL:
NOP
NOP
DJNZR4,DL
DJNZR5,D1MS
RET
END
*****************
闪烁子程序
;;*****************
第一位数字闪烁
jbp1.4,key
jnbp0.4,aa0
clrp2.0
acallD_1s
setbp2.0
acallD_1s
第二位数字闪烁
jbp1.4,key
jnbp0.4,aa1
clrp2.1
acallD_1s
setbp2.1
acallD_1s
第三位数字闪烁
jbp1.4,key
jnbp0.4,aa1
clrp2.2
acallD_1s
setbp2.2
acallD_1s
一直到第八位数字闪烁
jbp1.4,key
jnbp0.4,aa1
clrp2.7
acallD_1s
setbp2.7
acallD_1s