| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 825 人关注过本帖
标题:我是单片机新手,问个关于键值扫描的问题
取消只看楼主 加入收藏
华南种子
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-8-1
收藏
 问题点数:0 回复次数:0 
我是单片机新手,问个关于键值扫描的问题

键码 引脚
0 p1.0 p1.4
1 p1.1 p1.4
2 p1.2 p1.4
3 p1.3 p1.4
4 p1.0 p1.5
5 p1.1 p1.5
6 p1.2 p1.5
7 p1.3 p1.5
以此类推
程序为:
KEYMARK BIT 00H;键是否按下
KEY: MOV P1,#0FH ;所有输出行全为0
MOV A,P1 ;读取输入信号
ANL A,#0FH
CJNE A,#0FH,KEY1 ;输入不全为1,有键按下
JMP KEY3 ;无键按下,返回
KEY1:
CALL DELAY ;延时去抖动
MOV A,#0EFH ;输入扫描值
KEY2:
MOV P1,A ;扫描输出
MOV R1,A ;存输出值
MOV A,P1 ;读输入值
ANL A,#0FH
CJNE A,#0FH,KVALUE ;转键值计算
MOV A,R1 ;准备扫描下一行
SETB C ;C置位
RLC A ;左移一次
JC KEY2 ;如果C=1,说明尚未扫描完毕,转
KEY3:
CLR KEYMARK ;清键按下标志
RET
KVALUE:
MOV B,#0FBH ;置初值即11110111b

KEY4:
RRC A ;输出值运算
INC B ;B中的值加一
JC KEY4 ;如果C=1,则转
MOV A,R1 ;输入值运算
SWAP A
KEY5:
RRC A
INC B
INC B
INC B
INC B
JC KEY5
KEY6:
MOV A,P1 ;等待按键的释放
ANL A,#0FH
CJNE A,#0FH,KEY6
SETB KEYMARK ;本次按键有效
RET
DELAY:
……
ret
我觉得输出的扫描值应该为11101111、11011111、10111111、01111111
而本程序却用了
RLC A
这样扫描值就成了:11101111、11011110、10111100、01111000
本人觉得不对,但由于我是初学者,看的书也比较权威,所以这个问题期待大虾帮助

搜索更多相关主题的帖子: 单片机 扫描 
2007-08-16 23:54
快速回复:我是单片机新手,问个关于键值扫描的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033132 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved