atmega328p用于循环编码

时间:2017-10-18 06:13:20

标签: c atmega

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>


int main()
{
    DDRD = 0x05;
    PORTD=0xFF;
    DDRB = 0xFF;
    PORTB = 0x00;

    int state=0;

    while(1)
    {
        if(!(PIND &(1<<5)) && (state==0))
        {

            state=1;

                PORTB = 0x38;
                for(int i=0;i<=199;i++)
                {
                    T1Delay_1s();
                }
                PORTB=0x00;
                for(int i=0;i<=199;i++)
                {
                    T1Delay_1s();
                }


        }


        if(!(PIND &(1<<5)) && (state==1))
        {
            state=0;
            PORTB = 0x08;
            for(int i=0;i<=99;i++)
            {
                T1Delay_1s();
            }
            PORTB=0x30;
            for(int i=0;i<=99;i++)
            {
                T1Delay_1s();
            }

        }
    }

}

void T1Delay_1s()
{
    TCNT0=156;
    TCCR0B=0x05;
    while((TIFR0&(1<<TOV0))==0);
    TCCR0B=0;
    TIFR0=0x1<<TOV0;
}

要求连接到PB3,PB4,PB5的LED亮起 在state0(PB3 = 1,PB4 = 1,PB5 = 1)然后全部每2秒关闭(000)

(每2秒111-> 000)

如果按下按钮,连接到PB3,PB4,PB5的LED将在状态1(100)中打开,然后每秒更改为(011)

(每秒100-> 011)

切换的效果很好,但错过了闪烁效果,LED只会闪烁一个循环然后停止,我该如何解决问题呢?

0 个答案:

没有答案