搜索
bottom↓
回复: 12

为什么74HC164读取按键 需要延时很长时间

[复制链接]

出0入0汤圆

发表于 2013-10-9 14:00:52 | 显示全部楼层 |阅读模式
将74HC164的8个输出管脚分别连接按键,将八个按键连在同一个IO口上
控制芯片STC12C5628AD

sbit  CLK = P2^3;
sbit  DAT = P2^2;
sbit  key = P2^1;
检测按键是这样的,先给74HC164发送数据1111   1110只有一个0,如果key电平为高,下次给74hc164送1111  1101直到key电平为低,以此来检测是哪个按键被按下,现在是这样情况,发送完数据后必须延时400Us才能正确读取数据  很是不理解为什么,IO口我用了10K的上拉电阻。IO是准双向口模式
void send(uchar byte)
        {
           uchar i = 0;
           for(i = 0;i<8;i++)
                           {
                        CLK = 0;   CLK = 0;  CLK = 0;  _nop_(); _nop_(); _nop_(); _nop_();         
                        if((byte&0X80)==0x80)        DAT = 1;    // 结果就2种0X80 或者是 0    DAT = byte&0X80;为什么是对的
                                else   DAT = 0;
                        CLK = 1;   CLK = 1;  CLK = 1;           
                        byte <<= 1;  _nop_(); _nop_(); _nop_(); _nop_();  
                        }
        }
void KeyRead()
{          
    unsigned char i = 0;
    _nop_(); _nop_(); _nop_(); _nop_();
        if(key == 0)                //根据74HC164的初始状态,如果按键被按下,KEY被拉为低电平
         {       
                  for(i=0;i<8;i++)         //依次发送8次匹配检测数据
                           {
                                    key = 1;
                             send(WEI[i]);   //依次发送8位数据,其中一位为低位 例如1111  1110
                              Delay400us();
                             if(key == 0)         //如果检测数据与所按的键一致,则检测信号线KEY保持低电平
                                        {
                                         KEYNUM = i + 1 ;
                                          break;                         //退出FOR循环
                                        }
                           }                     
         }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-10-9 14:15:05 | 显示全部楼层
没人回  自己顶起

出0入0汤圆

发表于 2013-10-9 14:49:35 | 显示全部楼层
接个示波器看看你的波形就知道了。

出0入0汤圆

 楼主| 发表于 2013-10-9 14:54:41 | 显示全部楼层
ahuang227 发表于 2013-10-9 14:49
接个示波器看看你的波形就知道了。

示波器怎么看,我是想知道为什么,要延时那么长时间才能正确读取数据,好纠结的说

出0入0汤圆

发表于 2013-10-9 14:57:18 | 显示全部楼层
74164是串转并输出的,怎么拿来做按键检测??

没看懂

出0入0汤圆

 楼主| 发表于 2013-10-9 14:58:54 | 显示全部楼层
rising_sun 发表于 2013-10-9 14:57
74164是串转并输出的,怎么拿来做按键检测??

没看懂

好吧 你不知道,能控制164输出管脚的高低电平,由此能当作独立按键用,你懂得

出0入0汤圆

发表于 2013-10-9 15:00:48 | 显示全部楼层
以前用164做过显示与按键利用的,不需要很延时的啊,看看硬件电路或是软件上有什么漏洞吧

出0入0汤圆

 楼主| 发表于 2013-10-9 15:06:11 | 显示全部楼层
ijlc1314 发表于 2013-10-9 15:00
以前用164做过显示与按键利用的,不需要很延时的啊,看看硬件电路或是软件上有什么漏洞吧 ...

能把你的资料给我看看么,灰常感谢啊嘿嘿

出0入0汤圆

 楼主| 发表于 2013-10-9 15:11:21 | 显示全部楼层
ijlc1314 发表于 2013-10-9 15:00
以前用164做过显示与按键利用的,不需要很延时的啊,看看硬件电路或是软件上有什么漏洞吧 ...

大哥  能不能把你的思路给我说说啊,我现在能够2个164驱动4个数码管和4个按键,但是就是读取按键的时候处理的不是很好,延时400微妙  表示很桑心

出0入0汤圆

发表于 2013-10-9 15:20:56 | 显示全部楼层
你这400uS应该不是164发送数据后的稳定时间而是用来消除按键抖动的吧,164的速度是很快的,数据从输入端到输出端花费的时间完全可以忽略,但按键抖动期间数据是不稳定的,你这程序看着很蛋疼,坛子里有很多例程,自己搜搜。

出0入0汤圆

 楼主| 发表于 2013-10-9 15:24:50 | 显示全部楼层
surken 发表于 2013-10-9 15:20
你这400uS应该不是164发送数据后的稳定时间而是用来消除按键抖动的吧,164的速度是很快的,数据从输入端到 ...

哎  没有啊  不知道为什么 好纠结的说

出0入0汤圆

发表于 2013-10-9 15:43:35 | 显示全部楼层
金牛AKI 发表于 2013-10-9 15:11
大哥  能不能把你的思路给我说说啊,我现在能够2个164驱动4个数码管和4个按键,但是就是读取按键的时候处 ...

现在这电脑上没有了,建议你用示波器看一下波形

出0入0汤圆

 楼主| 发表于 2013-10-9 15:47:54 | 显示全部楼层
ijlc1314 发表于 2013-10-9 15:43
现在这电脑上没有了,建议你用示波器看一下波形

大哥 我这没有示波器  很纠结的说,等方便了,把你程序给我看看好不好,  好纠结其他的都弄好了,就是不知道为啥出现这个情况,还有现在想弄个按键长按功能,搞不定  
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 14:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表