高手看过来啊:4X4行列式键盘的接口问题

[复制链接]
2855|5
 楼主| mzhang_dhu 发表于 2008-11-6 21:15 | 显示全部楼层 |阅读模式
小弟接触单片机不久,最近在看键盘电路,接了个4X4的矩形键盘,用中断扫描,但一直出错,先请高手看看我这个电路有没有错误,小菜先谢谢了~<br />图片比较大,压缩了~<br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/200712/20071222213259241.rar'>https://bbs.21ic.com/upfiles/img/200712/20071222213259241.rar</a>
耕在此行 发表于 2008-11-6 21:21 | 显示全部楼层

电路没什么问题

但电阻是不是再加点,比如10K或20K的<br />程序应该是是P10_P13输出低电平,另外四个脚输出高电平.<br />再开中断.<br />进中断后要进行防抖处理.
E007 发表于 2008-11-6 21:27 | 显示全部楼层

没问题

没问题,出错的话可能是你软件上没有做防抖控制.
 楼主| mzhang_dhu 发表于 2008-11-6 21:59 | 显示全部楼层

谢谢各位的回答

谢谢以上两位,我在中断里加了去抖程序,但运行仍然不行,按下一个键,这个键的那一列全部变成高电平!附件是程序,请大家帮忙分析分析啊 <br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/200712/20071222221612431.rar'>https://bbs.21ic.com/upfiles/img/200712/20071222221612431.rar</a>
E007 发表于 2008-11-8 14:11 | 显示全部楼层

提供个思路

用定时器,定时1ms一次中断,在定时器中断中检测按键.首先定义两个全局变量:<br /><br />unsigned&nbsp;char&nbsp;LastKey;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//最后按下的键值,初始化为无效键值即可.例如0xFF<br />unsigned&nbsp;char&nbsp;CheckCount;&nbsp;&nbsp;&nbsp;//计数器,初始化为0<br /><br /><br />//中断处理<br />if(&nbsp;LastKey!=0xFF&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;//此前已经有一键按下<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//检查该键是否仍然按下<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;/*没按下*/&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastKey=0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CheckCount=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(&nbsp;LastKey&lt20&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CheckCount++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;CheckCount==20&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按键处理,或置标志位,供主程序轮询<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />else&nbsp;&nbsp;&nbsp;&nbsp;//此前无键按下<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//检查有无键按下<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;/*有键按下*/&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastKey=/*键码*/;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CheckCount=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />//这么做可以非常好的消除抖动,同时硬件上可以把与门去掉,节省了硬件,也省了一个中断口线.<br />//因为我以前写的按键处理程序都是汇编,不大好读,现写了个C语言的框架,你可以照这个试一下.<br />//这样处理按键,只能对第一个按下的键响应,在响应了一个按键后,除非这个健放开,否则其它任何按键都得不到处理,看似处理的比较弱智,其实在大多数情况下已经可以很好的工作了,除非就有人和你较劲,呵呵~~~~~~
iC921 发表于 2008-11-9 10:13 | 显示全部楼层

建议想办法贴图

很不喜欢下载再查的方法,日后清除麻烦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

66

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部