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

2020-01-26 12:59发布

将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循环
                                        }
                           }                     
         }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
金牛AKI
1楼-- · 2020-01-26 18:41
没人回  自己顶起
ahuang227
2楼-- · 2020-01-26 19:02
接个示波器看看你的波形就知道了。
金牛AKI
3楼-- · 2020-01-26 19:18
ahuang227 发表于 2013-10-9 14:49
接个示波器看看你的波形就知道了。

示波器怎么看,我是想知道为什么,要延时那么长时间才能正确读取数据,好纠结的说
rising_sun
4楼-- · 2020-01-26 21:16
 精彩回答 2  元偷偷看……
金牛AKI
5楼-- · 2020-01-27 00:24
rising_sun 发表于 2013-10-9 14:57
74164是串转并输出的,怎么拿来做按键检测??

没看懂

好吧 你不知道,能控制164输出管脚的高低电平,由此能当作独立按键用,你懂得
ijlc1314
6楼-- · 2020-01-27 03:35
以前用164做过显示与按键利用的,不需要很延时的啊,看看硬件电路或是软件上有什么漏洞吧

一周热门 更多>