导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→硬件:89C51接行列式键盘,如何知道哪一个键被按下了呢?[travelbeachlove]

 *第6673篇: 硬件:89C51接行列式键盘,如何知道哪一个键被按下了呢?

  
楼 主:travelbeachlove 2002年12月2日18:29
 硬件:89C51接行列式键盘,如何知道哪一个键被按下了呢?
我想通过74LS164来接键盘
的列线,行线接P3.4, P3.5两个口;74LS164接89C51
的RXD,TXD口。这样构成一个2x8的键盘,但我怎么知
道是哪一个键被按下了呢?也就是说一旦键盘电路确定
后怎样用逻辑运算来区分各个键呢?
还有:好象一般是先确定好电路,等电路确定好后才
开始编写程序,但如果等电路做好后编程时才发现程序
容量大于4K而要外接ROM时,此时电路不就作废了吗?
请问怎么解决这个问题?

  
2楼:红心J 2002年12月2日19:35
 参考
一般小东西,4K够了,一旦超出,将89C51改为89C52,此时为8K。
还有更大内部ROM的,管脚功能相同,电路不会作废。
键扫描:
COL1_LINE1:MOV SBUF,#11111110B  ;第1列
           LCALL DELAY1         ;等待串行输出结束
           JB P3.4,COL1_LINE2   ;
           ......               ;1列1行键处理
COL1_LINE2:JB P3.5,COL2_LINE1   ;
           ......               ;1列2行键处理
COL2_LINE1:MOV SBUF,#11111101B  ;第2列
           LCALL DELAY1         ;等待串行输出结束
           JB P3.4,COL2_LINE2   ;
           ......               ;2列1行键处理
COL2_LINE2:JB P3.5,COL3_LINE1   ;
           ......               ;2列2行键处理
COL3_LINE1:MOV SBUF,#11111011B
           ......
......
COL8_LINE1:MOV SBUF,#01111111B  ;第8列
           LCALL DELAY1         ;等待串行输出结束
           JB P3.4,COL8_LINE2   ;
           ......               ;8列1行键处理
COL8_LINE2:JB P3.5,KEY_END      ;
           ......               ;8列2行键处理
KEY_END:   ......
DELAY1:    ......
  
3楼:travelbeachlove 2002年12月2日22:22
 如果换一种键盘排列方式是否每个键值就不一样了呢?
我想知道的是:当给定一种具体的键盘排列方式时怎么样知道此种
排列方式中的每个键值?
  
4楼:红心J 2002年12月3日09:22
 参考
检测到某按键按下后,对这个键进行赋值。
M_KEY  EQU  XXH  ;键值存储单元
KEY_SCAN:  MOV M_KEY,#0FFH      ;键扫描子程序
                                ;初始键值为0FFH
COL1_LINE1:MOV SBUF,#11111110B  ;第1列
           LCALL DELAY1         ;等待串行输出结束
           JB P3.4,COL1_LINE2   ;COL1_LINE1键未按下,转COL1_LINE2键检测
           LCALL DELAY20mS      ;防抖动,20mS延时
           JB P3.4,COL1_LINE2   ;COL1_LINE1键未按下,转COL1_LINE2键检测
LOOP1_1:   JNB P3.4,$           ;等待按键释放
           LCALL DELAY20mS      ;防抖动,20mS延时
           JNB P3.4,LOOP1_1
           MOV M_KEY,#XXH       ;1列1行键赋值,存于M_KEY
           LJMP KEY_END
COL1_LINE2:JB P3.5,COL2_LINE1   ;
           ......               ;1列2行键处理
......
KEY_END:   RET                  ;键扫描子程序返回,键值在M_KEY中
                                ;M_KEY=0FFH为无键按下

>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:C51编程:C51编程: 老古:这厢请了----》能否给我一份配置8019的及收发包文的代

[下一篇主题]:请教有关plc的问题