搜索
bottom↓
回复: 7

74hc595检测按键

[复制链接]

出0入0汤圆

发表于 2010-11-23 21:46:13 | 显示全部楼层 |阅读模式
我用mega16驱动hc595检测7个按键,按下一个按键点亮一个led,如图:

(原文件名:未命名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会一直亮着,为什么啊?
不知道问题出在什么地方,请指教 谢谢

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

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

出0入0汤圆

发表于 2010-11-24 01:48:04 | 显示全部楼层
请看datasheet,74hc595不可能检测到按键,请用74hc165.

出0入0汤圆

发表于 2010-11-24 01:57:17 | 显示全部楼层
"不知道问题出在什么地方,"

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

出0入0汤圆

发表于 2010-11-24 07:29:09 | 显示全部楼层
既然PORTB=0xf7;  //PB3为输入 且为高阻态 ,那么PORTB&=~(1<<3);  //清除上次状态 有何用?
给PORTB3加一个下拉电阻试试看

出0入0汤圆

发表于 2010-11-24 08:57:59 | 显示全部楼层
程序就不看了,正如1楼推荐的,用于输入的并转串用74xx164、165为宜。

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

出0入0汤圆

发表于 2013-1-17 17:15:45 | 显示全部楼层
本帖最后由 haolaishi 于 2013-1-17 17:45 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-17 17:20:54 | 显示全部楼层
http://www.amobbs.com/forum.php? ... B%E6%8C%89%E9%94%AE
这里
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 05:14

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

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