本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。
参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版
本文介绍应用层次化软件设计思想实现多路LED闪烁的方法。
一、认知层次化软件设计思想
二、将硬件原理图直译成映射层
#ifndef HAL_H_
#define HAL_H_
//引脚定义
/////////////////////////////////////////////////////////////////////
//PortB
#define IO_PB_DIR 0b00000000
#define IO_PB_OUT 0b00000000
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
//PortC
#define IO_PC_DIR 0b00000000
#define IO_PC_OUT 0b00000000
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
//PortD
#define IO_PD_DIR 0b11111111
#define IO_PD_OUT 0b11111111
/////////////////////////////////////////////////////////////////////
#define LED0 BIT0
#define LED1 BIT1
#define LED2 BIT2
#define LED3 BIT3
#define LED4 BIT4
#define LED5 BIT5
#define LED6 BIT6
#define LED7 BIT7
#define LED0_OPEN CLRBIT(PORTD, LED0)
#define LED0_SHUT SETBIT(PORTD, LED0)
#define LED1_OPEN CLRBIT(PORTD, LED1)
#define LED1_SHUT SETBIT(PORTD, LED1)
#define LED2_OPEN CLRBIT(PORTD, LED2)
#define LED2_SHUT SETBIT(PORTD, LED2)
#define LED3_OPEN CLRBIT(PORTD, LED3)
#define LED3_SHUT SETBIT(PORTD, LED3)
#define LED4_OPEN CLRBIT(PORTD, LED4)
#define LED4_SHUT SETBIT(PORTD, LED4)
#define LED5_OPEN CLRBIT(PORTD, LED5)
#define LED5_SHUT SETBIT(PORTD, LED5)
#define LED6_OPEN CLRBIT(PORTD, LED6)
#define LED6_SHUT SETBIT(PORTD, LED6)
#define LED7_OPEN CLRBIT(PORTD, LED7)
#define LED7_SHUT SETBIT(PORTD, LED8)
#define ALL_LED_OPEN PORTD = 0x00
#define ALL_LED_SHUT PORTD = 0xff
//函数原型声明
#endif /* HAL_H_ */
三、逻辑层设计
int main(void)
{
//定义局部变量
//目标板初始化,该函数会自动初始化相应的外设文件
TARGET_Init();
//初始化全局变量
//在上电时,执行的相应操作
//后台主循环
while(1)
{
/*
**********************************
在这里完成自己的项目逻辑
**********************************
*/
LED0_OPEN;
LED7_OPEN;
TARGET_Delayms(200, 1);
LED1_OPEN;
LED6_OPEN;
TARGET_Delayms(200, 1);
LED2_OPEN;
LED5_OPEN;
TARGET_Delayms(200, 1);
LED3_OPEN;
LED4_OPEN;
TARGET_Delayms(200, 1);
ALL_LED_SHUT;
TARGET_Delayms(200, 1);
/*
**********************************
喂狗语句,大部分工程项目都不应去除
**********************************
*/
#if INTERNAL_PERIPHERAL_WDT_MODE != 0
TARGET_WatchDogReset();
#endif
}
return 0; //永不执行
}
设计资源 培训 开发板 精华推荐
- 自平衡的莱洛三角_esp32_可充电_10*10版本-简化[本工程未验证]
- 109990013,DSO Nano v3 评估套件是一款便携式数字存储示波器
- #第五届立创电子设计大赛#基于TI智能小车的地下停车场智慧寻车系统
- C3247491_N32G031K8L7芯片方案验证板
- 使用 LTC3637MPDHC 5V-76V 输入至 5V 输出、具有软启动功能的 1A 稳压器的典型应用
- 使用 Analog Devices 的 LTC7851IUHH-1 的参考设计
- STM32 EXTEND BOARD
- AD8534ARZ-REEL 单电源、立体声耳机驱动器的典型应用
- EVAL-AD607EBZ,用于 AD607 3V 低功耗混频器接收器 IF 子系统的评估板
- 使用 NXP Semiconductors 的 MC34931SEK 的参考设计