当前位置: 代码迷 >> 单片机 >> 3片74HC165读取按键值,该如何处理
  详细解决方案

3片74HC165读取按键值,该如何处理

热度:312   发布时间:2016-04-28 14:45:27.0
3片74HC165读取按键值
static Read74hc165( void )
{
    unsigned int i, j  ;
    unsigned int KeyAddress[3];
    unsigned int ReadReturn;
     PL = 0 ;        //锁存并行数据开始
     IN = 1 ;        //准备读串行数据(也起到延时作用)
     PL = 1 ;        //锁存并行数据结束

     for( j = 0 ; j < 3 ; j++ )
     {    
         for( i = 8 ; i >= 1 ; i-- )
         {          
            CLK = 0 ;                   //时钟拉低                         
            if( IN == 0 )break ;        //有键按下,数据为1
            CLK = 1 ;                    //时钟拉高    
         }
         KeyAddress[ j ] = i ;        //有键压下,则i的取值在1~8之间,无键压下,i = 0  
    
 }
 if(flag == 0)     //优先读取第一片的按键值
 {
 for( j = 0 ; j<3 ; j++ )
     {     
         if( KeyAddress[j] == 0 ) ReadReturn = 0x00 ;
         else
         {
            ReadReturn = KeyAddress[ j ] + j * 8 ;
            break ;
         }

     }
 }
 else if(flag == 1)   //优先读取第三片的按键值
 {
   for( j = 2 ; j >=0 ; j-- )
     {     
         if( KeyAddress[ j ] == 0 ) ReadReturn = 0x00 ;
         else
         {
            ReadReturn = KeyAddress[ j ] + j * 8 ;
            break ;
         }

     }
 }

return  ReadReturn;
}
为什么优先读取第一片的按键值正确,而当flag = 1的时候,优先读取第三片的时候,整个按键读取值都不对了????
------解决思路----------------------
74hc165都没有片选脚怎么可以放在一起呢?几片子同时输出不同电平那不乱透啦?
  相关解决方案