单片机
返回首页

AVRWARE++开发笔记6:8路直接I/O口控制LED灯实验

2019-07-13 来源:eefocus

         本文只针对于初学者,高手请绕过!


    1、实验目的

    利用单片机的IO口,直接控制LED灯,学会LED灯的控制方法。 


    2、实验内容

    编写一段程序,使LED0~7灯以200ms为间隔从两边同时向中间亮,最终全亮延时200ms然后熄灭。


    3、硬件原理

    8路直接I/O口控制LED灯硬件原理图如下图所示,使用排线与端子P4相连,则单片机相应端口的0-7引脚与端子P4的LED0-LED7引脚相连接(例如,使用排线将P10与P4端子相连接,则PD0引脚接LED0,PD1引脚接LED1,...PD7引脚接LED7)。端子P4的9、10引脚接5V VCC,则从图中可以看出LED是低电平点亮,单片机相应的引脚发送低电平,LED亮,单片机相应的引脚发送高电平,LED灯灭。 

图片  

    4、实验参考程序及注解

    更改映射层1_AbstractionLayer_HAL.h文件 

//PortD

#define IO_PD_DIR 0b11111111    //此处指明0-7 8个引脚均为输出

#define IO_PD_OUT 0b11111111    //此处指明0-7 8个引脚默认初始状态为高电平,也就是说在上电时,

                                      /LED0-LED7引脚给高电平,三极管不导通,发光二极管灯灭

////////////////////////////////////////////////////////////////////////////////////

//功能宏定义

#define LED0BIT0

#define LED1BIT1

#define LED2BIT2

#define LED3BIT3

#define LED4BIT4

#define LED5BIT5

#define LED6BIT6

#define LED7BIT7

#define LED0_OPENCLRBIT(PORTD,LED0)

#define LED0_SHUTSETBIT(PORTD,LED0)

#define LED0_TURNCPLBIT(PORTD,LED0)

#define LED1_OPENCLRBIT(PORTD,LED1)

#define LED1_SHUTSETBIT(PORTD,LED1)

#define LED1_TURNCPLBIT(PORTD,LED1)

#define LED2_OPENCLRBIT(PORTD,LED2)

#define LED2_SHUTSETBIT(PORTD,LED2)

#define LED2_TURNCPLBIT(PORTD,LED2)

#define LED3_OPENCLRBIT(PORTD,LED3)

#define LED3_SHUTSETBIT(PORTD,LED3)

#define LED3_TURNCPLBIT(PORTD,LED3)

#define LED4_OPENCLRBIT(PORTD,LED4)

#define LED4_SHUTSETBIT(PORTD,LED4)

#define LED4_TURNCPLBIT(PORTD,LED4)

#define LED5_OPENCLRBIT(PORTD,LED5)

#define LED5_SHUTSETBIT(PORTD,LED5)

#define LED5_TURNCPLBIT(PORTD,LED5)

#define LED6_OPENCLRBIT(PORTD,LED6)

#define LED6_SHUTSETBIT(PORTD,LED6)

#define LED6_TURNCPLBIT(PORTD,LED6)

#define LED7_OPENCLRBIT(PORTD,LED7)

#define LED7_SHUTSETBIT(PORTD,LED7)

#define LED7_TURNCPLBIT(PORTD,LED7)

#define ALL_LED_OPEN    //打开所有LEDLED0_OPEN;LED1_OPEN;LED2_OPEN;LED3_OPEN;LED4_OPEN;LED5_OPEN;LED6_OPEN;LED7_OPEN

#define ALL_LED_SHUT    //关闭所有LEDLED0_SHUT;LED1_SHUT;LED2_SHUT;LED3_SHUT;LED4_SHUT;LED5_SHUT;LED6_SHUT;LED7_SHUT


    更改逻辑层0_logiclayer_main.c文件

//主程序

int main(void)

{

    //目标初始化,该函数会自动初始化相应的外设文件

    TARGET_Init();

    //后台主循环

    while(1)

    {

        //在这里完成自己的项目逻辑

        LED0_OPEN;

        LED7_OPEN;

        TARGET_Delayms(200,1);

        LED0_SHUT;

        LED7_SHUT;

        TARGET_Delayms(200,1);

        LED1_OPEN;

        LED6_OPEN;

        TARGET_Delayms(200,1);

        LED1_SHUT;

        LED6_SHUT;

        TARGET_Delayms(200,1);

        LED2_OPEN;

        LED5_OPEN;

        TARGET_Delayms(200,1);

        LED2_SHUT;

        LED5_SHUT;

        TARGET_Delayms(200,1);

        LED3_OPEN;

        LED4_OPEN;

        TARGET_Delayms(200,1);

        LED3_SHUT;

        LED4_SHUT;

        TARGET_Delayms(200,1);

        ALL_LED_OPEN;

        TARGET_Delayms(200,1);

        ALL_LED_SHUT;

        TARGET_Delayms(200,1);

        //喂狗语句,大部分工程项目都不应去除

        #if WDT_MODE!=0

            TARGET_WatchDogReset();

        #endif

    }

    return 0;//永不执行

}



进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章