大家好,最近在学习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电平状态,也就是改变发光管的状态
}
}
}
}
|