lhwaizhu 发表于 2010-11-23 21:46:13

74hc595检测按键

我用mega16驱动hc595检测7个按键,按下一个按键点亮一个led,如图:
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_599985JXE5US.jpg
(原文件名:未命名1.jpg)

下面是我的代码:
#include "iom16v.h"
#include <macros.h>
void delay(void)
{
       unsigned int i;
       for(i=0;i<141;i++)
       ;

}
void delay_ms(unsigned int b)
{
       unsigned int a;
       for(a=0;a<b;a++)
       delay();

}
void Spi_int(void)
{
       DDRB|=(1<<PB5)|(1<<PB7)|(1<<PB4);//PB4为RCL信号
       SPCR|=(1<<SPE)|(1<<MSTR);// 使能SPI 主机模式
}



unsigned int get_key()
{
      unsigned int i;
      for (i=0; i<=6; i++)
      {

               
                /* Start transmission */
                SPDR =(1<<i);
               
                /* Wait for transmission complete */
                while(!(SPSR & (1<<SPIF)));


                PORTB&=~(1<<4); //RCLK拉低
                NOP ();
                PORTB|=(1<<4); //RCLK拉高 锁存
                if ((PINB&0x08))//判断&&与&的区别
                {
                                        
                  PORTB&=~(1<<3);//清除上次状态
                        return (1<<i);
                                               
                }
      }

      return 0x00;
}




void main()
{   

    DDRA=0xfe;
    PORTA=0xfe;
    DDRB=0xf7;
    PORTB=0xf7;//PB3为输入 且为高阻态
    DDRC=0xff;
    PORTC=0x00; //不点亮LED
    DDRD=0xff;
    PORTD=0xff;                 
        Spi_int();
        while(1)
        {
       
                PORTC=get_key();
                delay_ms(100);
                PORTC=0x00;
       
        }       

}
当我随便按下一个按键后,相应的led会点亮一下,但松开按键后第一个LED会一直亮着,为什么啊?
不知道问题出在什么地方,请指教 谢谢

tingfenghu 发表于 2010-11-24 01:48:04

请看datasheet,74hc595不可能检测到按键,请用74hc165.

millwood0 发表于 2010-11-24 01:57:17

"不知道问题出在什么地方,"

you need to have a clue about what you are doing.

xiaobendan 发表于 2010-11-24 07:29:09

既然PORTB=0xf7;//PB3为输入 且为高阻态 ,那么PORTB&=~(1<<3);//清除上次状态 有何用?
给PORTB3加一个下拉电阻试试看

holycat 发表于 2010-11-24 08:57:59

程序就不看了,正如1楼推荐的,用于输入的并转串用74xx164、165为宜。

当然LZ这么做用595也不是不可以,但要注意现在的电路有点问题:①.多键同时按下时会短路595的输出;②.LED不能没有限流电阻。

haolaishi 发表于 2013-1-17 17:15:45

本帖最后由 haolaishi 于 2013-1-17 17:45 编辑

不知道楼主的问题有没有解决,我也遇到了类似的问题需要帮助,不知道是不是所存导致的问题,希望能给点意见

laign 发表于 2013-1-17 17:20:54

http://www.amobbs.com/forum.php?mod=viewthread&tid=4497539&highlight=595%2B%E6%8C%89%E9%94%AE
这里
页: [1]
查看完整版本: 74hc595检测按键