• avrstudio 5 按键控制led移位


    关键点:

    1.按键的释放判断为if(PINC!=flag)这个flag存有先前的按键值

    2.i=(i-/+1)&0x07巧妙的利用了无符号溢出的作用

    3.在我们设置了pc口的输入时,在按键按下后再释放的之后我们会发现我们的pinc的值为0xff,是因为我们设置了上拉电阻,和pc口的数据为0xff;

    源代码:

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

    char i,j;
    void move_step();

    int main(void)
    {

        char flag=0x00;
        DDRE = 0xff;DDRF = 0xff;
        DDRC = 0x00;PORTC = 0xff;
        while(1)
        {
            if(PINC!=flag)
            {
                flag=PINC;
                move_step();
                _delay_ms(200);       
            }
        }   
    }

    void move_step()
    {
        if ((PINC&0x01)==0x00)
        {
            i=(i-1)&0x7;
        }
        else if((PINC&0x02)==0x00)
        {
            i=(i+1)&0x07;
        }
        else if((PINC&0x04)==0x00)
        {
            j=(j-1)&0x7;   
        }
        else if((PINC&0x08)==0x00)
        {
            j=(j+1)&0x7;   
        }
        PORTE=~(1<<i);
        PORTF=~(1<<j);
    }

    截图:

    2011-3-26-15-49

  • 相关阅读:
    基于k8s搭建微服务日志收集中心
    分析java堆内存满时那些类占用内存居多
    yizimi 在 DMG 的板子库 (数据结构与算法)
    Contest 3/14
    基础算法训练1
    图论基础训练
    2021.03.09随笔
    树莓派 4B 安装 openEuler
    Docker 学习准备
    关于备案第二个服务器时遇到的问题
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/1996342.html
Copyright © 2020-2023  润新知