打印
[AVR单片机]

AVR 按键控制LED亮灭问题

[复制链接]
2420|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大家好,最近在学习AVR atmega8单片机按键控制电路,利用PB0口输入按键控制PD0输出LED(低电平输出LED亮),按键按下PB0口为低电平输入。现在想实现按键按下时LED亮,松开按键时LED灭。我利用以下程序,按一下按键LED常亮,松开按键还是亮.请问问题出在哪了。具体程序、电路如下:
#include <iom8v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned  int

void delay(uint ms)      //延时1ms
{
  uint i,j;
  for(i=0;i<ms;i++)
{
  for(j=0;j<134;j++);
}
}
void main(void)
{
DDRB=0x00;
PINB=0x01;
DDRD=0x01;
PORTD=0x01;
while(1)              //不断循环
{
if((PINB&0x01)==0)           //判断键盘是否被按下
  {
   delay(2);           //调用延时函数,作用消抖
   if((PINB&0x01)==0)         //再次读键盘,以判断刚才判断到的是否为抖动
   {
   PORTD&=~BIT(PD0);       //取反PD0电平状态,也就是改变发光管的状态
   }
   }
}
}

相关帖子

沙发
侠行江湖|  楼主 | 2013-9-23 11:23 | 只看该作者
具体电路如下图。

22.png (11.2 KB )

22.png

使用特权

评论回复
板凳
qin552011373| | 2013-9-23 21:41 | 只看该作者
限流电阻选的也有问题的

使用特权

评论回复
地板
lnulibin| | 2013-9-23 23:30 | 只看该作者
程序中只有让PD0引脚置低的语句。
PORTD&=~BIT(PD0);   

没有让PD0引脚置高的语句。怎么让灯亮了以后再灭?

使用特权

评论回复
5
ayb_ice| | 2013-9-24 15:27 | 只看该作者
直接赋值不就可以了
LED = KEY;

使用特权

评论回复
6
joyme| | 2013-9-24 17:46 | 只看该作者
或者加一个语句
else
     PORTD |= BIT(PD0);

使用特权

评论回复
7
haochangxu| | 2013-9-25 14:25 | 只看该作者
我最近也在学习AVR,问下你的例程那来的啊,能分享一份吗?谢谢

使用特权

评论回复
8
xxiao6130| | 2013-9-25 16:23 | 只看该作者
支持6楼!你可以考虑考虑

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

27

帖子

0

粉丝